
// **********************************************
//
//	siteRocket JavaScript Functions
//	Version 1.5.2
//	Last Modified : 11/10/2006
//	Copyright 2003-2006 Digital Propulsion Labs
//
// **********************************************

var debug = false;  // should always be FALSE in prodution
var browser = "unknown";
var global_eMsgs = new Array(
	"allfields","Please fill-in all of the fields!",
	"allreqfld","Please fill-in all required fields!",
	"expsession","Your session has expired, please try again.",
	"badcookie","Cookies do not appear to be enabled on your computer, which are required in order to use this site.  Please check your browser settings and try again.",
	"invprod","Invalid Product Specified",
	"invexpd","Invalid Credit Card Expiration Date"
);

// **********************************************

var customentry;

//

var customentry = new Array();



var qStr = window.location.search;
if (qStr.indexOf("er=") > -1) {
	showError(qStr);
	if (qStr.indexOf("expsession") > -1) deletecookie("srsession");
} else if (qStr.indexOf("srs")) {
	setSession();
}

if (typeof DOMParser == "undefined") {
   DOMParser = function () {}

   DOMParser.prototype.parseFromString = function (str, contentType) {
      if (typeof ActiveXObject != "undefined") {
         var d = new ActiveXObject("MSXML.DomDocument");
         d.loadXML(str);
         return d;
      } else if (typeof XMLHttpRequest != "undefined") {
         var req = new XMLHttpRequest;
         req.open("GET", "data:" + (contentType || "application/xml") +
                         ";charset=utf-8," + encodeURIComponent(str), false);
         if (req.overrideMimeType) {
            req.overrideMimeType(contentType);
         }
         req.send(null);
         return req.responseXML;
      }
   }
}

//domainRedirect(customentry);

// **********************************************

function createPictWnd(width,height,pictName) {
	window.open("http://www.theinfiniteroad.com/uploaded_photos/" + pictName, "picthWnd", "width=" + (width + 40) + ",height=" + (height + 30) + ",resizable,scrollbars,nostatus");
}

function domainRedirect() {
	var args = domainRedirect.arguments;
	var dearry = args[0];
	var newlocation;
	
	for (i=0;i<=dearry.length;i+2) {
		if (window.location.hostname.indexOf(dearry[i]) >= 0) {
			//newlocation = window.location.replace(, dearry[i]);
			//newlocation = 
			alert(newlocation);
		}
	}
	
	return;
	
}

// in progress
function trackSession() {
	var docref, imgHndl, bug;
	var args = trackSession.arguments;

	docref = ''; 
	if (document.referrer) docref = escape(document.referrer) 
	//pageLocation = ''; 
	//if (document.location) pageLocation = escape(document.location);
	if (args.length > 0) {
		bug = new Image();
		bug.src = args[1] + '&r=' + docref;
		getCtrlHandle(args[0]).src = bug.src;
		//window.status = args[1] + '&r=' + docref;
	}

	return;
}

// [Product_Catalog_Search]
// Javascript for Product Search

function productSearch() {
	var args = productSearch.arguments;
	var formdata = new Array();

	var http = getXMLRequestHndl();
	http.onreadystatechange = function() {
		// evaluate server response on a state change
		if (http.readyState == 4) {
			// was the data received okay?
			var tehrep = http.responseText;
			alert("Server Response Was: " + http.responseText);
		}
	};
	
	var strPostData = "";
	try {
		formdata = complieFormData();
		for (i=0;i<formdata.length;i+=2) {
			strPostData += escape(formdata[i])+"="+escape(formdata[i+1])+"&";
		}
		strPostData = strPostData.substr(0,strPostData.length-1);
		http.open(frmHndl.method, frmHndl.action, true);
		http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		http.setRequestHeader("Content-length",strPostData.length);
		http.setRequestHeader("Connection", "close");
		http.send(strPostData);
	}
	catch (e) {
		alert(e);
	}


	return;
}

