var nCurrentLevel;
var OldSelect;
var oldSelect2;
var oldLevel;
var oldParent=0;
var TimeOut=0;

// This can detect more browsers than the original browser detection solution.
// It is taken from http://www.quirksmode.org/js/detect.html 
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function CacheMenu(){
//	Clear2("0","0","0");
//alert("out");
}

 function ClearSubSection(sId){

 }

 function ClearAll(){
	//obj=document.all.tags("TABLE");
	obj=document.getElementsByTagName("TABLE");
	for (i=0;i < obj.length;i++){
		try
		{
				if ((obj[i].getAttribute("MENULEVEL")>1)){
						obj[i].style.display="none";
						obj[i].setAttribute("ISOPEN","0");
				}
		}
		catch(e)
		{
		}
	}
}

 function StopMenu() {
 	if (TimeOut=="1")
	{
		ClearAll();
		DeSelect(1);
		TimeOut=0;
	}
 }
function SetTimeOut(){
	TimeOut=1;
	window.setTimeout ("StopMenu();",1000);
}

function DeSelect(nLevel){
	//obj=document.all.tags("TR");
	obj=document.getElementsByTagName("TR");
	var s;
	for (i=0;i < obj.length;i++){
		try
		{
				if (obj[i].getAttribute("MENUTYPE") == "SECTION"){
					obj[i].bgColor=ColorMenuBack;
				}
				if (obj[i].getAttribute("MENUTYPE") == "SERVICES"){
					obj[i].bgColor=ColorMenuServices;
				}
				if (obj[i].getAttribute("MENUTYPE") == "SITEIN"){
					obj[i].bgColor=ColorMenuSiteIn;
					//alert("SiteIn");
				}
				if (obj[i].getAttribute("MENUTYPE") == "SITEOUT"){
					obj[i].bgColor=ColorMenuSiteOut;
				}
				if (obj[i].getAttribute("MENUTYPE") == "SOLVAY"){
					obj[i].bgColor=ColorMenuSolvay;
				}
				if (obj[i].getAttribute("MENUTYPE") == "HOME"){
					obj[i].bgColor=ColorMenuHome;
				}
		}
		catch(e)
		{
		}
	}
}

function Clear2(sId,sParentId,nCurrentLevel){
	stopEvent(e);
	obj=document.getElementsByTagName("TABLE");
	//obj=document.all.tags("TABLE");
	for (i=0;i < obj.length;i++){
		try
		{
				if (obj[i].getAttribute("MENULEVEL")>1){
					if (obj[i].getAttribute("MENULEVEL") >= nCurrentLevel){
						if (obj[i].id == sId){
						}
						else{
							if (obj[i].id == sParentId){
							}
							else{
								if (obj[i].getAttribute("STOPCLOSE") == "1"){
									obj[i].style.display="";
								}
								else{
									obj[i].style.display="none";
								}
							}
						}
					}
				}
		}
		catch(e)
		{
		}
	}
}

function Clear3(e,sId,sParentId,nCurrentLevel){
	//window.event.cancelBubble = true;
	if (!window.event){
		stopEvent(e);
	}
	else {
		stopEvent(window.event);
	}
//	obj=document.all.tags("TABLE");
	obj=document.getElementsByTagName("TABLE");
	for (i=0;i < obj.length;i++){
		try{
				if ((obj[i].getAttribute("MENULEVEL")>1) && (obj[i].getAttribute("MENULEVEL")>=nCurrentLevel)){
					if (obj[i].id!=sParentId){
						obj[i].style.display="none";
						obj[i].setAttribute("ISOPEN","0");
					}
				}
		}
		catch(e){
		}
	}
}

