/*
For timeout functions to operate correctly, there must be a JS variable on the page
named oDropmenuMgr. To ensure that, it's easiest to declare it globally here
*/
var oDropmenuMgr = new ckDropmenuManager()

function ckDropmenuManager() {
	this.type = "ckDropmenuManager";
	this.version = "03.30.2009 [ckDropmenuManager; ckDropmenuManager.js]";
	this.aMenus = new Array();
	this.aActiveMenuDIVs = new Array();
	
	this.activeMenuID = "";
	this.oActiveMenuEl = null; 
	this.oActiveMenuItem = null;
	
	this.bWritten = false;
	this.bTriedToWriteMenus = false;
	this.bOperaBrowser = false;
	
	this.timeoutStart = "";
	this.timeoutDHFlag = false;
	this.timeoutHideMenuTimer = null;
	
	//default class names for menus added to the manager
	this.def_className = "";
	this.def_classNameBackground = "";
	this.def_classNameHighlight = "";
	this.def_classNameItemDefault = "";
	this.def_classNameItemOver = "";
	this.def_classNameItemSelected = "";
	this.def_classNameActivator = "";
	this.def_classNameActivatorOver = "";
	this.def_classNameActivatorSelected = "";

	//
	this.def_menuItemHeight = 19;
	this.oBlockerFrame = null;
	
	this.bDropUnder = true;
	this.bDropRight = false;
}

ckDropmenuManager.prototype.setDropPosition = function(sPos) {
	this.bDropUnder = false;
	this.bDropRight = false;
	
	switch (sPos) {
		case "right" : this.bDropRight = true;
			break;
		default : 
			//By default, dropdown will appear left aligned and below the activator element
			this.bDropUnder = true;
	}
}

ckDropmenuManager.prototype.addMenu = function(oMenu) {
	if (oMenu.className=="" && this.def_className != "") {
		oMenu.setClassNames(this.def_className, this.def_classNameBackground,this.def_classNameHighlight,this.def_classNameItemDefault,this.def_classNameItemOver,this.def_classNameItemSelected,this.def_classNameActivator,this.def_classNameActivatorOver,this.def_classNameActivatorSelected);
	}
	if (oMenu.menuItemHeight==0) oMenu.menuItemHeight=this.def_menuItemHeight;
	
	this.aMenus[oMenu.uniqueID] = oMenu;
	return this.aMenus[oMenu.uniqueID];
}
ckDropmenuManager.prototype.getMenuByActivatorID = function(sActivatorID) {
	var oMenu;
	if (sActivatorID != "") {
		for (var key in this.aMenus) {
			if (oMenu = this.aMenus[key])
				if (oMenu.getActivatorID()==sActivatorID) return oMenu;
		}
	}
	return null;
}
ckDropmenuManager.prototype.isActiveMenu = function(uniqueID) {
	if ((this.oActiveMenuEl) && (this.oActiveMenuEl.ckDropdownMenu)) return(this.oActiveMenuEl.ckDropdownMenu.uniqueID==uniqueID);
	else return false;
}

ckDropmenuManager.prototype.setDefaultClassNames = function(cn,cnBack,cnHigh,itemDefault,itemOver,itemSelected,activator,activatorOver,activatorSelected) {
	//If a menu is added to the manager and it does not have class names defined, but default
	// class names are defined here, that menu will automatically be assigned these default names;
	this.def_className = cn;
	this.def_classNameBackground = cnBack;
	this.def_classNameHighlight = cnHigh;
	this.def_classNameItemDefault = itemDefault;
	this.def_classNameItemOver = itemOver;
	this.def_classNameItemSelected = itemSelected;
	this.def_classNameActivator = activator;
	this.def_classNameActivatorOver = activatorOver;
	this.def_classNameActivatorSelected = activatorSelected;
}
ckDropmenuManager.prototype.setDefaultMenuItemHeight = function(h) {
	this.def_menuItemHeight = h;
}

ckDropmenuManager.prototype.find = function(item) {
	if( this.bOperaBrowser ) return(document.getElementById(item));
	if (document.all) return(document.all[item]);
	if (document.getElementById) return(document.getElementById(item));
	return(false);
}

ckDropmenuManager.prototype.setSelected = function(uniqueID) {
	//if two arguments, then search is by menu AND item.  If one, then only by item (passing in pageID) which is much easier to manage
	var oMenu;
	if (arguments.length==1) {
		for (var key in this.aMenus) {
			oMenu = this.aMenus[key];
			oMenu.setSelected(uniqueID);
		}
	} else {
		
		if (oMenu = this.aMenus[uniqueID]) oMenu.setSelected(arguments[1]);
	}
}

