function DropDownMenuX(id){
this.type="horizontal"
this.delay={
"show": 0,
"hide": 400}
this.position={
"level1":{"top": 0,"left": 0},
"levelX":{"top": 0,"left": 0}}
this.fixIeSelectBoxBug=true
this.zIndex={
"visible": 500,
"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]}}