// [/Product_Catalog_Search]

function showError(eStr) {

	if (eStr.indexOf("er=") > -1 && global_eMsgs) {
		errHndl = eStr.substring(eStr.indexOf("er=")+3, eStr.length);
		if (errHndl.indexOf("&") > 0) errHndl = errHndl.substring(0, errHndl.indexOf("&"));
		for (i=0; i <= global_eMsgs.length; i+=2) {
			if (global_eMsgs[i] == errHndl) {
				alert("ALERT : " + global_eMsgs[i+1]);  // display error message
				return true;
			}
		}
	}

	return false;
}

function getErrHndl() {
	
	var qStr = window.location.search;
	if (qStr.indexOf("er=") > -1) {
		var errHndl = qStr.substring(qStr.indexOf("er=")+3, qStr.length);
		if (errHndl.indexOf("&") > 0) errHndl = errHndl.substring(0, errHndl.indexOf("&"));
		return errHndl;
	}

	return null;
}

function swapLayer () {
	var args = swapLayer.arguments;
	var showLayer = args[0];
	var htList = args[1] + ",";
	var hideLayer, stHndl, htHndl;

	if (browser == "ie")
		{ stHndl = eval("document.all." + showLayer); }
	else
		{ stHndl = document.getElementById(showLayer); }
	
	stHndl.style.display = "";
	
	do {
		hideLayer = htList.substring(0, htList.indexOf(","));
		if (hideLayer.length > 0) {
			//alert(hideLayer + " // '"+htList+"' ("+hideLayer.length+")");	// debug
			htList = htList.substring(hideLayer.length + 1, htList.length);
			if (browser == "ie")
				{ htHndl = eval("document.all." + hideLayer); }
			else
				{ htHndl = document.getElementById(hideLayer); }
			if (htHndl.style.display != "none") { htHndl.style.display = "none"; }
		}
	} while (htList.indexOf(",") > -1);
	
	return;
}

function drawLayer () {
	var args = drawLayer.arguments;
	var cview;
	var lwHndl;
	var lname = args[0];
	var cdata = args[1];
	
	if (document.all) {
		window.status = "ie";
		lwHndl = eval("document.all." + lname);
		lwHndl.innerHTML = cdata;
	} else if (document.layers) { 
		window.status = "ns4+";
		if (lname) { 
			lwHndl = eval("document.all." + lname + ".document"); 
		} else { 
			lwHndl = document.layers[lname].document;
		}
		lwHndl.open();
		lwHndl.write(cdata); 
		lwHndl.close(); 
	} else { // if (document.getElementById)
		window.status = "ns7+";
		lwHndl = document.getElementById(lname);
		lwHndl.innerHTML = cdata;
		document.write(lwHndl.innerHTML);  //not sure why this is working, needs to be checked out!
	}

	return;
}

function postField() {
	var args = postField.arguments;
	var qStr,varVal;
	var urlVarName = args[0];
	var fField = args[1];

	if (window.location.search.indexOf(urlVarName + "=") > -1) {
		var qStr = window.location.href;
		if (qStr.indexOf("?") > -1) {
			qStr = qStr.substr(qStr.indexOf("?")+1, qStr.length);
			varVal = qStr.substr(qStr.indexOf(urlVarName + "="), qStr.length);
			if (varVal.indexOf("&") > -1) varVal = varVal.substr(0, varVal.indexOf("&"));
			// post value to field
			if (document.all) {
				fldHndl = eval("document." + fField);
			} else {
				fldHndl = document.getElementById(fField);
			}
			//alert(varVal);
			if (fldHndl) fldHndl.value = varVal;
			return true;
		}
	}
	
	return false;
}