ckDropmenuManager.prototype.selectFirstItem = function(menuUniqueID) {
	var oMenu;
	if (oMenu = this.aMenus[menuUniqueID]) {
	
		this.oActiveMenuItem = oMenu.aItems[0];
		this.onMenuItemAction();
	}
}

/*-----------------------------------------------------------------
writeMenus
-----------------------------------------------------------------*/
ckDropmenuManager.prototype.writeMenus = function() {

	if (this.bTriedToWriteMenus) return;
	var agt = navigator.userAgent.toLowerCase();
	this.bOperaBrowser = agt.indexOf("opera") != -1;

	var oMenuContainer = null;
	if (document.all || document.hasChildNodes || this.bOperaBrowser) {
		document.writeln('<span id="ckDropmenuContainer"></span>');
		oMenuContainer = this.find("ckDropmenuContainer");
	}

	this.timeoutHideMenuTimer = null;
	if (!oMenuContainer) return;	

	this.bTriedToWriteMenus = true; 
	oMenuContainer.isContainer = true;
	oMenuContainer.aMenus = new Array();
	
	var oMenu;
	for (var uniqueID in this.aMenus) {
		oMenu = this.aMenus[uniqueID];
		if (oMenu) {
			oMenuContainer.aMenus[oMenuContainer.aMenus.length] = oMenu;
			if (oMenu.bActivatorSelected) oMenu.oActivatorEl.className=oMenu.classNameActivatorSelected;
		}
	}
	
	var oEl;
	var aActivators = document.getElementsByName("ckDropmenu.activator");
	for (var index=0; index < aActivators.length;index++) {
		oEl = aActivators[index];
		addEvent(oEl,"mouseout", oDropmenuMgr.startTimeout);
	}
		
	var countMenus = 0;
	var countItems = 0;
	var top = 0;
	var content = '';
	var theStat = "";
	var tsc = 0;
	var oMenu;
	
	for (var i=0; i < oMenuContainer.aMenus.length; i++, countMenus++) {
		if ((oMenu = oMenuContainer.aMenus[i]) && (typeof(oMenu)=="object") ){

			if (oMenu.bgImageUp || !oMenu.menuBgOpaque) {
				oMenu.menuBorder = 0;
				oMenu.menuItemBorder = 0;
			}
	
			content += ''+
			'<div id="menuLayer'+ countMenus +'" style="position:absolute;z-index:1;left:10px;top:'+ (i * 100) +'px;visibility:hidden;">\n'+ 
			'<iframe id="menuFrame' + countMenus + '" style="position:absolute;left:1px;top:1px" src="about:blank" frameborder="0" scrolling="no"></iframe>\n'+
			'  <div id="menuLite'+ countMenus +'" style="position:absolute;z-index:1;left:'+ oMenu.menuBorder +'px;top:'+ oMenu.menuBorder +'px;visibility:hide;" onmouseout="oDropmenuMgr.mouseoutMenu();">\n'+
			'	 <div id="menuFg'+ countMenus +'" style="position:absolute;left:'+ oMenu.menuBorder +'px;top:'+ oMenu.menuBorder +'px;visibility:hide;">\n'+
			'';
			
			var x=i;
			for (var i=0; i<oMenu.aItems.length; i++) {
				var oItem = oMenu.aItems[i];
				var item = oItem.label;
				var childMenu = false;
	
				var defaultHeight = oMenu.fontSize+2*oMenu.menuItemPadding;
				if (oItem.type=="ckDropmenu") {
					item = oItem.label;
					childMenu = true;
				}
				oMenu.menuItemHeight = oMenu.menuItemHeight || defaultHeight;
				var itemProps = '';
				
				if (document.all || this.bOperaBrowser) {
					itemProps += '" onmouseover="oDropmenuMgr.onMenuItemOver(null,this);" onclick="oDropmenuMgr.onMenuItemAction(null,this);';
				}
				var oEl;
				
				var itemLeft = 0;
				var itemTop = i*oMenu.menuItemHeight;
				if( !oMenu.vertical ) {
					itemLeft = i*oMenu.menuWidth;
					itemTop = 0;
				}
				
				var dTag = '<div id="menuItem'+ countItems +'" style="position:absolute;left:' + itemLeft + 'px;top:'+ itemTop +'px;'+ itemProps +'">';
				var dClose = '</div>'
				if (oMenu.bgImageUp) dTag = '<div id="menuItem'+ countItems +'" style="background:url('+oMenu.bgImageUp+');position:absolute;left:' + itemLeft + 'px;top:'+ itemTop +'px;'+ itemProps +'">';
	
				var left = 0, top = 0, right = 0, bottom = 0;
				left = 1 + oMenu.menuItemPadding + oMenu.menuItemIndent;
				right = left + oMenu.menuWidth - 2*oMenu.menuItemPadding - oMenu.menuItemIndent;
				if( oMenu.menuItemVAlign == 'top' ) top = oMenu.menuItemPadding;
				if( oMenu.menuItemVAlign == 'bottom' ) top = oMenu.menuItemHeight-oMenu.fontSize-1-oMenu.menuItemPadding;
				if( oMenu.menuItemVAlign == 'middle' ) top = ((oMenu.menuItemHeight/2)-(oMenu.fontSize/2)-1);
				bottom = oMenu.menuItemHeight - 2*oMenu.menuItemPadding;
				var textProps = 'position:absolute;left:' + left + 'px;top:' + top + 'px;';
				
				
				if(document.all && !this.bOperaBrowser) {
					item = '<div align="' + oMenu.menuItemHAlign + '">' + item + '</div>';
				} else {
					var hitem = null;
					if( oMenu.menuItemHAlign != 'left' ) {
						if(this.bOperaBrowser) {
							var operaWidth = oMenu.menuItemHAlign == 'center' ? -(oMenu.menuWidth-2*oMenu.menuItemPadding) : (oMenu.menuWidth-6*oMenu.menuItemPadding);
							hitem = '<div id="menuItemHilite' + countItems + 'Shim" style="position:absolute;top:1px;left:' + oMenu.menuItemPadding + 'px;width:' + operaWidth + 'px;text-align:' 
								+ oMenu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
							item = '<div id="menuItemText' + countItems + 'Shim" style="position:absolute;top:1px;left:' + oMenu.menuItemPadding + 'px;width:' + operaWidth + 'px;text-align:' 
								+ oMenu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
						} else {
							hitem = '<div id="menuItemHilite' + countItems + 'Shim" style="position:absolute;top:1px;left:1px;right:-' + (left+oMenu.menuWidth-3*oMenu.menuItemPadding) + 'px;text-align:' 
								+ oMenu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
							item = '<div id="menuItemText' + countItems + 'Shim" style="position:absolute;top:1px;left:1px;right:-' + (left+oMenu.menuWidth-3*oMenu.menuItemPadding) + 'px;text-align:' 
								+ oMenu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
						}
					} else hitem = null;
				}
				if(document.all && !this.bOperaBrowser) item = '<div id="menuItemShim' + countItems + '" style="position:absolute;left:0px;top:0px;">' + item + '</div>';
				var dText	= '<div id="menuItemText'+ countItems +'" style="' + textProps + '">'+ item +'&nbsp</div>\n'
							+ '<div id="menuItemHilite'+ countItems +'" style="' + textProps + 'visibility:hidden;">' 
							+ (hitem||item) +'&nbsp</div>';
				if (childMenu) content += ( dTag + dText + '<div id="childMenu'+ countItems +'" style="position:absolute;left:0px;top:3px;"><img src="'+ oMenu.childMenuIcon +'"></div>\n' + dClose);
				else content += ( dTag + dText + dClose);
				
				countItems++;  
			}
			
			content += '	  <div id="focusItem'+ countMenus +'" style="position:absolute;left:0px;top:0px;visibility:hide;" onclick="oDropmenuMgr.onMenuItemAction(null,this);">&nbsp;</div>\n';
			content += '   </div>\n  </div>\n</div>\n';
			
			i=x;
		}
	}
//alert(content);
	if ((!document.all) && (oMenuContainer.hasChildNodes) && !this.bOperaBrowser) {
		oMenuContainer.innerHTML=content;
	} else {
		oMenuContainer.document.open("text/html");
		oMenuContainer.document.writeln(content);
		oMenuContainer.document.close();	
	}
	if (!this.find("menuLayer0")) return;
	var menuCount = 0;
	for (var x=0; x < oMenuContainer.aMenus.length; x++) {
		var menuLayer = this.find("menuLayer" + x);
		oMenuContainer.aMenus[x].menuLayer = "menuLayer" + x;
		menuLayer.ckDropdownMenu = oMenuContainer.aMenus[x];
		menuLayer.ckDropdownMenu.oMenuContainer = "menuLayer" + x;
		menuLayer.style.zIndex = 500;
	    var s = menuLayer.style;
		s.pixeltop = -300;
		s.pixelleft = -300;
		s.top = '-300px';
		s.left = '-300px';

		var oMenu = oMenuContainer.aMenus[x];
		
		//determine auto-widths
		if (oMenu.bAutoWidth) {
			var saveMenuCount = menuCount;
			for (var i=0; i<oMenu.aItems.length; i++) {
				var oEl = this.find("menuItemText" + menuCount);
				if (oEl) {
					if(document.all && !this.bOperaBrowser) oEl = oEl.firstChild.firstChild; //IE has slightly different format
					oMenu.menuWidth = (oEl.offsetWidth > oMenu.menuWidth ? oEl.offsetWidth : oMenu.menuWidth);
				}
				menuCount++;
			}
			oMenu.menuWidth += (oMenu.menuItemPadding * 2);
			menuCount = saveMenuCount;
		}
		
		oMenu.menuItemWidth = oMenu.menuWidth || oMenu.menuIEWidth || 120;
		menuLayer.className = oMenu.className;
		var top = 0;
		var left = 0;
		oMenu.menuItemLayers = new Array();
				
		for (var i=0; i<oMenuContainer.aMenus[x].aItems.length; i++) {
			var oEl = this.find("menuItem" + menuCount);
			oEl.ckDropdownMenu = oMenu;
			oEl.ckDropdownMenu.menuItemLayers[oEl.ckDropdownMenu.menuItemLayers.length] = oEl;
			if (oEl.addEventListener || this.bOperaBrowser) {
				oEl.style.width = oMenu.menuItemWidth + 'px';
				oEl.style.height = oMenu.menuItemHeight + 'px';
				oEl.style.pixelWidth = oMenu.menuItemWidth;
				oEl.style.pixelHeight = oMenu.menuItemHeight;
				oEl.style.top = top + 'px';
				oEl.style.left = left + 'px';
				if(oEl.addEventListener) {
					oEl.addEventListener("mouseover", oDropmenuMgr.onMenuItemOver, false);
					oEl.addEventListener("click", oDropmenuMgr.onMenuItemAction, false);
					oEl.addEventListener("mouseout", oDropmenuMgr.mouseoutMenu, false);
				}
				if( oMenu.menuItemHAlign != 'left' ) {
					oEl.hiliteShim = this.find("menuItemHilite" + menuCount + "Shim");
					oEl.hiliteShim.style.visibility = "inherit";
					oEl.textShim = this.find("menuItemText" + menuCount + "Shim");
					oEl.hiliteShim.style.pixelWidth = oMenu.menuItemWidth - 2*oMenu.menuItemPadding - oMenu.menuItemIndent;
					oEl.hiliteShim.style.width = oEl.hiliteShim.style.pixelWidth;
					oEl.textShim.style.pixelWidth = oMenu.menuItemWidth - 2*oMenu.menuItemPadding - oMenu.menuItemIndent;
					oEl.textShim.style.width = oEl.textShim.style.pixelWidth;	
				}
			} else {
				oEl.style.pixelWidth = oMenu.menuItemWidth;
				oEl.style.pixelHeight = oMenu.menuItemHeight;
				oEl.style.pixelTop = top;
				oEl.style.pixelLeft = left;
				if( oMenu.menuItemHAlign != 'left' ) {
					var shim = this.find("menuItemShim" + menuCount);
					shim[0].style.pixelWidth = oMenu.menuItemWidth - 2*oMenu.menuItemPadding - oMenu.menuItemIndent;
					shim[1].style.pixelWidth = oMenu.menuItemWidth - 2*oMenu.menuItemPadding - oMenu.menuItemIndent;
					shim[0].style.width = shim[0].style.pixelWidth + 'px';
					shim[1].style.width = shim[1].style.pixelWidth + 'px';
				}
			}
			if( oMenu.vertical ) top = top + oMenu.menuItemHeight+oMenu.menuItemBorder+oMenu.menuItemSpacing;
			else left = left + oMenu.menuItemWidth+oMenu.menuItemBorder+oMenu.menuItemSpacing;

			var oItem = oMenu.aItems[i];
			oEl.className = (oMenu.selectedItemIndex == i ? oMenu.classNameItemSelected : (oItem.classNameBackground != "" ? oItem.classNameBackground : oMenu.classNameItemDefault));
			oEl.classNameItemOver = (oItem.classNameItemOver != "" ? oItem.classNameItemOver : oMenu.classNameItemOver);
			oEl.saveClassName = oEl.className; 
			oEl.style.visibility = "inherit";
			
			//oEl.ckaction = oMenuContainer.aMenus[x].aActions[i];
			oEl.ckaction = oMenuContainer.aMenus[x].aItems[i].action;

			oEl.hilite = this.find("menuItemHilite" + menuCount);
			oEl.focusItem = this.find("focusItem" + x);
			oEl.focusItem.style.pixelTop = -30;
			oEl.focusItem.style.top = '-30px';
			var childItem = this.find("childMenu" + menuCount);
			if (childItem) {
				oEl.childMenu = oMenuContainer.aMenus[x].aItems[i].menuLayer;
				childItem.style.pixelLeft = oMenu.menuItemWidth -11;
				childItem.style.left = childItem.style.pixelLeft + 'px';
				childItem.style.pixelTop = (oMenu.menuItemHeight /2) -4;
				childItem.style.top = childItem.style.pixelTop + 'px';
				oEl.ckDropdownMenu.childMenus[oEl.ckDropdownMenu.childMenus.length] = oEl.childMenu;
			}
			oEl.style.cursor = "pointer";
			menuCount++;
		}
		if( oMenu.vertical ) {
			oMenu.menuHeight = top-1-oMenu.menuItemSpacing;
			oMenu.menuWidth = oMenu.menuItemWidth;
		} else {
			oMenu.menuHeight = oMenu.menuItemHeight;
			oMenu.menuWidth = left-1-oMenu.menuItemSpacing;
		}

		var lite = this.find("menuLite" + x);
		lite.className = oMenu.classNameHighlight;
		var s = lite.style;
		s.pixelHeight = oMenu.menuHeight +(oMenu.menuBorder * 2);
		s.height = s.pixelHeight + 'px';
		s.pixelWidth = oMenu.menuWidth + (oMenu.menuBorder * 2);
		s.width = s.pixelWidth + 'px';

		var body = this.find("menuFg" + x);
		body.className = oMenu.classNameBackground;
		s = body.style;
		s.pixelHeight = oMenu.menuHeight + oMenu.menuBorder;
		s.height = s.pixelHeight + 'px';
		s.pixelWidth = oMenu.menuWidth + oMenu.menuBorder;
		s.width = s.pixelWidth + 'px';

		s = menuLayer.style;
		s.pixelWidth  = oMenu.menuWidth + (oMenu.menuBorder * 4);
		s.width = s.pixelWidth + 'px';
		s.pixelHeight  = oMenu.menuHeight+(oMenu.menuBorder*4);
		s.height = s.pixelHeight + 'px';
		
		var frameLayer = this.find("menuFrame" + x);
		if (frameLayer) {
			frameLayer.width = s.pixelWidth - 2;
			frameLayer.height= s.pixelHeight -2;
		}
		
	}
	

	if (document.addEventListener) document.addEventListener("mouseup", oDropmenuMgr.onMenuItemOver, false);
	else if (document.captureEvents) document.captureEvents(Event.MOUSEUP);
	

	//document.onmouseup = oDocumentMgr.mouseupMenu;
	document.onmouseup = this.mouseupMenu;
	this.bWritten = true;
	status = "";

}
/*-----------------------------------------------------------------
showMenu
-----------------------------------------------------------------*/
ckDropmenuManager.prototype.showMenu = function(uniqueID){ //optional params: ctrlElementID,x,y
	var args = ckDropmenuManager.prototype.showMenu.arguments;
	
	if (!this.bWritten) return;
	this.clearTimeout();
	
	var oMenu = this.aMenus[uniqueID];
	if (!oMenu) return;
	if (this.activeMenuID==uniqueID) return;
	
	this.activeMenuID=uniqueID;

	var oActivatorEl;
	var x,y; //where the dropdown will appear
	var ctrElementID = (args.length >= 4 ? args[3] : "");
	
	if (ctrElementID == "") oActivatorEl = oMenu.oActivatorEl;
	else oActivatorEl = this.find(ctrlElementID) || document.images[ctrlElementID] || document.links[ctrlElementID] || document.anchors[ctrlElementID];
	
	if (oActivatorEl) {
		if (this.bDropUnder) {
			x = this.moveXbySlicePos (0, oActivatorEl);
			y = this.moveYbySlicePos (oActivatorEl.offsetHeight, oActivatorEl) - 1;
		} else if (this.bDropRight) {
			x = this.moveXbySlicePos (245, oActivatorEl);
			y = this.moveYbySlicePos (0, oActivatorEl);
		}
		
		
		if (oMenu.classNameActivatorOver != "") {
			oActivatorEl.setAttribute("saveClassName",oActivatorEl.className);
			oActivatorEl.className=oMenu.classNameActivatorOver;
		}
	} else {
		x = (args.length >= 5 ? args[4] : 0);
		y = (args.length >= 6 ? args[5] : 0);
		
	}


	if (this.find("menuItem0")) {
		var oEl = oMenu.menuLayer || oMenu;	
		this.hideActiveMenus();

		if (typeof(oEl) == "string") oEl = this.find(oEl);
		this.oActiveMenuEl = oEl;

		if (oMenu.aItems.length > 0) {
			var s = oEl.style;
			s.visibility = "inherit";
			if (x != "relative") {
				s.pixelLeft = x || (window.pageX + document.body.scrollLeft) || 0;
				s.left = s.pixelLeft + 'px';
			}

			if (y != "relative") {
				s.pixelTop = y || (window.pageY + document.body.scrollTop) || 0;
				s.top = s.pixelTop + 'px';
			}
	
			oEl.ckDropdownMenu.xOffset = document.body.scrollLeft;
			oEl.ckDropdownMenu.yOffset = document.body.scrollTop;
		}
	}
	if (oMenu) this.aActiveMenuDIVs[this.aActiveMenuDIVs.length] = oEl;
	
	this.clearTimeout();
	
}


