/*!
 * SearchNow JavaScript Library v0.4.2
 * 		http://www.smedia.info/
 * 		http://www.coresaas.com/
 *
 * Developer : Nijee Taylor (nijee@smedia.info)
 * Date : 07/12/2010
 * All code (c)2010 Smedia LLC & CoreSaaS LLC all rights reserved
 * 
 * This product is protected by copyright and distributed under licenses restricting copying, distribution and decompilation.
 *
 */
var r = "";		var doc;				var ifdata;
var request;	var urlsplit = '?q=';	var filtergetUrlParam = "";	

var strSSSURL	= "http://searchnow.metrixcloud.com/";
var strCssURL	= strSSSURL+"sss.do";
var strXmlURL	= strSSSURL+"query.do";

// HTTP://SUB.DOMAIN.TLD/FILE.ASPX
var basemid	= urlparse(window.location.href)[0].mid;
/*
 *
 * # AJAX [ON] - hash Enabled
 * http://www.domain.com/searchnow.aspx?j=1#s?q=addfe25dac66c84d8d3572ac4507c208da43dbb70cca25a208f792900db6698753d5fde6d6e9e43
 * -----------------------------------------------^
 * -# AJAX [ON] - hash Disabled
 * -http://www.domain.com/searchnow.aspx?j=1&#s?q=red&filter=category_1%3A%22Americana+Gifts%22
 * -------------------------------------------------^
 *
 *	Buggy-
 *
 * # AJAX [OFF] - hash Enabled
 * http://www.domain.com/searchnow.aspx?q=addfe25dac66c84d8d3d2705bcc2ac4507c208da43dbb70cca25a208f792900db6698753d5fde6d6e9e43
 * -----------------------------------------^
 * # AJAX [OFF] - hash Disabled
 * http://www.domain.com/searchnow.aspx?q=red&filter=category_1%3A%22Americana+Gifts%22#s?q=8f792900db6698753d5fde6d6e9e43
 * -----------------------------------------^
 *
 */
var URL_ENCRYPT_KEY = "SearchNow";
var ENABLE_LINK_AJAX = true;
var ENABLE_LINK_HASH = true;

var DEBUG_MODE = true;
var DELETE_ICON = "scripts/delcon.jpg";
var DEFAULT_QUERY = "search";
//really really buggys
var SEARCH_ON_SEARCH = false;

$.fn.exists = function() {    return $(this).length > 0;	};

$(document).ready(function() {
/*
***************************
*	TODO:
*	to inject div elements into searchnow base div
***************************

var searchBaseHtml = + '' +  
	'<div id="ssstitle">	</div>' + 
	'<div id="ssstopnav">	</div>' +
	'<div id="sssopts">		</div>' +
	'<div id="sssitems">	</div>' +
	'<div id="sssbotnav">	</div>';
	
$("searchnow").html(searchBaseHtml);
*/
    var qs = getUrlParam("q");	var key = getUrlParam("key");	var filter = getUrlParam("filter");
    var start = getUrlParam("start");		var sort = getUrlParam("sort");	var view = getUrlParam("view");
    var rows = getUrlParam("rows");			var attr = getUrlParam("attr");

    var queryStr;

    if (qs) {	queryStr = qs;    }
    if (key){	queryStr += "&key=" + key;		}    if (filter){	queryStr += "&filter=" + filter;	}
    if (start){	queryStr += "&start=" + start;	}    if (sort){		queryStr += "&sort=" + sort;		}
    if (view){	queryStr += "&view=" + view;	}    if (rows){		queryStr += "&rows=" + rows;		}
    if (attr){	queryStr += "&attr=" + attr;	}
	//alert(queryStr);
	sss(queryStr, 0);
	
});
function rtrim(s)
{
	var r=s.length -1;
	while(r > 0 && s[r] == 'ï¿½')
	{	r-=1;	}
	return s.substring(0, r+1);
}
function sn(ssthis){	sss(RunDes(ssthis,0),0);	}
	
