// $Id: menumanagement.js,v 1.3.2.12 2005/08/19 13:57:43 max Exp $

var tm = null;
var RootMenuObj = null;
var CurrentMenuObj = null;

var mouseX = 0;
var mouseY = 0;

if (isMSIE) {
var menuOffsetX = -16;
var menuShiftFix = 12;

} else {
var menuOffsetX = -6;
var menuShiftFix = 11;
}

var submenuOffsetX = 0;
var menuOffsetY = 4;
var menuVisibleDelay = 1000;
var predefinedDeltaForIE5ForMac = 128;

var menuImages = new Array();
var menuLayoutReversed = false;

var direction = 1;
var iniDocumentWidth = 0; 

var iniOffset = 0;
var iniOffsetType = "L";

if(fancy_left)
	menuOffsetX += fancy_left+2;
fancy_width -= (fancy_left+fancy_right);

if(predefinedDocumentWidth > 0 && is_resize) {
	window.onresize = function() {
		var leftOffset = menuOffsetX+menuShiftFix;
		iniDocumentWidth = getDocumentWidth();
		if(!iniDocumentWidth)
			iniDocumentWidth = self.outerWidth;
		leftOffset += parseInt((iniDocumentWidth-predefinedDocumentWidth)/2)+2;
		if(leftOffset < menuOffsetX+1)
			leftOffset = menuOffsetX+1;
	
		if(document.getElementById('catrootmenu')) {
			document.getElementById('catrootmenu').cssText = "position: absolute; "+(menuLayoutReversed?"right: ":"left: ")+leftOffset+"; width: "+((isMSIE && !isOpera)?"142":"148")+";";
			if(menuLayoutReversed)
				document.getElementById('catrootmenu').style.right = leftOffset;
			else
				document.getElementById('catrootmenu').style.left = leftOffset;
		}
	}
}

function cPOPUPMENU(layerId,parentObj) {
    this.layer = DOC_Layer(layerId);
    this.id = layerId;
    this.submenu = false;
    if (parentObj) {
        this.level = parentObj.level + 1;
        this.parent = parentObj;
    } else {
        this.level = 0;
        this.parent = false;
    }
}

POPUPMENU = cPOPUPMENU.prototype;

function POPUP_Menu(layerId,parentObj) {
    return new cPOPUPMENU(layerId,parentObj);
}

// Root menu layer Iinitialization
function InitRootMenu(isReversed) {
    var leftOffset = menuOffsetX+1;

	iniDocumentWidth = getDocumentWidth();
	if(!iniDocumentWidth)
		iniDocumentWidth = self.outerWidth;
	if (predefinedDocumentWidth > 0 && iniDocumentWidth > (predefinedDocumentWidth + leftOffset)) {
       	leftOffset += parseInt((iniDocumentWidth-predefinedDocumentWidth)/2)+2;
	}

	iniOffset = leftOffset;
	iniOffsetType = (isReversed ? "R" : "L");
	leftOffset = (isReversed ? "right: " : "left: ")+leftOffset+";";
	menuLayoutReversed = isReversed;

    document.open();
    if ( isMSIE && !isOpera ) {
        document.write("<DIV id='catrootmenu' style='position: absolute; " + leftOffset + "width: "+div_width+";'>");
    } else {
        document.write("<DIV id='catrootmenu' style='position: absolute; " + leftOffset + "width: "+(div_width+6)+";'>");
    }
    document.close();
}

var documentWidth = 0;

function DocumentSizeChecker() {
	if (documentWidth != getDocumentWidth()) {
    	var MainAreaOffsetX = parseInt((getDocumentWidth()-predefinedDocumentWidth)/2);

        RootMenuObj.layer.moveTo(MainAreaOffsetX + menuOffsetX, RootMenuObj.layer.getAbsoluteTop());

        setTimeout ( "DocumentSizeChecker()", 100 );
	}
}

function RootMenuChecker() {
    if (RootMenuObj.layer.getAbsoluteLeft() == 0) {
        setTimeout ( "RootMenuChecker()", 100 );
    } else {
    	if (menuLayoutReversed)	{
            var additionalOffsetX = 0;
            if ( isOpera ) {
                additionalOffsetX = -6;
            }
            RootMenuObj.layer.moveTo(RootMenuObj.layer.getAbsoluteLeft() - 5 + additionalOffsetX, RootMenuObj.layer.getAbsoluteTop());
        }

        if (predefinedDocumentWidth != 0) {
        	DocumentSizeChecker();
        }
    }
}

function InitPopUp(rootMenuId) {
    if ( ! isLayers ) {
        return;
    }

    if ( isNC4 ) {
        document.captureEvents(Event.MOUSEMOVE);
    }

    if ( isMSIE || isOpera7 ) {
        document.onmousemove=function() {
            mouseX = event.clientX+document.body.scrollLeft;
            mouseY = event.clientY+document.body.scrollTop;
            return true;
        }
    } else if ( isOpera ) {
        document.onmousemove=function() {
            mouseX = event.clientX;
            mouseY = event.clientY;
            return true;
        }
    } else if ( isNC ) {
        document.onmousemove=function(e) {
			if(e) {
	            mouseX = e.pageX;
    	        mouseY = e.pageY;
			}
			return true;
        }  
    }

    RootMenuObj = POPUP_Menu(rootMenuId);

    document.open();
    if ( isMSIE && !isOpera ) {
        document.write("<DIV style='position: relative; width: "+fancy_width+"; z-index: -1;'>");
    } else {
        document.write("<DIV style='position: relative; z-index: -1;'>");
    }
    document.close();

//    setTimeout ( "RootMenuChecker()", 100 );
}

