if (typeof checkdom=="undefined")
	var checkdom=false

var menudropdown={
iframetofront: true,

//Arrow Settings
arrowpointers:{	downarrow: ["img/arrow-down.gif", 12,5], 	rightarrow: ["img/arrow-right.gif", 12,12],	showarrow: {mainlvl: true, sublvl: true} 
},

//Milliseconds Timer for OnMouseOut Delay
hideinterval: 1000, effects: {enableswipe: false, enablefade: false, duration: 400},httpsiframesrc: "blank.htm", 



idsmain: [], itemlinksmain: {},allull: {},lastmouseoutul: {},mainitems: -1,subindex: -1,hidetimers: {},addiframe: false,
noFF: !/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent),


gwindowsize:function(){
	this.docwidth=window.innerWidth? window.innerWidth-10 : this.standardbody.clientWidth-10
	this.docheight=window.innerHeight? window.innerHeight-15 : this.standardbody.clientHeight-18
},
goffsetof:function(el){
	el._offsets={left:this.goffset(el, "offsetLeft"), top:this.goffset(el, "offsetTop")}
},



gmaindim:function(){
	for (var mainNode=0; mainNode<this.idsmain.length; mainNode++){
		var topmenuid=this.idsmain[mainNode]
		for (var i=0; i<this.itemlinksmain[topmenuid].length; i++){
			var header=this.itemlinksmain[topmenuid][i]
			var submenu=document.getElementById(header.getAttribute('rel'))
			header._dimensions={w:header.offsetWidth, h:header.offsetHeight, submenuw:submenu.offsetWidth, submenuh:submenu.offsetHeight}
		}
	}
},

goffset:function(something, offtype){
	return (something.offsetParent)? something[offtype]+this.goffset(something.offsetParent, offtype) : something[offtype]
},

isFramed:function(mainNode, event){
	var event=window.event || event
	var evensource=event.relatedTarget || ((event.type=="mouseover")? event.fromElement : event.toElement)
	while (evensource && evensource!=mainNode)try {evensource=evensource.parentNode} catch(event){evensource=mainNode}
	if (evensource==mainNode)
		return true
	else
		return false
},



css:function(el, targetclass, action){
	var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
	if (action=="check")
		return needle.test(el.className)
	else if (action=="remove")
		el.className=el.className.replace(needle, "")
	else if (action=="add" && !needle.test(el.className))
		el.className+=" "+targetclass
},

addiframes:function(target){
	var shim=(!window.opera)? document.createElement("iframe") : document.createElement("div")
	shim.className="ddiframeshim"
	shim.setAttribute("src", location.protocol=="https:"? this.httpsiframesrc : "about:blank")
	shim.setAttribute("frameborder", "0")
	target.appendChild(shim)
	try{
		shim.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
	}
	catch(event){}
	return shim
},

posiframe:function(header, submenu, dir, scrollX, scrollY){
	if (header._istoplevel){
		var scrollY=window.pageYOffset? window.pageYOffset : this.standardbody.scrollTop
		var topgap=header._offsets.top-scrollY
		var bottomgap=scrollY+this.docheight-header._offsets.top-header._dimensions.h
		if (topgap>0){
			this.shimmy.topshim.style.left=scrollX+"px"
			this.shimmy.topshim.style.top=scrollY+"px"
			this.shimmy.topshim.style.width="99%"
			this.shimmy.topshim.style.height=topgap+"px" 
		}
		if (bottomgap>0){
			this.shimmy.bottomshim.style.left=scrollX+"px"
			this.shimmy.bottomshim.style.top=header._offsets.top + header._dimensions.h +"px"
			this.shimmy.bottomshim.style.width="99%"
			this.shimmy.bottomshim.style.height=bottomgap+"px" 
		}
	}
},

addarrow:function(target, imgclass, imginfo, BeforeorAfter){
	var pointer=document.createElement("img")
	pointer.src=imginfo[0]
	pointer.style.width=imginfo[1]+"px"
	pointer.style.height=imginfo[2]+"px"
	if(imgclass=="rightarrowpointer"){
		pointer.style.left=target.offsetWidth-imginfo[2]-2+"px"
	}
	pointer.className=imgclass
	var target_firstEl=target.childNodes[target.firstChild.nodeType!=1? 1 : 0] 
	if (target_firstEl && target_firstEl.tagName=="SPAN"){
		target=target_firstEl
	}
	if (BeforeorAfter=="before")
		target.insertBefore(pointer, target.firstChild)
	else
		target.appendChild(pointer)
},

hideiframe:function(){
	this.shimmy.topshim.style.width=this.shimmy.bottomshim.style.width=0
	this.shimmy.topshim.style.height=this.shimmy.bottomshim.style.height=0
},


