browser_DOM = (document.getElementById) ? true : false;
browser_Khtml = (navigator.product) ? (navigator.product.indexOf('khtml') >= 0) : false;
browser_Opera = (navigator.appName) ? (navigator.appName.indexOf('Opera') >= 0) : false;
browser_IE = (document.all) ? (!browser_Khtml && !browser_Opera) : false;
browser_NS = (document.layers) ? true : ((navigator.vendor) && (navigator.vendor.indexOf('Netscape') >=0 ));
browser_Mac = (navigator.appVersion.indexOf("Mac") != -1);
browser_Gecko = (browser_DOM && browser_NS) || ((navigator.product) && (navigator.product.indexOf('Gecko') >= 0));

//document.write('browser_IE: '+browser_IE);


/*
 * send onLostFocus to a primenuItem
 */

var pm_item_unFocus = { 
	item_unFocus : function(primenuItem) {
	    primenuItem.primenu.hideDelay = primenuItem.onLostFocus();
	    if ((primenuItem.primenu.hideDelay >= 0) && (primenuItem.subMenu)) {
		pm_menu_unFocus.menu_unFocus(primenuItem.primenu, primenuItem.primenu.hideDelay);
	    }
	}
};

/*
 * send onShow event to a menuitem's submenu
 */

var pm_menu_show = {
	menu_show : function(primenu, delayTime, parentMenu) {
	    if (!primenu || delayTime < 0) return;
	    var parentMenu = primenu.parent;
	    //alert(par.primenu);
	    if (parentMenu.primenu.activeItem == parentMenu)
		return;

	    clearTimeout(primenu.root.focusEvent);
	    primenu.root.focusEvent = null;
	    primenu.root.focusEventObj = null;

	    if (delayTime > 0) {
		primenu.root.focusEventObj = primenu;
		primenu.root.focusEvent =
		setTimeout("pm_menu_show.menu_show(document.getElementById('" +
		primenu.root.id + "').focusEventObj, 0);", delayTime, parentMenu);
		return;
	    }

	    clearTimeout(primenu.root.hideEvent);
	    primenu.root.hideEvent = null;
	    primenu.root.hideEventObj = null;

	    if (primenu.parent.primenu.activeItem)
		pm_menu_unFocus.menu_unFocus(primenu.parent.primenu, 0);

	    primenu.parent.primenu.activeItem = primenu.parent;
	    primenu.onShow();
	}
};



/*
 * Send focus event to a primenuItem
 */
 
var pm_item_focus = { 
	item_focus : function(primenuItem) {
	    var rootMenu = primenuItem.primenu.root;

	    if (rootMenu.focusedItem == primenuItem)
		return;

	    // if an item is already focused, unfocus it
	    if (rootMenu.focusedItem) {

		// if we're moveing focus to another primenu, set focus in the previously focused primenu to it's active item.
		if (rootMenu.focusedItem.primenu != primenuItem.primenu) {
		    if (rootMenu.focusedItem.primenu.activeItem)
			pm_item_focus.item_focus(rootMenu.focusedItem.primenu.activeItem);

		    rootMenu.focusedItem = primenuItem.primenu.activeItem;
		}

		// if item already got focus, hide sub-sub primenu of this menuitem
		if (primenuItem.subMenu && primenuItem.subMenu.activeItem && (primenuItem == rootMenu.focusedItem))
		    pm_menu_unFocus.menu_unFocus(primenuItem.subMenu, primenuItem.subMenu.showDelay);
	    }

	    if (primenuItem == rootMenu.focusedItem)
		return;

	    clearTimeout(rootMenu.hideEvent);
	    rootMenu.hideEvent = null;

	    if (rootMenu.focusedItem)
		pm_item_unFocus.item_unFocus(rootMenu.focusedItem);

	    rootMenu.focusedItem = primenuItem;

	    var primenu = primenuItem.primenu;

	    if ((!primenuItem.subMenu) && (!primenuItem.noSubMenu)) {
		var subID;
		if ( primenuItem.getAttribute("id") && primenuItem.getAttribute("id").match(/main(\d+)/) ){
		    subID = "m" + RegExp.$1;
		}
		primenuItem.subMenu = document.getElementById(subID);
		primenuItem.noSubMenu == (primenuItem.subMenu == null);

		if (primenuItem.subMenu) {
		    primenuItem.subMenu.parent = primenuItem;
		    priLayer.menuInit(primenuItem.subMenu);
		    primenuItem.subMenu.setPosition();
		}
	    }else{
		//We position the primenu each time to make shure it dosn't move on window resize
		//primenuItem.subMenu.setPosition();
	    }

	    primenu.showDelay = primenuItem.onGotFocus();

	    if (primenu.hideDelay<0) 
		primenu.hideDelay = primenu.showDelay;

	    if (primenu.activeItem && (primenu.hideDelay>=0))
		pm_menu_unFocus.menu_unFocus(primenu, primenu.hideDelay);

	    if (primenuItem.subMenu) {
		// alert(primenuItem);
		pm_menu_show.menu_show(primenuItem.subMenu, primenu.showDelay, primenuItem);
	    }
	}
};

