/**-------- GLOBAL VARIABLE --------**/

	// holds file location for xslt file
	var XSLT_BREADCRUMBS = "/eom/SysConfig/WebPortal/brw/_files/js/_files/crumbs.xsl"; 
	var X_BASE_URL;	// holds the site root derived from xml file
	var jsCRUMB;


/**-------- GLOBAL VARIABLE --------**/

// Evaluate an XPath expression aExpression against a given DOM node
// or Document object (aNode), returning the results as an array
// thanks wanderingstan at morethanwarm dot mail dot com for the
// initial work.
function evaluateXPath(aNode, aExpr) {

  var xpe = new XPathEvaluator();  
  var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ?
		aNode.documentElement : aNode.ownerDocument.documentElement);
  var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
  var found = [];
  var res;
  while (res = result.iterateNext()){
    found.push(res);
  }
  return found;
}

/*-- IE Fix for */
function evaluateXPathIE(xmlInputDoc, page, slice) 
{
	var xslt = new ActiveXObject("Msxml2.XSLTemplate");
	var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
	var xslProc;
	xslDoc.async = false;
	xslDoc.resolveExternals = false;
	xslDoc.load(XSLT_BREADCRUMBS);
	xslt.stylesheet = xslDoc;
	
	//alert('xslDoc' + ((xslDoc == null)? ' is null !' : ' received page : [' + page + '] url : [' + slice + ']') );
	
	xslProc = xslt.createProcessor();
	//xslProc.input = xmlDoc;
	xslProc.input = xmlInputDoc;
	
	xslProc.addParameter("urlSlice", slice);
	xslProc.addParameter("pageType", page);
	xslProc.addParameter("siteRoot", X_BASE_URL);
	
	xslProc.transform();
	var urlPiece = xslProc.output;
	//alert(urlPiece);
	//document.write(xslProc.output);
	return urlPiece;
}
function getXml(xmlFile){
	
	if (window.XMLHttpRequest){
	  xhttp=new XMLHttpRequest();
	} else {
		// Internet Explorer 5/6
	  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	xhttp.open("GET", xmlFile.toString(), false);
	xhttp.send("");
	xmlDoc = xhttp.responseXML;
	
	// xmlhttp.onreadystatechange=function()
	// {	if(xmlhttp.readyState==4)
  	//		{document.getElementById('test').innerHTML=xmlhttp.responseText}}
	return xmlDoc;
}

function saveCrumbs(jsCrumb){
	
	// user might go to a story now..
	var value = Utils.GetCookie('brwCrumb');
	
	if(value == null){
		// cookie is not there
		Utils.CreateCookie('brwCrumb', jsCrumb, 86400);
	}else{
		Utils.SetCookie('brwCrumb', jsCrumb, 86400);
	}
}


function printCrumbs(){
	
	//console.log( home? "from home" : "not from home" );
	// user might go to a story now..
	var value = Utils.GetCookie('brwCrumb');
	document.write(value);
}
function getColCrumbs(colValue){
	
	if(colValue.indexOf('CEO Q') > -1){
		colValue = 'CEO Q' + '&amp;' + 'A';
	}
	if(colValue.indexOf('Angelo Fisher') > -1){
		colValue = 'D' + '\'' + 'Angelo Fisher';
	}

	// get cookie value
	var colCookie = Utils.GetCookie('brwCrumb') ;

	var anchorIsColumn = 'Columns';
	
	// you are inside column page before going to column index page	
	if( colCookie.indexOf( anchorIsColumn ) < 1){
		// column is not setting the values back to root.
		
		var columnsCrumb = (X_BASE_URL == undefined) ? '/columns' : X_BASE_URL + '/columns' ;
		var columnsCrumb = "&gt; <a href='" +  columnsCrumb +  "'>Columns</a>";
		colCookie = columnsCrumb;
	}
	
	var anchorLast = '</a>';
		
	// only save if its not already there
	if( colCookie.indexOf( colValue ) < 1){
		
		var restoreColIndex = colCookie.lastIndexOf( anchorLast );
		restoreColIndex = restoreColIndex + anchorLast.length;
		var restoreCol = colCookie.substring(0, restoreColIndex);
		colCookie = restoreCol;
		colCookie += ' &gt; ' + colValue ;
		saveCrumbs(colCookie);
	}
	document.write(colCookie);
}
/* sets the site root from the siteStructure xml file*/
function setSiteRoot(xmlFile){
	var xmlDoc = getXml(xmlFile);
	var urlParts = getUrlParts();
}

function getUrlParts(){

	var urlPartsArray = null;
	var currentURL = new String(document.location).toLowerCase();
	currentURL = currentURL.replace('www.','');
	
	X_BASE_URL = xmlDoc.getElementsByTagName("portal")[0].attributes[1].nodeValue.toString().toLowerCase();
	X_BASE_URL = X_BASE_URL.replace('www.','');
	var locateRoot = currentURL.indexOf(X_BASE_URL);
	if ( locateRoot > -1 ){
			
		urlPartsArray = currentURL.split(X_BASE_URL);
		// view the url parts
		// console.log(urlPartsArray);
		var parts = urlPartsArray[1].split('/');
		//console.log("parts.length : " + parts.length); console.log(parts);
		
		// subsection of focus
		urlPartsArray = new Array();
		urlPartsArray[0] = parts[0];
		urlPartsArray[1] = "/" + parts[1];
		urlPartsArray[2] = urlPartsArray[1] + "/" + parts[2];
		if(parts.length > 3){
			urlPartsArray[3] = urlPartsArray[2] + "/" + parts[3];
		}
		//console.log(urlPartsArray);
		//console.log("====================================");
	}
	return urlPartsArray;
}

function buildCrumbs(xmlDoc, xpath, page, urlSlice){

	if(!window.XPathEvaluator){
		//----- for IE we use-----------
		if (window.ActiveXObject)
		{
			try {
				//alert('sending [' + page + '][' + urlSlice + ']');
				ex = evaluateXPathIE(xmlDoc, page, urlSlice);
				//alert(ex);
				if(ex != null && ex != '') {
					jsCRUMB += "&gt; " + ex;
				}
			}catch(e){
				 //alert( 'Err: ' + e.description);
			}
		}
	} else {
		//----- for firefox we use-----------
		var results = evaluateXPath(xmlDoc, xpath);
		for(var j = 0; j < results.length; j++)
		{
			var linkUrl = results[j].attributes[5].nodeValue.toString();
			var altlinkUrl = results[j].attributes[0].nodeValue.toString();
				if(linkUrl == urlSlice || altlinkUrl == urlSlice)
				{	
					var linkTitle = results[j].attributes[1].nodeValue.toString();
					var crumb1 = linkTitle.link( X_BASE_URL + linkUrl);
					//console.log(crumb1);
					jsCRUMB += "&gt; " + crumb1;
				}
		}//--- for loop [firefox Link] ends --
	}//--- if urlSlice not empty ends -----

}

function getCrumbs(xmlFile){
	
	jsCRUMB = '';
	// if(window.brwSiteStructure != null){
		// var test = window.brwSiteStructure.getElementsByTagName("portal")[0].attributes[1].nodeValue.toString().toLowerCase();
		// alert( test);
	//}
	var xmlDoc = getXml(xmlFile);
	var urlParts = getUrlParts();
	
	if(urlParts != null){
	
		for(var i = 0; i < urlParts.length; i++){
			if(urlParts[i] != '') 
			{
				var page = "//SectionPage";
				var xpath = page + "[contains(@url, '"+ urlParts[i] +"') or contains(@id, '"+ urlParts[i] +"')]";
				//console.log(i + " [root] " +  xpath);
			
				if( i > 2 ){
					page = "//SpecialPage";
					if(urlParts[3].indexOf('/focus/') > 0){
						// focus special pages..
						xpath = page + "[contains(@url, '"+ urlParts[i] +"')]";
					}
					if(urlParts[2].indexOf('/lists/') > -1){
						// lists special pages..
						xpath = page + "[contains(@url, '"+ urlParts[i] +"')]";
					}
				}
				//console.log(xpath);		
				buildCrumbs(xmlDoc, xpath, page, urlParts[i]);
			}
		}//--- for loop [urlParts] ends ----
	}

	saveCrumbs(jsCRUMB);
	document.write(jsCRUMB);
	
}
