// JavaScript Document
function fnLinkBuilder(strPage,strCat) {
	
	var strURL = strPage;
	//alert(strURL);

	/*
	var strProd = eatCookie('verUp');
	if (strProd==null) { 
		strProd = eatCookie('dProdVer');
	}
	if (strProd==null) { 
		strProd = eatCookie('dProd');
	}
	if (strProd!=null) {
		if (strCat.length>0) { strCat += ":"; }
		strCat += strProd;	
	}
	if (strProd==null) { 
		strProd = eatCookie('dProdVer');
	}
	*/
	if (strPage.indexOf("http")<0) {
		if (strCat!=null && strCat.length>0) {
			strURL += "&cat=" + strCat;
		}
		var strPerPage = eatCookie('listPerpage');
		if (strPerPage!=null) { 
			strURL += "&perpage=" + strPerPage;
		}
		/*
		var strSort = eatCookie('listSortby');
		if (strSort!=null) { 
			strURL += "&sortby=" + strSort;
		}
		*/
		if (strPage.indexOf("spage")>-1) { 
			strURL += "&locale=en_US";
		}


		var strProdF = eatCookie('dProd');
		var strProdP = eatCookie('dProdVer');
		var strProdV = eatCookie('verUp');
		
		strProdF = (strProdF==null) ? "" : strProdF;
		strProdP = (strProdP==null) ? "" : strProdP;
		strProdV = (strProdV==null) ? "" : strProdV;
		
		var strProdFp = 'dProdFam='+strProdF+'&';
		var strProdPp = 'dProd='+strProdP+'&';
		var strProdVp = 'dProdVer='+strProdV+'&';
		
		//alert(strURL);
		if (strURL.indexOf("dProdFam=")>=0){
			var s1 = strURL;
			//s1 = s1.replace("dProdVer","-AKJD1");
			s1 = s1.replace("dProdFam","AKJD1");
			s1 = s1.replace("dProd","-AKJD2");
			//alert(s1);
			s1 = s1.replace(/AKJD1=.*&-/g,strProdFp);	
			//alert(s1);
			s1 = s1.replace("AKJD2","dProd");
			s1 = s1.replace("AKJD1","dProdFam");
			//s1 = s1.replace("AKJD1","dProdVer");
			strURL = s1;
			//alert(strURL);
		}
		//alert(strURL);
		if (strURL.indexOf("dProd=")>=0){
			var s2 = strURL;
			s2 = s2.replace("dProdVer","-AKJD");
			s2 = s2.replace(/dProd=.*&-/g,strProdPp);	
			s2 = s2.replace("AKJD","dProdVer");
			strURL = s2;
		}
		//alert("Biyat="+strURL);
		if (strURL.indexOf("dProdVer=")>=0){
			//alert(strURL);
			var s3 = strURL;
			if(strURL.indexOf("&locale=")>=0){
				s3 = s3.replace("locale","-AKJD");
			}else if(strURL.indexOf("&cat=")>=0){
				s3 = s3.replace("cat","-KJHG");				
			}
			s3 = s3.replace(/dProdVer=.*&-/g,strProdVp);
			if(strURL.indexOf("&locale=")>=0){
				s3 = s3.replace("AKJD","locale");
			}else if(strURL.indexOf("&cat=")>=0){
				s3 = s3.replace("KJHG","cat");
			}

			strURL = s3;
			//alert(strURL);
		}
		//alert(strURL);
}
	
	
	location.href = strURL;
}
function fnAction(objField,strDivIn) {
	var selIndex = objField.selectedIndex;
	if(objField.options[selIndex].disabled) {
		selIndex +=1;
		objField.selectedIndex = selIndex;
		getDrop(objField.value,strDivIn);
	} else {
		getDrop(objField.value,strDivIn);
	}
}