function loadLastQuerys() {    if ($("#sssgi > *").exists()) {	$("#sssgi > *").each(function() {$(this).remove();});	}
    var ldx = parseInt($.cookie("ssslastdex"));
    for (var mx = 1; mx < ldx + 1; mx++) {
        if ($.cookie("search_" + mx)) {
            //if(check($.cookie("search_"+mx))){
            //var clnd = clean($.cookie("search_"+mx));}else{ clnd = $.cookie("search_"+mx);}
            $('#sssgi').prepend("<tr><td style='height:10px'><span><a href=\"delSSS('search_" + mx + "')\"><img class='sss-delcon' src='" + DELETE_ICON + "'/></a></span><span><a id='" + mx + "' style='font-weight:bold;padding-left:5px;' " +  getParamBuilder( $.cookie("search_" + mx) ) + "'>" + sanitize($.cookie("search_" + mx)).replace("price-ASC","Lowest Price").replace("price-DESC","Highest Price").replace("score","Relevance").replace("-list"," &equiv;").replace("-grid"," &brvbar;&brvbar;&brvbar;").replace("\""," ") + "</a></span></td></tr>");
        }
    }
}
function getUrlParam(name) {
	var source = getUrl();
	var rep = "/[\[]/";
    name = name.replace(rep, "\\\[").replace(rep, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(source);
    if (results === null) {
        return "";
    } else {
        return results[1];
    }
}
function RunDes (f, encrypt) { 
	var org = f;
	//run all the different types of Des
	//All the conditions are to to try to stop a Javascript error with vector being null
	var vector = (f.vector && f.vector.value && f.vector.value.length > 7) ? f.vector.value : null;
	//var message = f; //get the message
	
	if (!encrypt){	f = hexToString (f);	}//treat it as hex
    	var result = des (URL_ENCRYPT_KEY, f, encrypt, vector ? 1 : 0, vector);
	if (encrypt){	result = stringToHex (result);}//output as hex
	return result.match(/([\x20-\x7F])([\x20-\x7F]*)/g);
}

function getUrl(){
	var baseUrl = urlparse(window.location.href);
	//AJAX ON
	if(ENABLE_LINK_AJAX){
		if(ENABLE_LINK_HASH){
			if(baseUrl[1]){
				return basemid +"?j=1#s?q="+RunDes(baseUrl[1].args[0].value,0);
			}else{	
				if(baseUrl[0].args[0].key == "q"){	
					//window.location.href = basemid + "?j=1#s?q=" + $.rc4EncryptStr( baseUrl[0].args[0].value, URL_ENCRYPT_KEY );
					window.location.href = basemid + "?j=1#s?q=" + RunDes(baseUrl[0].args[0].value,1);
					//return basemid + "?j=1#s?q=" + baseUrl[0].args[0].value;	
				}else{
					return basemid + "?j=1#s?q=" +  DEFAULT_QUERY;	
				}
			}
		}else{
			/*var baseURL = urlparse(window.location.href)[0];	
			var param;
			for(var args=0;args<baseUrl[0].args.length;args++){
				param += baseUrl.args[args].key+"="+baseUrl.args[args].value+"&";
			}
				return basemid +"?j=1#s?" + param;*/
				return window.location.href;
			}
			
	//AJAX OFF
	}else{
		if(ENABLE_LINK_HASH){
			return basemid +"?q="+RunDes(baseUrl[1].args[0].value,0);
		}else{
			return window.location.href;
		}
	}
}



function getUrlParamS(name) {
	var source = getUrl();
	var rep = "/[\[]/";
    name = name.replace(rep, "\\\[").replace(rep, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(source);
    if (results === null) {
        return "";
    } else {
        return results;
    }
}



function ifPar(getUrlParameter) {
    var prm = getUrlParam(getUrlParameter);
    if (prm) {
        var qStr = "&" + getUrlParameter + "=" + prm;
        return qStr;
    }else{
		return "";
	}
}

//( function($){} )( jQuery )
function getParamBuilder(string){
	if(ENABLE_LINK_AJAX){
		if(ENABLE_LINK_HASH){
			return "href=\"#s?q=" + RunDes( string,1 ) + "\" onclick=\"" + "sn(\'"+ RunDes( string, 1 ) + "\')\"" + " ";
		}else{
			//alert(string);
			return "href=\"#s?q=" + string + "\" onclick=\"" + "sss(\'" + string + "\',0)\"";
		}
	}else{
		if(ENABLE_LINK_HASH){
			return "href=\"" + "?q=" + RunDes( string, 1 ) + "\"";
			//return "#s?q=" + $.rc4EncryptStr( string, URL_ENCRYPT_KEY );
		}else{
			return "href=\"" + "?q=" + string + "\" ";
		}
	}
}


function getUnHashedStr(string){
	return RunDes( string, 0 );
}

//TODO: fix
function listFacets(){
	var getUrlParamCount = "";
	var urlHashBase = urlparse(getUrl())[1];
	var sString = getUrlParam("q");
    var filter = getUrlParam("filter");
	//var filter1 = getUrlParam("filter")[1];
	//var filter2 = getUrlParam("filter")[2];
    var sort = getUrlParam("sort");
    var view = getUrlParam("view");
	
	if(filter){	
		for(var ips=0;ips<urlHashBase.args.length;ips++){
			if(urlHashBase.args[ips].key == "filter"){
				
				var countOtherFilters = function(){
								var filtersLeft = "";
								for(var fil=0;fil<urlHashBase.args.length;fil++){
									if(ips !== fil && urlHashBase.args[fil].key == "filter"){	filtersLeft += "&filter=" + urlHashBase.args[fil].value;}
								}
								return filtersLeft;
						};
				
					//countOtherFilters();
					getUrlParamCount += "<tr><td>Filter: " + sanitize(urlHashBase.args[ips].value) + "</td></tr><tr><td><a " +
						//getParamBuilder( sString + filtersLeft + ifPar('sort') + ifPar('view') + ifPar('start')) +">[Remove]</a></tr>";
						getParamBuilder( sString + countOtherFilters() + ifPar('sort') + ifPar('view') + ifPar('start')) +">[Remove]</a></tr>";
				}else{	getUrlParamCount += "";	}
		}
	}

    if(sort){	getUrlParamCount += "<tr><td>Sort: " + sanitize(sort.replace("price-ASC","Lowest Price").replace("price-DESC","Highest Price").replace("score","Relevance")) + "</td></tr><tr><td><a " + getParamBuilder( sString + ifPar('filter') + ifPar('view') + ifPar('start')) +">[Remove]</a></td></tr>";	}else{ getUrlParamCount += "";}
    if(view){	getUrlParamCount += "<tr><td>View: " + sanitize(view) + "</td></tr><tr><td><a " + getParamBuilder( sString + ifPar('filter') + ifPar('sort') + ifPar('start')) +">[Remove]</a></td></tr>";	}else{ getUrlParamCount += "";}
 
	return getUrlParamCount;
}
function urlparse( str ){
	//str = str.substring( str.indexOf('#')+1 );
	var arr = str.split('#');
	var result = new Array();
	var ctr=0;
	var par;
	//for (var part in arr ){
	 for(var ipp=0;ipp<arr.length;ipp++) {
		//var qindex = part.indexOf('?');
		var qindex = arr[ipp].indexOf('?');
		result[ctr] = {};
		if( qindex==-1 ){
			result[ctr].mid=part;
			result[ctr].args = [];
			ctr++;
			continue;
		}
		//result[ctr].mid = part.substring(0,qindex);
		result[ctr].mid = arr[ipp].substring(0,qindex);
		//var args = part.substring(qindex+1);
		var args = arr[ipp].substring(qindex+1);
		args = args.split('&');
		var localctr = 0;
		result[ctr].args = new Array();
		//for ( var val in args ){
		for(var ipv=0;ipv<args.length;ipv++) {
			//var keyval = val.split('=');
			var keyval = args[ipv].split('=');
			result[ctr].args[localctr] = new Object();
			result[ctr].args[localctr].key = keyval[0];
			result[ctr].args[localctr].value = keyval[1];
			localctr++;
		}
	ctr++;
	}
	return result;
} 


function saveTrigActive(v){	if(v){	var lcx = parseInt($.cookie("sssCachedex"));	sssSave($.cookie("save_"+lcx));	loadLastQuerys();	}}
function saveTrigger(){		$.prompt('Save Last Search?',{	callback: saveTrigActive,	buttons: { Ok: true, Cancel: false }	});}
function delSSSAll(v){
	if(v){
    var mx = 1;
    var ldx = parseInt($.cookie("ssslastdex"));
    for (mx = 1; mx < ldx; mx++) {
        if ($.cookie("search_" + mx)) {
				delSSS($.cookie("search_"+mx));
			}
		}
		loadLastQuerys();
	}
}

function delAll(){	$.prompt('Delete all saved searches?',{	callback: delSSSAll,	buttons: { Ok: true, Cancel: false }	});	}

function delSSS(k){	$.prompt(sanitize(ld(k))+" Deleted",{	timeout: 500,	overlayspeed: "fast"	});	st(k,null);	loadLastQuerys();}

function st(k, v) {
	if(v === null){	return $.cookie(k, null,{	expires: 1,	path: '/',	domain: document.location.host,	secure: false	});}
	else{			return $.cookie(k, v,{	expires: 1,	path: '/',	domain: document.location.host,	secure: false	});}
}

function ld(k) {	return $.cookie(k);	}

function sssSnapshot(q){
 if($.cookie("sssCachedex") == null) {
        $.cookie("sssCachedex", 1, {	expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
        $.cookie("save_" + $.cookie("sssCachedex"), q, {	expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
    } else {
        var lcx = parseInt($.cookie("sssCachedex"));
        $.cookie("sssCachedex", lcx + 1, {	expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
        $.cookie("save_" + $.cookie("sssCachedex"), q, {	expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
		st("save_" + lcx - 2,null);
    }
}

function sssSave(q) {
    if (!$.cookie("ssslastdex") || $.cookie("ssslastdex") === null) {
        $.cookie("ssslastdex", 1, {
            expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
        $.cookie("search_" + $.cookie("ssslastdex"), q, {
            expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
    } else {
        var ldx = parseInt($.cookie("ssslastdex"));
        $.cookie("ssslastdex", ldx + 1, {
            expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
        $.cookie("search_" + $.cookie("ssslastdex"), q, {
            expires: 1,	path: '/',	domain: document.location.host,	secure: false	});
    }
}


function sanitize(txt) {
    //  txt='orange&filter=category_2:"Light+Bulbs"&view=list';
    txt = $.url.decode(txt);				txt = txt.replace("+", " ");			txt = txt.replace("\"", " ");    
	txt = txt.replace("&key=", "(");		txt = txt.replace("&filter=", ": ");	txt = txt.replace("&start=", "-");
	txt = txt.replace("&sort=", "-");		txt = txt.replace("&view=", "-");		txt = txt.replace("&rows=", "-");
    txt = txt.replace("&attr=", "-");		txt = txt.replace("undefined", "");		txt = txt.replace("category_1:", "");
    txt = txt.replace("category_2:", "");	txt = txt.replace("category_3:", "");
    return "" + txt + "";
}
//SEARCH_ON_SEARCH
function enableLastSearch(q){
	var oldQuery = getUrlParam("q");
	if(SEARCH_ON_SEARCH){
		return oldQuery  + " AND " + q;
	}
	return q;
}

function enableLastFilter(q){
	var searchString = q;
    var key = getUrlParam("key");		var filter = getUrlParam("filter");	
	var start = getUrlParam("start");	var sort = getUrlParam("sort");    
	var view = getUrlParam("view");		var rows = getUrlParam("rows");		
	var attr = getUrlParam("attr");		var queryStr = "";
	
    if (searchString) {
        queryStr += enableLastSearch(searchString);
    }
    if (key){		queryStr += "&key=" + key;			}   
	 
	//if (filter){	queryStr += "&filter=" + filter;	}
	if(filter){
		var urlHashBase = urlparse(getUrl())[1];
		for(var ixs=0;ixs<urlHashBase.args.length;ixs++){
			if(urlHashBase.args[ixs].key == "filter"){
			//alert("detected: parameter 'filter' ,onKey: " + ixs + ", value: " + urlHashBase.args[ixs].value);
				//compare this filter to next
				for(var ix=0;ix<ixs;ix++){
					if(urlHashBase.args[ixs].value !== urlHashBase.args[ix].value){
						//alert("&filter=" + urlHashBase.args[ixs].value);
						queryStr += "&filter=" + urlHashBase.args[ixs].value;	
					}
				}
						
			}
		}
	}
	
    if (start){		queryStr += "&start=" + start;		}    if (sort){		queryStr += "&sort=" + sort;		}
    if (view){		queryStr += "&view=" + view;		}    if (rows){		queryStr += "&rows=" + rows;		}
    if (attr){		queryStr += "&attr=" + attr;		}
	
	return queryStr;
}

// ##################################################################################################
function sss(q, s) {
	//q.replace(/^(?![\x00-\x7F])*$/, "r");
	//var newq;
	/* 
	if(q.length <= 32){
			for(var i=0;i<32;i++){
				if(!q.charAt(i).match(/[\x00-\x7F]/)){// ÛìË
				//if(q.charAt(i).match(/[\x00-\x7F]/)){// ÛìË
				q = q.replace(q.charAt(i),'');
				}
			}
			
		}*/
	
	//q = q.match(/([\x20-\x7F])([\x20-\x7F]*)/g);
	
	q = enableLastFilter(q);
	//q = q.replace('Û','').replace('ì','').replace('Ë','').replace('ï','').replace('¿','');
	//q = q.replace.('½','');
	
	if (isChrome() || isOpera()) { sssLegc(q, s); }else{sssNoFlash(q, s);}
	sssSnapshot(q);
}

// ##################################################################################################
function sssLegc(q, s) {
//USING FLASH
    if ($("#sss-response").exists()) {
        $("#sss-response").each(function() {
            $(this).remove();
        });
    }
    var queryStr = "query=" + q + "&key=" + __fk + "&start=" + s;
    var url = strXmlURL + "?" + queryStr;
    request = new CrossXHR();
    request.onreadystatechange = parseResults;
    request.open('GET', url);
    request.send();
    document.getElementById("sssitems").innerHTML = "<table width='100%'><tr><td width='100%' height='400'><center><img src='http://searchnow.metrixcloud.com/images/ajax-loader.gif'/></td></tr></table>";
    parseResults();
}
function sssNoFlash(q, s) {
//NO FLASH
    if ($("#sss-response").exists()) {
        $("#sss-response").each(function() {
            $(this).remove();
        });
    }
    var queryStr = "query=" + q + "&key=" + __fk + "&start=" + s;
    var url = strCssURL + "?" + queryStr;
    document.getElementById("sssitems").innerHTML = "<table width='100%'><tr><td width='100%' height='400'><center><img src='http://searchnow.metrixcloud.com/images/ajax-loader.gif'/></td></tr></table>";
    CSSHttpRequest.get(url, function(response) {
        $("#sss-response").contents().find("div").text(response);
        r = response;
        if (r) {
            parseResults(response);
        } else {
		alert("Ajax call failed: will retry request with legacy method...");
            sssLegc(q, s);
        }
    });
}

function sssGo() {
var basemid = urlparse(window.location.href)[0].mid;
	$("input[searchnow='input']").keypress(function(event) {
		if (event.keyCode == '13') {
			event.preventDefault();
			if($("input[searchnow='input']").val() !== ""){
				//AJAX ON
				if(ENABLE_LINK_AJAX){
					if(ENABLE_LINK_HASH){
						window.location.hash = "s?q=" + RunDes( $("input[searchnow='input']").val(), 1 );
						sss($("input[searchnow='input']").val(),0);loadLastQuerys();
					}else{
						window.location.hash = "s?q=" + $("input[searchnow='input']").val();
						sss($("input[searchnow='input']").val(),0);loadLastQuerys();
					}
				//AJAX OFF
				}else{
					if(ENABLE_LINK_HASH){
						window.location.href = basemid + "?q=" + enableLastFilter(RunDes($("input[searchnow='input']").val()), 1 );
					}else{
						window.location.href = basemid + "?q=" + enableLastFilter($("input[searchnow='input']").val());
					}
				}
			}
		}
	});
}
function sssGoBtn() {	
	if($("input[searchnow='input']").val() !== ""){	
		sss($("input[searchnow='input']").val(),0);
		loadLastQuerys();	
	}
}
function sssHistory() {
    $("#sssgi").slideToggle("slow", function() {
        $("#sssgi").css("overflow-x", "hidden");
        $("#sssgi").css("overflow-y", "scroll");
        $("#sssgi").css("height", "150px");
    });
}

function loadFacet(){
	var html;
	if(getUrlParam("filter") !== "" || getUrlParam("sort") !== "" || getUrlParam('view') !== ""){
		//html += "<td class='sssfgn'>You've Selected:<td><tr>";
		//facet removal
		html = "</tr><tr><td><table id='sss-facet'>" + $.url.decode(listFacets()) + "</table></td>";
		$("#sss-facet").html(html);
		$("#sss-facet").prepend("<tr><td class='sssfgn'>You've Selected:</td><tr>");
    }else{return false;}
	
}

function isChrome() {	if (jQuery.browser.webkit) {  return true; }else{return false;}}
function isOpera() {	if (jQuery.browser.opera) {  return true;  }else{return false;}}
function isIE7() {		if (jQuery.browser.msie && jQuery.browser.version == "7.0") {return true;}else{return false;}}
function isIE8() {		if (jQuery.browser.msie && jQuery.browser.version == "8.0") {return true;}else{return false;}}

function getNodeValue(doc, nodeName) { 
   var base = doc.getElementsByTagName(nodeName);
	
	if(base.item(0)){
		return doc.getElementsByTagName(nodeName).item(0).childNodes[0].nodeValue;
	}else if(!base.item(0)){
	 	return doc.getElementsByTagName(nodeName).nodeValue;
	}
	//else{ 	return doc.getElementsByTagName(nodeName).nodeValue;}return null;
}
function prepLinks(){}

function parseResults(rsp) {
	if (rsp == null) {	rsp = request.responseText;	}else{rsp = r;}
    if (document.implementation.createDocument) {
        var parser = new DOMParser();
        doc = parser.parseFromString(rsp, "text/xml");
    } else if (window.ActiveXObject) {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(rsp);
    }
	if(doc.getElementsByTagName("error").item(0)){
		//alert(doc.getElementsByTagName("error").item(0).nodeValue);
		if(doc.getElementsByTagName("error").item(0).nodeValue == "Unknown processing error"){
		//	window.location.href = basemid + "?q=" + enableLastFilter($("input[searchnow='input']").val());
			window.location.href = basemid + "?q=" + enableLastFilter($("input[searchnow='input']").val());
		}
	}
    var rn = doc.getElementsByTagName("redirect").item(0);
    if (rn) {
        var redirect = rn.childNodes[0].nodeValue;
        if (redirect && redirect !== "") {
            document.location = redirect;
            return;
        }
    }	
	/*
var thbase= doc.getElementsByTagName('totalHits');
	
	if(thbase.item(0)){
		var totalHits = thbase.item(0).childNodes[0].nodeValue;
	}else{
	 	var totalHits = "0";
	}*/
	
   var totalHits	= getNodeValue(doc, 'totalHits');			
   var startRow		= getNodeValue(doc, 'startRow');
   var endRow		= getNodeValue(doc, 'endRow');				
   var searchTerm	= getNodeValue(doc, 'searchString');
   var prevStart	= getNodeValue(doc, 'previousStartRow');	
   var nextStart	= getNodeValue(doc, 'nextStartRow');
   var totalPages	= getNodeValue(doc, 'totalPages');			
   var currentPage	= getNodeValue(doc, 'currentPage');

	//var totalHits	= doc.getElementsByTagName('totalHits').item(0).childNodes[0].nodeValue;
	
	/*
	var startRow	= doc.getElementsByTagName('startRow').item(0).childNodes[0].nodeValue;	
	var endRow		= doc.getElementsByTagName('endRow').item(0).childNodes[0].nodeValue;					
	var searchTerm	= doc.getElementsByTagName('searchString').item(0).childNodes[0].nodeValue;	
	var prevStart	= doc.getElementsByTagName('previousStartRow').item(0).childNodes[0].nodeValue;		
	var nextStart	= doc.getElementsByTagName('nextStartRow').item(0).childNodes[0].nodeValue;	
	var totalPages	= doc.getElementsByTagName('totalPages').item(0).childNodes[0].nodeValue;				
	var currentPage	= doc.getElementsByTagName('currentPage').item(0).childNodes[0].nodeValue;	
 */  
    var altRoot = doc.getElementsByTagName('alternative').item(0);
    var settingRoot = doc.getElementsByTagName('settings').item(0);
    var filterRoot = doc.getElementsByTagName('filters').item(0);
    var groupRoot = doc.getElementsByTagName('groups').item(0);
    var resultsRoot = doc.getElementsByTagName('items').item(0);

	
    var splash = "";				var itemGridTemplate = "";
    var itemListTemplate = "";		var facetFields = "";
    var rows = 20;					var cols = 3;
    var display = "grid";			var sort = "score";
    var stat0 = "";					var stat1 = "";
    var stat2 = "";

    if (settingRoot !== null) {
        for (var i = 0; i < settingRoot.childNodes.length; i++) {
            var settingNode = settingRoot.childNodes.item(i);
            if (settingNode.nodeType !== 1) {
                continue;
            }
            var sn = settingNode.getAttribute("name");
            var sv = "";
            if (settingNode.hasChildNodes()) {
                sv = settingNode.childNodes[0].nodeValue;
            }
            if(sn == 'item.grid.template') {		itemGridTemplate = sv;	}
            if(sn == 'item.list.template') {		itemListTemplate = sv;	}
            if(sn == 'facet.fields') {				facetFields = sv;	}
            if(sn == 'display.rows') {				rows = parseInt(sv);	}
            if(sn == 'display.cols') {				cols = parseInt(sv);	}
            if(sn == 'display.default') {			display = sv;	}
            if(sn == 'display.splash') {			splash = sv;	}
            if(sn == 'results.sort') {				sort = sv;	}
            if(sn == 'item.status.outofstock') {	stat0 = sv;	}
            if(sn == 'item.status.orderable') {		stat1 = sv;	}
            if(sn == 'item.status.configurable') {	stat2 = sv;	}
        }
    }

    if (totalHits == 0) {
        if (altRoot !== null) {
			var alt;
			var altNode = altRoot;
			var filter = getUrlParam("filter");
			
				if((altRoot.nodeValue == null || altRoot.nodeValue == "undefined") && getUrlParam("filter")){
					alt = searchTerm;
				}else{
					if((altRoot.nodeValue == null || altRoot.nodeValue == "undefined")){
           	 				alt = doc.getElementsByTagName('alternative').nodeValue;
						}
				}
			//}
            $("#search").val(alt);
			if(alt){
				var title = "<span class='sssdym'>Did you mean: <a " + getParamBuilder( alt ) + ">" + alt + "</a>?</span>";
			}else{
				title = "<span class='sssdym'>Your search - " + searchTerm + " - did not match any . </span>";
			}
			document.getElementById("ssstitle").innerHTML = title;
			//sss(alt,0);
			//return;
        } else {
            //alt = altRoot.childNodes[0].nodeValue;
            //$("#search").val(alt);
            //title = "<span class='sssdym'>Did you mean: <a " + getParamBuilder( alt ) + ">" + alt + "</a>?</span>";
            var title = "<span class='sssdym'>Your search - " + searchTerm + " - did not match any . </span>";
			document.getElementById("ssstitle").innerHTML = title;
			//sss(alt,0);
			//return;
        }
		
		
        document.getElementById("sssitems").innerHTML = splash;
		//sss(alt,0);
		return;
    }

    var filters = "";

    if (filterRoot !== null) {
        for (var ii = 0; ii < filterRoot.childNodes.length; ii++) {
            var filterNode = filterRoot.childNodes[ii];
            if (filterNode.nodeType !== 1  && !(filterNode.nodeValue.match('^.*(feedKey)'))) {
                continue;
            }
			var ft = filterNode.childNodes[0].nodeValue;
            ft = ft.replace(/"/gi, "%22");
			var fky =/feedKey/g;
			if(ft.match(fky)){
				filters += "";
			}else{
				filters += "&filter=" + ft;
			}
        }
    }

    var nav = "";
	var savetrigger = "<a href='saveTrigger();'><span style='float:right;font-weight:bold;'>Save This Search?</span></a>";
    title = "Showing " + startRow + " - " + endRow + " of " + totalHits + " Search Results for <span class='sssterm'>" + searchTerm + "</span>" + savetrigger;

    document.getElementById("ssstitle").innerHTML = title;

    if (totalPages != "0") {
        nav = "Page ";
        var pagesRoot = doc.getElementsByTagName('pages').item(0);
		
        for (var iii = 0; iii < pagesRoot.childNodes.length; iii++) {
            var pageNode = pagesRoot.childNodes.item(iii);
            if (pageNode.nodeType != 1) {
                continue;
            }
            if (pageNode.getAttribute("id") != currentPage) {
                nav += "&#160;<a rel=\"sss\" " + getParamBuilder( searchTerm + filters + ifPar("view") + "&start=" + pageNode.getAttribute("start")) + ">" + pageNode.getAttribute("id") + "</a>";
            } else {
                nav += "&#160;" + pageNode.getAttribute("id");
            }
        }
        nav += " of " + totalPages;
    }

    var opts = "<table width='100%'><tr><td class='sssoptv'>View: ";
    if (display == 'grid') {
        opts += "<b>Grid</b> | <a " + getParamBuilder( searchTerm + filters + "&view=list") + ">List</a>";
    } else {
        opts += "<a rel=\"sss\" " + getParamBuilder( searchTerm + filters + "&view=grid") + ">Grid</a> | <b>List</b>";
    }

    opts += "</td><td class='sssopts'>Sort by: ";

    opts += "<a rel=\"sss\" " + getParamBuilder( searchTerm + filters + ifPar("view") + "&sort=score") + ">Relevance</a>";
    opts += " | <a rel=\"sss\" " + getParamBuilder( searchTerm + filters + ifPar("view") + "&sort=price-ASC") + ">Lowest Price</a>";
    opts += " | <a rel=\"sss\" " + getParamBuilder( searchTerm + filters + ifPar("view") + "&sort=price-DESC") + ">Highest Price</a>";

    opts += "</td></tr></table>";

    if (document.getElementById("sssopts")) {	document.getElementById("sssopts").innerHTML = opts;    }
    if (document.getElementById("ssstopnav")) {	document.getElementById("ssstopnav").innerHTML = nav;    }

    /*
   if (prevStart != "-1") {
      nav += "&#160;<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "', '" + prevStart + "');\">Previous</a>";
   }
   if (nextStart != "-1") {
      nav += "&#160;<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "', '" + nextStart + "');\">Next</a>";
   }
   */

    var html = "<div id='sssgititle' onmouseover='this.style.cursor=\"hand\"' onclick='sssHistory()'>Saved searches</div>" + "<table><tr><td><table id='sssgi'></table></td></tr><tr><td class='sssfen'><a href='delAll()'>clear all</a></td></tr><tr id='sss-facet'></tr>";
	
	
	//html += "<tr><td>&nbsp;<td><tr>";
// start facets
var generateFacets = function(){
	for (var iiii = 0; iiii < groupRoot.childNodes.length; iiii++) {
        var fieldNode = groupRoot.childNodes.item(iiii);
        if (fieldNode.nodeType != 1) {
            continue;
        }

        var fn = fieldNode.getAttribute("name");
        html += "<tr><td class='sssfgn'>" + fn + "</td></tr>";

        for (var j = 0; j < fieldNode.childNodes.length; j++) {
            var groupNode = fieldNode.childNodes.item(j);
            if (groupNode.nodeType != 1) {
                continue;
            }
            if (j >= 10) {
                break;
            }
			
            var gn = groupNode.getAttribute("name");
            var gk = groupNode.getAttribute("key");
            var gc = groupNode.childNodes[0].nodeValue;
            var up = urlparse(location.href);
            var bs = up[0].mid;

            html += "<tr><td class='sssfen'>" + 
            //		"<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" +
//            "<a rel=\"sss\" href=\"" + TEMPLATE_NAME + urlsplit + searchTerm + "&filter=" + gk + filters + ifPar("view") + "\" onClick=\"javascript:sss('" + searchTerm + "&filter=" + gk + filters + "', '0');\">" + gn + " (" + gc + ")</a></td></tr>";

            "<a rel=\"sss\" " + getParamBuilder( searchTerm + "&filter=" + gk + filters + ifPar("view")) + ">" + gn + " (" + gc + ")</a></td></tr>";

        }
    }

    html += "</table>";
};
	generateFacets();
    document.getElementById("sssgroups").innerHTML = html;

    html = "";
    html += "<table>";

    var itemTemplate = itemGridTemplate;
    if (display == "list") {
        itemTemplate = itemListTemplate;
    }
    var cnt = 0;

    for (var iv = 0; iv < resultsRoot.childNodes.length; iv++) {
        var itemNode = resultsRoot.childNodes.item(iv);
        if (itemNode.nodeType !== 1) {
            continue;
        }

        var item = new Item(itemTemplate, stat0, stat1, stat2);
        item.id = itemNode.getAttribute("id");

        for (var jj = 0; jj < itemNode.childNodes.length; jj++) {
            var attrNode = itemNode.childNodes.item(jj);
            if (attrNode.nodeType != 1) {
                continue;
            }
            var v = "";
            if (attrNode.hasChildNodes()) {
                v = attrNode.childNodes[0].nodeValue;
            }
if (attrNode.nodeName == 'name') {		item.name = v;	}	if (attrNode.nodeName == 'description') {	item.desc = v;	}
if (attrNode.nodeName == 'price') {		item.price = v;	}	if (attrNode.nodeName == 'url') {			item.url = v;	}
if (attrNode.nodeName == 'imageUrl') {	item.img = v;	}	if (attrNode.nodeName == 'modelNumber') {	item.model = v;	}
if (attrNode.nodeName == 'weight') {	item.weight = v;}	if (attrNode.nodeName == 'size') {			item.size = v;	}
if (attrNode.nodeName == 'sku') {		item.sku = v;	}	if (attrNode.nodeName == 'productStatus') {	item.productStatus = v;	}
if (attrNode.nodeName == 'discounts') {
	var discounts = "<div class='sssdb'>";
	for (var k = 0; k < attrNode.childNodes.length; k++) {
		var discNode = attrNode.childNodes.item(k);
		if (discNode.nodeType != 1) continue;
		discounts += "<div class='sssdbq'>" + 
		discNode.getAttribute("qty") + "+</div><div class='sssdbp'>$" + 
		discNode.getAttribute("price") + "<br></div>";
}
	discounts += "</div>";
	item.discounts = discounts;
}
        }
        if (item.productStatus == -1) {
            continue;
        }
        if (display == "grid") {
            if (cnt === 0 || (cnt % cols) === 0) {
                if (cnt > 0) {
                    html += "</tr>";
                }
                html += "<tr>";
            }
        } else {
            if (cnt > 0) {
                html += "</tr>";
            }
            html += "<tr>";
        }
        html += item.print();
        cnt++;
    }

    html += "</tr></table>";
    loadLastQuerys();
	document.getElementById("sssitems").innerHTML = html;

    nav += "<br/><p class='sssbyb'><div style='margin: 0pt; padding: 0pt; font-family: arial; font-size: 10pt; line-height: 30px; width: 95%; text-align: center;'><a target='_blank' href='http://searchnow.coresaas.com/'>Search Service</a> by <a target='_blank' href='http://searchnow.coresaas.com/'><img id='sss_img_id' height='26' width='122' border='0' alt='Site Search powered by SearchNow' src='http://searchnow.coresaas.com/images/searchnow_sm_white.gif' style='vertical-align: middle; display: inline;'/></a></div></p>";
    document.getElementById("sssbotnav").innerHTML = nav;
	loadFacet();
    oaSearch(searchTerm, parseInt(totalHits));
	generateFacets();
}

function Item(it, s0, s1, s2) {
    this.name = "";
    this.desc = "";
    this.price = "";
    this.url = "";
    this.img = "";
    this.id = "";
    this.size = "";
    this.weight = "";
    this.sku = "";
    this.model = "";
    this.productStatus = "";
    this.discounts = "";
    
    this.template = it;
    this.stat0 = s0;
    this.stat1 = s1;
    this.stat2 = s2;

    this.print = function() {
        var html = this.template;

        if (this.productStatus == "0") {
            html = html.replace(/{ITEMACTION}/gi, this.stat0);
        } else if (this.productStatus == "1") {
            html = html.replace(/{ITEMACTION}/gi, this.stat1);
        } else if (this.productStatus == "2") {
            html = html.replace(/{ITEMACTION}/gi, this.stat2);
        }

        html = html.replace(/{ITEMID}/gi, this.id);
        html = html.replace(/{ITEMIMG}/gi, this.img);
        html = html.replace(/{ITEMNAME}/gi, this.name.replace("[RiP]",")").replace("[LeP]","("));
        html = html.replace(/{ITEMPRICE}/gi, this.price);
        html = html.replace(/{ITEMDESC}/gi, this.desc);
        html = html.replace(/{ITEMURL}/gi, this.url);
        html = html.replace(/{ITEMSKU}/gi, this.sku);
        html = html.replace(/{ITEMSIZE}/gi, this.size);
        html = html.replace(/{ITEMWEIGHT}/gi, this.weight);
        html = html.replace(/{ITEMMODEL}/gi, this.model);
        html = html.replace(/{ITEMDISCOUNTS}/gi, this.discounts);
        
        html = html.replace("biu","background-image");
        html = html.replace("localhost:8080","images.coresaas.com");
        html = html.replace("[RiP]",")").replace("[LeP]","(");
        html = html.replace("imageserver/images/","");
        
        return html;
    };

}