var debugOn=false;

function toggleLayer(theLayer, img) {
	var style2;
	if(document.getElementById) {
		//This is the way the standards work...
		style2 = document.getElementById(theLayer).style;
		style2.display = style2.display? '':'block';
	} else if(document.all) {
			//This is the way old msie versions work...
			style2 = document.all[theLayer].style;
			style2.display = style2.display? '':'block';
		} else if(document.layers) {
				//This is the way ns4 works...
				style2 = document.layers[theLayer].style;
				style2.display = style2.display? '':'block';
	}
	if(img!=null) {
		swapImage(img);
	}
}

function swapImage(theImage) {
	var imgHandle;
	if(document.getElementById) {
		imgHandle=document.getElementById(theImage);
	}	
	if(imgHandle!=null) {
		imgHandle.src.indexOf('arrow_main_down')>0?imgHandle.src='images/arrow_main_up.gif':imgHandle.src='images/arrow_main_down.gif';
	}
}

function changeBackGroundColor(theLayer) {
	var theStyle;
	if(document.getElementById) {
		if(document.getElementById(theLayer).className!='subMenuItemSelected') {
			document.getElementById(theLayer).className=(document.getElementById(theLayer).className=='subMenuItem')?'subMenuItemHover':'subMenuItem';
		}
	}	
}

var requester=new Array;
function instantiateAsync(targetLayer, xmlMenuDefinition) {
	try {
		index=requester.length;		
		requester[index] = new Array(new XMLHttpRequest(), targetLayer, xmlMenuDefinition, 0);
	} catch (error) { 
		try {
			requester[index] = new Array(new ActiveXObject("Microsoft.XMLHTTP"), targetLayer, xmlMenuDefinition, 0); 
		} catch (error) {
			alert(error);
			return; 
		} 
	}
	try {
		requester[index][0].onreadystatechange = stateHandler;
		requester[index][0].open('GET', xmlMenuDefinition);
		requester[index][0].send(null);
	} catch (error) {
		alert(error);
		return false;
	}
	return;
}

function stateHandler() {
	for(k=0;k<requester.length;k++) {
		//Check flag if not already handled...
		if(requester[k][3]==0) {
			if(requester[k][0].readyState==4) { 
				if(requester[k][0].status==200) {
					//Set flagvalue to 1=handled...
					requester[k][3]=1; 
					success(requester[k][0], requester[k][1]);
				} else {
					//alert(requester[k][0].readyState + ' -> ' + requester[k][0].status);
				}
			}		
		}
	}
	return true;
}

function success(requesterObj, targetLayer) {
	var menuNodes;
	var menuPosLeft, menuPosTop;
	if(requesterObj.responseXML.getElementsByTagName('menu').length==0) {
		menuNodes = requesterObj.responseXML.getElementsByTagName('menu:menu')[0];
		menuPosLeft = requesterObj.responseXML.getElementsByTagName('menu:posleft')[0];
		menuPosTop = requesterObj.responseXML.getElementsByTagName('menu:postop')[0];
	} else {
		menuNodes = requesterObj.responseXML.getElementsByTagName('menu')[0];
		menuPosLeft = requesterObj.responseXML.getElementsByTagName('posleft')[0];
		menuPosTop = requesterObj.responseXML.getElementsByTagName('postop')[0];
	}
	buildMenu(targetLayer, menuNodes, menuPosLeft, menuPosTop);
	return true;
}

var xmlDoc;
function loadXML(xmlFile) {
	//load xml file...
	// code for IE...

	//Patch to prevent caching in Mozilla
	xmlFile += '?id='+ escape((new Date()).toString());
	//alert(xmlFile);

	if(window.ActiveXObject) {
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		return xmlDoc.load(xmlFile);
	}
	// code for Mozilla, etc...
	else if(document.implementation && document.implementation.createDocument) {
		//xmlDoc = document.implementation.createDocument("menu", "container", null);
		xmlDoc= document.implementation.createDocument("", "", null);
		xmlDoc.async=false;
		xmlDoc.load(xmlFile);
		} else {
			//alert('Your browser cannot handle this script');
	}
}

function instantiateInsync(targetLayer, xmlMenu) {
	var menuNodes;
	var menuPosLeft, menuPosTop;
	var menuContent;
	if(document.getElementById) {
		loadXML(xmlMenu);
		menuContent = xmlDoc;
		if(menuContent.getElementsByTagName('menu').length==0) {
			menuNodes = menuContent.getElementsByTagName('menu:menu')[0];
			menuPosLeft = menuContent.getElementsByTagName('menu:posleft')[0];
			menuPosTop = menuContent.getElementsByTagName('menu:postop')[0];
		} else {
			menuNodes = menuContent.getElementsByTagName('menu')[0];
			menuPosLeft = menuContent.getElementsByTagName('posleft')[0];
			menuPosTop = menuContent.getElementsByTagName('postop')[0];
		}
		buildMenu(targetLayer, menuNodes, menuPosLeft, menuPosTop);
	}
	return;
}

