var DOMhelp = new function() {
  function addArray(elt, array, skip) {
    for (var i=skip; i<array.length; ++i)
      if (array[i].constructor==Array)
        addArray(elt, array[i], 0);
      else if (array[i].constructor==String)
        elt.appendChild(document.createTextNode(array[i]));
      else if (array[i].nodeType)
        elt.appendChild(array[i]);
      else for (var a in array[i])
        elt[a]=array[i][a];
    return elt;
  };
  this.appendContent = function(elt) {
    addArray(elt, arguments, 1);
  };
  this.replaceContent = function(elt) {
    while(elt.hasChildNodes())
      elt.removeChild(elt.lastChild);
    addArray(elt, arguments, 1);
  };
  this.createElement = function(tag) {
    var dot=tag.indexOf('.');
    var hash=tag.indexOf('#');
    if (hash>dot) {
      if (dot>-1) {
        var elt=document.createElement(tag.substring(0,dot));
        elt.className=tag.substring(dot+1, hash);
      } else
        var elt=document.createElement(tag.substring(0,hash));
      elt.id=tag.substring(hash+1);
    } else if (dot>hash) {
      if (hash>-1) {
        var elt=document.createElement(tag.substring(0,hash));
        elt.id=tag.substring(hash+1, dot);
      } else
        var elt=document.createElement(tag.substring(0,dot));
      elt.className=tag.substring(dot+1);
    } else
      var elt=document.createElement(tag);
    return addArray(elt, arguments, 1);
  };
  this.map = function(fn, array) {
    var a=[];
    for (var i=0; i<array.length; ++i)
      a[i]=fn(array[i]);
    return a;
  };
};
var o=DOMhelp.createElement;

var shvStoreURL = 'www.apexbattery.com';
var shvUrl = "http://search.conversionsondemand.com/cgi-bin/";
var shvLibDir = document.location.protocol+"//lib.store.yahoo.net/lib/yhst-70515121304670/";
var shvStoreId = "yhst-70515121304670";
var shvDB = 'apexbattery';
var shvWaiting = false;
var shvResElt = null;
var shvResCountElt = null;
var shvScriptElt = null;
var shvDBid = -1;
var shvTotalItems = 0;
var shvItemsReceived = 0;
var shvSchTerm = '';
var shvBroadSearch = '';
var shvSortCol = -1;
var shvSortRev = 0;
var shvFiltCounter = 0;
var shvSortBy = [['Price',0,1],['Alphabetical',3]];
var shvSortSuffix = '';
var shvRefineSuffix = '';
var shvFiltersLoaded = false;
var shvRefinemts = [];
var shvRefine_app = [];

function tryMoreData() {
  if (shvItemsReceived < shvTotalItems && shvItemsReceived <= 100) {
  
  /* Use this to test Error Mailer: document.write('<script language="javascript" src="http://www.secure-ecommerce-services.com/conversionbooster/jewelbasket/shoptivateSQLError.php?kw=' + shvSchTerm + '"></script>'); */
  
    execScript(shvUrl+'c9?'+shvBroadSearch+'H='+shvDB+'&W='+escape(shvSchTerm+" ")+'&S='+shvItemsReceived+'&D='+shvDBid+shvSortSuffix+shvRefineSuffix);
  } else {
    //execScript(document.location.protocol+"//lib.store.yahoo.net/lib/jewelbasket/shv-min2.js");
  }
}

window.shv_banner=function() {
};

function shvRemoveRefinement(parm) {
	for (var n=0; n<shvRefine_app.length; ++n) {
		if (shvRefine_app[n][1]==parm) {
			shvRefine_app.splice(n, 1);
			shvFiltersLoaded=false;
			shvRefineSuffix='';
			for (var i=0; i<shvRefine_app.length; ++i) {
				shvRefineSuffix+='&'+shvRefine_app[i][1];
			}
			shvFiltCounter++;
			shvItemsReceived=0;
			execScript(shvUrl+'i9?'+shvBroadSearch+'H='+shvDB+'&W='+escape(shvSchTerm+" ")+shvSortSuffix+shvRefineSuffix);
		}
	}
}