/*-----------------------------------------------------------------
Events
-----------------------------------------------------------------*/
ckDropmenuManager.prototype.onMenuItemOver = function(e, oEl) {
	//this is called from an event, so reference ourself directly.
	oDropmenuMgr.clearTimeout();
	
	oEl = oEl || this;
	if (oEl.style && oEl.ckDropdownMenu) {
		if (oDropmenuMgr.oActiveMenuItem) {
			oDropmenuMgr.oActiveMenuItem.className = oDropmenuMgr.oActiveMenuItem.saveClassName;
			if (oDropmenuMgr.oActiveMenuItem.hilite) oDropmenuMgr.oActiveMenuItem.hilite.style.visibility = "hidden";
			if (oDropmenuMgr.oActiveMenuItem.hiliteShim) oDropmenuMgr.oActiveMenuItem.hiliteShim.style.visibility = "inherit";
			if (oDropmenuMgr.oActiveMenuItem.ckDropdownMenu.bgImageUp) oDropmenuMgr.oActiveMenuItem.style.background = "url(" + oDropmenuMgr.oActiveMenuItem.ckDropdownMenu.bgImageUp +")";;
		} 
		
		oEl.className = oEl.classNameItemOver;
		
		oEl.zIndex = 500;
		if (oEl.ckDropdownMenu.bgImageOver) oEl.style.background = "url(" + oEl.ckDropdownMenu.bgImageOver +")";
		if (oEl.hilite) {
			oEl.hilite.style.visibility = "inherit";
			if( oEl.hiliteShim ) oEl.hiliteShim.style.visibility = "visible";
		}
		oEl.focusItem.style.pixelTop = oEl.style.pixelTop;
		oEl.focusItem.style.top = oEl.focusItem.style.pixelTop + 'px';
		oEl.focusItem.style.pixelLeft = oEl.style.pixelLeft;
		oEl.focusItem.style.left = oEl.focusItem.style.pixelLeft + 'px';
		oEl.focusItem.style.zIndex = oEl.zIndex +1;
		oDropmenuMgr.hideChildMenu(oEl);
	} else return;

	oDropmenuMgr.oActiveMenuItem = oEl;
}

