var menu={};
menu.items=[];
menu.sections=[];

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"
        }
    },
    level1:{
        container:"container-level1",
        unselected:{
            normal:"item-level1",
            hover:"item-level1"
        }
    },
    level2:{
        container:"container-level2",
        unselected:{
            normal:"item-level2",
            hover:"item-level2"
        }
    }
}


menu.init=function(xmlUrl){

    var elHead=document.getElementsByTagName("head")[0];
    var elSectionsScript=null;
  
    menu.elMenu=document.getElementById("contents-items");
    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 xml=xmlDoc.getElementsByTagName("level1-item");

    if(xml==null) return;
  
	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");
		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);
	}
}

menu.create=function(){
    var obj;

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

    if(!menu.elMenu) return;

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

        //el2.href=menuLevel1[i].url;
        el2.innerHTML=menuLevel1[i].label;
        
        el1.appendChild(el2);
        
        if(menuLevel1[i].items) menuLevel2=menuLevel1[i].items;

        if(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].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);
    
}

menu.scrollDown=function(){
    var menu=document.getElementById("contents-items");
    var menuWrap=document.getElementById("contents-items-wrap");
    if(menu.scrollHeight<menuWrap.scrollHeight) return;
    if(menu.offsetTop-menuWrap.scrollHeight==menu.scrollHeight) return;
    if(menu.offsetTop+menuWrap.scrollHeight>menu.scrollHeight) {
        menu.style.top=menu.scrollHeight-menuWrap.scrollHeight+"px";
        return;
    }
    menu.style.top=menu.offsetTop-20+"px";
}
menu.scrollUp=function(){
    var menu=document.getElementById("contents-items"); 
    if(menu.offsetTop==0) return;
    if(menu.offsetTop>0) {
        menu.style.top="0px";
        return;
    }
    menu.style.top=menu.offsetTop+20+"px";
}

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});
	}
}