function postSession() {
	var args = postSession.arguments;
	var objHndl, sVal;
	
	//if !(testCookie()) { return false; }

	sVal = getcookie("srsession");
	if (sVal > "") {
		if (document.all) {
			objHndl = eval("document." + args[0]);
		} else {
			objHndl = document.getElementById(args[0]);
		}
		
		if (objHndl && objHndl.sessionid.type == "hidden") {
			objHndl.sessionid.value = sVal;
			window.status = objHndl.sessionid.value;  // temp
			//alert("post session = " + objHndl.sessionid.value);
		}
		return true;
	}

	return false;
}

function setSession() {
	var sURL, sID, cPath;

	sURL = window.location.search;
	cPath = "/"; //window.location.pathname;
	if (sURL.indexOf("srs=") > -1 && sURL.length) {
		sPos = sURL.indexOf("srs=") + 4;
		if (sURL.substring(sPos, sURL.length).indexOf("&") > -1) {
			sID = sURL.substring(sPos, sURL.indexOf("&"));
		} else {
			sID = sURL.substring(sPos, sURL.length);
		}
		setcookie("srsession", sID, window.location.hostname, "");
		if (!getcookie("srsession")) {	// make sure the cooke was written. if not, display error.
			var newloc = window.location.href;
			if (newloc.indexOf("?") > -1) newloc = newloc.substr(0, newloc.indexOf("?"));
			document.location = newloc + "?er=badcookie";
			return false;
		} // else { alert("Session ID:"+sID); }

		return true;
	}

	return false;
}

function deletecookie(cookie_name, path, domain) {

	if (!path || path == "") path = "/";
	if (!domain || domain == "") domain = window.location.hostname;

	if (cookie_name && typeof(getcookie(cookie_name)) == "string") {
		//var expires = new Date();
		//expires = expires.setHours(expires.getHours()-3);
		var expires = ( new Date( ( new Date() ).getTime() + ( 1000 * -10 ) ) ).toGMTString();
		document.cookie = escape( cookie_name ) + "=0; expires="+expires+"; domain="+domain+"; path="+path;
		if (!getcookie(cookie_name)) window.status = "cookie removed";
	}

	return;

}

function setcookie(cookieName, cookieValue, domain, path, secure) {

	// netscape is not storing the cookie for some reason .. fixed?
	// Wdy, DD-Mon-YYYY HH:MM:SS GMT

	if (cookieName && cookieValue) {
		var expires = new Date();
		expires.setHours(expires.getHours()+2);
		document.cookie = escape( cookieName ) + "=" + escape( cookieValue ) + "; expires=" + expires.toGMTString() + 
		((domain.length > 0) ? "; domain=" + domain : "") +
		((path) ? "; path=" + path : "") +
		((secure) ? "; secure" : "");
		//alert("cookie set? [" + document.cookie + "] " + expires.toGMTString());
	}

	return;

}

function getcookie(cookieName) {
	var	cVal, vStart, vEnd;
	
	var cookieJar = document.cookie.split( "; " );
	for( var x = 0; x < cookieJar.length; x++ ) {
		var oneCookie = cookieJar[x].split( "=" );
		if( oneCookie[0] == escape( cookieName ) ) { return unescape( oneCookie[1] ); }
	}

	/*
	vStart = document.cookie.indexOf(cookieName + '=') + (cookieName.length + 1);
	if (vStart > -1) {
		vEnd = document.cookie.indexOf(';', vStart);
		if (vEnd == -1) vEnd = document.cookie.length;
		cVal = document.cookie.substring(vStart, vEnd);
		//alert("DEBUG cVal:"+cVal+"["+document.cookie+"]");
		return cVal;
	}
	*/
	
	return null;

}

function getBroVer () {
	var detect = navigator.userAgent.toLowerCase();
	
	if (detect.indexOf('msie') > 0) browser = "ie";
	else if (!detect.indexOf('mozilla') > 0) brower = "ns";
	else if (detect.indexOf('opera') > 0) browser = "op";
	//else if (detect.indexOf('konqueror') > 0) browser = "Konqueror";
	//else if (detect.indexOf('safari') > 0) browser = "Safari";
	//else if (detect.indexOf('omniweb') > 0) browser = "OmniWeb";
	//else if (detect.indexOf('webtv') > 0) browser = "WebTV";
	//else if (detect.indexOf('icab') > 0) browser = "iCab";
	//else browser = "unknown";

	//window.status = browser;
	return;
}