ckDropmenuManager.prototype.onMenuItemAction = function(e, oEl) {
	oEl = oDropmenuMgr.oActiveMenuItem;
	if (!oEl) return;

	oDropmenuMgr.hideActiveMenus();

	if (oEl.ckaction) eval("" + oEl.ckaction);
	else if (oEl.action) eval("" + oEl.action); //will hit this when selectFirstItem() called
	oDropmenuMgr.oActiveMenuItem = null;
}
ckDropmenuManager.prototype.mouseupMenu = function(oEvent) {
	//event driven. Do not use "this" keyword
	var oSrcContainer;
	if (!oEvent) oEvent = window.event;
	if ((oEvent) && (oSrcContainer = (oEvent.srcElement ? oEvent.srcElement : oEvent.target))) {
		//do not hide if user clicked on activator element
		var oMenu = oDropmenuMgr.getMenuByActivatorID(oSrcContainer.id);
		if (!oMenu || ((oMenu) && (oMenu.bHideOnActivatorClick))) {
			oDropmenuMgr.hideMenu(true, oEvent);
			oDropmenuMgr.hideActiveMenus();
		}
	}
	return true;
}
ckDropmenuManager.prototype.mouseoutMenu = function() {
	oDropmenuMgr.hideMenu(false, false);
	return true;
}