makemenu:function(mainmenuid, header, submenu, submenupos, istoplevel, dir){
	header._master=mainmenuid
	header._pos=submenupos 
	header._istoplevel=istoplevel
	if (istoplevel){
		this.addEvent(header, function(event){
		menudropdown.hidemenu(menudropdown.allull[this._master][parseInt(this._pos)])
		}, "click")
	}
	this.allull[mainmenuid][submenupos]=submenu
	header._dimensions={w:header.offsetWidth, h:header.offsetHeight, submenuw:submenu.offsetWidth, submenuh:submenu.offsetHeight}
	this.goffsetof(header)
	submenu.style.left=0
	submenu.style.top=0
	submenu.style.visibility="hidden"
	this.addEvent(header, function(event){ 
		if (!menudropdown.isFramed(this, event)){
			var submenu=menudropdown.allull[this._master][parseInt(this._pos)]
			if (this._istoplevel){
				menudropdown.css(this, "selected", "add")
			clearTimeout(menudropdown.hidetimers[this._master][this._pos])
			}
			menudropdown.goffsetof(header)
			var scrollX=window.pageXOffset? window.pageXOffset : menudropdown.standardbody.scrollLeft
			var scrollY=window.pageYOffset? window.pageYOffset : menudropdown.standardbody.scrollTop
			var submenurightedge=this._offsets.left + this._dimensions.submenuw + (this._istoplevel && dir=="topbar"? 0 : this._dimensions.w)
			var submenubottomedge=this._offsets.top + this._dimensions.submenuh
			
			var menuleft=(this._istoplevel? this._offsets.left + (dir=="sidebar"? this._dimensions.w : 0) : this._dimensions.w)
			if (submenurightedge-scrollX>menudropdown.docwidth){
				menuleft+= -this._dimensions.submenuw + (this._istoplevel && dir=="topbar" ? this._dimensions.w : -this._dimensions.w)
			}
			submenu.style.left=menuleft+"px"
			
			var menutop=(this._istoplevel? this._offsets.top + (dir=="sidebar"? 0 : this._dimensions.h) : this.offsetTop)
			if (submenubottomedge-scrollY>menudropdown.docheight){ 
				if (this._dimensions.submenuh<this._offsets.top+(dir=="sidebar"? this._dimensions.h : 0)-scrollY){ 
					menutop+= - this._dimensions.submenuh + (this._istoplevel && dir=="topbar"? -this._dimensions.h : this._dimensions.h)
				}
				else{ 
					menutop+= -(this._offsets.top-scrollY) + (this._istoplevel && dir=="topbar"? -this._dimensions.h : 0)
				}
			}
			submenu.style.top=menutop+"px"
			if (menudropdown.iframetofront && (menudropdown.effects.enableswipe==false || menudropdown.noFF)){ 
				menudropdown.posiframe(header, submenu, dir, scrollX, scrollY)
			}
			else{
				submenu.FFscrollInfo={x:scrollX, y:scrollY}
			}
			menudropdown.showmenu(header, submenu, dir)
		}
	}, "mouseover")
	this.addEvent(header, function(event){ 
		var submenu=menudropdown.allull[this._master][parseInt(this._pos)]

		if (this._istoplevel){

if (!menudropdown.isFramed(this, event) && !menudropdown.isFramed(submenu, event)) 

			menudropdown.hidemenu(submenu)
		}
		else if (!this._istoplevel && !menudropdown.isFramed(this, event)){
							
		menudropdown.hidemenu(submenu)

		}
		
	}, "mouseout")
},

sdensity:function(el, value){
	el.style.opacity=value
	if (typeof el.style.opacity!="string"){ 
		el.style.MozOpacity=value
		if (el.filters){
			el.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity="+ value*100 +")"
		}
	}
},

showmenu:function(header, submenu, dir){
	if (this.effects.enableswipe || this.effects.enablefade){
		if (this.effects.enableswipe){
			var endpoint=(header._istoplevel && dir=="topbar")? header._dimensions.submenuh : header._dimensions.submenuw
			submenu.style.width=submenu.style.height=0
			submenu.style.overflow="hidden"
		}
		if (this.effects.enablefade){
			this.sdensity(submenu, 0) 
		}
		submenu._curanimatedegree=0
		submenu.style.visibility="visible"
		clearInterval(submenu._animatetimer)
		submenu._starttime=new Date().getTime() 
		submenu._animatetimer=setInterval(function(){menudropdown.enablemenu(header, submenu, endpoint, dir)}, 10)
	}
	else{
		submenu.style.visibility="visible"
	}
},

enablemenu:function(header, submenu, endpoint, dir){
	var elapsed=new Date().getTime()-submenu._starttime 
	if (elapsed<this.effects.duration){
		if (this.effects.enableswipe){
			if (submenu._curanimatedegree==0){
				submenu.style[header._istoplevel && dir=="topbar"? "width" : "height"]="auto"
			}
			submenu.style[header._istoplevel && dir=="topbar"? "height" : "width"]=(submenu._curanimatedegree*endpoint)+"px"
		}
		if (this.effects.enablefade){
			this.sdensity(submenu, submenu._curanimatedegree)
		}
	}
	else{
		clearInterval(submenu._animatetimer)
		if (this.effects.enableswipe){
			submenu.style.width="auto"
			submenu.style.height="auto"
			submenu.style.overflow="visible"
		}
		if (this.effects.enablefade){
			this.sdensity(submenu, 1)
			submenu.style.filter=""
		}
		if (this.iframetofront && submenu.FFscrollInfo)
			this.posiframe(header, submenu, dir, submenu.FFscrollInfo.x, submenu.FFscrollInfo.y)
	}
	submenu._curanimatedegree=(1-Math.cos((elapsed/this.effects.duration)*Math.PI)) / 2
},

