//Gets xml string. Returns XMLDOM object.
function GetXMLText(xmlText)
{
	var xmlDoc = null;
	try 
	{
		if(window.ActiveXObject) 
		{ //IE
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async = false;
			xmlDoc.loadXML(xmlText);
		}
		else 
		{ //Mozilla
			if(document.implementation && document.implementation.createDocument) 
			{
				var parser = new DOMParser();
				xmlDoc = parser.parseFromString(xmlText, "text/xml");
			}
		}
	}
	catch(ex) 
	{	
		window.status = "Error: " + ex.message;
	}
	return xmlDoc;
}
    
    
//Builds HTML of NavBar. num - page part number; xslContainer - nothing; nbContainerID - container of navbar 
function BuildNavBar(num, xslContainer, nbContainerID)
{

	var str1 = eval("nbxml"+num); //String with XML
	var str2 = eval("nbxsl"+num); //String with XSL
	var xmlDoc = GetXMLText(str1);
	var xslDoc = GetXMLText(str2);
    var nbCont = document.getElementById("idPartContent" + nbContainerID);
	if(xmlDoc && xslDoc && nbCont && str1 && str2)
	{
		try
		{
			if(IsMSIE())
			{//IE
			    var tmp = xmlDoc.transformNode(xslDoc);
				nbCont.insertAdjacentHTML("beforeEnd", tmp);
			}
			else
			{//Mozilla
				var xsltProcessor = new XSLTProcessor();
				xsltProcessor.importStylesheet(xslDoc);
				var fragment = xsltProcessor.transformToFragment(xmlDoc, document)
				nbCont.appendChild(fragment);
			}
			GetSelectedElement(num); //Opens navbar tree and select a selected element
		}
		catch(ex)
		{ 
			window.status = "Error: " + ex.message;
		}
	}
}

//Opens navbar tree and select a selected element
function GetSelectedElement(num)
{
	//	CHANGE ERROR: (Serge) 29/01/2008
	//	following code worked with non-standard property (document.all)
	//	and didn't work in non-ie browsers as a result.
	var elements = document.getElementsByTagName('div');
	if (elements)
	{
		for (i = 0; i < elements.length; i++)
		{
			if (elements[i].getAttribute && (elements[i].getAttribute("s") == "1"))
			{
				OpenItem(elements[i],num); //Open tree
				break;
			}
		}
	}
}

//Open navbar tree
//	CHANGE ERROR: (Serge) 29/01/2008
//	tree didn't open after postback
function OpenItem(element,num)
{
	//	CHANGE ERROR: (Serge) 29/01/2008
	//was using non-standard property (parentElement)
	var parent = element.parentNode;
	if(parent)
	{	
		//reached the root of the nav bar
		//	CHANGE ERROR: (Serge) 29/01/2008
		//stop condition wasn't correct
		if (parent.className == ("mainDIV"+num))
		{
			return;
		}
		OpenItem(parent,num); //Go up to top DIV
		
		//end recursion: start openening the tree
		
		//	CHANGE ERROR: (Serge) 29/01/2008
		//we need to "display:block" only the hidden child container
		if (element.id.indexOf('Chld')!= -1)
		{
			//Show opened element
			element.style.display = "block";
		}
		
		//change the "pluses" to "minuses":
		//	CHANGE ERROR: (Serge) 29/01/2008
		//we are making the assumption that if a "+" needs to become a "-"
		//somewhere along the tree it will be contained within a neighbour element above us
		//for example:
		//td -> span (plus)
		//td (current) -> div (childContainer)
		//important: this might not always be the case, it depends on the xsl template in use
		if (element.previousSibling &&
			element.previousSibling.firstChild &&
			element.previousSibling.firstChild.className && 
			element.previousSibling.firstChild.className.indexOf('plus') != -1)
		{
			element.previousSibling.firstChild.innerHTML = "-";
		}
				
		if(element.getAttribute("s") == "1") //This is the selected element
		{
			var ch = element.children;
			if(ch)
			{
				for(j = 0; j < ch.length; j++)
				{
					var e = ch[j];
					if(e.tagName == "A")
					{
					    // CHANGE ERROR: (Lea) 12/06/2007
					    // if "num" is inserted into class name, then there is no difference
					    // between first level items and the lower level items.
					    // Which results in double border for selected items on first level.
					    // Therefore we use a classname that already has the right "num", 
					    // and just add "selected". if the classname doesn't exist, 
					    // classname and num are inserted manually
					    if (typeof(element.className) =="string")
						    e.className = "selected" + element.className;
						else
							element.className = "selectedNode" + num;  
					}
				}
			}
		}
	}
}