function shvAddRefinement(caption, parm) {
  shvRefineSuffix += "&"+parm;
  shvRefine_app.push([caption, parm]);
  shvFiltersLoaded=false;
  shvFiltCounter++;
  shvItemsReceived=0;
  execScript(shvUrl+'i9?'+shvBroadSearch+'H='+shvDB+'&W='+escape(shvSchTerm+" ")+shvSortSuffix+shvRefineSuffix);
}

function shvMoreRefOpts(cat) {
	var elt = document.getElementById('ropt_'+cat);
	if (elt) {
		for (var i=0; i<shvRefinemts.length; ++i) {
			if (shvRefinemts[i][0]==cat) {
				DOMhelp.replaceContent(elt, o('div.shvrefgphdr', cat), DOMhelp.map(shvContForRefinement, shvRefinemts[i][1]));
			}
		}
	}
}

function shvContForExistRefs(rment) {
  return [rment[0]+' [', o('a.shvdelref', {'href':'javascript:void(0);', 'onclick':function() {shvRemoveRefinement(rment[1]); return false;}}, '- '), ']', o('br')];
}

function shvContForRefinement(rment) {
  return o('a.shvrment', {'href':'javascript:void(0);', 'onclick':function() {shvAddRefinement(rment[0], rment[2]); return false;}}, rment[0]+" ("+rment[1]+")");
}

function shvContForRefineGroup(refine) {
  var rments = [];
  for (var i=0; i<refine[1].length && i<10; ++i) {
    rments.push(shvContForRefinement(refine[1][i]));
  }
  if (i<refine[1].length) {
    rments.push(o('a', {'href':'javascript:void(0);', 'onclick':function() {shvMoreRefOpts(refine[0]); return false;}}, 'More...'));
  }
  return o('div.shvrefgp', {'id':'ropt_'+refine[0]}, o('div.shvrefgphdr', refine[0]), rments);
}

function shvDoFilters() {
	var filtcont = document.getElementById('shvNav');
	if (filtcont) {
		var existingElts=[], suggestElts=[];
		if (shvRefine_app.length) {
			existingElts = o('div.shvexfilt', DOMhelp.map(shvContForExistRefs, shvRefine_app));
		}
		if (!shvFiltersLoaded) {
			suggestElts = o('div.shvrefgp', '(Loading...)');
		} else if (shvRefinemts.length) {
			suggestElts = DOMhelp.map(shvContForRefineGroup, shvRefinemts);
		} else {
			suggestElts = o('div.shvrefgp', '(No '+(shvRefine_app.length ? 'more ' : '')+'filters available)');
		}
		DOMhelp.replaceContent(filtcont, existingElts, suggestElts, o('div.shvrefgpend'));
	}
}

function shvShowFilters() {
  if (!shvFiltersLoaded) {
		execScript(shvUrl+'refine?'+shvBroadSearch+'H='+shvDB+'&W='+escape(shvSchTerm+" ")+'&K='+shvFiltCounter+shvRefineSuffix, true);
    var curcount = shvFiltCounter;
    setTimeout(function() {if (!shvFiltersLoaded && curcount==shvFiltCounter) shvDoFilters();}, 250);
  }
}

function shvSortData(colno, startrev) {
  if (colno==shvSortCol) {
    shvSortRev=1-shvSortRev;
  } else {
    shvSortCol=colno;
    shvSortRev=startrev ? 1 : 0;
  }
  shvSortLinks();
  if (colno==-1) {
    shvSortSuffix = '';
  } else {
    shvSortSuffix = '&o='+shvSortCol+(shvSortRev ? '&r=1' : '');
  }

  shvItemsReceived=0;
  execScript(shvUrl+'i9?H='+shvDB+'&W='+escape(shvSchTerm+" ")+shvSortSuffix+shvRefineSuffix);
}

function shvSortLinks() {
	function mksortfn(n, r) {
		return function() {shvSortData(n, r); return false;};
	}

	var sortdiv=document.getElementById('shvHdr');
	if (sortdiv) {
    var lst = [];
    for (var i=0; i<shvSortBy.length; ++i) {
      var sd=shvSortBy[i];
      var sel=(shvSortCol==sd[1]);
      if (sel && shvSortCol==-1) {
        lst.push(o('span.shvsortsel', sd[0]));
      } else {   
        lst.push(o('a'+(sel ? ".shvsortsel" : ""), {'href':'javascript:void(0);', 'onclick':mksortfn(sd[1], sd[2])}, sd[0]));
        if (sel) {
          lst.push(' ');
          lst.push(shvSortRev ? o('span.shvstup'): o('span.shvstdn'));
        }
      }
      lst.push(' | ');
    }
    lst.pop();
    DOMhelp.replaceContent(sortdiv, o('b', 'Sort: '), lst);
	}
}