function buildMenu(targetLayer, menuNodes, menuPosLeft, menuPosTop) {
	//Retrieve optional positioning settings from xml menu configurationfile...
	var top, left;
	if(menuPosLeft!=null&&menuPosTop!=null) {
		top=menuPosTop.childNodes[0].nodeValue;
		left=menuPosLeft.childNodes[0].nodeValue;
		document.getElementById(targetLayer).style.top=top;
		document.getElementById(targetLayer).style.left=left;
	}	
	var str='';
	var i;
	//Setup main menu items...
	for(i=0;i<menuNodes.childNodes.length;i++) {
		//alert('onClick="javascript:toggleLayer(\'mainmenuitem_' + i + '\');"');
		try {
			if(menuNodes.childNodes[i].childNodes[0].childNodes.length>0) {
				str+='<div id=mainmenuitem_' + targetLayer + '_' + i + ' class=mainMenuItem onClick="javascript:toggleLayer(\'submenu_' + targetLayer + '_' + i + '\',\'image_' + targetLayer + '_' + i + '\');return true;">';
				str+='<table cellpadding="0" cellspacing="0" class=mainMenuItem width="100%"><tr><td width="99%">&nbsp;' + menuNodes.childNodes[i].childNodes[0].childNodes[0].nodeValue + '</td><td align="right" valign="center"><img id="' + 'image_' + targetLayer + '_' + i + '" src="images/arrow_main_down.gif" /></td><td width="1"><img src="images/spacer.gif" width="1" height="1"></td></tr></table>';
				str+=addSubItems(menuNodes.childNodes[i].childNodes, i, targetLayer);		
				str+='</div>';
			}
		} catch (error) {
			document.getElementById(targetLayer).innerHTML=error;
		}
	}
	document.getElementById(targetLayer).innerHTML=str;
	//Debugging information...
	if(debugOn) {
		document.getElementById('debugWin').value=str;
	}
}

function addSubItems(nodes, index, targetLayer) {
	//alert('Number of childs: ' + nodes.length);
	var str='';
	var j;
	var aLink;
	var aTarget;
	//First child is always a main menu item...
	str+='<div id=submenu_' + targetLayer + '_' + index + ' class=subMenu onClick="event.cancelBubble=true;">';
	for(j=1;j<nodes.length;j++) {
		//Setup submenu items...
		if (nodes[j].attributes!=null && nodes[j].attributes[0]!=null) {
			aLink=nodes[j].getAttribute('action'); 
			aTarget=nodes[j].getAttribute('target');
		}		
		if(aLink!=null) {
			if(aTarget=='_blank') {
				str+='<div id=submenuitem_' + targetLayer + '_' + index + '_'+ j + ' class=subMenuItem onclick="window.open(\'' + aLink + '\');" onMouseOver="changeBackGroundColor(\'submenuitem_' + targetLayer + '_' + index + '_'+ j + '\');" onMouseOut="changeBackGroundColor(\'submenuitem_' + targetLayer + '_' + index + '_'+ j + '\');">' + nodes[j].childNodes[0].nodeValue;
			} else {
				str+='<div id=submenuitem_' + targetLayer + '_' + index + '_'+ j + ' class=subMenuItem onclick="document.location=\'' + aLink + '\';"  onMouseOver="changeBackGroundColor(\'submenuitem_' + targetLayer + '_' + index + '_'+ j + '\');" onMouseOut="changeBackGroundColor(\'submenuitem_' + targetLayer + '_' + index + '_'+ j + '\');">' + nodes[j].childNodes[0].nodeValue;
			}
			aLink=null;
			aTarget=null;
		} else {
			str+='<div id=submenuitem_' + targetLayer + '_' + index + '_'+ j + ' class=subMenuItem onMouseOver="changeBackGroundColor(\'submenuitem_' + targetLayer + '_' + index + '_'+ j + '\');"  onMouseOut="changeBackGroundColor(\'submenuitem_' + targetLayer + '_' + index + '_'+ j + '\');">' + nodes[j].childNodes[0].nodeValue;
		}
		str+='</div>';
	}
	str+='</div>';
	return str;
}

function setState(targetLayer, mainMenuItemNr, subMenuItemNr) {
	var layerId='submenu_' + targetLayer + '_' + (mainMenuItemNr -1);	
	if(document.getElementById) {
		if(document.getElementById(layerId)!=null) {
				toggleLayer(layerId, 'image_' + targetLayer + '_' + (mainMenuItemNr -1));
				if(subMenuItemNr!=null) {
				    var subMenuItemLayerId='submenuitem_' + targetLayer + '_' + (mainMenuItemNr -1) + '_'+ (subMenuItemNr);
				    document.getElementById(subMenuItemLayerId).className='subMenuItemSelected';				    
				}				
		} else {
			//...
		}
	}
}

function dropDownMenu(i) {
    if(i<8) {
        setTimeout('setState(\'theMenu\','+i+',null)',200);
        setTimeout('dropDownMenu('+ ++i +')',200); 
    }
}