//Go to the Clickit WS/PAGE/FOLDER
//code - code of this element; cip_Code - page code; fol_Code - folder code
function TG(code, cip_Code, fol_Code)
{
	var ws = GetFromQuery("ws", document.location.href);
	var page = GetFromQuery("page", document.location.href);
	var fol = GetFromQuery("fol", document.location.href);

	if(cip_Code=="" && fol_Code=="")
	{	return;	}
	
	var lnk = document.location.href;
	/*-*/
	if(ws)
	{
		lnk = AddElToQueryStrNav(lnk,"ws",ws);
	}
	else
	{
		lnk = AddElToQueryStrNav(lnk,"ws","");
	}
	/*-*/
	if(cip_Code)
	{
		lnk = AddElToQueryStrNav(lnk,"page",cip_Code);
	}
	else
	{
		lnk = AddElToQueryStrNav(lnk,"page","");
	}
	/*-*/
	if(fol_Code)
	{
		lnk = AddElToQueryStrNav(lnk,"fol",fol_Code);
	}
	else
	{
		lnk = AddElToQueryStrNav(lnk,"fol","");
	}
	/*-*/
	if(code)
	{
		lnk = AddElToQueryStrNav(lnk,"code",code);
	}
	else
	{
		lnk = AddElToQueryStrNav(lnk,"code","");
	}
	/*-*/
	
	//*** delete param "box" from location.href
	if(lnk.indexOf("box=")!=-1)
	{
		tmp=lnk.substring(lnk.indexOf("?"));
//alert("tmp\n"+tmp);
		arr=lnk.split("&");
		tmp="";
		for(i=0; i<arr.length; i++)
		{
			if(arr[i].indexOf("box=")==-1)
				tmp+="&"+arr[i]
		}
		tmp=tmp.substring(1);
		lnk=lnk.substring(0,lnk.indexOf("?")+1)+tmp;
//alert(lnk)	
	}
	
	document.location.href = lnk;
}

//Open and show a branch of tree
function TC(obj)
{
	var code = null;
	var action = null;
	if(IsMSIE()) //IE
	{
		code = obj.code;
		action = obj.Action;
	}
	else //Mozilla
	{
		code = obj.getAttribute("code");
		action = obj.getAttribute("Action");
	}
	
	if(code)
	{
    	var plus = document.getElementById("idSpanPlus");
	    var minus = document.getElementById("idSpanMinus");
	
		var childColl=document.getElementById("Chld" + code);
		
		if(action=="plus" || obj.innerHTML=="+") //if(obj.innerHTML=="+")
		{
			childColl.style.display="block";
			
			if(minus)
			    obj.innerHTML = minus.innerHTML;
			else
			   obj.innerHTML = "-";
			   
	        if(IsMSIE()) //IE
	        {
		        obj.Action = "minus";
	        }
	        else //Mozilla
	        {
		        obj.setAttribute("Action", "minus");
	        }
		}
		else
		{
			childColl.style.display="none";
			
			if(plus)
			    obj.innerHTML = plus.innerHTML;
			else
			    obj.innerHTML = "+";
			    
	        if(IsMSIE()) //IE
	        {
		        obj.Action = "plus";
	        }
	        else //Mozilla
	        {
		        obj.setAttribute("Action", "plus");
	        }
		}					
		
	}
}
// Change background of object with id=p'id' as background of 'obj'
function changeBackgroundAsCurrent(obj, id)
{
    if(document.getElementById("p"+id))
    {
        if(obj.style.background)
            document.getElementById("p"+id).style.background=obj.style.background;
        
    }
}
function changeColorsAsCurrent(obj, id)
{
    if(document.getElementById("p"+id))
    {
        if(obj.style.background)
            document.getElementById("p"+id).style.background=obj.style.background;
        if(obj.style.color)
            document.getElementById("p"+id).style.color=obj.style.color;
            
    }
    if(document.getElementById("aID"+id))
    {
        if(obj.style.color)
            document.getElementById("aID"+id).style.color=obj.style.color;
    }
}
function changeColorsAsNotSelect(color, id)
{
    if(document.getElementById("p"+id))
    {
        document.getElementById("p"+id).style.background="#FFFFFF";
        document.getElementById("p"+id).style.color=color;
    }
}

//Returns TRUE if it is MS Internet Explorer browser
function IsMSIE()
{
	var retVal = false;
	var browser = navigator.userAgent.toLowerCase();
	if(browser.indexOf("msie") > -1)
	{
		retVal = true;
	}
	return retVal;
}

// CHANGE ERROR: (Lea) 09/12/2007: change method name from "AddElToQueryStr" to "AddElToQueryStrNav"
// in order to prevent the calls in this file from using method with same name in funcslib.js
function AddElToQueryStrNav(query,element,val)
{
	var ret="";
	if(element!="")
	{
		
		if(query=="") //query is empty
			ret=element + "=" + val;
		else 
		{
			if(query.indexOf(element + "=")==-1) //element not in query
			{
				ret=query + "&" + element + "=" + val;
			}
			else // element found, need to replace value
			{
				var left="";
				var right="";

				left=query.substr(0,query.indexOf(element + "=")-1);

				right=query.substr(query.indexOf(element + "="));
				right=(right.indexOf("&")==-1)?"":right.substr(right.indexOf("&"));

				ret=left + right;
				ret+=(ret.Length==0)?element + "=" + val:"&" + element + "=" + val;
				ret=(ret.substr(0,1)=="&")?ret.substr(1):ret;
				
			}
		}
	}
	else
		ret=query;
		
	if(ret.indexOf("?")==-1)
	{
		indx=ret.indexOf("&")
		if(indx!=-1)
		{
			ret=ret.substring(0,indx)+"?"+ret.substring(indx+1);
		}
	}
	return ret;
}