/*-----------------------------------------------------------------
hideActiveMenus / hideMenu / hideChildMenu
-----------------------------------------------------------------*/
ckDropmenuManager.prototype.hideActiveMenus = function() {
	if (!this.aActiveMenuDIVs) return;

	var oEl, oMenu;
	for (var i=0; i < this.aActiveMenuDIVs.length; i++) {
		oEl = this.aActiveMenuDIVs[i];
		if (!oEl) continue;

		if (oEl.visibility && !this.bOperaBrowser) {
			oEl.visibility = "hidden";
		} else if (oEl.style) {
			oEl.style.visibility = "hidden";
			oEl.style.left = '-200px';
			oEl.style.top = '-200px';
		}
		
		if (oMenu = oEl.ckDropdownMenu) {
			if (oMenu.container) {
				oMenu.container.visibility = "hidden";
				oMenu.container.clip.left = 0;
			}
			if ((oMenu.classNameActivator != "") && (oMenu.oActivatorEl)) {
				var sSavedClassName = oMenu.oActivatorEl.getAttribute("saveClassName");
				oMenu.oActivatorEl.className=(sSavedClassName ? sSavedClassName : oMenu.classNameActivator);
			}
		}
	}
	if (this.oActiveMenuItem) this.hideMenu(false, false);
	this.aActiveMenuDIVs.length = 0;
}


