/*
=============================================
	MathDL Tree View (for Java Source)
	October 16, 2007
=============================================
*/


var IMG_ID_PREFIX = 'I_';

var SUBJECT_ID_PREFIX = 'subject_';
var FORMAT_ID_PREFIX = 'format_';
var TYPE_ID_PREFIX = 'type_';

//Initialize all iamges:
var openImg = new Image();
openImg.src = "/images/subpageDL/open.gif";

var closedImg = new Image();
closedImg.src = "/images/subpageDL/closed.gif";

var blankImg = new Image();
blankImg.src = "/images/subpageDL/blank.gif";

var subject_selectedNodeNameIds = new Array(); // The nodeName id's
var subject_selectedBranchIds = new Array(); // The branch id's, a one to one match with the selectedNodeNameId's

var format_selectedNodeNameIds = new Array(); // The nodeName id's
var format_selectedBranchIds = new Array(); // The branch id's, a one to one match with the selectedNodeNameId's

var type_selectedNodeNameIds = new Array(); // The nodeName id's
var type_selectedBranchIds = new Array(); // The branch id's, a one to one match with the selectedNodeNameId's







var subject_topLevelIds = new Array();
var subject_secondLevelIds = new Array();

var format_topLevelIds = new Array();
var format_secondLevelIds = new Array();

var type_topLevelIds = new Array();
var type_secondLevelIds = new Array();




function showDefaultTab()
{
    hide('typeTree');
    hide('formatTree');
    hide('subjectTree');
    tab = document.getElementById('browseByTab').value;

	if (tab == '')
	{
		tab = 'subjectTree';
	}

	show(tab);
}


function show(elementid)
{
    if( document.getElementById(elementid) != undefined )
    {
        document.getElementById(elementid).style.display = 'block';
    }

    if( document.getElementById(elementid + '_tab') != undefined )
    {
	    document.getElementById(elementid + '_tab').style.background = "url(/images/subpageDL/tabbkrd.gif) top right";
	}

	if( document.getElementById('browseByTab') != undefined )
    {
	    document.getElementById('browseByTab').value = elementid;
	}

	return;
}


function appendBrowseByTabValue(front)
{
    document.location = (front + document.getElementById('browseByTab').value);
}



function hide(elementid)
{
	//alert('hiding: '+ elementid);
	if( document.getElementById(elementid) != undefined )
	{
	    document.getElementById(elementid).style.display = 'none';
    }

	if( document.getElementById(elementid + '_tab') != undefined )
	{
	    document.getElementById(elementid + '_tab').style.background = "url(/images/subpageDL/tabbkrdDefault.gif) top right";
	}

	return;
}





function initSubjectTopLevelIds(ids)
{
    for (i = 0;i < ids.length;i++)
    {
        subject_topLevelIds.push(ids[i]);
    }
}


function initSubjectSecondLevelIds(ids)
{
    for (i = 0;i < ids.length;i++)
    {
        subject_secondLevelIds.push(ids[i]);
    }
}

function initFormatTopLevelIds(ids)
{
    for (i = 0;i < ids.length;i++)
    {
        format_topLevelIds.push(ids[i]);
    }
}


function initFormatSecondLevelIds(ids)
{
    for (i = 0;i < ids.length;i++)
    {
        format_secondLevelIds.push(ids[i]);
    }
}

function initTypeTopLevelIds(ids)
{
    for (i = 0;i < ids.length;i++)
    {
        type_topLevelIds.push(ids[i]);
    }
}


function initTypeSecondLevelIds(ids)
{
    for (i = 0;i < ids.length;i++)
    {
        type_secondLevelIds.push(ids[i]);
    }
}




function pushId(nodeNameId, branchId)
{
    if( branchId.indexOf(SUBJECT_ID_PREFIX) == 0)
    {
        subject_selectedNodeNameIds.push(nodeNameId);
        subject_selectedBranchIds.push(branchId);
    }
    else if( branchId.indexOf(FORMAT_ID_PREFIX) == 0)
    {
        format_selectedNodeNameIds.push(nodeNameId);
        format_selectedBranchIds.push(branchId);
    }
    else if( branchId.indexOf(TYPE_ID_PREFIX) == 0)
    {
        type_selectedNodeNameIds.push(nodeNameId);
        type_selectedBranchIds.push(branchId);
    }
}