//ajax code for search ui
function fnGetData(url, parameters) {
	http_request = false;
	var Fname= GetCookie('LFNName');
	var Lname= GetCookie('LLNName');

	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		/*
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
		*/
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		alert('Cannot create XMLHTTP instance');
		return false;
	}
	http_request.onreadystatechange = fnUpdate;
	http_request.open('GET', url + parameters+'&'+'Fname='+Fname+'&'+'Lname='+Lname, true);
	http_request.send(null);
}
var strDivSearch = "";
var arrToLoad = new Array();
function fnUpdate() {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			result = http_request.responseText;
			document.getElementById(strDivSearch).innerHTML = result; 
			if (arrToLoad.length>0) {
				eval(arrToLoad.shift());	
			}
		} else {
			alert('There was a problem with the request. ' + http_request.status);
		}
	}
}
function fnTransCat(strCat) {
	/*
	strDivSearch = "prodFeed";
	numDot = (strCat.indexOf("*")>-1) ? strCat.indexOf("*")+2 : 19; ;
	numComma = (strCat.indexOf(",")>-1) ? strCat.indexOf(",") : strCat.length; 
	strCat = strCat.substring(numDot,numComma);
	alert(strCat);
	getstr = "?page=catTrans&cat=" + strCat;          
	fnGetData("/support/index", getstr);
	*/
	numDot = (strCat.indexOf("*")>-1) ? strCat.indexOf("*")+2 : 19; ;
	numComma = (strCat.indexOf(",")>-1) ? strCat.indexOf(",") : strCat.length; 
	strCat = strCat.substring(numDot,numComma);
	document.getElementById("prodFeed").innerHTML = strCat;
}
function fnBuildMod2(strPage,strDivIn) {
	strDivSearch = strDivIn;
	getstr = "?page=" + strPage;          
	fnGetData("/support/index", getstr);
}
function fnBuildSearchMod() {
	var objHead = eatCookie("schHead");
	var objProdRoot = eatCookie("prodRoot"); 
	if(objHead!=null) {
		//alert(objHead);
		document.getElementById('pgHead').innerHTML = objHead; 
		arrToLoad = new Array("fnBuildMod2('schNavBtm','pgFoot')","loadDrop('" + objProdRoot + "','dProdFam')");
		eval(arrToLoad.shift());
	} else {
		arrToLoad = new Array("fnBuildMod2('schHead','pgHead')","fnBuildMod2('schNavBtm','pgFoot')","loadDrop('" + objProdRoot + "','dProdFam')");
		eval(arrToLoad.shift());
	}
}
function showStatusMessage(strIn) {
	window.status=strIn;	
}

binQuesClear = true;
function ClearQues() {
	if(binQuesClear==true) {
		document.question_form.question_box.value="";
		binQuesClear = false;
		document.question_form.question_box.focus();
	}
}

//Advanced search functions
var arrTypes = new Array(0);
var arrSources = new Array(0);
function fnCheckThis(strBoxes,binCheck) {
	for (i=0;i<document.question_form.elements[strBoxes].length;i++) {
		document.question_form.elements[strBoxes][i].checked = binCheck;
	}
	if(strBoxes=='sources' && document.question_form.elements[strBoxes][0].value=='Datasources.Automation_support') { 
		fnDisable(binCheck); 
	}
}
function fnChecked(strField) {
	var objBoxes = document.question_form.elements[strField];
	var binChecked = false;
	if (objBoxes!=null) {
		var numBoxes = objBoxes.length;
		if(numBoxes!=null) {
			for(i=0;i<numBoxes;i++) {
				if(objBoxes[i].checked) {
					binChecked = true;
					if(strField == "types"  && !objBoxes[i].disabled) {
						arrTypes.push(objBoxes[i].value);
					} else {
						arrSources.push(objBoxes[i].value);
					}
				}
				objBoxes[i].value = null;
			}
		} else {
			if(objBoxes.checked) {
				binChecked = true;
				if(strField = "types" && !objBoxes.disabled) {
					arrTypes.push(objBoxes.value);
				} else {
					arrSources.push(objBoxes.value);
				}
				objBoxes.value = null;
			}
		}
	
	}
	return binChecked;
}
function fnProdCleanup() {
	var objForm = document.question_form;
	var strProd = "";
	if (objForm.dProdFam.value.length>0) {
		bakeCookie('dProd',objForm.dProdFam.value,1);
		strProd = objForm.dProdFam.value;
	}
	if (objForm.dProd!=null && objForm.dProd.value.length>0) {
		bakeCookie('dProdVer',objForm.dProd.value,1);
		strProd = objForm.dProd.value;
	}
	if (objForm.dProdVer!=null && objForm.dProdVer.value.length>0) {
		bakeCookie('verUp',objForm.dProdVer.value,1);
		strProd = objForm.dProdVer.value;
	}
	if (strProd.length<1 && objForm.elements['restriction.level.product'].value.length>0) {
	} else if (strProd.length<1 && eatCookie("prodRoot").length>0) {
//		objForm.elements['restriction.level.product'].value = "CMS-CATEGORY_REF.*." + eatCookie("prodRoot"); commented to bring up non prod set records
		objForm.elements['restriction.level.product'].value = "";
	} else {
		regex = /VERSIONS$/;
		strProd = strProd.replace(regex,"");
		regex = /MODULES$/;
		strProd = strProd.replace(regex,"");
		objForm.elements['restriction.level.product'].value = "CMS-CATEGORY_REF.*." + strProd;
	}
}

