/*

jsonsec =
jsonpage
*/

function Menu(name, jsonsec,jsonpage,stylepref,pageprefix,secprefix, expandRecursive, expandOneBranch)
{
	this.name = name;
	this.jsonsec = jsonsec;
	this.jsonpage = jsonpage;
	this.stylepref = stylepref;
	this.tree = Object();
	this.items = Object();
	this.pageprefix = pageprefix;
	this.secprefix = secprefix;

	if(expandRecursive == null || typeof(expandRecursive) == "undefined")
	{
		expandRecursive = false;
	}

	if(expandOneBranch == null || typeof(expandOneBranch) == "undefined")
	{
		expandOneBranch = true;
	}

	this.expandRecursive = expandRecursive;
	this.expandOneBranch = expandOneBranch;
}

function item(id, parent)
{
	this.id = id;
	this.parent = parent;
}

function addItem(menu, id, parent)
{
	menu.items[""+id] = new item(id, parent);
	if(parent == null || parent == "null" || parent == "")
	{
		var m = menu.tree["root"];
		if(m == null)
			m = Array();
		m[m.length] = new item(id, parent);
		menu.tree["root"] = m;
	}
    else
	{

		var m = menu.tree[parent];
		if(m == null)
			m = Array();
		m[m.length] = new item(id, parent);
		menu.tree[parent] = m;
	}	

}

function initMenu(menu, isRegisterOvers)
{
	if(isRegisterOvers == null || typeof(isRegisterOvers) == "undefined")
	{
		isRegisterOvers = true;
	}

	var root = menu.tree["root"];
	if(root == null || typeof(root.length) == "undefined")
	    return;

    hideAllChilds(menu);
//    hideAllRoots(menu);

    if (isRegisterOvers)
    {
		registerOvers(menu);
    }
}

function registerOvers(menu)
{
	var root = menu.tree["root"];
	if(root == null || typeof(root.length) == "undefined")
	    return;
	for(var i =0; i< root.length; i++)
	{
		var ar = root[i];
		var id = ar.id;
		registerOversbyId(menu,id);

		var element = document.getElementById(id);
        var oMouseOver = function(){setHighlighted(this);}
        var oMouseOut = function(){unsetHighlighted(this);}
		element.onmouseover = oMouseOver;
		element.onmouseout = oMouseOut;
	}

}

function setHighlighted(element)
{
    element.storedStyleClass = element.className;
    var a = element.className;
    if(a.substring(0,1) == 'x')
        {
            return;
        }
    element.className = ('r' + a);

}

function setSelected(id)
{
    try
    {
        var element = document.getElementById(id);
        var classname = element.className + "";
        var regex = new RegExp("([\\w][\\d]+)$");
        var depth = classname.match(regex);
        element.className = 'x' + depth[1];
    }
    catch(e)
    {
    }
}

function unsetHighlighted(element)
{
    element.className = element.storedStyleClass;
}

function registerOversbyId(menu,id)
{
var childs = menu.tree[id];
if(childs != null && typeof(childs)!= "undefined")
	for(var j =0; j< childs.length; j++){
		var mi = childs[j];
		var element = document.getElementById(mi.id);
		registerOversbyId(menu,mi.id);
        var oMouseOver = function(){setHighlighted(this);}
        var oMouseOut = function(){unsetHighlighted(this);}
		element.onmouseover = oMouseOver;
		element.onmouseout = oMouseOut;
	}
}
function hideAllChilds(menu)
{
	var root = menu.tree["root"];
	if(root == null || typeof(root.length) == "undefined")
	    return;
	for(var i =0; i< root.length; i++)
	{
		var ar = root[i];
		var id = ar.id;
        hideChilds(menu,id);
	}
}

function hideAllRoots(menu)
{
	var root = menu.tree["root"];
	if(root == null || typeof(root.length) == "undefined")
	    return;
	for(var i =0; i< root.length; i++)
	{
		var ar = root[i];
		var id = ar.id;
        hideChilds(menu, id, false);
	}
}

function hideAllRootsExceptId(menu, paramId)
{
	var root = menu.tree["root"];
	if(root == null || typeof(root.length) == "undefined")
	    return;
	for(var i =0; i< root.length; i++)
	{
		var ar = root[i];
		var id = ar.id;
		if(id != paramId)
		    hideChilds(menu,id);
	}
}

function findItemById(menu, id)
{
   var item = menu.items[""+id];
   return item;
}