function test(e,sId,sParentId){
	var sTag
	if (!window.event){
		sTag = e.target.tagName;
		stopEvent(e);
	}
	else {
		sTag = event.srcElement.tagName;
		stopEvent(window.event);
	}
	var s;
	var nIncrement;
	var nHeight;
	var nParent;
	var positions;
	var booServices = false;
	if (BrowserDetect.browser == "Explorer") {
		if (event.srcElement.parentElement.getAttribute("MENUTYPE") == "SERVICES") {
			booServices = true;
		} else if (event.srcElement.parentElement.parentElement.getAttribute("MENUTYPE") == "SERVICES") {
			booServices = true;
		}
	} else {
		if (e.target.parentNode.getAttribute("MENUTYPE") == "SERVICES") {
			booServices = true;
		} else if (e.target.parentNode.parentNode.getAttribute("MENUTYPE") == "SERVICES") {
			booServices = true;
		}
	}
	try{
		TimeOut=0;
		if(sId=="MENULIGNE"){
			return;
		}		
		if(sId==OldSelect){
			return;
		}
		OldSelect=0;
		/*Text1.value=sId;
		Text2.value=sParentId;
		Text3.value=OldSelect;
		Text4.value=oldSelect2;
		Text5.value=event.srcElement.tagName;
		*/
		if (sTag =="TD"){
			// e.target is the W3 conform JS, however it is not recognized by IE
			if (BrowserDetect.browser == "Explorer") {
				nCurrentLevel=event.srcElement.parentElement.getAttribute("MENULEVEL");
				nIncrement=event.srcElement.parentElement.getAttribute("INCREMENT");
				nHeight=event.srcElement.parentElement.clientHeight;
				nParent=event.srcElement.parentElement.getAttribute("PARENTITEM");
			} else {
				nCurrentLevel=e.target.parentNode.getAttribute("MENULEVEL");
				nIncrement=e.target.parentNode.getAttribute("INCREMENT");
				nHeight=e.target.parentNode.clientHeight;
				nParent=e.target.parentNode.getAttribute("PARENTITEM");
			}
		} else {
            if (sTag =="SUP"){
               return;
            }else{
				if (BrowserDetect.browser == "Explorer") {
					nCurrentLevel=event.srcElement.parentElement.parentElement.getAttribute("MENULEVEL");
					nIncrement=event.srcElement.parentElement.parentElement.getAttribute("INCREMENT");
					nHeight=event.srcElement.parentElement.parentElement.clientHeight;
					nParent=event.srcElement.parentElement.parentElement.getAttribute("PARENTITEM");
				} else {
					nCurrentLevel=e.target.parentNode.parentNode.getAttribute("MENULEVEL");
					nIncrement=e.target.parentNode.parentNode.getAttribute("INCREMENT");
					nHeight= e.target.parentNode.parentNode.clientHeight;
					nParent=e.target.parentNode.parentNode.getAttribute("PARENTITEM");
				}
			}
		}
		DeSelect(nCurrentLevel);						
		if (BrowserDetect.browser == "Explorer") {
			if (event.srcElement.parentElement.parentElement.tagName=='TR')
			{
				if (booServices){
					event.srcElement.parentElement.parentElement.bgColor=ColorServicesSelect;
				}
				else{
					event.srcElement.parentElement.parentElement.bgColor=ColorMenuSelect;
				}
			}
			else{
				if (booServices){
					event.srcElement.parentElement.bgColor=ColorServicesSelect;
				}
				else{
					event.srcElement.parentElement.bgColor=ColorMenuSelect;
				}
			}
		} else {
			if (e.target.parentNode.parentNode.tagName=='TR'){
				if (booServices){
					e.target.parentNode.parentNode.bgColor=ColorServicesSelect;
				}
				else{
					e.target.parentNode.parentNode.bgColor=ColorMenuSelect;
				}
			}
			else{
				if (booServices){
					e.target.parentNode.bgColor=ColorServicesSelect;
				}
				else{
					try{
						e.target.parentNode.bgColor=ColorMenuSelect;
					}
					catch(exx){alert("Cannot colour this.");}
				}
			}
		}
		Clear3(e,sId,sParentId,nCurrentLevel);
		var booIsopen = false;
		try{ // document.getElementById may have no properties here.
			if (document.getElementById(sId).getAttribute("ISOPEN")=="0") {
				booIsopen = true;

			}
		}
		catch(ex){}
			if (booIsopen){
				if (BrowserDetect.browser == "Explorer") {
					var posY =( event.clientY+document.body.scrollTop - event.offsetY ) - 3; //pourquoi -3 pfffff //Parce que l'Internet Explorer est nul ! No, seriously it's a border or something. If you embed an IE object into another aplication the -3 makes it worse! May well be, this is being fixed in a future version of IE.
					if (document.all(sId).getAttribute("MENULEVEL")<3) {
						document.all(sId).style.posTop=posY;
					} else {
						document.all(sId).style.posTop=((nIncrement-1) * (nHeight + 1)); //+1 a cause de la ligne de separation
					}
					document.all(sId).setAttribute("ISOPEN","1");
					if (document.all(sId).getAttribute("MENULEVEL")>2){
						document.all(sId).style.posLeft=document.all(sId).parentElement.parentElement.clientWidth;
					} else {
						document.all(sId).style.posLeft=GetDivLeft(sParentId)+145;//145;  modif provenant de SLVITMenu
					}
				} else {
					positions = findPos(e.target);
					if ((BrowserDetect.browser == "Opera" || BrowserDetect.browser == "Safari") && nCurrentLevel > 1 && !booServices) {
						// Both, current version of Op and AS, seem to have problems with the "absolute" postion in CSS
						document.getElementById(sId).style.top= ((nIncrement-1) * (nHeight + 1)  + "px");
					} else {
						document.getElementById(sId).style.top=(positions[1] - 1 + "px"); //Warum -1? tsssss //See what I mean?
				}
					document.getElementById(sId).setAttribute("ISOPEN","1");
					if (BrowserDetect.browser == "Opera" && nCurrentLevel > 2) {
						// The solution for Opera ...
						document.getElementById(sId).style.left = positions[0] / 2 - 2 + "px";
					} else if (BrowserDetect.browser == "Safari" && !booServices) {
						// ... differs from the solution for Apple Safari ...
						document.getElementById(sId).style.left = positions[0] / nCurrentLevel + "px";
					} else {
						// ... and this SHOULD be the correct code!
						document.getElementById(sId).style.left = positions[0] + "px";
					}
				}
		document.getElementById(sId).style.display="";}
		oldSelect2=OldSelect;
		OldSelect=sId;
		oldLevel=nCurrentLevel;	
		oldParent=nParent;
	} catch (ee) {"ERROR: " + alert(ee);}
}

