var host="http://www.muhlenberg.edu";
var mainInc = 0;
var mc=0;
var marker = 0;
var menuChain = new Array();
var childPtr=0;
var mainMenuCount=0;
var output="";
var cutoff;
var cnn=0;
var chainNames = new Array();
var childStart = 0;
var iarrptr;
var lastMenuChain;
var childrenPtr=0;
var ptr=0;
var mptr=0;
var lptr=0;
var chainArray = new Array();
var menuArray = new Array();
var itemArray = new Array();
var levelArray = new Array();
var parentToChildArrayptr=0;
var cha=0;
var pha=0;
var cHash;
var parentToChildArray = new Array();
var childToParentArray = new Array();



	function addMenuItem( parentId, text, link, id, openNewWindow) {
		var cmd;
                //if (parentId == "main" && text != "") 
                if (parentId == "main" ) 
			mainMenuCount = mainMenuCount + 1;
		itemArray[ptr++]=new menuItem(parentId
                               , text, link, id, openNewWindow);

                
                //See if parent exists already, if not then create record
                //and create child array for parent

                if (eval("this." + parentId) == undefined) {

                  //assign # to parent
                  cmd="this." + parentId + "=\"" + parentToChildArrayptr 
                       + "\";";
		  parentToChildArrayptr++;
                  eval(cmd);

                }
		//add child to parentToChildArray
                parentToChildArray[eval("this." + parentId) ]=parentId;
                childToParentArray[eval("this." + parentId) ]=
                    childToParentArray[eval("this." + parentId)] 
                    + "," + id;

		//increment array pointer
                cmd="this." + parentId + "len = this." + parentId + "len + 1;";
                eval(cmd);

	}

	function addLevel(num, mClass, lClass , color, bgcolor, mColor, mBgColor) {


		levelArray[lptr++]=new level(num, mClass
				, lClass, color, bgcolor
				, mColor, mBgColor);
		
	}

	function addMenu(name, level, left, top) {

		menuArray[mptr++]=new mMenu(name, level, left, top);
		
	}



	function menuItem (parentId, text, link, id, openNewWindow){

		this.parentId=parentId;
		this.text=text;
		this.link=link;
		this.id=id;
		if (openNewWindow != null){
		if (openNewWindow) {
			this.target="_blank";
		}else{
		        this.target="_self";
		}
		}else {this.target="_self";}
	}


	function level (num,  lClass, color, bgcolor, mColor, mBgColor) {
		this.num = num;
	    	this.lClass=lClass;
		this.color=color;
		this.bgcolor=bgcolor;
		this.mColor=mColor;
		this.mBgColor=mBgColor;
	}

	function mMenu (id, level, left, top) {
		this.id=id;
		this.level=level;
		this.left=left;
		this.top=top;
	}







//color, bgcolor, mColor, mBgColor


 function getParent(id) {
	if (id == null) return;
 	return eval("cHash." + id);     

 }

 function levelColorHash () {
	  for (var j=0; j < levelArray.length; j++) {
		eval("this.level_" + levelArray[j].num + "=\"" + 
			levelArray[j].color + "|" +
			levelArray[j].bgcolor +  "|" +
			levelArray[j].mColor + "|" +
			levelArray[j].mBgColor  +
			"\";");
	 }
 }
 function levelClassHash () {
	  for (var j=0; j < levelArray.length; j++) {
		eval("this.level_" + levelArray[j].num + "=\"" + 
			levelArray[j].lClass +  
			"\";");
	 }
 }

 function menuLevelHash () {
	  for (var j=0; j < menuArray.length; j++) {
		eval("this." + menuArray[j].id + "=" + menuArray[j].level + ";");
	 }
 }
 function itemArrayPtr () {
	  for (var j=0; j < itemArray.length; j++) {
		eval("this." + itemArray[j].id + "=" + j + ";");
	 }
 }

 function menuLocationHash () {
	  for (var j=0; j < menuArray.length; j++) {
		eval("this." + menuArray[j].id + "=\"" + 
		"left:" + 
		menuArray[j].left + "px;" + 
		"top:" + 
		menuArray[j].top + "px;\"" +
		";");
	 }
 }

 function getColorHashLine(id) {
        if (id == null) return;
        if (id.length == 0) return;
	var lch = new levelColorHash();
	var level= getLevel(id);
	return eval("lch.level_" + level + ".split(\"|\");");
 }


 function getLevel(id) {
        if (id == null) return;
        var mlh = new menuLevelHash();
	return (eval("mlh." + id));
 }
 

