var cssDropDown = {
	disappeardelay: 300,
	dropdownindicator: '',
	enablereveal: [true, 1],
	enableiframeshim: 1,

	dropmenuobj: null, 
	asscmenuitem: null, 
	domsupport: document.all || document.getElementById, 
	standardbody: null, 
	iframeshimadded: false, 
	revealtimers: {},

	getposOffset:function(what, offsettype) {
		var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
		var parentEl=what.offsetParent;
		while (parentEl!=null){
			totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
			parentEl=parentEl.offsetParent;
		}
		return totaloffset;
	},

	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
	},

	showmenu:function(dropmenu, e) {
		if (this.enablereveal[0]) {
			if (!dropmenu._trueheight || dropmenu._trueheight<10)
				dropmenu._trueheight=dropmenu.offsetHeight
			clearTimeout(this.revealtimers[dropmenu.id])
			dropmenu.style.height=dropmenu._curheight=0
			dropmenu.style.overflow="hidden"
			dropmenu.style.visibility="visible"
			this.revealtimers[dropmenu.id]=setInterval(function(){cssDropDown.revealmenu(dropmenu)}, 10)
		}
		else {
			dropmenu.style.visibility="visible"
		}
		this.css(this.asscmenuitem, "selected", "add")
	},

	revealmenu:function(dropmenu, dir) {
		var curH=dropmenu._curheight, maxH=dropmenu._trueheight, steps=this.enablereveal[1]
		if (curH<maxH) {
			var newH=Math.min(curH, maxH)
			dropmenu.style.height=newH+"px"
			dropmenu._curheight= newH + Math.round((maxH-newH)/steps) + 1
		}
		else {
			dropmenu.style.height="auto"
			dropmenu.style.overflow="hidden"
			clearInterval(this.revealtimers[dropmenu.id])
		}
	},

	clearbrowseredge:function(obj, whichedge) {
		var edgeoffset=0
		if (whichedge=="rightedge") {
			var windowedge=document.all && !window.opera? this.standardbody.scrollLeft+this.standardbody.clientWidth-15 : window.pageXOffset+window.innerWidth-15
			var dropmenuW=this.dropmenuobj.offsetWidth
			if (windowedge-this.dropmenuobj.x < dropmenuW)
				edgeoffset=dropmenuW-obj.offsetWidth
		}
		else {
			var topedge=document.all && !window.opera? this.standardbody.scrollTop : window.pageYOffset
			var windowedge=document.all && !window.opera? this.standardbody.scrollTop+this.standardbody.clientHeight-15 : window.pageYOffset+window.innerHeight-18
			var dropmenuH=this.dropmenuobj._trueheight
			if (windowedge-this.dropmenuobj.y < dropmenuH) {
				edgeoffset=dropmenuH+obj.offsetHeight
				if ((this.dropmenuobj.y-topedge)<dropmenuH)
					edgeoffset=this.dropmenuobj.y+obj.offsetHeight-topedge
			}
		}
		return edgeoffset
	},

	dropit:function(obj, e, dropmenuID) {
		if (this.dropmenuobj!=null)
			this.hidemenu()
		this.clearhidemenu()
		this.dropmenuobj=document.getElementById(dropmenuID)
		this.asscmenuitem=obj
		this.showmenu(this.dropmenuobj, e)
		this.dropmenuobj.x=this.getposOffset(obj, "left")
		this.dropmenuobj.y=this.getposOffset(obj, "top")
		this.dropmenuobj.style.left=this.dropmenuobj.x-this.clearbrowseredge(obj, "rightedge")+"px"
		this.dropmenuobj.style.top=this.dropmenuobj.y-this.clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+1+"px"
		this.positionshim()
	},

	positionshim:function() {
		if (this.iframeshimadded) {
			if (this.dropmenuobj.style.visibility=="visible") {
				this.shimobject.style.width=this.dropmenuobj.offsetWidth+"px"
				this.shimobject.style.height=this.dropmenuobj._trueheight+"px"
				this.shimobject.style.left=parseInt(this.dropmenuobj.style.left)+"px"
				this.shimobject.style.top=parseInt(this.dropmenuobj.style.top)+"px"
				this.shimobject.style.display="block"
			}
		}
	},

	hideshim:function() {
		if (this.iframeshimadded)
			this.shimobject.style.display='none'
	},

	isContained:function(m, e) {
		var e=window.event || e
		var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
		while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
		if (c==m)
			return true
		else
			return false
	},

	dynamichide:function(m, e) {
		if (!this.isContained(m, e)) {
			this.delayhidemenu()
		}
	},

	delayhidemenu:function() {
		this.delayhide=setTimeout("cssDropDown.hidemenu()", this.disappeardelay)
	},

	hidemenu:function() {
		this.css(this.asscmenuitem, "selected", "remove")
		this.dropmenuobj.style.visibility='hidden'
		this.dropmenuobj.style.left=this.dropmenuobj.style.top="-1000px"
		this.hideshim()
	},

	clearhidemenu:function() {
		if (this.delayhide!="undefined")
			clearTimeout(this.delayhide)
	},

	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)});
	},

	StartChrome:function(){
		if (!this.domsupport)
			return
		this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
		for (var ids=0; ids<arguments.length; ids++) {
			var menuitems=document.getElementById(arguments[ids]).getElementsByTagName("a")
			for (var i=0; i<menuitems.length; i++) {
				if (menuitems[i].getAttribute("rel")) {
					var relvalue=menuitems[i].getAttribute("rel")
					var asscdropdownmenu=document.getElementById(relvalue)
					this.addEvent(asscdropdownmenu, function(){cssDropDown.clearhidemenu()}, "mouseover")
					this.addEvent(asscdropdownmenu, function(e){cssDropDown.dynamichide(this, e)}, "mouseout")
					this.addEvent(asscdropdownmenu, function(){cssDropDown.delayhidemenu()}, "click")
					try {
						menuitems[i].innerHTML=menuitems[i].innerHTML+" "+this.dropdownindicator
					}catch(e) {}
					this.addEvent(menuitems[i], function(e) {
						if (!cssDropDown.isContained(this, e)) {
							var evtobj=window.event || e
							cssDropDown.dropit(this, evtobj, this.getAttribute("rel"))
						}
					}, "mouseover")
					this.addEvent(menuitems[i], function(e){cssDropDown.dynamichide(this, e)}, "mouseout")
					this.addEvent(menuitems[i], function(){cssDropDown.delayhidemenu()}, "click")
				}
			}
		}
		if (this.enableiframeshim && document.all && !window.XDomainRequest && !this.iframeshimadded) {
			document.write('<IFRAME id="iframeshim" src="about:blank" frameBorder="0" scrolling="no" style="left:0; top:0; position:absolute; display:none;z-index:90; background: transparent;"></IFRAME>')
			this.shimobject=document.getElementById("iframeshim")
			this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
			this.iframeshimadded=true
		}
	}
}