// Animal Care Navigation Menu

var dropdownMenu = {
	mouseoutDelay: 100, //millisecond delay before dropdown menu disappears onmouseout
	revealMenu: [true, 7], //set to false for a standard dropdown appearance; number of steps in dropdown animation (max is 20)
	useIframeShim: 1, //uses the iframe shim method on older IE versions
	dropMenuObj: null,
	refMenuItem: null,
	domVersion: document.all || document.getElementById, //determines browser DOM object support (IE or W3C compatible)
	shimAdded: false,
	standardBody: null,
	revealTimer:{},
	
	getOffsetPosition: function(menu, offsettype){
		var totalOffset = (offsettype=="left")? menu.offsetLeft : menu.offsetTop;
		var parentPosition = menu.offsetParent;
		while (parentPosition != null){
			totalOffset = (offsettype=="left")? totalOffset+parentPosition.offsetLeft : totalOffset+parentPosition.offsetTop;
			parentPosition = parentPosition.offsetParent;
		}
		return totalOffset;
	},
	
	cssStyle: function(refItem, selectType, action){
		var searchTerm = new RegExp("(^|\\s+)"+selectType+"($|\\s+)", "ig")
		if(action == "check")
			return searchTerm.test(refItem.className)
		else if(action == "remove")
			refItem.className = refItem.className.replace(searchTerm, "")
		else if(action == "add" && !searchTerm.test(refItem.className))
			refItem.className += " "+selectType
	},
	
	showMenu: function(relMenu){
		if(this.revealMenu[0]){
			if(!relMenu._trueheight || relMenu._trueheigth < 10)
				relMenu._trueheight = relMenu.offsetHeight
			clearTimeout(this.revealTimer[relMenu.id])
			relMenu.style.height = relMenu._curheight=0
			relMenu.style.overflow = "hidden"
			relMenu.style.visibility = "visible"
			this.revealTimer[relMenu.id] = setInterval(function(){dropdownMenu.dropMenuReveal(relMenu)}, 10)
		} else {
			relMenu.style.visibility = "visible"
		}
		this.cssStyle(this.refMenuItem, "selected", "add")
	},
	
	dropMenuReveal: function(relMenu){
		var currentHeight = relMenu._curheight, maxHeight = relMenu._trueheight, steps = this.revealMenu[1]
		if(currentHeight < maxHeight){
			var newHeight = Math.min(currentHeight, maxHeight)
			relMenu.style.height = newHeight+"px" //concatenates newHeight into a string
			relMenu._curheight = newHeight + Math.round((maxHeight - newHeight)/steps)+1
		} else {
			relMenu.style.height = "auto"
			relMenu.style.overflow = "hidden"
			clearInterval(this.revealTimer[relMenu.id])
		}
	},
	
	clearEdge: function(menu, edge){
		var edgeOffset = 0
		if(edge == "rightEdge"){
			var windowEdge = document.all && !window.opera? this.standardBody.scrollLeft+this.standardBody.clientWidth-15 : window.pageXOffset+window.innerWidth-15
			var relMenuWidth = this.dropMenuObj.offsetWidth
			if(windowEdge-this.dropMenuObj.x < relMenuWidth)
				edgeOffset = relMenuWidth - menu.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 relMenuHeight = this.dropMenuObj._trueheight
			if(windowEdge-this.dropMenuObj.y < relMenuHeight){
				edgeOffset = relMenuHeight+menu.offsetHeight
				if((this.dropMenuObj.y-topEdge)<relMenuHeight)
					edgeOffset = this.dropMenuObj.y+menu.offsetHeight-topEdge
			}
		}
		return edgeOffset
	},
	
	dropMenu: function(menu, mouseEvent, relMenuId){
		if(this.dropMenuObj != null) //hide the previous menu
			this.hideMenu()
		this.clearHideMenu()
		this.dropMenuObj = document.getElementById(relMenuId) //reference dropdown menu rel="owners"
		this.refMenuItem = menu //reference associated menu item
		this.showMenu(this.dropMenuObj, mouseEvent)
		this.dropMenuObj.x = this.getOffsetPosition(menu, "left")
		this.dropMenuObj.y = this.getOffsetPosition(menu, "top")
		this.dropMenuObj.style.left = this.dropMenuObj.x-this.clearEdge(menu, "rightEdge")+"px"
		this.dropMenuObj.style.top = this.dropMenuObj.y-this.clearEdge(menu, "bottomEdge")+menu.offsetHeight-1+"px"
		this.positionShim()
	},
	
	positionShim: function(){
		if(this.shimAdded){
			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"
			}
		}
	},
	
	isContained: function(currentDropMenu, mouseEvent){
		var e = window.event || mouseEvent
		var a = e.relatedTarget || ((e.type == "mouseover")? e.fromElement : e.toElement)
		while(a && a != currentDropMenu)try{a = a.parentNode}catch(e){a = currentDropMenu}
		if(a == currentDropMenu)
			return true
		else
			return false
	},
	
	dynamicHide: function(currentDropMenu, mouseEvent){
		if(!this.isContained(currentDropMenu, mouseEvent)){
			this.delayDropMenu()
		}
	},
	
	delayDropMenu: function(){
		this.delayhide = setTimeout("dropdownMenu.hideMenu()", this.mouseoutDelay)
	},
	
	hideMenu: function(){
		this.cssStyle(this.refMenuItem, "selected", "remove")
		this.dropMenuObj.style.visibility = 'hidden'
		this.dropMenuObj.style.left = this.dropMenuObj.style.top = "-1000px"
		this.hideShim()
	},
	
	hideShim: function(){
		if(this.shimAdded)
			this.shimobject.style.display='none'
	},
	
	clearHideMenu: function(){
		if(this.delayhide != "undefined")
			clearTimeout(this.delayhide)
	},
	
	addEvent: function(relMenu, refFunction, mouseEvent){
		if(relMenu.addEventListener)
			relMenu.addEventListener(mouseEvent, refFunction, false);
		else if(relMenu.attachEvent)
			relMenu.attachEvent('on'+mouseEvent, function(){return refFunction.call(relMenu, window.event)});
	},
	
	callDropMenu: function(){
		if(!this.domVersion)
			return
		this.standardBody = (document.compatMode == "CSS1Compat")? document.documentElement : document.body
		for(var rels=0; rels<arguments.length; rels++){
			var menuItems = document.getElementById(arguments[rels]).getElementsByTagName("a")
			for(var i=0; i<menuItems.length; i++){
				if(menuItems[i].getAttribute("rel")){
					var relValue = menuItems[i].getAttribute("rel")
					var relReference = document.getElementById(relValue)
					this.addEvent(relReference, function(){dropdownMenu.clearHideMenu()}, "mouseover")
					this.addEvent(relReference, function(e){dropdownMenu.dynamicHide(this, e)}, "mouseout")
					this.addEvent(relReference, function(){dropdownMenu.delayDropMenu()}, "click")
					this.addEvent(menuItems[i], function(e){ //show menu when main menu items are moused over
							if(!dropdownMenu.isContained(this, e)){
								var eventObj = window.event || e
								dropdownMenu.dropMenu(this, eventObj, this.getAttribute("rel"))
							}
						}, "mouseover")
					this.addEvent(menuItems[i], function(e){dropdownMenu.dynamicHide(this, e)}, "mouseout") //hide menu when main menu items are moused out
					this.addEvent(menuItems[i], function(){dropdownMenu.delayDropMenu()}, "click") //hide menu when main menu items are clicked on
				}
			}
		}
		if(this.useIframeShim && document.all && !window.XDomainRequest && !this.shimAdded){
			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.shimAdded = true
		}
	}
}
