var menu={};
menu.items=[];
menu.sections=[];
menu.breadcrumb={
    level1:null, level2:null
};
menu.pager={
    allUrls:[],first:null,previous:null,next:null
};

menu.breadcrumbTemplate="<li class='{CLASS}'><a href='{URL}'>{LABEL}</a></li>";

menu.pageName=null;
menu.sectionName="items";

menu.currentUrl="";

menu.baseUrl=""; //TODO: add base url for QA server

//menu.elMenu=null;
//menu.elSections=null;

menu.cssClass={
    sections:{
        container:"sections",
        firstChild:"section-first",
        lastChild:"section-last",
        alternate:"section-alt", //not implemnted
        unselected:{
            normal:"section",
            hover:"section-hover"
        },
        current:{
            normal:"section-current",
            hover:"section-current-hover"
        }
    },
    level1:{
        container:"container-level1",
        firstChild:"level1-first",
        lastChild:"level1-last",
        alternate:"level1-alt", //not implemnted
        unselected:{
            normal:"item-level1",
            hover:"item-level1"
        },
        selected:{
            normal:"current-level1",
            hover:"current-level1"
        },
        current:{
            normal:"current-level1",
            hover:"current-level1"
        }
    },
    level2:{
        container:"container-level2",
        firstChild:"level2-first",
        lastChild:"level2-last",
        alternate:"level2-alt", //not implemnted
        unselected:{
            normal:"item-level2",
            hover:"item-level2"
        },
        selected:{
            normal:"current-level2",
            hover:"current-level2"
        },
        current:{
            normal:"current-level2",
            hover:"current-level2"
        }
    }
}


menu.init=function(xmlUrl){

    var elHead=document.getElementsByTagName("head")[0];
    var elSectionsScript=null;
  
    menu.pageName=pageName;
    menu.currentSection=null

    menu.elMenu=document.getElementById("menu");
    //menu.elSections=document.getElementById("sections");
    menu.elBreadcrumbs=document.getElementById("breadcrumbs-generated");
    menu.ajaxMenuRequest(xmlUrl);

}

menu.ajaxMenuRequest=function(menuFile){
    var http_request = false;       
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        return false;
    }
    http_request.onreadystatechange = function() { 
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                menu.parse(http_request.responseXML);
				menu.create();
            } else {
                alert('There was a problem with the request.');
            }
        }
    };
    http_request.open('GET', menuFile, true );
    http_request.send(null);
}


menu.parse=function(xmlDoc){
    var allXML=xmlDoc.getElementsByTagName("items");
    var xml=null;
    var xmlUrls=null;
    for(var kk=0; kk<allXML.length; kk++){
        if(menu.getNodeVal(allXML[kk],"name",true)==menu.sectionName){
            xml=allXML[kk].getElementsByTagName("level1-item");
            xmlUrls=allXML[kk].getElementsByTagName("url");
        }
    }
    
    if(xml==null) return; //return if no chapter found
    
	for(var i=0; i<xml.length; i++){
		var itemL1={};
		itemL1.name=menu.getNodeVal(xml[i],"name",true);
		itemL1.label=menu.getNodeVal(xml[i],"label");
		itemL1.url=menu.getNodeVal(xml[i],"url");
		itemL1.shortLabel=menu.getNodeVal(xml[i],"short-label",true);
		var subItems1Wrap=xml[i].getElementsByTagName("level1-subitems");
		if(subItems1Wrap.length!=0){
			var subItems1=subItems1Wrap[0].getElementsByTagName("level2-item");
			itemL1.items=[];
			for(var j=0; j<subItems1.length; j++){
				var itemL2={};
				itemL2.name=menu.getNodeVal(subItems1[j],"name",true);
				itemL2.label=menu.getNodeVal(subItems1[j],"label");
				itemL2.url=menu.getNodeVal(subItems1[j],"url");
				itemL1.items.push(itemL2);
			}
		}
		menu.items.push(itemL1);
	}

	for(var kk=0; kk<xmlUrls.length; kk++){
	    menu.pager.allUrls.push(xmlUrls[kk].firstChild.nodeValue);
	}
}