/*
 * Send onNoFocus event to a primenu
 */

var pm_menu_unFocus = {
	menu_unFocus : function(primenu, timeOut) {
	    if (!primenu || (timeOut < 0))
		return false;

	    var rootMenu = primenu.root;
	    var primenuItem = primenu.activeItem;

	    if (!primenuItem)
		return false;

	    if (timeOut > 0) {
		rootMenu.focusEventObj = rootMenu;
		rootMenu.focusEvent = setTimeout("pm_menu_unFocus.menu_unFocus(document.getElementById('" + primenu.id + "'), 0);", timeOut);
		return false;
	    }

	    // remove focus from active menuitem
	    if (rootMenu.focusedItem != primenuItem) {
		primenuItem.onLostFocus();
	    }

	    /* hide submenu */
	    if (primenu.activeItem.subMenu.activeItem)
		pm_menu_unFocus.menu_unFocus(primenu.activeItem.subMenu, 0);

	    /* Hide this primenu */
	    primenu.activeItem.subMenu.onHide();
	    primenu.activeItem = null;

	    return true;
	}
}

/*
 *
 */

var pm_primenuItemMouseoverM = {
	primenuItemMouseoverM : function(primenuItem) {
	    var rootMenu = pm_primenuItemInit.primenuItemInit(primenuItem).primenu.root;
	    clearTimeout(rootMenu.mouseOutEventPending);
	    rootMenu.mouseOutEventPending = null;

	    if (rootMenu.focusedItem != primenuItem) {
		clearTimeout(rootMenu.focusEvent);
		rootMenu.focusEvent = null;
		rootMenu.focusEventObj = null;

		if (!rootMenu.focusedItem)
		    rootMenu.focusedItem = primenuItem.primenu.activeItem;
	    }

	    if (rootMenu.focusedItem != primenuItem)
		pm_item_focus.item_focus(primenuItem);
	}
};

var pm_menuMouseout = {
	menuMouseout : function(primenu) {
	    var rootMenu = primenu.root;
	    clearTimeout(rootMenu.mouseOutEventPending);
	    rootMenu.mouseOutEventPending = null;
	    var primenuItem = rootMenu.focusedItem;

	    // accept event only if this primenu is the same as the primenu with focus
	    if (primenuItem && (primenuItem.primenu == primenu))
		rootMenu.mouseOutEventPending = setTimeout("pm_menuMouseoutM.menuMouseoutM(document.getElementById('" + primenu.id + "'));", 1);
	}
};

var pm_menuMouseoutM = {
	menuMouseoutM : function(primenu) {
	    var rootMenu = primenu.root;
	    var primenuItem = rootMenu.focusedItem;
	    rootMenu.mouseOutEventPending = null;

	    if ((!primenuItem) || (primenuItem.primenu != primenu))
		return;

	    clearTimeout(rootMenu.focusEvent);

	    rootMenu.focusEvent = null;

	    if (primenu.activeItem != primenuItem) {
		pm_item_unFocus.item_unFocus(primenuItem);
		if (primenu.activeItem != null)
		    pm_item_focus.item_focus(primenu.activeItem);
	    }

	    rootMenu.focusedItem = null;
	    pm_menu_unFocus.menu_unFocus(rootMenu, rootMenu.onLostFocus());
	}
};




/*
 *  Initialize primenu,
 *
 */

var pm_primenuItemInit = {
	primenuItemInit : function(primenuItem) {
	    if (primenuItem.initialized)
		return primenuItem;

	    primenuItem.onGotFocus = function() {
		primenuItem.hilite();
		// The timeout before showing a primenu
		//return 200;
		return 0;
	    }

	    primenuItem.onLostFocus = function() {
		primenuItem.difuse();
		return -1;
	    }

	    primenuItem.difuse = function() {
		pm_removeClassName.removeClassName(primenuItem, (primenuItem.primenu.parent ? "primenuItemHighlight" : "rootMenuItemActive"));
	    }

	    primenuItem.hilite = function() {
		primenuItem.className += primenuItem.primenu.parent ? " primenuItemHighlight" : " rootMenuItemActive";
		//pm_addClassName.addClassName(primenuItem, (primenuItem.primenu.parent ? "primenuItemHighlight" : "rootMenuItemActive"));
	    }

	    primenuItem.initialized = true;
	    return primenuItem;
	}
};