function showMenu(menuId,itemId,submenuId) {
    if (!document.getElementById(menuId)) {
        return;
    }
    if (!document.getElementById(itemId)) {
        return;
    }
    if (!document.getElementById(submenuId)) {
        return;
    }

    cancelCloseMenu();
    hideMenu(menuId,submenuId);

    var menuFound = false;
    var menuObj = RootMenuObj;
    while(menuObj) {
        if (menuObj.id == menuId) {
            menuFound = true;
            break;
        }
        menuObj = menuObj.submenu;
    }
    
    if (!menuFound) {
        menuObj = RootMenuObj;
    }

    menuObj.submenu = POPUP_Menu(submenuId, menuObj);

    var menuItem = DOC_Layer(itemId);

    if (!menuObj.submenu.layer.isVisible()) {
		offsetX = ((menuObj.level == 0)?menuOffsetX:submenuOffsetX);

		var reverseModificator = 1;
		if(menuLayoutReversed)
			reverseModificator = -1;

		var step = menuObj.layer.getWidth() - offsetX;
		var next_x = menuObj.layer.getAbsoluteLeft() + reverseModificator*direction*step;
		if((next_x > (iniDocumentWidth-step-20) && reverseModificator*direction == 1) || (next_x < step && reverseModificator*direction == -1))
			direction = direction*-1;
                if (isMSIE) {
		        next_x = menuObj.layer.getAbsoluteLeft() + reverseModificator*direction*step - 25;
                } else {
                        next_x = menuObj.layer.getAbsoluteLeft() + reverseModificator*direction*step;
                }

        if(isIE5forMac) {
            var main_x = menuObj.layer.getAbsoluteLeft();
            var main_y = menuObj.layer.getTop();
        } 
		menuObj.submenu.layer.moveTo(next_x, menuObj.layer.getAbsoluteTop() + menuItem.getTop() + menuOffsetY);
        menuObj.submenu.layer.show();
        CurrentMenuObj = menuObj.submenu;
        if(isIE5forMac) { 
//          menuObj.layer.moveTo(main_x,main_y);
        } 
    } else {
        hideMenu(menuObj.id,menuObj.submenu.id);
    }
}

function initiateHideMenu() {
    tm = setTimeout("hideMenu()", menuVisibleDelay);
}

function cancelCloseMenu(exeptMenuId) {
    if (self.tm) {
        clearTimeout(tm);
    }
    if (exeptMenuId) {
        hideMenu(exeptMenuId,exeptMenuId);
    }
}

function hideMenu(exeptMenuId,exeptSubMenuId) {
    var menuObj = CurrentMenuObj;
    while(menuObj) {
        if (menuObj.parent) {
            if (exeptMenuId && exeptSubMenuId) {
                if (menuObj.id == exeptMenuId || menuObj.id == exeptSubMenuId) {
                    return;
                } else {
                    menuObj.layer.hide();
                }
            } else {
                menuObj.layer.hide();
            }
        }
        menuObj = menuObj.parent;
        if (menuObj.parent) {
            menuObj.submenu = false;
        }
    }
}

function InitMenuImages(ImagesPath) {
    menuImages[0] = new Image; 
	menuImages[0].src = ImagesPath + "/button_l_off.gif";
    menuImages[1] = new Image; 
	menuImages[1].src = ImagesPath + "/button_l_on.gif";
    menuImages[2] = new Image; 
	menuImages[2].src = ImagesPath + "/button_m_off.gif";
    menuImages[3] = new Image; 
	menuImages[3].src = ImagesPath + "/button_m_on.gif";
    menuImages[4] = new Image; 
	menuImages[4].src = ImagesPath + "/button_r_off.gif";
    menuImages[5] = new Image; 
	menuImages[5].src = ImagesPath + "/button_r_on.gif";
}

function ShowMenyItemImage(Elm,Status,Index) {
    if (Status == 'On') {
        Index ++;
    }
    Elm.src = menuImages[Index].src;
}

function ShowMenyItemBackground(Elm,Status,Index) {
    if (Status == 'On') {
        Index++;
    }
	Elm.style.backgroundImage = "url("+menuImages[Index].src+")";
}

function ShowMenyItem(Elm,Status) {
    var button_l = document.getElementById(Elm.id+'_button_l');
    var button_m = document.getElementById(Elm.id+'_button_m');
    var button_r = document.getElementById(Elm.id+'_button_r');
    if (button_l) {
        ShowMenyItemImage(button_l, Status, 0);
    }
    if (button_m) {
        ShowMenyItemBackground(button_m, Status, 2);
    }
    if (button_l) {
        ShowMenyItemImage(button_r, Status, 4);
    }
	Elm.className = (Status == 'On' ? "CatMenuItemOn" : "CatMenuItemOff");
}

// function repositionRoot() {
//	var obj = document.getElementById('catrootmenu');
//	var obj2 = document.getElementById('div_null');
//	if (!obj || !obj2 || predefinedDocumentWidth == 0)
//		return false;
//	var displace = Math.round((getDocumentWidth(self)-predefinedDocumentWidth)/2, 0)-getAbsoluteLeft(obj2);
//	if (displace > 1 || displace < -1) {
//		if (iniOffsetType == 'R') {
//			obj.style.right = iniOffset-displace;
//		} else {
//			obj.style.left = iniOffset-displace;
//		}
//	}
// }
function repositionRoot() {
	if (window.onresize)
		window.onresize();
}
function getAbsoluteLeft(o) {
  if ( isMSIE || isNC6 || isOpera ) return DOC_getPageOffset(o)[0]-pageLeft;
  if ( isNC4 ) return o.pageX-pageLeft;
}