function getCtrlHandle() {
	var ctrlName = getCtrlHandle.arguments[0];

	// get handle of object
	if (document.all) {  // ie or similar
		var ctrlHndl = eval("document.all."+ctrlName);
	} else {  // other
		if (ctrlName.indexOf(".") > 0) {
			var ctrlHndl;
			while (ctrlName.indexOf(".") > 0) {
				tcName = ctrlName.substr(0, ctrlName.indexOf("."));
				ctrlHndl = document.getElementById(tcName);
				ctrlName = ctrlName.substr(ctrlName.indexOf(".")+1, ctrlName.length);
			}
			ctrlHndl = eval("ctrlHndl."+ctrlName);
		} else {
			var ctrlHndl = document.getElementById(ctrlName);
		}
	}
	
	if (ctrlHndl) {
		return ctrlHndl;
	} else {
		return;
	}
}

function getCtrlHndlbyTagName() {
	var args = getCtrlHndlbyTagName.arguments;
	
	var ctrls = document.getElementsByName(args[0]);
	if (args[2]) var ctrls = args[2].getElementsByName(args[0]);

	for (c=0;c<=(ctrls.length-1);c++) {
		if (ctrls.item(c).tagName) {
			var fTagName = ctrls.item(c).tagName.toLowerCase();
			//alert(fTagName);
			if (!args[1] || fTagName.indexOf(args[1]) > -1)	return ctrls.item(c);
		}
	}

	return false;
}

function CreatePopUp(pWnd_Width,pWnd_Height,pWnd_Hndl,pWnd_Opts,pWnd_Loc) {
	var wHndl = window.open((pWnd_Loc ? pWnd_Loc : ""),pWnd_Hndl,pWnd_Opts + ",status=no,toolbar=no,directories=no,menubar=no,scrollbars=yes,width=" + pWnd_Width + ",height=" + pWnd_Height);

	if (self.name.indexOf("popup") > 0) {
		self.close();
	} else {
		self.name="parent_hWnd";
	}
		
	return wHndl;
}

function toggleDisplay() {
	var args = toggleDisplay.arguments;
	var divHndl;
	
	divHndl = getCtrlHandle(args[0]);
	//if (!divHndl) divHndl = document.getElementbyID(args[0]);
	divHndl.style.display = (divHndl.style.display == "" ? "none" : "");

	return true;
}

/*
	***********************************************

	DOM Functions

	***********************************************
*/

function createDOMLayer() {
	var dHndl = createDOMLayer.arguments[0];

	// create the Layer
	var ndHndl = document.createElement('div');
	// set attributes<div 
	ndHndl.innerHTML = createDOMLayer.arguments[1];
	ndHndl.setAttribute("align", createDOMLayer.arguments[2]);
	ndHndl.setAttribute("class", createDOMLayer.arguments[3]);
	ndHndl.setAttribute("id", createDOMLayer.arguments[4]);
	ndHndl.setAttribute("style", createDOMLayer.arguments[5]);
	// append Layer
	dHndl.appendChild(ndHndl);

	return ndHndl;
}

function createDOMForm() {
	var dHndl = createDOMForm.arguments[0];

	// create the form
	var fHndl = document.createElement('form');
	// set attributes
	fHndl.setAttribute("action", createDOMForm.arguments[1]);
	fHndl.setAttribute("method", createDOMForm.arguments[2]);
	fHndl.setAttribute("id", createDOMForm.arguments[3]);
	// append form
	dHndl.appendChild(fHndl);

	return fHndl;
}