function findRootIdForId(menu, id)
{
    var item = findItemById(menu, id);
    if(item.parent == null || item.parent == "null" || item.parent == "")
        return id;
    var id1 = findRootIdForId(menu, item.parent);
    return id1;
}

function hideChilds(menu, id, recursive)
{
	var childs = menu.tree[id];

	if (recursive == null && typeof(recursive) == "undefined")
	{
		recursive = true;
	}

	if(childs != null && typeof(childs)!= "undefined")
	{
		for(var j =0; j< childs.length; j++)
		{
			var mi = childs[j];
			var element = document.getElementById(mi.id);

			if(element.style.display == "none")
				return;

			if (recursive)
			{
				hideChilds(menu,mi.id, recursive);
			}

			element.style.display="none";
			var elementDivider = document.getElementById('d'+mi.id);
			if(elementDivider != null)
				elementDivider.style.display="none";
		}
	}
}

function menuHandle(menu,id){
    //hideAllChilds(menu);
	var childs = menu.tree[id];
	var expand = false;

	if(childs != null && typeof(childs)!= "undefined")
		for(var j =0; j< childs.length; j++){
			var mi = childs[j];
			var element = document.getElementById(mi.id);
			if(element.style.display=="none")
			{
				expand = true;
			}
			else
			{
				hideChilds(menu,mi.id);
				element.style.display="none";
                var elementDivider = document.getElementById('d'+mi.id);
                if(elementDivider != null)
                    elementDivider.style.display="none";
			}
		}
    if(expand)
    {
    	if (menu.expandOneBranch)
    	{
    		hideAllChilds(menu);
    	}

    	if (menu.expandRecursive)
    	{
    		id = findRootIdForId(menu, id);
    		expandChilds(menu, id);
    	}
    	else
    	{
    		expandById(menu,'root',id)
    	}
    }
}

function containPageId(menu,secId,pid){
    var childs = menu.tree[secId];
    if(childs != null && typeof(childs)!= "undefined")
        for(var j =0; j< childs.length; j++)
        {
            var mi = childs[j];
            if(mi.id == pid)
                return true;
            var deeper = containPageId(menu,mi.id,pid);
            if(deeper)
                return deeper;
        }
}


function _expandById(menu, id)
{
    var childs = menu.tree[id];



    var element = null;

    if(childs != null && typeof(childs)!= "undefined")
    {
        for(var j =0; j< childs.length; j++)
        {
            var mi = childs[j];
            if(mi.id == id)
            {
				expandSection(menu,mi.id);

                if(mi.parent != null)
                {
                    expandSection(menu,mi.parent);
                }
                return true;
            }
            var deeper = expandById(menu,mi.id,id);
            if(deeper)
            {
                if(mi.parent != null)
                    expandSection(menu,mi.parent);
                return deeper;
            }
        }
        return false;
    }
}

function expandById(menu,secId,id)
{
    var childs = menu.tree[secId];
    var element = null;

    if(childs != null && typeof(childs)!= "undefined")
    {
        for(var j =0; j< childs.length; j++)
        {
            var mi = childs[j];
            if(mi.id == id)
            {
				expandSection(menu,mi.id);

                if(mi.parent != null)
                {
                    expandSection(menu,mi.parent);
                }
                return true;
            }
            var deeper = expandById(menu,mi.id,id);
            if(deeper)
            {
                if(mi.parent != null)
                    expandSection(menu,mi.parent);
                return deeper;
            }
        }
        return false;
    }
}

function expandSection(menu,id)
{
	var childs = menu.tree[id];
	if(childs != null && typeof(childs)!= "undefined")
		for(var j =0; j< childs.length; j++)
		{
			var mi = childs[j];
			var element = document.getElementById(mi.id);
				element.style.display="";
            var elementDivider = document.getElementById('d'+mi.id);
                if(elementDivider != null)
                    elementDivider.style.display="";
		}
}

function expandAllChilds(menu)
{
	var root = menu.tree["root"];
	if(root == null || typeof(root.length) == "undefined")
	    return;
	for(var i =0; i< root.length; i++)
	{
		var ar = root[i];
		var id = ar.id;
		    expandChilds(menu,id);
	}
}

function expandChilds(menu,id)
{
    var childs = menu.tree[id];
    if(childs != null && typeof(childs)!= "undefined")
	for(var j =0; j< childs.length; j++)
	{
		var mi = childs[j];
		var element = document.getElementById(mi.id);
		expandChilds(menu,mi.id);
		element.style.display="";
		var elementDivider = document.getElementById('d'+mi.id);
        if(elementDivider != null)
            elementDivider.style.display="";
	}
}
