function loadDyClxns() {
	var clxnArry = new Array();
	var clxnstr = readCookie("novell_srchindexes");
	if(clxnstr != null) {
		var clxns = unescape(clxnstr).split("::");
		for(var i = 0; i < clxns.length; i++) {
			var clxn = clxns[i].split(":");
			clxnArry[clxnArry.length] = [clxn[0],clxn[1]];
		}
	}
	return clxnArry;
}

var dynClxns = loadDyClxns();					

// Trim whitespace from left and right sides of s.
function trim(s) {
	return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}

// Let older browsers use encodeURIComponent()
// From Tim Powell's site at
// http://www.worldtimzone.com/res/encode/.  He wrote:
/* ***************************
** Most of this code was kindly 
** provided to me by
** Andrew Clover (and at doxdesk dot com)
** http://and.doxdesk.com/ 
** in response to my plea in my blog at 
** http://worldtimzone.com/blog/date/2002/09/24
** It was unclear whether he created it.
*/
function utf8(wide) {
  var c, s;
  var enc = "";
  var i = 0;
  while(i<wide.length) {
    c= wide.charCodeAt(i++);
    // handle UTF-16 surrogates
    if (c>=0xDC00 && c<0xE000) continue;
    if (c>=0xD800 && c<0xDC00) {
      if (i>=wide.length) continue;
      s= wide.charCodeAt(i++);
      if (s<0xDC00 || c>=0xDE00) continue;
      c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
    }
    // output value
    if (c<0x80) enc += String.fromCharCode(c);
    else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
    else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
    else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
  }
  return enc;
}
var hexchars = "0123456789ABCDEF";
function toHex(n) {
  return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}
var okURIComponentchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
if (typeof encodeURIComponent==='undefined'){encodeURIComponent=function(s){var s=utf8(s);var c;var enc="";for(var i=0;i<s.length;i++){if(okURIComponentchars.indexOf(s.charAt(i))==-1){enc+="%"+toHex(s.charCodeAt(i));}else{enc += s.charAt(i);}}return enc;};}

function knovaMapQuery(query,operator) {
	switch(operator) {
		case '0' : return query; break; // AND query (default for both searches)
		case '1' : 
			// OR query
			var orquery = trim(query).replace(/\s+/g," OR ");
			return orquery;
			break;
		case '2' : return "\"" + query + "\""; break; // Exact phrase query
		default : return query;
	}
}

function knovaMapDate(date) {
	// input: milliseconds since 1970
	// output: how long ago
	var curdate = new Date();
	var elapsedmillis = curdate.getTime() - date;
	var millis_in_day = 1000*60*60*24;
	var millis_in_2point5_weeks = millis_in_day*7*2.5;
	var millis_in_3_months = millis_in_day*365*(3/12);
	var millis_in_9_months = millis_in_day*365*(9/12);
	var millis_in_2_years = millis_in_day*365*2;

	if (elapsedmillis < millis_in_2point5_weeks) { return '1W'; }      // 1 week
	else if (elapsedmillis < millis_in_3_months) { return '1M'; }      // 1 month
	else if (elapsedmillis < millis_in_9_months) { return '6M'; }      // 6 months
	else if (elapsedmillis < millis_in_2_years) { return '1Y'; }       // 1 year
	else { return '0'; }        // anytime
}

function knovaSearchParams(frm) {
	var operator0 = (typeof frm.operator0 != 'undefined' ? frm.operator0.value : '');
	var query0 = frm.query0.value;
	var date = (typeof frm.date != 'undefined' ? frm.date.value : '');

	var datepublished = (date.length > 0 ? knovaMapDate(date) : '');
	var searchString = (operator0.length > 0 ? knovaMapQuery(query0,operator0) : query0);

	var retval = "searchString="+encodeURIComponent(searchString);
	if (datepublished.length > 0) { retval += "&datepublished="+encodeURIComponent(datepublished); };
	retval += "&document=DT_TID_1_1&cmd=search&contextType=gs";

	return retval;
}

function setClxnTheme() {
	switch(this.collection.options[this.collection.selectedIndex].value) {
		case "Support;SupportWeb" : 
			location.href = "http://www.novell.com/support/search.do?"+knovaSearchParams(this);
			return false;
			break;
		case "Support" : this.theme.value = "support"; break;
		case "Support;Techcenter" : this.theme.value = "support"; break;
		case "Documentation;ndk_doc" : this.theme.value = "documentation"; break;
		default : this.theme.value = "";
	}
}
document.getElementById("srch-frm").onsubmit = setClxnTheme;

function addClxnToDyClxns(txt,val) {
	var clxnstr = "";
	if(dynClxns.length > 0) {
		dynClxns[1] = dynClxns[0];
		clxnstr = "::" + dynClxns[1][0] + ":" + dynClxns[1][1];
	}
	dynClxns[0] = [txt,val];
	clxnstr = dynClxns[0][0] + ":" + dynClxns[0][1] + clxnstr;
	document.cookie = "novell_srchindexes="+escape(clxnstr)+"; expires="+(new Date(new Date().getTime()+2592000000)).toGMTString() +"; path=/; domain=.novell.com";
}

function addDyClxnsToList(clxnList) {
	if(dynClxns.length > 0) {
		var seperator = document.createElement("option");
		clxnList.appendChild(seperator);
		seperator.value = "";
		seperator.text = "--------------------";
	}
	for(var i = 0; i < dynClxns.length; i++) {
		var optn = document.createElement("option");
		clxnList.appendChild(optn);
		optn.text = dynClxns[i][0];
		optn.value = dynClxns[i][1];
	}
}

function isInClxnList(clxn,clxnList) {
	for(var i = clxnList.options.length-1; i > -1; i--) {
		if(clxnList.options[i].value.toLowerCase() == clxn.toLowerCase()) return true;
	}
	for(var i = dynClxns.length-1; i > -1; i--) {
		if(dynClxns[i][1].toLowerCase() == clxn.toLowerCase()) return true;
	}
	return false;
}

function initClxnList(clxn) {
	if(!document.getElementById) return;
	var clxnList = document.getElementById("srch-clxnlist");
	if(!isInClxnList(clxn,clxnList)) {
		switch(clxn) {
			case "Support" : addClxnToDyClxns("in Knowledgebase",clxn); break;
			case "Support;Techcenter" : addClxnToDyClxns("in Knowledgebase",clxn); break;
			case "connectionmagazine" : addClxnToDyClxns("in Connection Magazine",clxn); break;
			case "Cool Solutions" : addClxnToDyClxns("in Cool Solutions",clxn); break;
			default : addClxnToDyClxns("in Advanced Sections", clxn);
		} 
	}
	addDyClxnsToList(clxnList); // add dynamic collections
	
	// select default
	for(var i = clxnList.options.length-1; i > -1; i--) {
		if(clxnList.options[i].value.toLowerCase() == clxn.toLowerCase() && clxnList.options[i].text != "--------------------") {
			clxnList.options[i].selected = "selected";
			return;
		}
	}
	
}