function createDOMTable() {
	var dHndl = createDOMTable.arguments[0];
		
	// create the table
	var tHndl = document.createElement('table');
	// set attributes
	tHndl.setAttribute("width", createDOMTable.arguments[1]);
	tHndl.setAttribute("border", createDOMTable.arguments[2]);
	tHndl.setAttribute("align", "center");
	tHndl.setAttribute("cellspacing", "1");
	tHndl.setAttribute("cellpadding", "3");
	//tHndl.setAttribute("id", "datable");
	// append table
	dHndl.appendChild(tHndl);
	
	return tHndl;
}
		
function createDOMInput() {
	// create input
	var iHndl = document.createElement('input');
	// set attributes
	iHndl.setAttribute("type", createDOMInput.arguments[1]);
	iHndl.setAttribute("name", createDOMInput.arguments[2]);
	iHndl.setAttribute("value", createDOMInput.arguments[3]);
	// append to form
	createDOMInput.arguments[0].appendChild(iHndl);
	return iHndl;
}

// example createDOMSelect(formHandle,"mylist",1,new Array("Option 1", "1"),new Array("Option 2", "2"))
function createDOMSelect() {
	var args = createDOMSelect.arguments;
	// create input
	var sHndl = document.createElement('select');
	// set attributes
	sHndl.setAttribute("name", args[1]);
	sHndl.setAttribute("size", args[2]);
	// create options list
	if (args.length > 3) {
		var opHndl, opArray;
		for (c=3; c < args.length; c++) {
			opArray = args[c];
			opHndl = document.createElement('option');
			// append to select
			sHndl.appendChild(opHndl);
			opHndl.text = opArray[0];
			opHndl.value = opArray[1];
		}
	}
	// append to form
	args[0].appendChild(sHndl);
	return sHndl;
}

function addTableCols() {
	var tHndl = addTableCols.arguments[0];
	var rPos = addTableCols.arguments[1];
	var colArray = addTableCols.arguments[2];
	// might be used later 12/28/2004
	var colAlign = addTableCols.arguments[3];
	var colSpan = addTableCols.arguments[4];
	var rowSpan = addTableCols.arguments[5];
	var colClass = addTableCols.arguments[6];
	var c,newCell;
	
	if (colArray.length > 0) {
		var rHndl = tHndl.insertRow(rPos);
		for (c=0; c < colArray.length; c++) {
			newCell = rHndl.insertCell(c);
			newCell.innerHTML = colArray[c];
			newCell.setAttribute("align" ,(typeof colAlign == "array") ? colAlign[c] : colAlign);
			newCell.setAttribute("colspan" ,(typeof colSpan == "array") ? colSpan[c] : colSpan);
			newCell.setAttribute("rowspan" ,(typeof rowSpan == "array") ? rowSpan[c] : rowSpan);
			newCell.setAttribute("class" ,(typeof colClass == "array") ? colClass[c] : colClass);
		}
	}

	return rHndl;
}

/*
	***********************************************

	AJAX Functions

	***********************************************
*/


var htreq;
var isIE = false;

function getXMLRequestHndl() {

	if (window.XMLHttpRequest)
		return http = new XMLHttpRequest();
	else if (window.ActiveXObject)
		return http = new ActiveXObject("Microsoft.XMLHTTP");

}

