// JavaScript Document
/* _____________________________________________________ 
  |  Parts of this Document depends on fuctions         |
  |  which are in a other Document named "default.js".  |
  |  Be sure you have both Documents link to the        |
  |  page which is using the function found here.       |
  |_____________________________________________________|*/

var xmlFile = '/lib/xml/menus.xml';
/******************************************************************/
//* Varables defind with globle scope.
var xmlMenuDoc = null;
var menuType = null, hideDelay = null, menuSpeed = null, menuPixalAdvance = null;
var objCurrent = null;
var objTimeout = null;
var menuTimer = null;
var menu = [{incNum:0, clipLoc:0, stopLoc:0, startLoc:0}];
/******************************************************************/
function dropDown_MenuOpener () {
	menu.incNum += menuPixalAdvance;
	menu.clipLoc -= menu.incNum;
	menu.startLoc += menu.incNum;
	if (menu.clipLoc >0) {
		menu.style.clip = "rect(" +menu.clipLoc +"px auto auto auto)";
		menu.style.top = menu.startLoc +"px";
	}
	else if (menu.startLoc < menu.stopLoc) {
		menu.style.top = menu.startLoc +"px";
	}
	else {
		menu.style.clip = "rect(auto auto auto auto)";
		menu.style.top = menu.stopLoc +"px";
		clearInterval(menuTimer);
	} 
}
/******************************************************************/
function slideOver_MenuOpener () {
	menu.incNum += menuPixalAdvance;
	menu.clipLoc -= menu.incNum;
	menu.startLoc += menu.incNum;
	if (menu.clipLoc > 0) {
		menu.style.clip = "rect(auto auto auto " +menu.clipLoc +"px)";
		menu.style.left = menu.startLoc +"px";
	}
	else if (menu.startLoc < menu.stopLoc) {
		menu.style.left = menu.startLoc +"px";
	}
	else {
		menu.style.clip = "rect(auto auto auto auto)";
		menu.style.left = menu.stopLoc +"px";
		clearInterval(menuTimer);
	}
}
/******************************************************************/
function initMenu(obj, x, y, e) {
  	if ((menu =obj) != null) {
		clearInterval(menuTimer);
		menu.style.clip = "rect(" +obj.offsetHeight + "px auto auto " + obj.offsetWidth +"px)";
		menu.style.left = (findPos(e)[0] +x) +"px";
		menu.style.top = (findPos(e)[1] +y) +"px";
		menu.incNum = 0;
		switch (menuType) {
			case 'dropDown':
    			menu.clipLoc = menu.offsetHeight;
				menu.stopLoc = findPos(e)[1] + e.offsetHeight + y;
    			menu.startLoc = (menu.stopLoc -menu.offsetHeight);
				menuTimer = setInterval("dropDown_MenuOpener()", menuSpeed);
				break;
			case 'slideOver':
    			menu.clipLoc = menu.offsetWidth;
				menu.stopLoc = findPos(e)[0] + e.offsetWidth + x;
    			menu.startLoc = (menu.stopLoc - menu.offsetWidth);
				menuTimer = setInterval("slideOver_MenuOpener()", menuSpeed);
				break;
			case 'growingBox':
				menu.style.clip = "rect(auto auto auto auto)";
				break;
			case 'fadeIn':
				menu.style.clip = "rect(auto auto auto auto)";
				break;
			case 'popUpBeside':
				menu.style.left = (findPos(e)[0] + e.offsetWidth + x) +"px";
				menu.style.clip = "rect(auto auto auto auto)";
				break;
			case 'popUpBeneath':
				menu.style.top = (findPos(e)[1] + e.offsetHeight + y) +"px";
				menu.style.clip = "rect(auto auto auto auto)";
				break;
			case 'popUp':
				menu.style.clip = "rect(auto auto auto auto)";
				break;
		}
		setTimeout('menu.style.visibility ="visible"', 4);
	}
	else {
		alert("ERROR: Object Not Found!!!");
	}
	return;
}
/******************************************************************/
/* __Notes for use of changeLayers()_____________________________________ 
  |  **Arrguments**                                                      |
  |    objName        =>  layer name beening chamged                     |
  |    objVisibility  =>  "show": layer visible || "hide": layer hidden  |
  |______________________________________________________________________|*/