function removeSelection(branchId)
{
    if( branchId.indexOf(SUBJECT_ID_PREFIX) == 0)
    {
        document.browseForm.subjectId.value = "";

        for (i = 0;i < subject_selectedNodeNameIds.length;i++)
        {
            document.getElementById(subject_selectedNodeNameIds[i]).className = "nodename_package";

            if(document.getElementById(IMG_ID_PREFIX + subject_selectedBranchIds[i]).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + subject_selectedBranchIds[i]).src = closedImg.src;
            }
        }
    }
    else if( branchId.indexOf(FORMAT_ID_PREFIX) == 0)
    {
        document.browseForm.browseFormatId.value = "";

        for (i = 0;i < format_selectedNodeNameIds.length;i++)
        {
            document.getElementById(format_selectedNodeNameIds[i]).className = "nodename_package";

            if(document.getElementById(IMG_ID_PREFIX + format_selectedBranchIds[i]).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + format_selectedBranchIds[i]).src = closedImg.src;
            }
        }
    }
    else if( branchId.indexOf(TYPE_ID_PREFIX) == 0)
    {
        document.browseForm.browseTypeId.value = "";

        for (i = 0;i < type_selectedNodeNameIds.length;i++)
        {
            document.getElementById(type_selectedNodeNameIds[i]).className = "nodename_package";

            if(document.getElementById(IMG_ID_PREFIX + type_selectedBranchIds[i]).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + type_selectedBranchIds[i]).src = closedImg.src;
            }
        }
    }
}




function showBranch(branchId,branchName)
{
    // Only hide top level nodes if we have clicked on a top level node:
    if( isTopLevel(branchId) )
    {
	    hideAllTopLevel(branchId);
    }

    if( isSecondLevel(branchId) )
    {
	    hideAllSecondLevel(branchId);
    }

    triggerId = branchName + '_' + branchId;

	removeSelection(branchId);

    if( branchId.indexOf(SUBJECT_ID_PREFIX) == 0)
    {
        id = branchId.substring(SUBJECT_ID_PREFIX.length);
	    document.browseForm.subjectId.value = id;
    }
	else if( branchId.indexOf(FORMAT_ID_PREFIX) == 0)
    {
        id = branchId.substring(FORMAT_ID_PREFIX.length);
	    document.browseForm.browseFormatId.value = id;
    }
    else if( branchId.indexOf(TYPE_ID_PREFIX) == 0)
    {
        id = branchId.substring(TYPE_ID_PREFIX.length);
	    document.browseForm.browseTypeId.value = id;
    }

    if( document.getElementById(triggerId) != undefined )
        document.getElementById(triggerId).className = "nodename_package_select";

    pushId(triggerId,branchId);

    // Make sure parent is visible:
    if( document.getElementById(branchId).parentNode != null)
    {
        if( document.getElementById(branchId).parentNode.id != undefined && document.getElementById(branchId).parentNode.id != 'treedoc' )
        {
            parentId = document.getElementById(branchId).parentNode.id;
            document.getElementById(parentId).style.display = "block";

            // WE support 2 levels so check the parents parent:
            if( document.getElementById(parentId).parentNode != null)
            {
                if( document.getElementById(parentId).parentNode.id != undefined && document.getElementById(parentId).parentNode.id != 'treedoc' )
                {
                    nextParentId = document.getElementById(parentId).parentNode.id;
                    document.getElementById(nextParentId).style.display = "block";
                }
            }
        }

    }

    // Just open, don't toggle.
    //document.getElementById(branchId).style.display = "block";
    //document.getElementById(IMG_ID_PREFIX + branchId).src = openImg.src;


	var objBranch = document.getElementById(branchId).style;
	if(objBranch.display == "block")
	{
		objBranch.display = "none";
	}
	else
	{
		objBranch.display = "block";		
	}

	swapFolder(IMG_ID_PREFIX + branchId);
}



function hideAllTopLevel(clickedId)
{
    if( clickedId.indexOf(SUBJECT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < subject_topLevelIds.length; i++)
        {
            // Don't hide the one we have clicked.
            if( clickedId == subject_topLevelIds[i] )
                continue;

            var thisElem = document.getElementById(subject_topLevelIds[i]);
            thisElem.style.display = 'none';
            if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src;
            }
        }
    }
    else if( clickedId.indexOf(FORMAT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < format_topLevelIds.length; i++)
        {
            // Don't hide the one we have clicked.
            if( clickedId == format_topLevelIds[i] )
                continue;

            var thisElem = document.getElementById(format_topLevelIds[i]);
            thisElem.style.display = 'none';
            if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src;
            }
        }
    }
    else if( clickedId.indexOf(TYPE_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < type_topLevelIds.length; i++)
        {
            // Don't hide the one we have clicked.
            if( clickedId == type_topLevelIds[i] )
                continue;

            var thisElem = document.getElementById(type_topLevelIds[i]);
            thisElem.style.display = 'none';
            if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src;
            }
        }
    }

    // Make sure all second levels are closed as well.
    hideAllSecondLevel('-1');
}


