/****************** COMMON SCRIPTS ********************/

var domEnabled = (document.getElementById);


/****************** GENERIC MENU SCRIPT ********************/

/* config */
var debugEnabled = false;

/* debug function */
function startDebug() {
	debugEnabled = true;
	w = 200
	h = 600
	// LeftPosition = ((screen.width) ? (screen.width-w)/2 : 0) + 285;
	// TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
	LeftPosition = 0
	TopPosition = 0
	settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars=no,resizable=no'
	winDebug = window.open('','winDebug',settings)
	winDebug.document.writeln('<title>_debug_</title><body style="margin: 3px;font-family:Arial; font-size: 7pt;">')
}
function debug(msg) { if(debugEnabled) winDebug.document.writeln(msg+'<br>'); }
if(debugEnabled) startDebug();
/* end debug */

// Inits a menu bar
function setupMenubar(barId) {
	if(!domEnabled) return;
	debug("setup::" + barId);
	var menuBar = document.getElementById(barId);
	menuBar.details = new Object();
	menuBar.details.width = parseInt(menuBar.offsetWidth);
	menuBar.details.itemsWidth = 0;
	menuBar.details.itemCount = 0;
	mb_setupMenu(menuBar, menuBar);
	menuBar.style.visibility = 'visible';
}

var mb_temp_id=1;
var menuBarItemXgraze;
// Sets up a menu (and its menu items)
function mb_setupMenu(menu, bar) {
	// only <ul> (menus)
	if(menu.nodeName == "UL") {
		// add functions and props.
		menu.hide = mb_hideMenu;
		menu.show = mb_showMenu;
		menu.visible = true;
		if(menu != bar) {
			// !bar
			menu.id = bar.id + "-" + (++mb_temp_id);
			menu.hide();
		}

		// count menu items
		var itemCount = 0;
		for(var i=0; i<menu.childNodes.length; i++) {
			if(menu.childNodes[i].nodeName == "LI") {
				var menuItem = menu.childNodes[i];
				if(menu == bar) {
					bar.details.itemsWidth += menuItem.getElementsByTagName('SPAN')[0].offsetWidth;
					bar.details.itemsCount++;
				}
				itemCount++;
			}
		}
		
		if(menu == bar) {
			bar.details.itemCount = itemCount;
			if(bar.details.width == 0) { 
				bar.style.border = "1px solid red";
				bar.details.width = bar.offsetWidth;
				bar.style.border = "";
				//bar.details.width = bar.details.itemsWidth + (bar.details.itemCount*menuBarItemXgraze);
			}
			menuBarItemXgraze = Math.floor( ((bar.details.width - bar.details.itemsWidth) / bar.details.itemCount) );
		}
		
		/*var barSize = bar.offsetWidth;*/
		
		var menuItem;
		var x = 0;
		var lastX = 0;
		for(var i=0; i<menu.childNodes.length; i++) {
			// loop through menu items (<il>)
			if(menu.childNodes[i].nodeName == "LI") {
				menuItem = menu.childNodes[i];
				menuItemLink = menu.childNodes[i].getElementsByTagName('A')[0];
				
				var spanElem = menuItem.getElementsByTagName('SPAN')[0];

				if(menu == bar) {
					if(x==0) {
						menuItem.className = "firstItem";
					} else if(x==(itemCount-1)) {
						menuItem.className = "lastItem";
					}
					// bar, set X width & position
					menuItem.style.left = lastX;
					//debug("menuItem.offsetWidth:" + menuItem.getElementsByTagName('SPAN')[0].offsetWidth);
					// menuItem.style.width = spanElem.offsetWidth + menuBarItemXgraze;
					menuItem.style.width = spanElem.offsetWidth + 14;
					lastX += menuItem.offsetWidth;
				} else {
					// !bar, set Y position
					menuItem.style.top = menuItem.offsetHeight * x;
				}
				spanElem.style.display = 'block';

				// item props.
				menuItem.bar = bar;
				menuItemLink.bar = bar;
				menuItem.menu = menu;
				menuItemLink.menu = menu;
				menuItem.subMenu = null;
				menuItemLink.subMenu = null;
				// item events
				menuItemLink.onmouseover = mb_activateMenu;
				menuItemLink.onmouseout = mb_deActivateMenu;
				// check for a submenu
				if(menu.childNodes[i].getElementsByTagName('UL').length > 0) {
					// submenu
					var submenu = menu.childNodes[i].getElementsByTagName('UL')[0];
					if(submenu.getElementsByTagName('LI').length > 0) {
						submenu.direction = 1;
						var submenuRight;
						if(menu != bar) {
							submenuRight = menu.menuItem.offsetWidth + menu.menuItem.offsetLeft + menuItem.offsetWidth;
						} else {
							submenuRight = (submenu.getElementsByTagName('LI')[0].offsetWidth + menuItem.offsetLeft);
						}
						if(submenuRight > bar.details.width) submenu.direction = -1;

						if(menu == bar) {
							// bar, setup submenu position;
							submenu.style.top = menuItem.offsetHeight;
							// submenu beyond bar's width, correct submenu X pos.
							if(submenu.direction == -1) submenu.style.left = (bar.details.width - submenuRight);
						} else {
							var _parent = menuItem;
							// !bar, setup submenu x/y position
							menuItemLink.className = 'withMenu';
							//debug( submenu.direction + ";" + menu.direction);
							if(submenu.direction == -1 || menu.direction == -1) {
								submenu.style.left = -menuItem.offsetWidth;
							} else {
								submenu.style.left = menuItem.offsetWidth;
							}
							submenu.style.top = submenu.offsetTop - menuItem.offsetHeight;
						}

						// link submenu to parent menuitem and parentMenu (if appliable)
						menuItem.subMenu = submenu;
						menuItemLink.subMenu = submenu;
						submenu.menuItem = menuItem;
						if(menu != bar) submenu.parentMenu = menu;
						// setup submenu
						mb_setupMenu(submenu, bar);
					}
				}
				x++;
			}
		}

		// find out menu position		
		var menuX = 0;
		var menuY = 0;
		_parent = menu;
		while(_parent) {
			menuX += _parent.offsetLeft;
			menuY += _parent.offsetTop;
			_parent = _parent.offsetParent;
		}
		 //debug("menu '" + menu.id + "' bounds: X:"+menuX+";Y:"+menuY);
		menu.x = menuX;
		menu.y = menuY;
		// find out menu size
		menu.width = menu.getElementsByTagName('LI')[0].offsetWidth;
		menu.height = menuItem.offsetTop + menuItem.offsetHeight;
	}
}