function fnAddSources(objField,strValue) {
	if (objField.value.length>0) { objField.value = objField.value + ","; }
	objField.value = objField.value + strValue;
}
function removeElement(divNum) {
  var d = document.getElementById('frmBody');
  var olddiv = document.getElementById(divNum);
  d.removeChild(olddiv);
}
function fnCollectFacets(objForm) {
	fnProdCleanup();
	var toReturn = false;
	if (objForm.question_box.value.length<1) {
		alert("Please enter a question.");
		objForm.question_box.focus();
	} else {
		arrTypes = new Array(0);
		arrSources = new Array(0);
		if(fnChecked('types')) {
			objForm.elements['restriction.level.types'].value = arrTypes.join(",");
		} else {
			objForm.elements['restriction.level.types'].value = "";
		}

		if(fnChecked('sources')) {
			objForm.elements['restriction.level.sources'].value = arrSources.join(",");
		} else {
			objForm.elements['restriction.level.sources'].value = "CMS-STATUS.Published";
		}

		strSources = document.question_form.elements['restriction.level.sources'].value;
		if(strSources != "" && strSources.indexOf("eForum")>-1) {
			fnAddSources(objForm.elements['restriction.level.types'],"Datasources.eForum");
//			fnAddSources(objForm.elements['restriction.level.product'],"Datasources.eForum"); commented to bring up non prod set records
			fnAddSources(objForm.elements['restriction.level.security'],"Datasources.eForum");
		}

		if(strSources != "" && strSources.indexOf("Clarify")>-1) {
			fnAddSources(objForm.elements['restriction.level.types'],"Datasources.Clarify");
//			fnAddSources(objForm.elements['restriction.level.product'],"Datasources.Clarify"); commented to bring up non prod set records
			fnAddSources(objForm.elements['restriction.level.security'],"Datasources.Clarify");
		}

		if (strSources == "") {
			alert("Please select at least one source.");
		} else {
			//removeElement('typeBlock');
			objForm.question_box.value = fnFormProc(objForm,'question_box');
			toReturn = true;
		}
		//return true;
	}
	return toReturn;
}
function fnDisable(binChecked) {
if(!binChecked) {
	for (i=0;i<document.question_form.elements['types'].length;i++) {
		document.question_form.elements['types'][i].disabled = true;
	}
	if (document.getElementById("draft")!= null) {
		document.getElementById("draft").disabled = true;
	}
} else {
	for (i=0;i<document.question_form.elements['types'].length;i++) {
		document.question_form.elements['types'][i].disabled = false;
	}
	if (document.getElementById("draft")!= null) {
		document.getElementById("draft").disabled = false;
	}
}
}
function fnSearchClarify() {
	var objForm = document.question_form;
	if (objForm.elements['restriction.level.channel']!=null) {
		objForm.elements['restriction.level.channel'].value = "";
	}
	if (objForm.elements['restriction.level.view']!=null) {
		objForm.elements['restriction.level.view'].value = "Datasources.Clarify";
	}
	if (objForm.elements['restriction.level.pub']!=null) {
		objForm.elements['restriction.level.pub'].value = "Datasources.Clarify";
	}
	if (objForm.elements['restriction.level.types']!=null) {
		objForm.elements['restriction.level.types'].value = "Datasources.Clarify";
	}
	objForm.submit();
}
function submitQuestion() {
	var objForm = document.question_form;
	var numQuesLength = objForm.question_box.value.length;
	if (numQuesLength==0) {
		alert("Please ask a question.");		
		objForm.question_box.focus();
		return false;
	} else {
		return true;
	}
}