menu.create=function(){
    var obj;

    var menuLevel1=null,menuLevel2=null;menuLevel3=null;
    var currentItem=null;

    if(!menu.elMenu || !menu.sectionName || !menu.pageName) return;
    
    menuLevel1=menu.items;
    
    var lev1found=false,lev2found=false;lev3found=false;
    
    
    for(var i in menu.items){
        if(!lev1found){
            var itemL1=menu.items[i];
            if(itemL1.name==menu.pageName){
                lev1found=true;
                itemL1.current=true;
                menu.currentUrl=itemL1.url;
                menu.breadcrumb.level1=itemL1;
                if(itemL1.items) menuLevel2=itemL1.items;
            }else{
                if(itemL1.items && !lev2found){
                    for(var j in itemL1.items){
                        if(!lev2found){
                            var itemL2=itemL1.items[j];
                            if(itemL2.name==menu.pageName){
                                lev2found=true;
                                itemL2.current=true;
                                menu.currentUrl=itemL2.url;
                                itemL1.selected=true;
                                menuLevel2=itemL1.items;
                                menu.breadcrumb.level1=itemL1;
                                menu.breadcrumb.level2=itemL2;
                            }
                        }
                    }
                }
            }
        }
    }
    
    /*---pager---*/
    if(typeof(menu.pager.allUrls[0])=="string") menu.pager.first=menu.pager.allUrls[0];

    for(var mm=0; mm<menu.pager.allUrls.length; mm++){
        if(menu.pager.allUrls[mm]==menu.currentUrl){
            if(typeof(menu.pager.allUrls[mm-1])=="string") menu.pager.previous=menu.pager.allUrls[mm-1];
            if(typeof(menu.pager.allUrls[mm+1])=="string") menu.pager.next=menu.pager.allUrls[mm+1];
        }
    }
    
    if(menu.pager.previous) document.getElementById("pager-previous").href=menu.pager.previous;
    else document.getElementById("pager-previous").style.display="none";
    
    if(menu.pager.next) document.getElementById("pager-next").href=menu.pager.next;
    else document.getElementById("pager-next").style.display="none";
    
    if(menu.pager.first!=menu.currentUrl){
        if(menu.pager.first) document.getElementById("pager-first").href=menu.pager.first;
        else document.getElementById("pager-first").style.display="none";
    }else{
        document.getElementById("pager-first").style.display="none";
    }
    
    /*---//pager---*/

    var elContainer1=null,elContainer2=null,elContainer3=null;
    var css1=menu.cssClass.level1,css2=menu.cssClass.level2,css3=menu.cssClass.level3;//shorthand
    
    if(!menuLevel1){
        return;
    }else{
        elContainer1=document.createElement("ul");
        menu.addCss(elContainer1,css1.container);
    }
    for(var i in menuLevel1){
        var el1=document.createElement("li");
        var el2=document.createElement("a");

        if(menuLevel1[i].selected){
			menu.addCss(el1,css1.selected.normal,css1.selected.hover);
		}
        else if(menuLevel1[i].current) {
			menu.addCss(el1,css1.current.normal,css1.current.hover);
		}
		if(i==menuLevel1[0]){
			menu.addCss(el1,css1.firstChild);
		}else if(i==menuLevel1.length){
			menu.addCss(el1,css1.lastChild);
		}
        
        el2.href=menuLevel1[i].url;
        el2.innerHTML=menuLevel1[i].label;
        
        el1.appendChild(el2);
        
        if((menuLevel1[i].selected || menuLevel1[i].current) && menuLevel2){
            elContainer2=document.createElement("ul");
            menu.addCss(elContainer2,css2.container);
            for(var j in menuLevel2){
                var el3=document.createElement("li");
                var el4=document.createElement("a");
                
                /*if(menuLevel2[j].selected) {
					menu.addCss(el3,css2.selected.normal,css2.selected.hover);
				}else{
					menu.addCss(el3,css2.current.normal,css2.current.hover);
				}*/
				if(menuLevel2[j].current) {
				    menu.addCss(el3,css2.current.normal,css2.current.hover);
				}
				if(j==menuLevel2[0]){
					menu.addCss(el1,css2.firstChild);
				}else if(j==menuLevel2.length){
					menu.addCss(el1,css2.lastChild);
				}
                
                el4.href=menuLevel2[j].url;
                el4.innerHTML=menuLevel2[j].label;
                
                el3.appendChild(el4);

                elContainer2.appendChild(el3);
            }
            el1.appendChild(elContainer2);  
        }
        elContainer1.appendChild(el1);
    }
    menu.elMenu.appendChild(elContainer1);
    
    var class1=menu.breadcrumb.level2?"":"last";
    var htmlStr="";
    if(menu.breadcrumb.level1){
        htmlStr=menu.breadcrumbTemplate;
        htmlStr=htmlStr.replace("{URL}",menu.breadcrumb.level1.url);
        htmlStr=htmlStr.replace("{LABEL}",menu.breadcrumb.level1.shortLabel);
        htmlStr=htmlStr.replace("{CLASS}",class1);
    }
    
    if(menu.breadcrumb.level2) htmlStr+=menu.breadcrumbTemplate.replace("{URL}",menu.breadcrumb.level2.url).replace("{LABEL}",menu.breadcrumb.level2.label).replace("{CLASS}","last");

    menu.elBreadcrumbs.innerHTML+=htmlStr;
    
    setPageHeight();
}


menu.getNodeVal=function(node,tag,attr){
    if(typeof(attr)!="undefined" && attr==true){
        return node.getAttribute(tag);
    }
    var o=node.getElementsByTagName(tag);
    if(o==null || o.length==0 ||o[0].childNodes.length==0) return null;
    return o[0].firstChild.nodeValue;
}
menu.addCss=function(elem,normal,hover){
	if(typeof(elem)!="object")return;

	if(typeof(normal)!="undefined" && normal!=""){
		YAHOO.util.Dom.addClass(elem,normal);
	}
	if(typeof(hover)!="undefined" && hover!=""){
		YAHOO.util.Event.addListener(elem,"mouseover",
			function(e,o){
				YAHOO.util.Dom.replaceClass(o.el,o.oldCls,o.newCls);
			}
		,{el:elem,oldCls:normal,newCls:hover});
		
		YAHOO.util.Event.addListener(elem,"mouseout",
			function(e,o){
				YAHOO.util.Dom.replaceClass(o.el,o.oldCls,o.newCls);
			}
		,{el:elem,oldCls:hover,newCls:normal});
	}
}



