//Region 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();
//EndRegion
//Region Methods to hook up a menu to the 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;
}
//Region The methods and contructor of the 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;
}
//Region MouseEventHandlers
function skm_mousedOverMenu(menuID,elem,parent,displayedVertically,imageSource){
        skm_stopTick();
        skm_closeSubMenus(elem);
        var childID=elem.id+"-subMenu";  // Display child menu if needed
        if (document.getElementById(childID)!=null){  // make the child menu visible and specify that its position is specified in absolute coordinates
               document.getElementById(childID).style.display='block';
               document.getElementById(childID).style.position='absolute';
               skm_OpenMenuItems = skm_OpenMenuItems.concat(childID);
               if (displayedVertically){ // Set the child menu's left and top attributes according to the menu's offsets
                       document.getElementById(childID).style.left=skm_getAscendingLefts(parent)+parent.offsetWidth+'px';
                       document.getElementById(childID).style.top=skm_getAscendingTops(elem)+'px';
                       var visibleWidth=parseInt(window.outerWidth?window.outerWidth-9:document.body.clientWidth,10+'px');
                       if ((parseInt(document.getElementById(childID).offsetLeft,10)+parseInt(document.getElementById(childID).offsetWidth,10+'px'))>visibleWidth) {
                               document.getElementById(childID).style.left=visibleWidth-parseInt(document.getElementById(childID).offsetWidth,10+'px');
                       }
               }else{  // Set the child menu's left and top attributes according to the menu's offsets
                       document.getElementById(childID).style.left=skm_getAscendingLefts(elem)+'px';
                       document.getElementById(childID).style.top=skm_getAscendingTops(parent)+parent.offsetHeight+'px';
                       if (document.getElementById(childID).offsetWidth<elem.offsetWidth)
                              document.getElementById(childID).style.width=elem.offsetWidth+'px';
               }
        }
        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);
}
//Region 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+'px';
                       IfrRef.style.height=tblRef.offsetHeight+'px';
                       IfrRef.style.top=tblRef.style.top+'px';
                       IfrRef.style.left=tblRef.style.left+'px';
                       IfrRef.style.zIndex=tblRef.style.zIndex-1;
                       IfrRef.style.display="block";
               }else{
                       IfrRef.style.display="none";
               }
        }
}
function skm_IsSubMenu(id){
        if (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);
        }
}
//Region 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;
}
 