function mb_activateMenu() {

	if(this.bar.visibleMenu) {
		var _submenu = this.bar.visibleMenu;
		while(true) {
			_submenu.visible = false;
			if(!_submenu.parentMenu) break;
			_submenu = _submenu.parentMenu;
		}
	}
	
	var _submenu = this.menu;
	if(this.subMenu) {
		_submenu = this.subMenu;
		_submenu.selectedItem = this.subMenu.menuItem;
	}
	while(true) {
		_submenu.visible = true;
		_submenu.show();
		if(!_submenu.parentMenu) break;
		_submenu = _submenu.parentMenu;
	}

	if(this.bar.visibleMenu ) {
		var _submenu = this.bar.visibleMenu;
		while(true) {
			if(!_submenu.visible) {
				_submenu.hide();
				_submenu.selectedItem = null;
			}
			if(!_submenu.parentMenu) break;
			_submenu = _submenu.parentMenu;
		}
	}
	
	if(this.subMenu) {
		this.bar.visibleMenu = this.subMenu;
		this.subMenu.onmouseout = mb_checkMousePos;
	}
}

function mb_deActivateMenu(evt) {

	evt = (evt) ? evt : event;
	// mouse X relative to page
	if(evt.pageX) {
		mouseY = evt.pageY;
	} else {
		mouseY = evt.y;
	}

	var y = 1;
	_parent = this;
	while(_parent) {
		y += _parent.offsetTop;
		_parent = _parent.offsetParent;
	}
	if(mouseY <= y && this.bar.visibleMenu) this.bar.visibleMenu.hide();
	
}

function mb_checkMousePos(evt) {
	// event obj
	evt = (evt) ? evt : event;
	// menu LeftX, TopY relative to page
	var menuX = this.x;
	var menuY = this.y;
	// mouse X relative to page
	if(evt.pageX) {
		mouseX = evt.pageX;
		mouseY = evt.pageY;
	} else {
		mouseX = evt.x;
		mouseY = evt.y;
	}
	mouseX--;
	// menu RightX
	var menuMaxX = menuX + this.width;
	var menuMaxY = menuY + this.height;
		
	// hide if cursor outside menu box
	if(mouseX >= menuMaxX || mouseX <= menuX || mouseY >= menuMaxY) {
		var _submenu = this;
		if(this.menuItem.bar.visibileMenu) _submenu = this.menuItem.bar.visibileMenu;

		var submenus = this.getElementsByTagName('UL');
		for(var i=0; i<submenus.length; i++) {
			if(submenus[i].visible) {
				submenus[i].visible = false;
				submenus[i].hide();
			}
		}
		while(true) {
			// debug("!menuHide!");
			_submenu.onmouseout = null;
			_submenu.visible = false;
			_submenu.hide();
			if(!_submenu.parentMenu) break;
			_submenu = _submenu.parentMenu;
		}
		this.menuItem.bar.visibileMenu = null;
	}
}



// show menu
function mb_showMenu() {
	/* */
	this.style.visibility = 'visible';
	/* */
}

// nide menu
function mb_hideMenu() {
	/* */
	this.style.visibility = 'hidden';
	/* */
}
// popup simple
function popup(popup_url,name,width,height) {
      size = 'width=' + width + ',height=' + height;
      newwindow = window.open(popup_url,name,'resizable=no,menubar=no,location=no,toolbar=no,status=no,scrollbars=yes,directories=no,'+size);
}