ckDropmenuManager.prototype.hideMenu = function(mouseup, e) {
	if (this.oActiveMenuEl && this.find("menuItem0")) {

		if (this.oActiveMenuItem) {
			this.oActiveMenuItem.className = this.oActiveMenuItem.saveClassName;
			
			if (this.oActiveMenuItem.hilite) this.oActiveMenuItem.hilite.style.visibility = "hidden";
			if (this.oActiveMenuItem.hiliteShim) this.oActiveMenuItem.hiliteShim.style.visibility = "inherit";

			var oMenu = this.oActiveMenuItem.ckDropdownMenu;
			if ((oMenu) && (oMenu.bgImageUp)) this.oActiveMenuItem.style.background = "url(" + oMenu.bgImageUp +")";
			
		}
	}
	
	if (!mouseup && this.oActiveMenuEl) {
		if (this.oActiveMenuEl.ckDropdownMenu) {
			if (this.oActiveMenuEl.ckDropdownMenu.bHideOnMouseOut) this.startTimeout();
			return(true);
		}
	}
	this.activeMenuID="";
	return(true);
}

ckDropmenuManager.prototype.hideChildMenu = function(hcmLayer) {
	this.clearTimeout();
	var oEl = hcmLayer;
	if (oEl.ckDropdownMenu.childMenus) {
		for (var i=0; i < oEl.ckDropdownMenu.childMenus.length; i++) {
			var theLayer = oEl.ckDropdownMenu.childMenus[i];
			
			theLayer = this.find(theLayer);
			theLayer.style.visibility = "hidden";
			if( theLayer.ckDropdownMenu.menuItemHAlign != 'left' ) {
				for(var j = 0; j < theLayer.ckDropdownMenu.menuItemLayers.length; j++) {
					var itemLayer = theLayer.ckDropdownMenu.menuItemLayers[j];
					if(itemLayer.textShim) itemLayer.textShim.style.visibility = "inherit";
				}
			}
			
			oDropmenuMgr.hideChildMenu(theLayer);
		}
	
		if (oEl.childMenu) {
			var childMenu = oEl.childMenu;
			
			if (this.find("menuItem0")) {
				childMenu = this.find(oEl.childMenu);
				var menuLayer = this.find(oEl.ckDropdownMenu.menuLayer);
				var s = childMenu.style;
				s.zIndex = menuLayer.style.zIndex+1;
				if (document.all || window.mmIsOpera) {
					s.pixelTop = menuLayer.style.pixelTop + oEl.ckDropdownMenu.submenuYOffset;
					if( oEl.ckDropdownMenu.vertical ) {
						if( oEl.ckDropdownMenu.submenuRelativeToItem ) s.pixelTop += oEl.style.pixelTop;
						s.pixelLeft = oEl.style.pixelWidth + menuLayer.style.pixelLeft + oEl.ckDropdownMenu.submenuXOffset;
						s.left = s.pixelLeft + 'px';
					} else {
						s.pixelTop += oEl.style.pixelTop;
						if( oEl.ckDropdownMenu.submenuRelativeToItem ) s.pixelLeft = menuLayer.style.pixelLeft + oEl.style.pixelLeft + oEl.style.pixelWidth + (2*oEl.ckDropdownMenu.menuBorder) + oEl.ckDropdownMenu.submenuXOffset;
						else s.pixelLeft = (menuLayer.style.pixelWidth-4*oEl.ckDropdownMenu.menuBorder) + menuLayer.style.pixelLeft + oEl.ckDropdownMenu.submenuXOffset;
						s.left = s.pixelLeft + 'px';
					}
				} else {
					var top = parseInt(menuLayer.style.top) + oEl.ckDropdownMenu.submenuYOffset;
					var left = 0;
					if( oEl.ckDropdownMenu.vertical ) {
						if( oEl.ckDropdownMenu.submenuRelativeToItem ) top += parseInt(oEl.style.top);
						left = (parseInt(menuLayer.style.width)-4*oEl.ckDropdownMenu.menuBorder) + parseInt(menuLayer.style.left) + oEl.ckDropdownMenu.submenuXOffset;
					} else {
						top += parseInt(oEl.style.top);
						if( oEl.ckDropdownMenu.submenuRelativeToItem ) left = parseInt(menuLayer.style.left) + parseInt(oEl.style.left) + parseInt(oEl.style.width) + (2*oEl.ckDropdownMenu.menuBorder) + oEl.ckDropdownMenu.submenuXOffset;
						else left = (parseInt(menuLayer.style.width)-4*oEl.ckDropdownMenu.menuBorder) + parseInt(menuLayer.style.left) + oEl.ckDropdownMenu.submenuXOffset;
					}
					s.top = top + 'px';
					s.left = left + 'px';
				}
				childMenu.style.visibility = "inherit";
			} else return;
			this.aActiveMenuDIVs[this.aActiveMenuDIVs.length] = childMenu;
		}
	}
}