function submitXMLRequest() {
	var args = submitXMLRequest.arguments;
	var frmHndl = getCtrlHandle(args[0]);
	var metho = args[1];
	var addlFuncArgs = new Array();
	for (x=2;x<=args.length;x++) { addlFuncArgs[x-2] = args[x]; }
	
	// pre-submit operations
	if (!eval(metho+"('pre','"+frmHndl.name+"',null,'"+addlFuncArgs.join("','")+"')")) return;

	// should abort if can't read from siterocket.net
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	} catch (e) {
		alert("Permission UniversalBrowserRead denied.");
	}
   
   // branch for native XMLHttpRequest object
	var htreq = getXMLRequestHndl();

    if (htreq.overrideMimeType) {
		htreq.overrideMimeType('text/xml');
    }
	
	if (htreq && frmHndl) {
		// set request action
		htreq.onreadystatechange = function () {
			if (htreq.parseError && htreq.parseError != 0) {
				alert("Parse Error line " + htreq.parseError.line + ", character " + htreq.parseError.linePos + '\n' + htreq.parseError.srcText);
			}
			// only if req ready
			if (htreq.readyState == 4) {
				// load if "OK"
				if (htreq.status == 200) {
					// do the stuff
					if (!eval(metho+"('success','"+frmHndl.name+"',htreq,'"+addlFuncArgs.join("','")+"')")) alert(metho+" failed on execution");
				} else {
					alert("There was a problem retrieving the XML data:\n" + htreq.statusText + " (" + htreq.status + ")");
					eval(metho+"('error','"+frmHndl.name+"',htreq,'"+addlFuncArgs.join("','")+"')");
				}
			}
		};
		
		// prep data
		var strFormData = compileFormData(frmHndl.name);
		
		if (frmHndl.method == "POST") {
			htreq.open(frmHndl.method, frmHndl.action, true);
			htreq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			htreq.setRequestHeader("Content-length",strFormData.length);
			htreq.setRequestHeader("Connection", "close");
			htreq.send(strFormData);
		} else {
			htreq.open(frmHndl.method, frmHndl.action+(frmHndl.action.indexOf("?")>-1?"&":"?")+strFormData, true);
			if (window.ActiveXObject) {
				htreq.send();
			} else {
				htreq.send(null);
			}
		}

	}

	return;
}

function compileFormData() {
	var args = compileFormData.arguments;

	var da = new Array();
	var strPostData = "";
	var dac = 0;
	var frmfields = getCtrlHndlbyTagName(args[0],"form").elements;//  document.getElementsByName(args[0]);
	for (c=0;c<frmfields.length;c++) {
		var fTagName = frmfields.item(c).tagName.toLowerCase();
		if (frmfields.item(c).name == "") continue;
		//alert(fTagName.indexOf("input")+"-"+frmfields.item(c).name+"/"+frmfields.item(c).value);
		if (fTagName.indexOf("input") > -1) {
			// build array
			da[dac] = frmfields.item(c).name;
			da[dac+1] = frmfields.item(c).value;
			// build url encoded string
			strPostData += escape(da[dac])+"="+escape(da[dac+1])+"&";
			//debugPostData += escape(da[dac])+"="+escape(da[dac+1])+", ";
			dac = dac + 2;
		} else if (fTagName.indexOf("select") > -1) {
			// build array
			da[dac] = frmfields.item(c).name;
			da[dac+1] = frmfields.item(c).options[frmfields.item(c).selectedIndex].value;
			// build url encoded string
			strPostData += escape(da[dac])+"="+escape(da[dac+1])+"&";
			//debugPostData += escape(da[dac])+"="+escape(da[dac+1])+", ";
			dac = dac + 2;
		}
	}
	if (debug) alert(debugPostData);
	strPostData = strPostData.substr(0,strPostData.length-1);
	
	return (args[1] == "array" ? da : strPostData);

}

/*
 ****************************************************

  AJAX Functions Specific to Add-ons

 ****************************************************
*/