window.shv_refinements = function(k, refines) {
  if (k!=shvFiltCounter) return;
  shvFiltersLoaded=true;
  shvRefinemts = refines;
  shvDoFilters();
};

window.shv_init = function(count, fc, fb, k, dbid) {
  if (count<50 && shvRefineSuffix=='' && !shvBroadSearch && shvSchTerm.indexOf(' ')!=-1) {
    shvBroadSearch = 'B=1&';
    execScript(shvUrl+"i9?B=1&H="+shvDB+"&W="+escape(shvSchTerm+" ")+shvSortSuffix);
  } else {
    shvWaiting = false;
    shvTotalItems = count;
    shvDBid = dbid;

		shvSortLinks();
		shvShowFilters();
	
		if (shvTotalItems == 0 && shvSchTerm) {
			shvResCountElt.innerHTML = shvTotalItems+' results <script language="javascript" src="http://www.secure-ecommerce-services.com/conversionbooster/jewelbasket/shoptivateSQLError.php?kw=' + shvSchTerm + '"></script>';
		} else {
			shvResCountElt.innerHTML = shvTotalItems+' results';
		}
	
    shvResElt.innerHTML = '';
  }
};

window.shv_items=function(first_idx, k, newitems) {
	if (shvDBid!=-1) {
		for (var i=0; i<newitems.length; ++i) {
			var item = newitems[i];
			if (item['name'].length>50) {item['name']=item['name'].substring(0,50)+"...";}

			var thurl = item['thumburl'] ? item['thumburl'] : "http://shoptivate.com/shared/noimage.png";
			var thht = item['thumburl'] ? item['thumbht'] : 70;
			var thwd = item['thumburl'] ? item['thumbwd'] : 70;
			var ourprice = item['sprice']>0 ? o('div.shvressprice', 'Sale: $'+item['sprice']) : [];
    	var rating = item['rating'] ? o('div', 'Rating: ',
                                    	o('img', {'src':'http://shoptivate.com/shared/'+item['rating']+'starmini.gif'})) : [];
      var produrl = 'http://'+shvStoreURL+'/'+item['id'].toLowerCase()+".html";
      var buylink = item['opts'] ? produrl : "http://order.store.yahoo.net/cgi-bin/wg-order?vwcatalog="+shvStoreId+"&vwitem="+item['id'].toLowerCase();
      /* var buyelt = item['sprice']>0 ? o('a', {'href':buylink}, o('img', {'border':'0', 'src':'http://accessorygeeks.shoptivate.com/ag-buy-now.gif'})) : []; */
			var cont = o('div.shvpcont',
									o('a', {'href':produrl},
									 o('img', {'src':thurl, 'height':''+thht, 'width':''+thwd}),
									 item['name']),
									ourprice,
									rating);
			cont.style.top = (100-thht)+"px";
			var itemelt = o('div.shvitem', cont);

			DOMhelp.appendContent(shvResElt, itemelt);
			++shvItemsReceived;
		}
		setTimeout(tryMoreData, 10);
	}
};

function shvTimeout() {
  if (shvWaiting) {
    shvResElt.innerHTML = 'Error retrieving products.';
  }
}

function execScript(page) {
  DOMhelp.appendContent(shvScriptElt, o('script', {'src':page}));
}

function trySearch() {
  if (!shvScriptElt) {
    shvScriptElt = document.getElementById('shvScripts');
  }
  if (!shvResElt) {
    shvResElt = document.getElementById('shvResults');
  }
  if (!shvResCountElt) {
    shvResCountElt = document.getElementById('shvResultCount');
  }
  if (shvScriptElt && shvResElt && shvResCountElt) {
    shvWaiting = true;
    shvResElt.innerHTML = 'Searching...';
    setTimeout(shvTimeout, 10000);
    execScript(shvUrl+"i9?H="+shvDB+"&W="+escape(shvSchTerm+" "));
  } else {
    setTimeout(trySearch, 50);
  }
}