/*-----------------------------------------------------------------
Timeout
-----------------------------------------------------------------*/
ckDropmenuManager.prototype.startTimeout = function() {
	//this is called from an event, so reference ourself directly.
	if( oDropmenuMgr.oActiveMenuEl ) {
		oDropmenuMgr.timeoutStart = new Date();
		oDropmenuMgr.timeoutDHFlag = true; 
		oDropmenuMgr.timeoutHideMenuTimer = setTimeout("oDropmenuMgr.doHide()", oDropmenuMgr.oActiveMenuEl.ckDropdownMenu.hideTimeout);
	}
}
ckDropmenuManager.prototype.clearTimeout = function() {
	if (this.timeoutHideMenuTimer) clearTimeout(this.timeoutHideMenuTimer);
	this.timeoutHideMenuTimer = null;
	this.timeoutDHFlag = false;
}
ckDropmenuManager.prototype.doHide = function() {
	if (!this.timeoutDHFlag || !this.oActiveMenuEl) return;
	var elapsed = new Date() - this.timeoutStart;
	var timeout = this.oActiveMenuEl.ckDropdownMenu.hideTimeout;
	if (elapsed < timeout) {
		this.timeoutHideMenuTimer = setTimeout("oDropmenuMgr.doHide()", timeout+100-elapsed);
		return;
	}
	this.timeoutDHFlag = false;
	this.hideActiveMenus();
	this.oActiveMenuItem = null;
	this.activeMenuID="";
}

