//Global Variables
var skm_SelectedMenuStyleInfos=new Object();
var skm_UnselectedMenuStyleInfos=new Object();
var skm_MenuFadeDelays=new Object();
var skm_clockValue=0;
var skm_ticker;
var skm_highlightTopMenus=new Object();
var skm_images=new Array();
var skm_OpenMenuItems=new Array();
//Methods to hook menu to global variables
function skm_registerMenu(menuID,selectedStyleInfo,unselectedStyleInfo,menuFadeDelay,highlightTopMenu){
	skm_SelectedMenuStyleInfos[menuID]=selectedStyleInfo;
	skm_UnselectedMenuStyleInfos[menuID]=unselectedStyleInfo;
	skm_MenuFadeDelays[menuID]=menuFadeDelay;
	skm_highlightTopMenus[menuID]=highlightTopMenu;
}
//Methods & contructor of skm_styleInfo object
function skm_applyStyleInfoToElement(element){
	element.style.backgroundColor=this.backgroundColor;
	element.style.borderColor=this.borderColor;
	element.style.borderStyle=this.borderStyle;
	element.style.borderWidth=this.borderWidth;
	element.style.color=this.color;
	if(this.fontFamily!='')element.style.fontFamily=this.fontFamily;
	element.style.fontSize=this.fontSize;
	element.style.fontStyle=this.fontStyle;
	element.style.fontWeight=this.fontWeight;
	if(this.className!='')element.style.className=this.className;
}
function skm_styleInfo(backgroundColor,borderColor,borderStyle,borderWidth,color,fontFamily,fontSize,fontStyle,fontWeight,className){
	this.backgroundColor=backgroundColor;
	this.borderColor=borderColor;
	this.borderStyle=borderStyle;
	this.borderWidth=borderWidth;
	this.color=color;
	this.fontFamily=fontFamily;
	this.fontSize=fontSize;
	this.fontStyle=fontStyle;
	this.fontWeight=fontWeight;
	this.className=className;
	this.applyToElement=skm_applyStyleInfoToElement;
}
//MouseEventHandlers
function skm_mousedOverMenu(menuID,elem,parent,displayedVertically,imageSource){
	skm_stopTick();
	skm_closeSubMenus(elem);
	var childID=elem.id+"-subMenu";//Display child if needed
	if(document.getElementById(childID)!=null){//make child visible & specify that its position is absolute
		document.getElementById(childID).style.display='block';
		document.getElementById(childID).style.position='absolute';
		skm_OpenMenuItems=skm_OpenMenuItems.concat(childID);
		if(displayedVertically){//Set child menu left/top according to menu offsets
			/*LS FIX START*/
			var newLeft=(document.all)?skm_getAscendingLefts(parent)+parent.offsetWidth:(skm_getAscendingLefts(parent)+parent.offsetWidth)+'px';
			var newTop=(document.all)?skm_getAscendingTops(elem):skm_getAscendingTops(elem)+'px';
			document.getElementById(childID).style.left=newLeft;
			document.getElementById(childID).style.top=newTop;
			/*LS FIX END*/
			var visibleWidth=parseInt(window.outerWidth?window.outerWidth-9:document.body.clientWidth,10);
			if((parseInt(document.getElementById(childID).offsetLeft,10)+parseInt(document.getElementById(childID).offsetWidth,10))>visibleWidth){
				document.getElementById(childID).style.left=visibleWidth-parseInt(document.getElementById(childID).offsetWidth,10);
			}
		}else{//Set child menu left/top according to the menu offsets
			/*LS FIX START*/
			var newLeft=(document.all)?skm_getAscendingLefts(elem):skm_getAscendingLefts(elem)+'px';
			var newTop=(document.all)?skm_getAscendingTops(parent)+parent.offsetHeight:(skm_getAscendingTops(parent)+parent.offsetHeight)+'px';
			document.getElementById(childID).style.left=newLeft;
			document.getElementById(childID).style.top=newTop;
			/*LS FIX END*/
			if(document.getElementById(childID).offsetWidth<elem.offsetWidth)
				document.getElementById(childID).style.width=elem.offsetWidth;
		}
	}
	if(skm_SelectedMenuStyleInfos[menuID]!=null)skm_SelectedMenuStyleInfos[menuID].applyToElement(elem);
	if(skm_highlightTopMenus[menuID]){
		var eId=elem.id+'';
		while(eId.indexOf('-subMenu')>=0){
			eId=eId.substring(0,eId.lastIndexOf('-subMenu'));
			skm_SelectedMenuStyleInfos[menuID].applyToElement(document.getElementById(eId));
		}
	}
	if(imageSource!=''){
		setimage(elem,imageSource)
	}
}
function skm_mousedOverClickToOpen(menuID,elem,parent,imageSource){
	skm_stopTick();
	if(skm_SelectedMenuStyleInfos[menuID]!=null)skm_SelectedMenuStyleInfos[menuID].applyToElement(elem);
	if(skm_highlightTopMenus[menuID]){
		var eId=elem.id+'';
		while(eId.indexOf('-subMenu')>=0){
			eId=eId.substring(0,eId.lastIndexOf('-subMenu'));
			skm_SelectedMenuStyleInfos[menuID].applyToElement(document.getElementById(eId));
		}
	}	
	if(imageSource!=''){
		setimage(elem,imageSource)
	}
}
function skm_mousedOverSpacer(menuID,elem,parent){
	skm_stopTick();
}
function skm_mousedOutMenu(menuID,elem,imageSource){
	skm_doTick(menuID);
	if(skm_UnselectedMenuStyleInfos[menuID]!=null)skm_UnselectedMenuStyleInfos[menuID].applyToElement(elem);
	if(skm_highlightTopMenus[menuID]){
		var eId=elem.id+'';
		while(eId.indexOf('-subMenu')>=0){
			eId=eId.substring(0,eId.lastIndexOf('-subMenu'));
			skm_UnselectedMenuStyleInfos[menuID].applyToElement(document.getElementById(eId));
		}
	}
	if(imageSource!=''){
		setimage(elem,imageSource)
	}
}
function skm_mousedOutSpacer(menuID,elem){
	skm_doTick(menuID);
}
//Utility Functions
function skm_closeSubMenus(parent){
	if(skm_OpenMenuItems=="undefined")return;
	for(var i=skm_OpenMenuItems.length-1;i>-1;i--){
		if(parent.id.indexOf(skm_OpenMenuItems[i])!=0){
			document.getElementById(skm_OpenMenuItems[i]).style.display='none';
			skm_shimSetVisibility(false,skm_OpenMenuItems[i]);
			skm_OpenMenuItems=new Array().concat(skm_OpenMenuItems.slice(0,i),skm_OpenMenuItems.slice(i+1));
		}
	}
}
function skm_shimSetVisibility(makevisible,tableid){
	var tblRef=document.getElementById(tableid);
	var IfrRef=document.getElementById('shim'+tableid);
	if(tblRef!=null&&IfrRef!=null){
		if(makevisible){
			IfrRef.style.width=tblRef.offsetWidth;
			IfrRef.style.height=tblRef.offsetHeight;
			IfrRef.style.top=tblRef.style.top;
			IfrRef.style.left=tblRef.style.left;
			IfrRef.style.zIndex=tblRef.style.zIndex-1;
			IfrRef.style.display="block";
		}else{
			IfrRef.style.display="none";
		}
	}
}
function skm_IsSubMenu(id){
	if(typeof(skm_subMenuIDs)=='undefined')return false;
	for(var i=0;i<skm_subMenuIDs.length;i++)
		if(id==skm_subMenuIDs[i])return true;
	return false;
}
function skm_getAscendingLefts(elem){
	if(elem==null)
		return 0;
	else{
		if((elem.style.position=='absolute'||elem.style.position=='relative')&&!skm_IsSubMenu(elem.id))return 0;
		return elem.offsetLeft+skm_getAscendingLefts(elem.offsetParent);
	}
}
function skm_getAscendingTops(elem){
	if(elem==null)
		return 0;
	else{
		if((elem.style.position=='absolute'||elem.style.position=='relative')&&!skm_IsSubMenu(elem.id))return 0;
		return elem.offsetTop+skm_getAscendingTops(elem.offsetParent);
	}
}
//Fade Functions
function skm_doTick(menuID){
	if(skm_clockValue>=skm_MenuFadeDelays[menuID]){
		skm_stopTick();
		skm_closeSubMenus(document.getElementById(menuID));
	}else{
		skm_clockValue++;
		skm_ticker=setTimeout("skm_doTick('"+menuID+"');",500);
	}
}
function skm_stopTick(){
	skm_clockValue=0;
	clearTimeout(skm_ticker);
}
function preloadimages(){
	for(i=0;i<preloadimages.arguments.length;i++){
		skm_images[i]=new Image();
		skm_images[i].src=preloadimages.arguments[i];
	}
}
function setimage(elem,imageSource){
	var i=elem.getElementsByTagName("img")[0];
	i.src=imageSource;
}