function getMainMenuCount() {
   return mainMenuCount;
}


function createSubMenus() {
        var j=0;
	var k=0;
	var cmd;
	var mainMenuChain;
	var counter = 1;
        iarrptr = new itemArrayPtr();
        var childrenExist=false;
        var childCount=0;

        //For each item in main menu
         for (j=0; j < itemArray.length; j++) {
            mc = 0; 
	    mainInc= 1;
	    if (itemArray[j].parentId == "main") {
                     mainMenuChain="Menu" + counter ;
	             if (hasChildren(itemArray[j].id)) {
                        var childArrStr=childToParentArray[childrenPtr]; 
                        var cArray = childArrStr.split(",");
                        childrenExist=true;
		        childCount=cArray.length -1;

                     }else{
		        childCount=0;
                     }

                     cmd=mainMenuChain + "=new Array(\"" 
			 + itemArray[j].text + "\",\"" 
                         + itemArray[j].link + "\","
                         + "\"\"," + childCount + ",20,205);";
	             output = output + cmd;
	             if (childrenExist && itemArray[j].id != "") {
                        menuChain[mc++]=mainMenuChain;
			childPtr=0;
			createMenuChain(mainMenuChain, itemArray[j].id);
                     }
		     counter = counter + 1; 
                //}
             }
         }

         eval(output);
}

function createMenuChain(newChain, currMenu) {
    var parentMenuChain=newChain;
    var j;
    var childCount=0;
    var childrenExist=false;
    var childName="";
    var cmd="";

    //Get the children array
    var childArrStr=childToParentArray[childrenPtr]; 
    var cArray = childArrStr.split(",");

    for (j=0; j < cArray.length ; j++) {

       if (cArray[j] == "undefined") continue;
       childPtr = childPtr + 1;

       childrenExist=false;
       childName = parentMenuChain + "_" + childPtr;
 
       var ptrid=cArray[j];

       //get children count of each child before writing line
       if (hasChildren(cArray[j]) ) {
	 childrenExist=true;
         var childArrStrSub=childToParentArray[childrenPtr]; 
         var cArraySub = childArrStrSub.split(",");
         childCount=cArraySub.length -1;
       }else{
        childCount=0;
       }
       var link= itemArray[eval("iarrptr." + ptrid)].link;
       if (link.charAt(0)  == "/" ) {
          link = host + link;
       }
       cmd=childName + "=new Array(\"" 
	 + itemArray[eval("iarrptr." + ptrid)].text + "\",\"" 
         //+ itemArray[eval("iarrptr." + ptrid)].link + "\","
         + link + "\","
         + "\"\"," + childCount + ",20,210);";
       output = output + cmd;

       
       if (childrenExist) {
	  childPtr=0;
          menuChain[mc++]=childName;
          createMenuChain(childName, cArray[j]);
         
        }
        
        //is name part of main menu?
        if ( parentMenuChain.indexOf("_") == -1  ) {

            //Rollback to top of chain 
	    parentMenuChain=menuChain[0];

	    //assign for rename of 'top' of menuChain
            childPtr=mainInc;

            //increment starting point in chain
	    mainInc= mainInc + 1;

           //Are we at end of loop to go back to next item in main menu?
           if ((j + 1) > cArray.length) {
	   return;
           }
          }
     }//for

 
}


function hasChildren (id) {
    var j=0;
    for (j=0; j < parentToChildArray.length; j++)
       if (id == parentToChildArray[j]) {
          childrenPtr=j;
	  return true;
        }
	return false;

}

function getParentPointer(parentId) {
    for (j=0; j < parentToChildArray.length; j++)
       if (parentId == getParent(parentToChildArray[j]))
	return j;

}
