var expandInterval = null;
var contractInterval = null;
var lastExpandedList = null;
var px_speed = 15;
var ms_speed = 30;
var expandingList = null;
var contractList = null;

function stepContractList()
{
    var new_height = contractList.offsetHeight - px_speed;
    if (new_height < 1)
        new_height = 1;
    
    if (new_height == 1)
    {
        clearInterval(contractInterval);
        contractInterval = null;
        contractList.expanded = false;
    }
    
    contractList.style.height = new_height + "px";
}

function stepExpandList()
{
    var new_height = expandingList.offsetHeight + px_speed;
    if (new_height > expandingList.scrollHeight)
        new_height = expandingList.scrollHeight;
    
    if (new_height >= expandingList.scrollHeight)
    {
        clearInterval(expandInterval);
        expandInterval = null;
        expandingList.expanded = true;
        lastExpandedList = expandingList;
    }
    
    expandingList.style.height = new_height + "px";
}

function getChildByClass(parent,child_class)
{
  for (var i=0; i<parent.childNodes.length; i++)
    if (parent.childNodes[i].className == child_class)
      return parent.childNodes[i];
}

function getChildById(parent,child_id)
{
  for (var i=0; i<parent.childNodes.length; i++)
    if (parent.childNodes[i].id == child_id)
      return parent.childNodes[i];
}

function expandList(list)
{
    if (expandInterval != null) return;
    if (contractInterval != null) return;
    
    list = getChildByClass(list.parentNode, "sub_list_container");
    
    if (list.expanded)
    {
        contractList = list;
        contractInterval = setInterval("stepContractList();", ms_speed);
    }
    else
    {
        expandingList = list;
        expandInterval = setInterval("stepExpandList();", ms_speed);
        if (lastExpandedList != null)
        {
            contractList = lastExpandedList;
            contractInterval = setInterval("stepContractList();", ms_speed);
        }
    }
}

var expandedFirst = false;
function collapseAll(div)
{
    for (var i=0; i<div.childNodes.length; i++)
    {
        if (div.childNodes[i].className == "sub_list_container")
        {
            if (expandedFirst)
                div.childNodes[i].style.height = '1px';
            else
            {
                expandedFirst = true;
                lastExpandedList = div.childNodes[i]
            }
        }
        else
            collapseAll(div.childNodes[i]);
    }
}
collapseAll(document.getElementById("category_list"));