function hideAllSecondLevel(clickedId)
{
    if( clickedId.indexOf(SUBJECT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < subject_secondLevelIds.length; i++)
        {
            // Don't hide the one we have clicked.
            if( clickedId == subject_secondLevelIds[i] )
                continue;

            var thisElem = document.getElementById(subject_secondLevelIds[i]);
            thisElem.style.display = 'none';
            if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src;
            }
        }
    }
    else if( clickedId.indexOf(FORMAT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < format_secondLevelIds.length; i++)
        {
            // Don't hide the one we have clicked.
            if( clickedId == format_secondLevelIds[i] )
                continue;

            var thisElem = document.getElementById(format_secondLevelIds[i]);
            thisElem.style.display = 'none';
            if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src;
            }
        }
    }
    else if( clickedId.indexOf(TYPE_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < type_secondLevelIds.length; i++)
        {
            // Don't hide the one we have clicked.
            if( clickedId == type_secondLevelIds[i] )
                continue;

            var thisElem = document.getElementById(type_secondLevelIds[i]);
            thisElem.style.display = 'none';
            if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
                document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src;
            }
        }
    }
}


function isTopLevel(clickedId)
{
    if( clickedId.indexOf(SUBJECT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < subject_topLevelIds.length; i++)
        {
            if( clickedId == subject_topLevelIds[i] )
                return true;
        }
    }
    else if( clickedId.indexOf(FORMAT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < format_topLevelIds.length; i++)
        {
            if( clickedId == format_topLevelIds[i] )
                return true;
        }
    }
    else if( clickedId.indexOf(TYPE_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < type_topLevelIds.length; i++)
        {
            if( clickedId == type_topLevelIds[i] )
                return true;
        }
    }
    return false;
}



function isSecondLevel(clickedId)
{
    if( clickedId.indexOf(SUBJECT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < subject_secondLevelIds.length; i++)
        {
            if( clickedId == subject_secondLevelIds[i] )
                return true;
        }
    }
    else if( clickedId.indexOf(FORMAT_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < format_secondLevelIds.length; i++)
        {
            if( clickedId == format_secondLevelIds[i] )
                return true;
        }
    }
    else if( clickedId.indexOf(TYPE_ID_PREFIX) == 0 )
    {
        for (var i = 0; i < type_secondLevelIds.length; i++)
        {
            if( clickedId == type_secondLevelIds[i] )
                return true;
        }
    }

    return false;
}



function swapFolder(img)
{
	objImg = document.getElementById(img);
	if(objImg.src.indexOf('closed.gif') > -1)
	{
		objImg.src = openImg.src;
	}else if(objImg.src.indexOf('blank.gif') > -1){
		objImg.src = blankImg.src;
			
	}else
	{
		objImg.src = closedImg.src;
	}
}




//Show all <span class="branch">.... elements
function showAll()
{
	var allElems = document.getElementsByTagName('span');
		
	for (var i = 0; i < allElems.length; i++)
	{
		var thisElem = allElems[i];
		if (thisElem.className && thisElem.className == 'branch')
		{
			thisElem.style.display = 'block';
			document.getElementById(IMG_ID_PREFIX + thisElem.id).src = openImg.src; //change left image
		}
	}
}


function selectAll(idPrefix)
{
    hideAll(idPrefix);
}



//Collapse all <span class="branch">.... elements
function hideAll(idPrefix)
{
	removeSelection(idPrefix);

	var allElems = document.getElementsByTagName('span');
	
	for (var i = 0; i < allElems.length; i++)
	{
		var thisElem = allElems[i];
		if( thisElem.id.indexOf(idPrefix) == 0 && thisElem.className && thisElem.className == 'branch')
		{
			thisElem.style.display = 'none';
			if(document.getElementById(IMG_ID_PREFIX + thisElem.id).src != blankImg.src){
				document.getElementById(IMG_ID_PREFIX + thisElem.id).src = closedImg.src; //change left image
			}
		}
	}
}

function toggle(elementid)
{
	if(document.getElementById(elementid).style.display == 'none')
	{
		document.getElementById(elementid).style.display = 'block';
	}
	else
	{
		document.getElementById(elementid).style.display = 'none';
	}
		
}


function init(subjectId,subjectName,FormatId,formatName,typeId,typeName,scrollX,scrollY)
{
    showBranch(subjectId,subjectName);
    showBranch(FormatId,formatName);
    showBranch(typeId,typeName);

    setScrollXY(scrollX,scrollY);

    showDefaultTab();
}


function submitForm()
{
    xyArray = getScrollXY();

    document.browseForm.scrollX.value = xyArray[0];
    document.browseForm.scrollY.value = xyArray[1];

    document.browseForm.submit();

}



function getScrollXY()
{
    var x = 0, y = 0;
    if( typeof( window.pageYOffset ) == 'number' )
    {
        // Netscape
        x = window.pageXOffset;
        y = window.pageYOffset;
    }
    else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
    {
        // DOM
        x = document.body.scrollLeft;
        y = document.body.scrollTop;
    }
    else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
    {
        // IE6 standards compliant mode
        x = document.documentElement.scrollLeft;
        y = document.documentElement.scrollTop;
    }

    return [x, y];
}

function setScrollXY(x, y)
{
    window.scrollTo(x, y);
}