// This sould be used only by IE
function GetDivLeft(param_divId) {
	var num_x = 0;
	var el;
	
	if(GetBrowser() == "ie4"){
		el = document.all[param_divId];
	}
	if((GetBrowser() == "ie5") || (GetBrowser() == "ns6")){
		el = document.getElementById(param_divId);
	}
	if((GetBrowser() == "ie4") || (GetBrowser() == "ie5") || (GetBrowser() == "ns6")){
		while (el != null) {
			num_x += el.offsetLeft;
			el = el.offsetParent;
		}
	}	
	return parseInt(num_x);
}

// IMHO this should be marked as "deprecated" as BrowserDetect offers more browsers and more details
function GetBrowser(){
	if(document.layers){
		return "ns4";
	}
	if((document.all) && (!document.getElementById)){
		return "ie4";
	}
	if((document.all) && (document.getElementById)){
		return "ie5";
	}
	if((document.getElementById) && (!document.layers) && (!document.all)){
		return "ns6";
	}
}

// This function detects the position
function findPos(object) {
	var curleft = curtop = 0;
	var corleft = 0;
	var object2 = object;
	var cortop = 0;
	do {
		object2 = object2.parentNode;
	} while (object2.tagName.toLowerCase() != "table")
	object = object.parentNode;

	if (object.tagName.toLowerCase() != "tr") {
		object = object.parentNode;
	}
	corleft = object2.clientWidth;
	cortop = object2.clientHeight;
	if (object.offsetParent) {
		do {
			curleft += object.offsetLeft;
			curtop += object.offsetTop;
		} while (object = object.offsetParent);
	}
	curleft = curleft + corleft;
	return [curleft,curtop];
}

function stopEvent(e) {
	if(!e) var e = window.event;
	
	//e.cancelBubble is supported by IE - this will kill the bubbling process.
	e.cancelBubble = true;
	e.returnValue = false;

	//e.stopPropagation works only in Firefox.
	if (e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
	}
	return false;
}