function changeMenus(objName, objVisibility, x, y) {
  if ((obj = MM_findObj(objName)) != null) {
	if ((objVisibility == 'show') && (objCurrent !=objName)) {
	  x = (x != null)?x:0, y = (y != null)?y:0;
	  var e = (window.event)?event.srcElement:arguments.callee.caller.arguments[0].target;
	  initMenu(obj, x, y, e);
	}
	else if (objVisibility == 'show')
	  obj.style.visibility = "visible";
	else
	  obj.style.visibility = "hidden";
	if ((objCurrent != objName) && (objCurrent != null)) //* already a layer, hide it.
	  changeMenus(objCurrent, 'hide');
	objCurrent = (objVisibility == 'show')?objName:null;
	if (objTimeout != null) {
	  clearTimeout(objTimeout);
	  objTimeout = null;
	}
  }
}
/******************************************************************/
/* __Notes for hideCurrent()___________________
  |  No Arrguments!!! Hides the current menu.  |
  |____________________________________________|*/
function hideCurrent() {
  if (objCurrent != null)
	changeMenus(objCurrent, 'hide');
}
/******************************************************************/
/* __Notes for toggleTimer()_______________________________
  |  **Arrguments**                                        |
  |    toggle => 0: timer off || 1: timer on               |
  |  **Useage**                                            |
  |    Turns the timer off and on.                         |
  |    When turning timer on it is reset to 'hideDelay'    |
  |    After the time is over the menu showing is hidden.  |
  |________________________________________________________|*/
function toggleTimer(toggle) { 
  if (toggle == 0 && objTimeout != null) //* turn timer off
	clearTimeout(objTimeout);
  else if (objCurrent != null)
	objTimeout = setTimeout("hideCurrent()", hideDelay);
}
/******************************************************************/
function loadFileXML(xmlFile) {
  var xmlDoc;
  if (document.implementation.createDocument)  //* Create XML Document for W3C DOM compatible
    xmlDoc = document.implementation.createDocument("", "", null);
  else if (window.ActiveXObject)  //* Create XML Document for IE compatible
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  else {
    alert('Your browser can\'t handle this script');  
	return;  
  }
  xmlDoc.async = false;
  xmlDoc.load(xmlFile);  //* Load XML File into Document
  return xmlDoc;
}
/******************************************************************/
/* __Example of what the below script builds________________________________________________________________ 
  |                                                                                                         |
  |  <div class="navMenu" id=" -[-Centers-]- " onMouseOut="toggleTimer(1);" onMouseOver="toggleTimer(0);"><ul>  |
  |    <li><a href=" -[-centers/locations/index.html-]- "> -[-Locations-]- </a></li>                                 |
  |    <li><a href=" -[-centers/hours/index.html-]- "> -[-Hours-]- </a></li>                                         |
  |  </ul></div>                                                                                                 |
  |_________________________________________________________________________________________________________|*/
function buildMenus(xmlFile) {
  xmlMenuDoc = loadFileXML(xmlFile);
  if (xmlMenuDoc == null) //* Error in XML, Exit. 
    return;
  var menus = xmlMenuDoc.getElementsByTagName('menu');
  for (n = 0 ; n < menus.length ; n++) {
	var menu = document.createElement('div');
	menu.setAttribute('class', 'navMenu');
	menu.setAttribute('onMouseOver', 'toggleTimer(0);');
	menu.setAttribute('onMouseOut', 'toggleTimer(1);');
	menu.setAttribute('id', menus[n].getAttribute('name'));
	var menuGroup = document.createElement('ul');
    var items = menus[n].getElementsByTagName('item');
	for (i = 0 ; i < items.length ; i++) {
		var menuRow = document.createElement('li');		
		var menuItem = document.createElement('a');
		var urlNode = items[i].getElementsByTagName('url');
		//menuItem.setAttribute('href', (baseURL + urlNode[0].firstChild.nodeValue));  //baseURL is defind at the top of default.js.
		menuItem.setAttribute('href', (urlNode[0].firstChild.nodeValue)); 
		var textNode = items[i].getElementsByTagName('text');
		var text = document.createTextNode(textNode[0].firstChild.nodeValue);
		menuItem.appendChild(text);
		menuRow.appendChild(menuItem);		
	    menuGroup.appendChild(menuRow);
	}
	menu.appendChild(menuGroup);	
	var container = document.createElement('container');
	container.appendChild(menu);
	document.write(container.innerHTML);
  }
}
/******************************************************************/
function menus(xmlFile) {
	buildMenus(xmlFile);  //* Builds menues after its done loading the XML Menu Document.
	//* Sets the values as defind in the XML Menu Document.
	menuType = xmlMenuDoc.getElementsByTagName('menuType')[0].firstChild.nodeValue;
	hideDelay = parseFloat(xmlMenuDoc.getElementsByTagName('hideDelay')[0].firstChild.nodeValue);
	menuSpeed = parseFloat(xmlMenuDoc.getElementsByTagName('menuSpeed')[0].firstChild.nodeValue);
	menuPixalAdvance = parseFloat(xmlMenuDoc.getElementsByTagName('menuPixalAdvance')[0].firstChild.nodeValue);
}
/******************************************************************/
menus(xmlFile);
/******************************************************************/