var request;

function submitQuery(f) {
   var search = f.search.value;
   sss(search, '0');
}

function sss(q, s) {
   var strURL = "http://searchnow.metrixcloud.com/query.do";
   var queryStr = "query=" + q + "&key=" + __fk + "&start=" + s;
   var url = strURL + "?" + 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>";
}

function getNodeValue(doc, nodeName) {
   return doc.getElementsByTagName(nodeName).item(0).childNodes[0].nodeValue;
}

function parseResults() {
   if (request.readyState != 4) return;
   var doc;

   if (document.implementation.createDocument) {
       var parser = new DOMParser()
       doc = parser.parseFromString(request.responseText, "text/xml")
   } else if (window.ActiveXObject) {
       doc = new ActiveXObject("Microsoft.XMLDOM")
       doc.async="false"
       doc.loadXML(request.responseText)
   }

   var rn = doc.getElementsByTagName("redirect").item(0);
   if (rn) {
      var redirect = rn.childNodes[0].nodeValue;

      if (redirect && redirect != "") {
         document.location = redirect;
         return;
      }
   }

   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 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 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 && altRoot.childNodes[0] != null) {
         var alt = altRoot.childNodes[0].nodeValue;
         document.search.search.value = alt;
         var title = "<span class='sssdym'>Did you mean: <a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + alt + "', '0');\">" + alt + "</a>?</span>";
         document.getElementById("ssstitle").innerHTML = title;
      }

      document.getElementById("sssitems").innerHTML = splash;
      return;
   }

   var filters = "";
   
   if (filterRoot != null) {
      for (var i = 0; i < filterRoot.childNodes.length; i++) {
         var filterNode = filterRoot.childNodes.item(i);
         if (filterNode.nodeType != 1) continue;
         var ft = filterNode.childNodes[0].nodeValue;
         ft = ft.replace(/"/gi, "%22"); 
         filters += "&filter=" + ft;
      }
   }
   
   var nav = "";
   var title = "Showing " + startRow + " - " + endRow + " of " + totalHits + " Search Results for <span class='sssterm'>" + searchTerm + "</span>";

   document.getElementById("ssstitle").innerHTML = title;

   if (totalPages != "1") {
      nav = "Page ";
      var pagesRoot = doc.getElementsByTagName('pages').item(0);
      for (var i = 0; i < pagesRoot.childNodes.length; i++) {
         var pageNode = pagesRoot.childNodes.item(i);
         if (pageNode.nodeType != 1) continue;
         if (pageNode.getAttribute("id") != currentPage) {
            nav += "&#160;<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "', '" + 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 href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "&view=list', '0');\">List</a>";
   } else {
      opts += "<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "&view=grid', '0');\">Grid</a> | <b>List</b>";
   }

   opts += "</td><td class='sssopts'>Sort by: ";

   opts += "<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "&sort=score', '0');\">Relevance</a>";
   opts += " | <a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "&sort=price-ASC', '0');\">Lowest Price</a>";
   opts += " | <a href=\"javascript:void(0);\" onClick=\"javascript:sss('" + searchTerm + filters + "&sort=price-DESC', '0');\">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 = "<table>";

   for (var i = 0; i < groupRoot.childNodes.length; i++) {
      var fieldNode = groupRoot.childNodes.item(i);
      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;

         html += "<tr><td class='sssfen'>" + 
            "<a href=\"javascript:void(0);\" onClick=\"javascript:sss('" +
            searchTerm + "&filter=" + gk + filters + "', '0');\">" + gn + 
            " (" + gc + ")</a></td></tr>";
      }
   }
  
   html += "</table>";
   document.getElementById("sssgroups").innerHTML = html;

   html = "";
   html += "<table>";

   var itemTemplate = itemGridTemplate;
   if (display == "list") itemTemplate = itemListTemplate;
   var cnt = 0;

   for (var i = 0; i < resultsRoot.childNodes.length; i++) {
      var itemNode = resultsRoot.childNodes.item(i);
      if (itemNode.nodeType != 1) continue;

      var item = new Item(itemTemplate,stat0,stat1,stat2);
      item.id = itemNode.getAttribute("id");

      for (var j = 0; j < itemNode.childNodes.length; j++) {
        var attrNode = itemNode.childNodes.item(j);
        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 (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>";
   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/ssscust.html'>Search Service</a> by <a target='_blank' href='http://searchnow.coresaas.com/ssscust.html'><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;

   oaSearch(searchTerm, parseInt(totalHits));
}


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.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);
    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);

    return html;
  }
}