priLayer = {
	menuInit : function(primenu) {
	    if (primenu.root)
		return primenu;

	    primenu.root = (primenu.parent ? primenu.parent.primenu.root : primenu);

	    var i, itemList;
	    itemList = primenu.getElementsByTagName("a");
	    for (i = 0; i < itemList.length; i++) {
		itemList[i].primenu = primenu;
		itemList[i].onmouseover = new Function("return pm_primenuItemMouseoverM.primenuItemMouseoverM(this);");
		itemList[i].onclick = new Function("this.blur(); return true;");
	    }
	    primenu.onmouseout = new Function("pm_menuMouseout.menuMouseout(document.getElementById(this.id));");

	    /*
	     * mouseout event function
	     */

	primenu.setPosition = function() {
		if (primenu.root != primenu) {
		    var mWidth = primenu.offsetWidth;
		    var x, y, z;
		    var drus = primenu.root;
		    z = new pm_PageOffset.PageOffset(primenu.parent);
		    if(browser_IE || 1==1) {
			var hest = new pm_PageOffset.PageOffset(drus);
			y = z.y - hest.y + drus.offsetTop - 1;
			x = z.x + primenu.parent.offsetWidth - hest.x + drus.offsetLeft;
		    } else {
			y = z.y;
			x = z.x + primenu.parent.offsetWidth;
		    }
		    primenu.style.left = x + "px";
		    primenu.style.top  = y + "px";
		}
		if(primenu.offsetWidth < 1 || !browser_IE){
		    //alert(primenu.style.width + " =  " + mWidth);
		    primenu.style.width = mWidth;
		}

		if(primenu.offsetWidth < primenu.parent.offsetWidth){
			primenu.style.width = primenu.parent.offsetWidth + "px";
		    }
	}

	    /*
	      primenu.setPosition = function() {
		if (primenu.root != primenu) {
		    var mWidth = primenu.offsetWidth;
		    var x, y, z;
		    mParent = new pm_PageOffset.PageOffset(primenu.parent);
		    var mRoot = primenu.root;
		    var mRootOffset = new pm_PageOffset.PageOffset(mRoot);


		    y = mParent.y - 90;// -  mRootOffset.y + mRoot.offsetTop + mRoot.offsetHeight - 1;
		    x = mParent.x  - mRootOffset.x + mRoot.offsetLeft + primenu.parent.offsetWidth;
		    //alert("width: " + primenu.parent.offsetWidth );
		    primenu.style.left = x + "px";
		    primenu.style.top  = y + "px";

		    if(primenu.offsetWidth < 1 || !browser_IE){
			primenu.style.width = mWidth;
		    }

		    if(primenu.offsetWidth < primenu.parent.offsetWidth){
			primenu.style.width = primenu.parent.offsetWidth + "px";
		    }	    
		}
	    }
	    */  

	    primenu.onHide = function() {
		primenu.style.visibility = "hidden";
	    }

	    // return true if primenu is displayed
	    primenu.onShow = function() {
		primenu.style.visibility = "visible";
	    }

	    // return mseconds til onNoFocus event is to be sent;
	    primenu.onLostFocus = function() {
		// The timeout before the primenu hides
		return 1000;
	    }

	    primenu.onGotFocus = function() {
	    }

	    return primenu;
	}
};

var pm_removeClassName = {
	removeClassName : function(el, name) {
	  var i, curList, newList;

	  if (el.className == null)
	    return;

	  newList = new Array();
	  curList = el.className.split(" ");
	  for (i = 0; i < curList.length; i++)
	    if (curList[i] != name)
	      newList.push(curList[i]);
	  el.className = newList.join(" ");
	}
};


var pm_addClassName = {
	addClassName : function(el, name) {
	  var i, curList, newList;

	  if (el.className == null)
	    return;

	  newList = new Array();
	  curList = el.className.split(" ");
	  for (i = 0; i < curList.length; i++)
	    if (curList[i] != name)
	      newList.push(curList[i]);
	  newList.push(name);
	  el.className = newList.join(" ");
	}
};

var pm_PageOffset = {
	PageOffset : function(el) {
	    this.x = el.offsetLeft;
	    this.y = el.offsetTop;
	    if (el.offsetParent != null) {
		var z;
		z = new pm_PageOffset.PageOffset(el.offsetParent);
		this.x += z.x;
		this.y += z.y;
	    }

	    return;
	}
};