hidemenu:function(submenu){
	if (typeof submenu._pos!="undefined"){ 
		this.css(this.itemlinksmain[submenu._master][parseInt(submenu._pos)], "selected", "remove")
		if (this.iframetofront)
			this.hideiframe()
	}
	clearInterval(submenu._animatetimer)
	submenu.style.left=0
	submenu.style.top="-1000px"
	submenu.style.visibility="hidden"
},


addEvent:function(target, functionref, tasktype) {
	if (target.addEventListener)
		target.addEventListener(tasktype, functionref, false);
	else if (target.attachEvent)
		target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
},

isreadydom:function(functionref){
	if (checkdom){
		functionref()
		return
	}

	if (document.addEventListener) {
	
		document.addEventListener("DOMContentLoaded", function(){
			document.removeEventListener("DOMContentLoaded", arguments.callee, false )
			functionref();
			checkdom=true
		}, false )
	}
	else if (document.attachEvent){

		if ( document.documentElement.doScroll && window == window.top) (function(){
			if (checkdom){
				functionref()
				return
			}
			try{

				document.documentElement.doScroll("left")
			}catch(error){
				setTimeout( arguments.callee, 0)
				return;
			}

			functionref();
			checkdom=true
		})();
	}
	if (document.attachEvent && parent.length>0) 
		this.addEvent(window, function(){functionref()}, "load");
},


initialize:function(mainmenuid, dir){
	this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
	this.mainitems=-1
	this.subindex=-1
	this.idsmain.push(mainmenuid)
	this.itemlinksmain[mainmenuid]=[]
	this.allull[mainmenuid]=[] 
	this.hidetimers[mainmenuid]=[] 
	if (this.iframetofront && !this.addiframe){
		this.shimmy={}
		this.shimmy.topshim=this.addiframes(document.body) 
		this.shimmy.bottomshim=this.addiframes(document.body) 
		this.addiframe=true
	}
	var menubar=document.getElementById(mainmenuid)
	var alllinks=menubar.getElementsByTagName("a")
	this.gwindowsize()
	for (var i=0; i<alllinks.length; i++){
		if (alllinks[i].getAttribute('rel')){
			this.mainitems++
			this.subindex++
			var menuitem=alllinks[i]
			this.itemlinksmain[mainmenuid][this.mainitems]=menuitem
			var dropul=document.getElementById(menuitem.getAttribute('rel'))
			document.body.appendChild(dropul) 
			dropul.style.zIndex=2000
			dropul._master=mainmenuid  
			dropul._pos=this.mainitems
			this.addEvent(dropul, function(){menudropdown.hidemenu(this)}, "click")
			var arrowclass=(dir=="sidebar")? "rightarrowpointer" : "downarrowpointer"
			var arrowpointer=(dir=="sidebar")? this.arrowpointers.rightarrow : this.arrowpointers.downarrow
			if (this.arrowpointers.showarrow.mainlvl)
				this.addarrow(menuitem, arrowclass, arrowpointer, (dir=="sidebar")? "before" : "after")
			this.makemenu(mainmenuid, menuitem, dropul, this.subindex, true, dir) 
			dropul.onmouseover=function(){
				clearTimeout(menudropdown.hidetimers[this._master][this._pos])
			}
			this.addEvent(dropul, function(event){
				if (!menudropdown.isFramed(this, event) && !menudropdown.isFramed(menudropdown.itemlinksmain[this._master][parseInt(this._pos)], event)){
					var dropul=this
					if (menudropdown.iframetofront)
						menudropdown.hideiframe()
					menudropdown.hidetimers[this._master][this._pos]=setTimeout(function(){
						menudropdown.hidemenu(dropul)
					}, menudropdown.hideinterval)
				}
			}, "mouseout")
			var allull=dropul.getElementsByTagName("ul")
			for (var evensource=0; evensource<allull.length; evensource++){
				this.subindex++
				var parentli=allull[evensource].parentNode
				if (this.arrowpointers.showarrow.sublvl)
					this.addarrow(parentli.getElementsByTagName("a")[0], "rightarrowpointer", this.arrowpointers.rightarrow, "before")
				this.makemenu(mainmenuid, parentli, allull[evensource], this.subindex, false, dir) 
			}
		}
	} 
	this.addEvent(window, function(){menudropdown.gwindowsize(); menudropdown.gmaindim()}, "resize")
},

start:function(mainmenuid, dir){
	this.isreadydom(function(){menudropdown.initialize(mainmenuid, dir)})
}

}