function fnStringTrim(str)
{
	var x;
	var ch;
	
	for(x=0;x<str.length;x++)
	{
		ch=str.substr(x,1);
		if(ch==' ' || ch=='\t')
		{
			str=str.substr(x+1,str.length-1);
		}
		else
			break;
	}
	
	for(x=str.length-1;x>=0;x=x-1)
	{
		ch=str.substr(x,1);
		if(ch==' ' || ch=='\t')
		{
			str=str.substr(0,str.length-1);
		}
		else
			break;
	}
	
	return str;
}

function fnCheckNumeric(str)
{
	if (isNaN(fnStringTrim(str)))
		{
			return false;
		}

	return true;
}
function fnQuesSub() {
	if (submitQuestion()) {
		document.question_form.submit();
	}
}
function fnTypeByRegEx(strIn) {
	//this function receives single characters from fnToken to determine their type.  This is only used because typeof does not work appropriately.
	var strOut = 'word';
	var regExNum = /[0-9]/i;
	var regExWord = /[a-zA-Z]/i;
	var regExNonWord = /\W/i;
	if (strIn!=null) {
		if(regExNum.test(strIn)==true) {
			strOut = 'number';
		} else if(regExWord.test(strIn)==true) {
			strOut = 'word';
		} else if(regExNonWord.test(strIn)==true) {
			strOut = 'nonword';
		}
	} else {
		strOut = 'null';
	}
	return strOut;
}

function fnToken(strVal) {
	//increase this number to increase the number of tokens passed for non boolean searches
	var numMaxTokens = 15;
	var regExSpace = /[\s]/;
	arrParts = strVal.split(regExSpace);
	//arrOut = new Array();
	arrTokenEnds = new Array();
	var numTokenEnd = 0;
	var strHolder = "";
	// first we split the query up based on spaces
	for (i=0;i<arrParts.length;i++) {
		//then we break it into individual characters
		var arrTemp = arrParts[i].split("");
		var strToAdd = "";
		for (z=0;z<arrTemp.length;z++) {
			//these characters are then compared and pieced back together if they are of a type matching the preceding character.
			strLastType = fnTypeByRegEx(arrTemp[z-1]);
			strThisType = fnTypeByRegEx(arrTemp[z]);             
			if (z>0 && strLastType==strThisType) {
				strToAdd += arrTemp[z];
			} else if (z>0 && strLastType!=strThisType) {
				//every time we reach the end of a group of matching types we add this as a token to our array of tokens, arrOut
				//arrOut.push(strToAdd);
				arrTokenEnds.push(numTokenEnd);
				strToAdd = arrTemp[z];
			} else if (z==0) {
				strToAdd = arrTemp[z];
			} else {
				if (strToAdd.length>0) {
					//arrOut.push(strToAdd);
					arrTokenEnds.push(numTokenEnd);
					strToAdd="";
				}	
			}
			numTokenEnd++;                      
		}
		if (strToAdd.length>0) {
			//arrOut.push(strToAdd);
			arrTokenEnds.push(numTokenEnd);
		}
		numTokenEnd++;
	}
	
	return strOut;
}
function fnFormProc(objForm,strField) {
	strOut = objForm.question_box.value;
	//if this is a boolean query we do not tokenize
	if (strOut.indexOf("AND")<0 && strOut.indexOf("NOT")<0 && strOut.indexOf("OR")<0) {
		strOut = fnToken(strOut);
	}
	
	return strOut;
}

function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1) { endstr = document.cookie.length; }
  return unescape(document.cookie.substring(offset, endstr));
  }

function GetCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg) {
      return getCookieVal (j);
      }
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
    }
  return 'noName';
  }