function DropDownMenuX(id){ this.type="horizontal"; this.delay={ "show":0, "hide":0
}
this.position={ "level1":{"top":0,"left":0}, "levelX":{"top":0,"left":0}
}
this.fixIeSelectBoxBug=true; this.zIndex={ "visible":1000, "hidden":-1
}; this.browser={ "ie":Boolean(document.body.currentStyle), "ie5":(navigator.appVersion.indexOf("MSIE 5.5") !=-1||navigator.appVersion.indexOf("MSIE 5.0") !=-1), "ie6":(navigator.appVersion.indexOf("MSIE 6.0") !=-1)
}; if(!this.browser.ie){ this.browser.ie5=false; this.browser.ie6=false;}
this.init=function(){ if(!document.getElementById(this.id)){return alert("DropDownMenuX.init() failed. Element '"+this.id+"' does not exist.");}
if(this.type !="horizontal" && this.type !="vertical"){return alert("DropDownMenuX.init() failed. Unknown menu type: '"+this.type+"'");}
if(this.browser.ie && this.browser.ie5){fixWrap();}
fixSections(); parse(document.getElementById(this.id).childNodes,this.tree,this.id);}
function fixSections(){ var arr=document.getElementById(self.id).getElementsByTagName("div"); var sections=new Array(); var widths=new Array(); for(var i=0;i<arr.length;i++){ if(arr[i].className=="section"){ sections.push(arr[i]);}
}
for(var i=0;i<sections.length;i++){ widths.push(getMaxWidth(sections[i].childNodes));}
for(var i=0;i<sections.length;i++){ sections[i].style.width=(widths[i])+"px";}
if(self.browser.ie){ for(var i=0;i<sections.length;i++){ setMaxWidth(sections[i].childNodes,widths[i]);}
}
}
function fixWrap(){ var elements=document.getElementById(self.id).getElementsByTagName("a"); for(var i=0;i<elements.length;i++){ if(/item2/.test(elements[i].className)){ elements[i].innerHTML='<div nowrap="nowrap">'+elements[i].innerHTML+'</div>';}
}
}
function getMaxWidth(nodes){ var maxWidth=0; for(var i=0;i<nodes.length;i++){ if(nodes[i].nodeType !=1||/section/.test(nodes[i].className)){continue;}
if(nodes[i].offsetWidth>maxWidth){maxWidth=nodes[i].offsetWidth;}
}
return maxWidth;}
function setMaxWidth(nodes,maxWidth){ for(var i=0;i<nodes.length;i++){ if(nodes[i].nodeType==1 &&/item2/.test(nodes[i].className) && nodes[i].currentStyle){ if(self.browser.ie5){ nodes[i].style.width=(maxWidth)+"px";}else{ nodes[i].style.width=(maxWidth-parseInt(nodes[i].currentStyle.paddingLeft)-parseInt(nodes[i].currentStyle.paddingRight))+"px";}
}
}
}
function parse(nodes,tree,id){ for(var i=0;i<nodes.length;i++){ if(1 !=nodes[i].nodeType){ continue;}
switch(true){ case/\bitem1\b/.test(nodes[i].className):
nodes[i].id=id+"-"+tree.length; tree.push(new Array()); nodes[i].onmouseover=itemOver; nodes[i].onmouseout=itemOut; break; case/\bitem2\b/.test(nodes[i].className):
nodes[i].id=id+"-"+tree.length; tree.push(new Array()); nodes[i].onmouseover=itemOver; nodes[i].onmouseout=itemOut; break; case/\bsection\b/.test(nodes[i].className):
nodes[i].id=id+"-"+(tree.length-1)+"-section"; nodes[i].onmouseover=sectionOver; nodes[i].onmouseout=sectionOut; var box1=document.getElementById(id+"-"+(tree.length-1)); var box2=document.getElementById(nodes[i].id); var el=new Element(box1.id); if(1==el.level){ if("horizontal"==self.type){ box2.style.top=box1.offsetTop+box1.offsetHeight+self.position.level1.top+"px"; if(self.browser.ie5){ box2.style.left=self.position.level1.left+"px";}else{ box2.style.left=box1.offsetLeft+self.position.level1.left+"px";}
}else if("vertical"==self.type){ box2.style.top=box1.offsetTop+self.position.level1.top+"px"; if(self.browser.ie5){ box2.style.left=box1.offsetWidth+self.position.level1.left+"px";}else{ box2.style.left=box1.offsetLeft+box1.offsetWidth+self.position.level1.left+"px";}
}
}else{ box2.style.top=box1.offsetTop+self.position.levelX.top+"px"; box2.style.left=box1.offsetLeft+box1.offsetWidth+self.position.levelX.left+"px";}
self.sections.push(nodes[i].id); self.sectionsShowCnt.push(0); self.sectionsHideCnt.push(0); if(self.fixIeSelectBoxBug && self.browser.ie6){ nodes[i].innerHTML=nodes[i].innerHTML+'<iframe id="'+nodes[i].id+'-iframe" src="javascript:false;" scrolling="no" frameborder="0" style="position: absolute; top: 0px; left: 0px; display: none; filter:alpha(opacity=0);"></iframe>';}
break;}
if(nodes[i].childNodes){ if(/\bsection\b/.test(nodes[i].className)){ parse(nodes[i].childNodes,tree[tree.length-1],id+"-"+(tree.length-1));}else{ parse(nodes[i].childNodes,tree,id);}
}
}
}
function itemOver(){ self.itemShowCnt++; var id_section=this.id+"-section"; if(self.visible.length){ var el=new Element(self.visible.getLast()); el=document.getElementById(el.getParent().id); if(/item\d-active/.test(el.className)){ el.className=el.className.replace(/(item\d)-active/,"$1");}
}
if(self.sections.contains(id_section)){ clearTimers(); self.sectionsHideCnt[self.sections.indexOf(id_section)]++; var cnt=self.sectionsShowCnt[self.sections.indexOf(id_section)]; var timerId=setTimeout(function(a,b){return function(){self.showSection(a,b);}}(id_section,cnt),self.delay.show); self.timers.push(timerId);}else{ if(self.visible.length){ clearTimers(); var timerId=setTimeout(function(a,b){return function(){self.showItem(a,b);}}(this.id,self.itemShowCnt),self.delay.show); self.timers.push(timerId);}
}
}
function itemOut(){ self.itemShowCnt++; var id_section=this.id+"-section"; if(self.sections.contains(id_section)){ self.sectionsShowCnt[self.sections.indexOf(id_section)]++; if(self.visible.contains(id_section)){ var cnt=self.sectionsHideCnt[self.sections.indexOf(id_section)]; var timerId=setTimeout(function(a,b){return function(){self.hideSection(a,b);}}(id_section,cnt),self.delay.hide); self.timers.push(timerId);}
}
}
function sectionOver(){ self.sectionsHideCnt[self.sections.indexOf(this.id)]++; var el=new Element(this.id); var parent=document.getElementById(el.getParent().id); if(!/item\d-active/.test(parent.className)){ parent.className=parent.className.replace(/(item\d)/,"$1-active");}
}
function sectionOut(){ self.sectionsShowCnt[self.sections.indexOf(this.id)]++; var cnt=self.sectionsHideCnt[self.sections.indexOf(this.id)]; var timerId=setTimeout(function(a,b){return function(){self.hideSection(a,b);}}(this.id,cnt),self.delay.hide); self.timers.push(timerId);}
this.showSection=function(id,cnt){ if(typeof cnt !="undefined"){ if(cnt !=this.sectionsShowCnt[this.sections.indexOf(id)]){return;}
}
this.sectionsShowCnt[this.sections.indexOf(id)]++; if(this.visible.length){ if(id==this.visible.getLast()){return;}
var el=new Element(id); var parents=el.getParentSections(); for(var i=this.visible.length-1;i>=0;i--){ if(parents.contains(this.visible[i])){ break;}else{ this.hideSection(this.visible[i]);}
}
}
var el=new Element(id); var parent=document.getElementById(el.getParent().id); if(!/item\d-active/.test(parent.className)){ parent.className=parent.className.replace(/(item\d)/,"$1-active");}
if(document.all){document.getElementById(id).style.display="block";}
document.getElementById(id).style.visibility="visible"; document.getElementById(id).style.zIndex=this.zIndex.visible; if(this.fixIeSelectBoxBug && this.browser.ie6){ var div=document.getElementById(id); var iframe=document.getElementById(id+"-iframe"); iframe.style.width=div.offsetWidth+parseInt(div.currentStyle.borderLeftWidth)+parseInt(div.currentStyle.borderRightWidth); iframe.style.height=div.offsetHeight+parseInt(div.currentStyle.borderTopWidth)+parseInt(div.currentStyle.borderBottomWidth); iframe.style.top=-parseInt(div.currentStyle.borderTopWidth); iframe.style.left=-parseInt(div.currentStyle.borderLeftWidth); iframe.style.zIndex=div.style.zIndex-1; iframe.style.display="block";}
this.visible.push(id);}
this.showItem=function(id,cnt){ if(typeof cnt !="undefined"){ if(cnt !=this.itemShowCnt){return;}
}
this.itemShowCnt++; if(this.visible.length){ var el=new Element(id+"-section"); var parents=el.getParentSections(); for(var i=this.visible.length-1;i>=0;i--){ if(parents.contains(this.visible[i])){ break;}else{ this.hideSection(this.visible[i]);}
}
}
}
this.hideSection=function(id,cnt){ if(typeof cnt !="undefined"){ if(cnt !=this.sectionsHideCnt[this.sections.indexOf(id)]){return;}
if(id==this.visible.getLast()){ for(var i=this.visible.length-1;i>=0;i--){ this.hideSection(this.visible[i]);}
return;}
}
var el=new Element(id); var parent=document.getElementById(el.getParent().id); if(/item\d-active/.test(parent.className)){ parent.className=parent.className.replace(/(item\d)-active/,"$1");}
document.getElementById(id).style.zIndex=this.zIndex.hidden; document.getElementById(id).style.visibility="hidden"; if(document.all){document.getElementById(id).style.display="none";}
if(this.fixIeSelectBoxBug && this.browser.ie6){ var iframe=document.getElementById(id+"-iframe"); iframe.style.display="none";}
if(this.visible.contains(id)){ if(id==this.visible.getLast()){ this.visible.pop();}else{ return;}
}else{ return;}
this.sectionsHideCnt[this.sections.indexOf(id)]++;}
function Element(id){ this.menu=self; this.id=id; this.getLevel=function(){ var s=this.id.substr(this.menu.id.length); return s.substrCount("-");}
this.getParent=function(){ var s=this.id.substr(this.menu.id.length); var a=s.split("-"); a.pop(); return new Element(this.menu.id+a.join("-"));}
this.hasParent=function(){ var s=this.id.substr(this.menu.id.length); var a=s.split("-"); return a.length>2;}
this.hasChilds=function(){ return Boolean(document.getElementById(this.id+"-section"));}
this.getParentSections=function(){ var s=this.id.substr(this.menu.id.length); s=s.substr(0,s.length-"-section".length); var a=s.split("-"); a.shift(); a.pop(); var s=this.menu.id; var parents=[]; for(var i=0;i<a.length;i++){ s+=("-"+a[i]); parents.push(s+"-section");}
return parents;}
this.level=this.getLevel();}
function clearTimers(){ for(var i=self.timers.length-1;i>=0;i--){ clearTimeout(self.timers[i]); self.timers.pop();}
}
var self=this; this.id=id; this.tree=[]; this.sections=[]; this.sectionsShowCnt=[]; this.sectionsHideCnt=[]; this.itemShowCnt=0; this.timers=[];this.visible=[];}
if(typeof Array.prototype.indexOf=="undefined"){ Array.prototype.indexOf=function(item){ for(var i=0;i<this.length;i++){ if(this[i]===item){ return i;}
}
return-1;}
}
if(typeof Array.prototype.contains=="undefined"){ Array.prototype.contains=function(s){ for(var i=0;i<this.length;i++){ if(this[i]===s){ return true;}
}
return false;}
}
if(typeof String.prototype.substrCount=="undefined"){ String.prototype.substrCount=function(s){ return this.split(s).length-1;}
}
if(typeof Array.prototype.getLast=="undefined"){ Array.prototype.getLast=function(){ return this[this.length-1];}
}