function productSearchResults() {
	var args = productSearchResults.arguments;
	var meth		= args[0];
	var frmHndl		= getCtrlHandle(args[1]);
	var hxHndl		= args[2];
	var dispLayer	= args[3];
	var statLayer	= args[4];
	
	if (meth == "pre") {
		if (getCtrlHandle(statLayer).innerHTML) getCtrlHandle(statLayer).innerHTML = "<b>Searching, please wait...</b>";
		if (dispLayer) toggleDisplay(dispLayer);
		if (statLayer && getCtrlHandle(statLayer).style.display == "none") toggleDisplay(statLayer);
		return true;
	} else if (meth == "error") {
		if (dispLayer) toggleDisplay(dispLayer);
	} else {
		try {
			if (hxHndl.responseXML.childNodes.length == 0) {
				hxHndl = (new DOMParser()).parseFromString(hxHndl.responseText, "text/xml");
				//if (debug) alert(hxHndl.childNodes.length);
			} else {
				hxHndl = hxHndl.responseXML;
			}

			statLayer = getCtrlHandle(statLayer);
			statLayer.innerHTML = "";
			//divHndl = (eval(args[0]) ? eval(args[0]) : document.getElementbyID(args[0]));

			// display the results
			var qValue = getElementTextNS("", "query", hxHndl.getElementsByTagName("channel")[0], 0);
			var nTable = createDOMTable(statLayer,"","0","","");
			addTableCols(nTable, nTable.rows.length, new Array("<b>Search Found "+hxHndl.getElementsByTagName("item").length+" match(s) for '"+qValue+"'</b>"), "", "2");
			for (x=0;x<hxHndl.getElementsByTagName("item").length;x++) {
				r = hxHndl.getElementsByTagName("item")[x];
				photo = getElementTextNS("", "photo", r, 0);
				if (photo.indexOf(".") > -1) {
					var toreplace = photo.split(".");
					photo = photo.replace("."+toreplace[toreplace.length-1], "-thumb."+toreplace[toreplace.length-1]);
				}
				photo = "<a href=\""+getElementTextNS("", "url", r, 0)+"\"><img src=\""+photo+"\" border=1 class='product_photo'></a>";
				content = "<b>"+getElementTextNS("", "title", r, 0)+"</b><br />";
				content += "Price: "+getElementTextNS("", "price", r, 0)+"<br />";
				if (getElementTextNS("", "sku", r, 0) != "n/a") content += "SKU: "+getElementTextNS("", "sku", r, 0)+"<br />";
				content += getElementTextNS("", "description", r, 0).substr(0,200)+(getElementTextNS("", "description", r, 0).length > 200?"...":"")+"<br />";
				//content += "<br />Category: "+getElementTextNS("", "category", r, 0).substr(0,200)+(getElementTextNS("", "category", r, 0).length > 200?"...":"")+"<br />";
				addTableCols(nTable, nTable.rows.length, new Array(photo,content));
			}
			
			// add page columns (get page data from XML?)


			if (dispLayer) toggleDisplay(dispLayer);
			return true;
		}
		catch(e) {
			var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
			alert("An error occured while retriving results:\n" + msg);
			if (dispLayer) toggleDisplay(dispLayer);
			return false;
		}
	}
	
	return false;
}

/*
 ****************************************************
	Borrowed from developer.apple.com Example 
 ****************************************************
*/

// display details retrieved from XML document
function grabHistory(dname) {
    var item, content, dHndl;
	dHndl = (eval(dname) ? eval(dname) : document.getElementbyID(dname));
	if (dHndl) {
		//alert(req.responseXML.getElementsByTagName("rss").length + '/' + req.responseXML.getElementsByTagName("item").length);  // debug
		 // copy <content:encoded> element text for the first item
		item = req.responseXML.getElementsByTagName("item")[0];
		content = getElementTextNS("content", "encoded", item, 0);
		dHndl.innerHTML = "";
		// blast new HTML content into "vhist" <div>
		dHndl.innerHTML = content;
		//if (isIE) alert(dHndl.innerHTML);
	}
}

// retrieve text of an XML document element, including
// elements using namespaces
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            if (result.childNodes[1]) return result.childNodes[1].nodeValue;
        } else {
            if (result.firstChild) return result.firstChild.nodeValue;    		
        }
    }

	return "n/a";
}