/*-----------------------------------------------------------------
Utilities
-----------------------------------------------------------------*/
ckDropmenuManager.prototype.moveXbySlicePos = function(x, img) { 
	var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
	var macIE45 = document.all && !onWindows && this.getExplorerVersion() == 4.5;
	var par = img;
	var lastOffset = 0;
	while(par){
		if( par.leftMargin && ! onWindows ) x += parseInt(par.leftMargin);
		if( (par.offsetLeft != lastOffset) && par.offsetLeft ) x += parseInt(par.offsetLeft);
		if( par.offsetLeft != 0 ) lastOffset = par.offsetLeft;
		par = macIE45 ? par.parentElement : par.offsetParent;
	}
	
	return x;
}

ckDropmenuManager.prototype.moveYbySlicePos = function(y, img) {
	var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
	var macIE45 = document.all && !onWindows && this.getExplorerVersion() == 4.5;
	var par = img;
	var lastOffset = 0;
	while(par){
		if( par.topMargin && !onWindows ) y += parseInt(par.topMargin);
		if( (par.offsetTop != lastOffset) && par.offsetTop ) y += parseInt(par.offsetTop);
		if( par.offsetTop != 0 ) lastOffset = par.offsetTop;
		par = macIE45 ? par.parentElement : par.offsetParent;
	}		

	return y;
}

ckDropmenuManager.prototype.getExplorerVersion = function() {
	var ieVers = parseFloat(navigator.appVersion);
	if( navigator.appName != 'Microsoft Internet Explorer' ) return ieVers;
	var tempVers = navigator.appVersion;
	var i = tempVers.indexOf( 'MSIE ' );
	if( i >= 0 ) {
		tempVers = tempVers.substring( i+5 );
		ieVers = parseFloat( tempVers ); 
	}
	return ieVers;
}


		