/*

	NOT USED

// empty Topics select list content
function clearTopicList() {
    var select = document.getElementById("topics");
    while (select.length > 0) {
        select.remove(0);
    }
}

// add item to select element the less
// elegant, but compatible way.
function appendToSelect(select, value, content) {
    var opt;
    opt = document.createElement("option");
    opt.value = value;
    opt.appendChild(content);
    select.appendChild(opt);
}

// fill Topics select list with items from
// the current XML document
function buildTopicList() {
    var select = document.getElementById("topics");
    var items = req.responseXML.getElementsByTagName("item");
    // loop through <item> elements, and add each nested
    // <title> element to Topics select element
    for (var i = 0; i < items.length; i++) {
        appendToSelect(select, i,
            document.createTextNode(getElementTextNS("", "title", items[i], 0)));
    }
    // clear detail display
    document.getElementById("details").innerHTML = "";
}

// display details retrieved from XML document
function showDetail(evt) {
    evt = (evt) ? evt : ((window.event) ? window.event : null);
    var item, content, div;
    if (evt) {
        var select = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if (select && select.options.length > 1) {
            // copy <content:encoded> element text for
            // the selected item
            item = req.responseXML.getElementsByTagName("item")[select.value];
            content = getElementTextNS("content", "encoded", item, 0);
            div = document.getElementById("details");
            div.innerHTML = "";
            // blast new HTML content into "details" <div>
            div.innerHTML = content;
        }
    }
}

*/



// MIGHT USE SOME OF THIS STUFF

/*
Author: Alex Osipov (alex@acky.net)
Publisher: ACKY.NET
*/

/*
// Global variables.
domain		= '';
path		= '/';
secure		= 0;

// Function to save a field.
function save_field(obj) {
	var cookie_value = '';
	var objType = new String(obj.type);
	switch(objType.toLowerCase()) {
		case "checkbox" :
			if (obj.checked) cookie_value = obj.name + '=[1]'
			else cookie_value = obj.name + '=[0]'
			break;
		case "undefined" :
			// a.k.a. radio field.
			for (var i = 0; i < obj.length; i++) {
				if (obj[i].checked) cookie_value = obj[i].name + '=[' + i + ']'
			}
			break;
		case "select-one" :
			cookie_value = obj.name + '=[' + obj.selectedIndex + ']';
			break;
		case "select-multiple" :
			cookie_value = obj.name + '=[';
			for (var i = 0; i < obj.options.length; i++) {
				if (obj.options[i].selected) cookie_value += '+' + i
			}
			cookie_value += ']';
			break;
		default :
			// We assume all other fields will have
			// a valid obj.name and obj.value
			cookie_value = obj.name + '=[' + obj.value + ']';
	}
	if (cookie_value) {
		var expires = new Date();
		expires.setYear(expires.getYear() + 1);
		document.cookie = cookie_value +
		((domain.length > 0) ? ';domain=' + domain : '') +
		((path) ? ';path=' + path : '') +
		((secure) ? ';secure' : '') +
		';expires=' + expires.toGMTString();
	}
	return 1;
}

// Function to retrieve a field.
function retrieve_field(obj) {
	var cookie = '', real_value = '';
	cookie = document.cookie;
	var objType = new String(obj.type);
	if (obj.name)
		var objName = new String(obj.name);
	else
		var objName = new String(obj[0].name);
	var offset_start = cookie.indexOf(objName + '=[');
	if (offset_start == -1) return 1;
	var offset_start_length = objName.length + 2;
	offset_start = offset_start + offset_start_length;
	var offset_end = cookie.indexOf(']', offset_start);
	real_value = cookie.substring(offset_start, offset_end);
	switch(objType.toLowerCase()) {
		case "checkbox" :
			if (real_value == '1') obj.checked = 1
			else obj.checked = 0
			break;
		case "undefined" :
			obj[real_value].checked = 1;
			break;
		case "select-one" :
			obj.selectedIndex = real_value;
			break;
		case "select-multiple" :
			for (var i = 0; i < obj.options.length; i++) {
				if ((real_value.indexOf('+' + i)) > -1)
					obj.options[i].selected = 1;
				else
					obj.options[i].selected = 0;
			}
			break;
		default :
			obj.value = real_value;
			break;
	}
	return 1;
}
*/



