// ==========================================================
// ===  ORIGINAL JAVASCRIPT
// ==========================================================

// ===  Enviroment identificator
var localIsDOM = document.getElementById?true:false;
var localIsJava = navigator.javaEnabled();
var localIsStrict = document.compatMode=='CSS1Compat';
var localPlatform = navigator.platform;
var localVersion = "0";
var localBrowser = "";
var localBFamily = "";
var isHttps = false;
if (window.opera && localIsDOM) {
	localBFamily = localBrowser = "Opera";
	if (navigator.userAgent.search(/^.*Opera.([\d.]+).*$/) != -1)
		localVersion = navigator.userAgent.replace(/^.*Opera.([\d.]+).*$/, "$1");
	else if (window.print)
		localVersion = "6";
	else
		localVersion = "5";
} else if (document.all && document.all.item)
	localBFamily = localBrowser = 'MSIE';
if (navigator.appName=="Netscape") {
	localBFamily = "NC";
	if (!localIsDOM) {
		localBrowser = 'Netscape';
		localVersion = navigator.userAgent.replace(/^.*Mozilla.([\d.]+).*$/, "$1");
		if(localVersion != '')
			localVersion = "4";
	} else if(navigator.userAgent.indexOf("Safari") >= 0)
		localBrowser = 'Safari';
	else if (navigator.userAgent.indexOf("Netscape") >= 0)
		localBrowser = 'Netscape';
	else if (navigator.userAgent.indexOf("Firefox") >= 0)
		localBrowser = 'Firefox';
	else 
		localBrowser = 'Mozilla'; }
if (navigator.userAgent.indexOf("MSMSGS") >= 0)
	localBrowser = "WMessenger";
else if (navigator.userAgent.indexOf("e2dk") >= 0)
	localBrowser = "Edonkey";
else if (navigator.userAgent.indexOf("Gnutella") + navigator.userAgent.indexOf("Gnucleus") >= 0)
	localBrowser = "Gnutella";
else if (navigator.userAgent.indexOf("KazaaClient") >= 0)
	localBrowser = "Kazaa";
if (localVersion == '0' && localBrowser != '') {
	var rg = new RegExp("^.*"+localBrowser+".([\\d.]+).*$");
	localVersion = navigator.userAgent.replace(rg, "$1"); }
var localIsCookie = ((localBrowser == 'Netscape' && localVersion == '4')?(document.cookie != ''):navigator.cookieEnabled);
if (document.location.protocol == "https:") { 
    isHttps = true; }

function change_antibot_image(id) {
	var image = document.getElementById(id);
	image.src = "temp";
	setTimeout('', 1000);
	image.src = xcart_web_dir+"/antibot_image.php?"+Math.random()+"&section="+id+"&regenerate=Y"; }

// ===  Find element by classname
function getElementsByClassName( clsName ) {
	var arr = new Array(); 
	var elems = document.getElementsByTagName("*");
	for ( var cls, i = 0; ( elem = elems[i] ); i++ ) {
		if ( elem.className == clsName ) {
			arr[arr.length] = elem; } }
	return arr; }

// ===  Opener/Closer HTML block
function visibleBox(id,skipOpenClose) {
	elm1 = document.getElementById("open"+id);
	elm2 = document.getElementById("close"+id);
	elm3 = document.getElementById("box"+id);
	if(!elm3)
		return false;
	if (skipOpenClose) {
		elm3.style.display = (elm3.style.display == "")?"none":""; } 
  else if(elm1) {
		if (elm1.style.display == "") {
			elm1.style.display = "none";
			if(elm2)
				elm2.style.display = "";
			elm3.style.display = "none";
			var class_objs = getElementsByClassName('DialogBox');
			for (var i = 0; i < class_objs.length; i++) {	class_objs[i].style.height = "1%"; }} 
    else {
			elm1.style.display = "";
			if(elm2)
				elm2.style.display = "none";
			elm3.style.display = ""; } } }

//  ===	URL encode
function urlEncode(url) {
	return url.replace(/\s/g, "+").replace(/&/, "&amp;").replace(/"/, "&quot;") }

//  ===	Math.round() wrapper
function round(n, p) {
	if (isNaN(n))
		n = parseFloat(n);
	if (!p || isNaN(p))
		return Math.round(n);
	p = Math.pow(10, p);
	return Math.round(n*p)/p; }

//  ===	Price format
function price_format(price, thousand_delim, decimal_delim, precision) {
	var thousand_delim = (arguments.length > 1 && thousand_delim !== false) ? thousand_delim : number_format_th;
	var decimal_delim = (arguments.length > 2 && decimal_delim !== false) ? decimal_delim : number_format_dec;
	var precision = (arguments.length > 3 && precision !== false) ? precision : number_format_point;
	if (precision > 0) {
		precision = Math.pow(10, precision);
		price = Math.round(price*precision)/precision;
		var top = Math.floor(price);
		var bottom = Math.round((price-top)*precision)+precision; } 
  else {
		var top = Math.round(price);
		var bottom = 0; }
	top = top+"";
	bottom = bottom+"";
	var cnt = 0;
	for (var x = top.length; x >= 0; x--) {
		if (cnt % 3 == 0 && cnt > 0 && x > 0)
			top = top.substr(0, x)+thousand_delim+top.substr(x, top.length);
		cnt++; }
	return (bottom > 0) ? (top+decimal_delim+bottom.substr(1, bottom.length)) : top; }

//  ===	Substitute
function substitute(lbl) {
var x, rg;
	for(x = 1; x < arguments.length; x+=2) {
		if(arguments[x] && arguments[x+1]) {
			rg = new RegExp("\\{\\{"+arguments[x]+"\\}\\}", "gi");
			lbl = lbl.replace(rg,  arguments[x+1]);
			rg = new RegExp('~~'+arguments[x]+'~~', "gi");
			lbl = lbl.replace(rg,  arguments[x+1]); } }
	return lbl; }

function getWindowOutWidth(w) {
	if (!w)
		w = window;
	if (localBFamily == "MSIE")
		return w.document.body.clientWidth;
	else
		return w.outerWidth; }

function getWindowOutHeight(w) {
	if (!w)
		w = window;
	if (localBFamily == "MSIE")
		return w.document.body.clientHeight;
	else
		return w.outerHeight; }

function getWindowWidth(w) {
	if (!w)
		w = window;
    if (localBFamily == "MSIE")
		return w.document.body.clientWidth;
    else 
		return w.innerWidth; }

function getWindowHeight(w) {
	if (!w)
		w = window;
    if (localBFamily == "MSIE")
		return w.document.body.clientHeight;
	else
		return w.innerHeight; }

function getDocumentHeight(w){
	if (!w)
		 w = window;
	if (localBFamily == "MSIE" || (localBFamily == "Opera" && localVersion >= 7 && localVersion < 8))
		return isStrict ? w.document.documentElement.scrollHeight : w.document.body.scrollHeight;
	if (localBFamily == "NC")
		return w.document.height
	if (localBFamily == "Opera")
		return w.document.body.style.pixelHeight }

function getDocumentWidth(w) {
	if (!w)
		w = window;
	if (localBFamily == "MSIE" || (localBFamily == "Opera" && localVersion >= 7 && localVersion < 8))
		return isStrict ? w.document.documentElement.scrollWidth : w.document.body.scrollWidth;
	if (localBFamily == "NC")
		return w.document.width;
	if (localBFamily == "Opera")
		return w.document.body.style.pixelWidth; }

function expandWindowX(w, step, limit) {
	if (!w)
		w = window;
	if (!step)
		step = 10;
	var go = true;
	while (go) {
		if (limit && getWindowOutWidth()+step > limit)
			break;
		w.scrollTo(step, 0);
		go = w.document.documentElement.scrollLeft > 0;
		if (go)
			w.resizeBy(step, 0); }
	return true; }

function expandWindowY(w, step, limit) {
	if (!w)
		w = window;
	if (!step)
		step = 10;
	var go = true;
	while (go) {
		if (limit && getWindowOutHeight()+step > limit)
			 break;
		w.scrollTo(0, step);
		go = w.document.documentElement.scrollTop > 0;
		if (go)
			w.resizeBy(0, step); }
	return true; }

//  ===	Check list of checkboxes
function checkMarks(form, reg, lbl) {
var is_exist = false;
	if (form.elements.length == 0)
		return true;
	for (var x = 0; x < form.elements.length; x++) {
		if (form.elements[x].name.search(reg) == 0 && form.elements[x].type == 'checkbox' && !form.elements[x].disabled) {
			is_exist = true;
			if (form.elements[x].checked)
				return true; } }
	if (!is_exist)
		return true;
	else if (lbl)
		alert(lbl);
	else if (lbl_no_items_have_been_selected)
		alert(lbl_no_items_have_been_selected);
	return false; }

//  ===	Submit form with specified value of 'mode' parmaeters
function submitForm(formObj, formMode) {
	if (!formObj)
		return false;
	if (formObj.tagName != "FORM") {
		if (!formObj.form)
			return false;
		formObj = formObj.form; }
	if (formObj.mode)
		formObj.mode.value = formMode;
	formObj.submit(); }

//  ===	Analogue of PHP function sleep()
function sleep(msec) {
	var then = new Date().getTime()+msec;
	while (then >= new Date().getTime()){} }

/*  ===	Convert number from current format
	(according to 'Input and display format for floating comma numbers' option)
	to float number */
function convert_number(num) {
	var regDec = new RegExp(reg_quote(number_format_dec), "gi");
	var regTh = new RegExp(reg_quote(number_format_th), "gi");
	var pow = Math.pow(10, parseInt(number_format_point));
	num = parseFloat(num.replace(" ", "").replace(regTh, "").replace(regDec, "."));
	return Math.round(num*pow)/pow; }

/*  === Check string as number
	(according to 'Input and display format for floating comma numbers' option) */
function check_is_number(num) {
	var regDec = new RegExp(reg_quote(number_format_dec), "gi");
	var regTh = new RegExp(reg_quote(number_format_th), "gi");
	num = num.replace(" ", "").replace(regTh, "").replace(regDec, ".");
	return (num.search(/^[0-9]+(\.[0-9]+)?$/) != -1); }

// ===  Qutation for RegExp class
function reg_quote(s) {
	return s.replace(/\./g, "\\.").replace(/\//g, "\\/").replace(/\*/g, "\\*").replace(/\+/g, "\\+").replace(/\[/g, "\\[").replace(/\]/g, "\\]"); }

function setCookie(name, value, path, expires) {
	if (typeof(expires) == 'object') {
		try {
			var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
			var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
			if (days[expires.getDay()] && months[expires.getMonth()])
				expires = days[expires.getDay()]+" "+expires.getDate()+"-"+months[expires.getMonth()]+"-"+expires.getFullYear()+" "+expires.getHours()+":"+expires.getMinutes()+":"+expires.getSeconds()+" GMT";
		} catch(e) { } }
	if (typeof(expires) != 'string')
		expires = false;
	document.cookie = name+"="+escape(value)+(expires ? "; expires=" + expires : "")+(path ? "; path="+path : ""); }

function deleteCookie(name) {
	document.cookie = name+"=0; expires=Fri, 31 Dec 1999 23:59:59 GMT;"; }

// ===  Clone object
function cloneObject(orig) {
	var r = {};
	for (var i in orig) { r[i] = orig[i];	}
	return r; }

// ===  Get first checkbox and redirect to URL
function getFirstCB(form, reg) {
	while (form.tagName && form.tagName.toUpperCase() != 'FORM')
		form = form.parentNode;
	if (!form.tagName || form.tagName.toUpperCase() != 'FORM' || form.elements.length == 0)
    return false;
	var selectedChk = false;
  for (var x = 0; x < form.elements.length; x++) {
    if (form.elements[x].name.search(reg) == 0 && form.elements[x].type == 'checkbox' && !form.elements[x].disabled && form.elements[x].checked) {
      selectedChk = form.elements[x];
      break; } }
  if (!selectedChk) {
    if (lbl_no_items_have_been_selected)
      alert(lbl_no_items_have_been_selected);
    return false; }
  return selectedChk; }

//  ===	getElementById() wrapper
function _getById(id) {
	if (typeof(id) != 'string' || !id)
		return false;
	var obj = document.getElementById(id);
	if (obj && obj.id != id) {
		obj = false;
		for (var i = 0; i < document.all.length && obj === false; i++) {
			if (document.all[i].id == id)
				obj = document.all[i]; } }
	return obj; }

// ===  undefined or not
function isset(obj) { 
  return typeof(obj) != 'undefined' && obj !== null; }

// ===  Check - variable is function or not
function isFunction(f) { 
  return (typeof(f) == 'function' || (typeof(f) == 'object' && (f+"").search(/\s*function /) === 0)); }
// ==========================================================
// ===  end ORIGINAL JAVASCRIPT
// ==========================================================

// ==========================================================
// ===  STATIC PAGE PERSISTENCY
// ==========================================================
var login_data='';
function showDynamicData() {
	var items_cookie='',total_cookie='',lineage_cookie='',n,s,o;
	var customer = (typeof(dyn_customer)=="string") ? dyn_customer : "customer";
	var minicart = (typeof(dyn_minicart)=="string") ? dyn_minicart : "minicart";

	//=== GET COOKIE DATA
	if (localIsCookie) {
	  items_cookie=getPCookie('items');
	  total_cookie=getPCookie('total');
	  login_data=getPCookie('login');
	  lineage_cookie=getPCookie('lineage'); }

	//=== WRITE login DATA
	o=document.getElementById(customer);
	if (login_data=='') { o.innerHTML=""; } else {
	  s=o.innerHTML;
	  n=s.indexOf('<!--login-->');
	  if (n>-1) { s=s.substr(0,n)+login_data+s.substr(n+12); }
	  o.innerHTML = s;
	  o.style.display = 'block'; }

	//=== GET CART DATA
	if ((typeof(items_data)=='undefined') || (items_data=='')) { 
	  if (items_cookie=='') {
	    items_data='0';
	    total_data='$0.00'; }
	  else {
	    items_data=items_cookie; 
	    total_data=total_cookie; } }
	else {
	  if (items_data=='0') { 
	    total_data='$0.00';
	    erasePCookie('items');
	    erasePCookie('total'); }
	  else {
	    if (localIsCookie) {
	      if (items_cookie!=items_data) { setPCookie('items',items_data,0); }
	      if (total_cookie!=total_data) { setPCookie('total',total_data,0); } } } }

	//=== WRITE CART DATA
	o=document.getElementById(minicart);
	if (items_data=='0') { o.innerHTML=""; } else {
	  s=o.innerHTML;
	  n=s.indexOf('<!--items-->');
	  if (n>-1) { s=s.substr(0,n)+items_data+s.substr(n+12); }
	  n=s.indexOf('<!--total-->');
	  if (n>-1) { s=s.substr(0,n)+total_data+s.substr(n+12); }
	  o.innerHTML=s;
	  o.style.visibility='visible';
	  o.style.display='block'; }
}
// ==========================================================
// ===  end STATIC PAGE PERSISTENCY
// ==========================================================

// ==========================================================
// ===  BANNER CONTROL SCRIPT
// ==========================================================
var hdrTimerId = false;
function scrollHeaderTabs( bShow ) {
  if (hdrTimerId) { clearTimeout(hdrTimerId); }
  var o=document.getElementById('phdr_tabs'), t=document.getElementById('phdr_dynamic');
  var nFullDown=112, nFullUp=93, nTest, n=parseInt(o.style.top);
  if ((!bShow) && (n<nFullDown)) {
    n=n+1; nTest=n-nFullDown; } 
  else { if ((bShow) && (n>nFullUp)) {
    t.style.visibility="visible";
    n=n-1; nTest=n-nFullUp; } 
  else { n=0; } }
  if (n>0) {
    o.style.top=n+"px";
    if (nTest!=0) { hdrTimerId=setTimeout( "scrollHeaderTabs("+bShow+")",1); } 
    else { if (!bShow) { t.style.visibility="hidden"; 
			 setOpacity("phdr_search",70); } } } 
}
function fadeHeaderTab(s) {
  o=document.getElementById(s);
	o.style.opacity = .65;
	o.style.filter = 'alpha(opacity=65)';
}
function highHeaderTab(s) {
  o=document.getElementById(s);
	o.style.opacity = .99;
	o.style.filter = 'alpha(opacity=99)';
}
// ==========================================================
// ===  end BANNER CONTROL SCRIPT
// ==========================================================

// ==========================================================
// ===  UTILITY FUNCTIONS
// ==========================================================
function setOpacity(e,n) {
  if (typeof(e)=="string") { e=document.getElementById(e); }
  if (e) {
  if ((e.id=='phdr_search') && (n!=100)) { n=70; };
  e.style.opacity=n/100;
  e.style['-moz-opacity']=n/100;
  e.style.filter="alpha(opacity="+n+")"; }; }

function setPCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString(); }
	else var expires = "";
	document.cookie = name+"="+escape(value)+expires+"; path=/"; }

function getPCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length)); }
	return ''; }

function erasePCookie(name) { setPCookie(name,"",-1) }
// ==========================================================
// ===  end UTILITY FUNCTIONS
// ==========================================================

// ==========================================================
// ===  SIMPLE GALLERY
// ==========================================================
var simpleGallery_navpanel={
	panel: {height:'45px', opacity:0.5, paddingTop:'5px', fontStyle:'bold 11px Verdana'}, //customize nav panel container
	images: [ '/store/skin1/customer/widgets/rotator/left.gif', '/store/skin1/customer/widgets/rotator/play.gif', '/store/skin1/customer/widgets/rotator/right.gif', '/store/skin1/customer/widgets/rotator/pause.gif'], //nav panel images (in that order)
	imageSpacing: {offsetTop:[-4, 0, -4], spacing:10}, //top offset of left, play, and right images, PLUS spacing between the 3 images
	slideduration: 500 //duration of slide up animation to reveal panel
}

function simpleGallery(settingarg){
	this.setting=settingarg
	settingarg=null
	var setting=this.setting
	setting.panelheight=(parseInt(setting.navpanelheight)>5)? parseInt(setting.navpanelheight) : parseInt(simpleGallery_navpanel.panel.height)
	setting.fadeduration=parseInt(setting.fadeduration)
	setting.curimage=(setting.persist)? simpleGallery.routines.getCookie("gallery-"+setting.wrapperid) : 0
	setting.curimage=setting.curimage || 0 //account for curimage being null if cookie is empty
	setting.ispaused=!setting.autoplay[0] //ispaused reflects current state of gallery, autoplay[0] indicates whether gallery is set to auto play
	setting.currentstep=0 //keep track of # of slides slideshow has gone through
	setting.totalsteps=setting.imagearray.length*setting.autoplay[2] //Total steps limit: # of images x # of user specified cycles
	setting.fglayer=0, setting.bglayer=1 //index of active and background layer (switches after each change of slide)
	setting.oninit=setting.oninit || function(){}
	setting.onslide=setting.onslide || function(){}
	var preloadimages=[], longestdesc=null //preload images
	setting.longestdesc="" //get longest description of all slides. If no desciptions defined, variable contains ""
	for (var i=0; i<setting.imagearray.length; i++){
		preloadimages[i]=new Image()
		preloadimages[i].src=setting.imagearray[i][0]
		if (setting.imagearray[i][3] && setting.imagearray[i][3].length>setting.longestdesc.length)
			setting.longestdesc=setting.imagearray[i][3]
	}
	var slideshow=this
	jQuery(document).ready(function($){
		var setting=slideshow.setting
		setting.$wrapperdiv=$('#'+setting.wrapperid).css({position:'relative', visibility:'visible', background:'black', overflow:'hidden', width:setting.dimensions[0], height:setting.dimensions[1]}).empty() //main gallery DIV
		if (setting.$wrapperdiv.length==0){ //if no wrapper DIV found
			alert("Error: DIV with ID \""+setting.wrapperid+"\" not found on page.")
			return
		}
		setting.$gallerylayers=$('<div class="gallerylayer"></div><div class="gallerylayer"></div>') //two stacked DIVs to display the actual slide 
			.css({position:'absolute', left:0, top:0})
			.appendTo(setting.$wrapperdiv)
		setting.gallerylayers=setting.$gallerylayers.get() //cache stacked DIVs as DOM objects
		setting.navbuttons=simpleGallery.routines.addnavpanel(setting) //get 4 nav buttons DIVs as DOM objects
		if (setting.longestdesc!="") //if at least one slide contains a description (feature is enabled)
			setting.descdiv=simpleGallery.routines.adddescpanel(setting)
		$(setting.navbuttons).filter('img.navimages').css({opacity:0.8})
			.bind('mouseover mouseout', function(e){
				$(this).css({opacity:(e.type=="mouseover")? 1 : 0.8})
			})
			.bind('click', function(e){
				var keyword=e.target.title.toLowerCase()
				slideshow.navigate(keyword) //assign behavior to nav images
			})
		setting.$wrapperdiv.bind('mouseenter', function(){slideshow.showhidenavpanel('show')})
		setting.$wrapperdiv.bind('mouseleave', function(){slideshow.showhidenavpanel('hide')})
		slideshow.showslide(setting.curimage) //show initial slide
		setting.oninit.call(slideshow) //trigger oninit() event
		$(window).bind('unload', function(){ //clean up and persist
			$(slideshow.setting.navbuttons).unbind()
			if (slideshow.setting.persist) //remember last shown image's index
				simpleGallery.routines.setCookie("gallery-"+setting.wrapperid, setting.curimage)
			jQuery.each(slideshow.setting, function(k){
				if (slideshow.setting[k] instanceof Array){
					for (var i=0; i<slideshow.setting[k].length; i++){
						if (slideshow.setting[k][i].tagName=="DIV") //catches 2 gallerylayer divs, gallerystatus div
							slideshow.setting[k][i].innerHTML=null
						slideshow.setting[k][i]=null
					}
				}
				if (slideshow.setting[k].innerHTML) //catch gallerydesctext div
					slideshow.setting[k].innerHTML=null
				slideshow.setting[k]=null
			})
			slideshow=slideshow.setting=null
		})
	})
}

simpleGallery.prototype={

	navigate:function(keyword){
		clearTimeout(this.setting.playtimer)
		this.setting.totalsteps=100000 //if any of the nav buttons are clicked on, set totalsteps limit to an "unreachable" number 
		if (!isNaN(parseInt(keyword))){
			this.showslide(parseInt(keyword))
		}
		else if (/(prev)|(next)/i.test(keyword)){
			this.showslide(keyword.toLowerCase())
		}
		else{ //if play|pause button
			var slideshow=this
			var $playbutton=$(this.setting.navbuttons).eq(1)
			if (!this.setting.ispaused){ //if pause Gallery
				this.setting.autoplay[0]=false
				$playbutton.attr({title:'Play', src:simpleGallery_navpanel.images[1]})
			}
			else if (this.setting.ispaused){ //if play Gallery
				this.setting.autoplay[0]=true
				this.setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, this.setting.autoplay[1])
				$playbutton.attr({title:'Pause', src:simpleGallery_navpanel.images[3]})
			}
			slideshow.setting.ispaused=!slideshow.setting.ispaused
		}
	},

	showslide:function(keyword){
		var slideshow=this
		var setting=slideshow.setting
		var totalimages=setting.imagearray.length
		var imgindex=(keyword=="next")? (setting.curimage<totalimages-1? setting.curimage+1 : 0)
			: (keyword=="prev")? (setting.curimage>0? setting.curimage-1 : totalimages-1)
			: Math.min(keyword, totalimages-1)
		setting.gallerylayers[setting.bglayer].innerHTML=simpleGallery.routines.getSlideHTML(setting.imagearray[imgindex])
		setting.$gallerylayers.eq(setting.bglayer).css({zIndex:1000, opacity:0}) //background layer becomes foreground
			.stop().css({opacity:0}).animate({opacity:1}, setting.fadeduration, function(){ //Callback function after fade animation is complete:
				clearTimeout(setting.playtimer)
				setting.gallerylayers[setting.bglayer].innerHTML=null  //empty bglayer (previously fglayer before setting.fglayer=setting.bglayer was set below)
				try{
					setting.onslide.call(slideshow, setting.gallerylayers[setting.fglayer], setting.curimage)
				}catch(e){
					alert("Simple Controls Gallery: An error has occured somwhere in your code attached to the \"onslide\" event: "+e)
				}
				setting.currentstep+=1
				if (setting.autoplay[0]){
					if (setting.currentstep<=setting.totalsteps)
						setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, setting.autoplay[1])
					else
						slideshow.navigate("play/pause")
				}
			}) //end callback function
		setting.gallerylayers[setting.fglayer].style.zIndex=999 //foreground layer becomes background
		setting.fglayer=setting.bglayer
		setting.bglayer=(setting.bglayer==0)? 1 : 0
		setting.curimage=imgindex
		setting.navbuttons[3].innerHTML=(setting.curimage+1) + '/' + setting.imagearray.length
		if (setting.imagearray[imgindex][3]){ //if this slide contains a description
			setting.$descpanel.css({visibility:'visible'})
			setting.descdiv.innerHTML=setting.imagearray[imgindex][3]
		}
		else if (setting.longestdesc!=""){ //if at least one slide contains a description (feature is enabled)
			setting.descdiv.innerHTML=null
			setting.$descpanel.css({visibility:'hidden'})

		}
	},

	showhidenavpanel:function(state){
		var setting=this.setting
		var endpoint=(state=="show")? setting.dimensions[1]-setting.panelheight : this.setting.dimensions[1]
		setting.$navpanel.stop().animate({top:endpoint}, simpleGallery_navpanel.slideduration)
		if (setting.longestdesc!="") //if at least one slide contains a description (feature is enabled)
			this.showhidedescpanel(state)
	},

	showhidedescpanel:function(state){
		var setting=this.setting
		var endpoint=(state=="show")? 0 : -setting.descpanelheight
		setting.$descpanel.stop().animate({top:endpoint}, simpleGallery_navpanel.slideduration)
	}
}

simpleGallery.routines={

	getSlideHTML:function(imgelement){
		var layerHTML=(imgelement[1])? '<a href="'+imgelement[1]+'" target="'+imgelement[2]+'">\n' : '' //hyperlink slide?
		layerHTML+='<img src="'+imgelement[0]+'" style="border-width:0" />'
		layerHTML+=(imgelement[1])? '</a>' : ''
		return layerHTML //return HTML for this layer
	},

	addnavpanel:function(setting){
		var interfaceHTML=''
		for (var i=0; i<3; i++){
			var imgstyle='position:relative; border:0; cursor:hand; cursor:pointer; top:'+simpleGallery_navpanel.imageSpacing.offsetTop[i]+'px; margin-right:'+(i!=2? simpleGallery_navpanel.imageSpacing.spacing+'px' : 0)
			var title=(i==0? 'Prev' : (i==1)? (setting.ispaused? 'Play' : 'Pause') : 'Next')
			var imagesrc=(i==1)? simpleGallery_navpanel.images[(setting.ispaused)? 1 : 3] : simpleGallery_navpanel.images[i]
			interfaceHTML+='<img class="navimages" title="' + title + '" src="'+ imagesrc +'" style="'+imgstyle+'" /> '
		}
		interfaceHTML+='<div class="gallerystatus" style="margin-top:1px">' + (setting.curimage+1) + '/' + setting.imagearray.length + '</div>'
		setting.$navpanel=$('<div class="navpanellayer"></div>')
			.css({position:'absolute', width:'100%', height:setting.panelheight, left:0, top:setting.dimensions[1], font:simpleGallery_navpanel.panel.fontStyle, zIndex:'1001'})
			.appendTo(setting.$wrapperdiv)
		$('<div class="navpanelbg"></div><div class="navpanelfg"></div>') //create inner nav panel DIVs
			.css({position:'absolute', left:0, top:0, width:'100%', height:'100%'})
			.eq(0).css({background:'black', opacity:simpleGallery_navpanel.panel.opacity}).end() //"navpanelbg" div
			.eq(1).css({paddingTop:simpleGallery_navpanel.panel.paddingTop, textAlign:'center', color:'white'}).html(interfaceHTML).end() //"navpanelfg" div
			.appendTo(setting.$navpanel)
		return setting.$navpanel.find('img.navimages, div.gallerystatus').get() //return 4 nav related images and DIVs as DOM objects
	},

	adddescpanel:function(setting){
		setting.$descpanel=$('<div class="gallerydesc"><div class="gallerydescbg"></div><div class="gallerydescfg"><div class="gallerydesctext"></div></div></div>')
			.css({position:'absolute', width:'100%', left:0, top:-1000, zIndex:'1001'})
			.find('div').css({position:'absolute', left:0, top:0, width:'100%'})
			.eq(0).css({background:'black', opacity:simpleGallery_navpanel.panel.opacity}).end() //"gallerydescbg" div
			.eq(1).css({color:'white'}).end() //"gallerydescfg" div
			.eq(2).html(setting.longestdesc).end().end()
			.appendTo(setting.$wrapperdiv)
		var $gallerydesctext=setting.$descpanel.find('div.gallerydesctext')
		setting.descpanelheight=$gallerydesctext.outerHeight()
		setting.$descpanel.css({top:-setting.descpanelheight, height:setting.descpanelheight}).find('div').css({height:'100%'})
		return setting.$descpanel.find('div.gallerydesctext').get(0) //return gallery description DIV as a DOM object
	},

	getCookie:function(Name){ 
		var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
		if (document.cookie.match(re)) //if cookie found
			return document.cookie.match(re)[0].split("=")[1] //return its value
		return null
	},

	setCookie:function(name, value){
		document.cookie = name+"=" + value + ";path=/"
	}
}
// ==========================================================
// ===  end SIMPLE GALLERY
// ==========================================================

// ==========================================================
// ===  FLEXDROPDOWN MENU
// ==========================================================
// jQuery.noConflict()
var flexdropdownmenu={
	arrowpath: 'arrow.gif', //full URL or path to arrow image
	animspeed: 200, //reveal animation speed (in milliseconds)
	showhidedelay: [150, 300], //delay before menu appears and disappears when mouse rolls over it, in milliseconds
	startzindex: 1000,
	builtflexmenuids: [], //ids of flex menus already built (to prevent repeated building of same flex menu)

	positionul:function($, $ul, e, $anchor){
		var istoplevel=$ul.hasClass('jqflexmenu') //Bool indicating whether $ul is top level flex menu DIV
		var docrightedge=$(document).scrollLeft()+$(window).width()-40 //40 is to account for shadows in FF
		var docbottomedge=$(document).scrollTop()+$(window).height()-40
		if (istoplevel){ //if main flex menu DIV
			var offsets=$anchor.offset()
			var anchorsetting=$anchor.data('setting')
			var x=offsets.left+anchorsetting.useroffsets[0]+(anchorsetting.dir=="h"? $anchor.outerWidth() : 0) //x pos of main flex menu UL
			var y=offsets.top+anchorsetting.useroffsets[1]+(anchorsetting.dir=="h"? 0 : $anchor.outerHeight())
			x=(x+$ul.data('dimensions').w > docrightedge)? x-(anchorsetting.useroffsets[0]*2)-$ul.data('dimensions').w+$anchor.outerWidth()+(anchorsetting.dir=="h"? -($anchor.outerWidth()*2) : 0) : x //if not enough horizontal room to the ridge of the cursor
			y=(y+$ul.data('dimensions').h > docbottomedge)? y-(anchorsetting.useroffsets[1]*2)-$ul.data('dimensions').h-$anchor.outerHeight()+(anchorsetting.dir=="h"? ($anchor.outerHeight()*2) : 0) : y
		}
		else{ //if sub level flex menu UL
			var $parentli=$ul.data('$parentliref')
			var parentlioffset=$parentli.offset()
			var x=$ul.data('dimensions').parentliw //x pos of sub UL
			var y=0
			x=(parentlioffset.left+x+$ul.data('dimensions').w > docrightedge)? x-$ul.data('dimensions').parentliw-$ul.data('dimensions').w : x //if not enough horizontal room to the ridge parent LI
			y=(parentlioffset.top+$ul.data('dimensions').h > docbottomedge)? y-$ul.data('dimensions').h+$ul.data('dimensions').parentlih : y
		}
		$ul.css({left:x, top:y})
	},
	
	showbox:function($, $flexmenu, e){
		clearTimeout($flexmenu.data('timers').hidetimer)
		$flexmenu.data('timers').showtimer=setTimeout(function(){$flexmenu.show(flexdropdownmenu.animspeed)}, this.showhidedelay[0])
	},

	hidebox:function($, $flexmenu){
		clearTimeout($flexmenu.data('timers').showtimer)
		$flexmenu.data('timers').hidetimer=setTimeout(function(){$flexmenu.hide(100)}, this.showhidedelay[1]) //hide flex menu plus all of its sub ULs
	},

	buildflexmenu:function($, $menu, $target){
		$menu.css({display:'block', visibility:'hidden', zIndex:this.startzindex}).addClass('jqflexmenu').appendTo(document.body)
		$menu.bind('mouseenter', function(){
      lmenu_swap(-1,2)
			clearTimeout($menu.data('timers').hidetimer)
		})		
		$menu.bind('mouseleave', function(){ //hide menu when mouse moves out of it
      lmenu_swap(-1,1)
			flexdropdownmenu.hidebox($, $menu)
		})
		$menu.data('dimensions', {w:$menu.outerWidth(), h:$menu.outerHeight()}) //remember main menu's dimensions
		$menu.data('timers', {})
		var $lis=$menu.find("ul").parent() //find all LIs within menu with a sub UL
		$lis.each(function(i){
			var $li=$(this).css({zIndex: 1000+i})
			var $subul=$li.find('ul:eq(0)').css({display:'block'}) //set sub UL to "block" so we can get dimensions
			$subul.data('dimensions', {w:$subul.outerWidth(), h:$subul.outerHeight(), parentliw:this.offsetWidth, parentlih:this.offsetHeight})
			$subul.data('$parentliref', $li) //cache parent LI of each sub UL
			$subul.data('timers', {})
			$subul.data('store', 'menu_snow')
			$li.data('$subulref', $subul) //cache sub UL of each parent LI
			$li.children("a:eq(0)").append( //add arrow images
				'<img src="'+flexdropdownmenu.arrowpath+'" class="rightarrowclass" style="border:0;" />'
			)
			$li.bind('mouseenter', function(e){ //show sub UL when mouse moves over parent LI
				var $targetul=$(this).css('zIndex', ++flexdropdownmenu.startzindex).addClass("selected").data('$subulref')
				if ($targetul.queue().length<=1){ //if 1 or less queued animations
					clearTimeout($targetul.data('timers').hidetimer)
					$targetul.data('timers').showtimer=setTimeout(function(){
						flexdropdownmenu.positionul($, $targetul, e)
						$targetul.show(flexdropdownmenu.animspeed)
					}, flexdropdownmenu.showhidedelay[0])
				}
			})
			$li.bind('mouseleave', function(e){ //hide sub UL when mouse moves out of parent LI
				var $targetul=$(this).data('$subulref')
				clearTimeout($targetul.data('timers').showtimer)
				$targetul.data('timers').hidetimer=setTimeout(function(){$targetul.hide(100).data('$parentliref').removeClass('selected')}, flexdropdownmenu.showhidedelay[1])
			})
		})
		$menu.find('ul').andSelf().css({display:'none', visibility:'visible'}) //collapse all ULs again
		this.builtflexmenuids.push($menu.get(0).id) //remember id of flex menu that was just built
	},

	init:function($, $target, $flexmenu){
		if (this.builtflexmenuids.length==0){ //only bind click event to document once
			$(document).bind("click", function(e){
				if (e.button==0){ //hide all flex menus (and their sub ULs) when left mouse button is clicked
					$('.jqflexmenu').find('ul').andSelf().hide()
				}
			})
		}
		if (jQuery.inArray($flexmenu.get(0).id, this.builtflexmenuids)==-1) //if this flex menu hasn't been built yet
			this.buildflexmenu($, $flexmenu, $target)
		if ($target.parents().filter('ul.jqflexmenu').length>0) //if $target matches an element within the flex menu markup, don't bind onflexmenu to that element
			return
		var useroffsets=$target.attr('data-offsets')? $target.attr('data-offsets').split(',') : [0,0] //get additional user offsets of menu
		useroffsets=[parseInt(useroffsets[0]), parseInt(useroffsets[1])]
		$target.data('setting', {dir: $target.attr('data-dir'), useroffsets: useroffsets}) //store direction (drop right or down) of menu plus user offsets
		$target.bind("mouseenter", function(e){
			$flexmenu.css('zIndex', ++flexdropdownmenu.startzindex)
			flexdropdownmenu.positionul($, $flexmenu, e, $target)
			flexdropdownmenu.showbox($, $flexmenu, e)
		})
		$target.bind("mouseleave", function(e){
			flexdropdownmenu.hidebox($, $flexmenu)
		})
	}
}

jQuery.fn.addflexmenu=function(flexmenuid, options){
	var $=jQuery
	return this.each(function(){ //return jQuery obj
		var $target=$(this)
		if (typeof options=="object"){ //if options parameter defined
			if (options.dir)
				$target.attr('data-dir', options.dir) //set/overwrite data-dir attr with defined value
			if (options.offsets)
				$target.attr('data-offsets', options.offsets) //set/overwrite data-offsets attr with defined value
    }
		if ($('#'+flexmenuid).length==1) //check flex menu is defined
			flexdropdownmenu.init($, $target, $('#'+flexmenuid))
	})
};

// === By default, add flex menu to anchor links with attribute "data-flexmenu"
jQuery(document).ready(function($){
	var $anchors=$('*[data-flexmenu]')
	$anchors.each(function(){
		$(this).addflexmenu(this.getAttribute('data-flexmenu'))
	})
})

// === ddlistmenu: Function to define a UL list menu dynamically
function ddlistmenu(id, className){
	var menu=document.createElement('ul')
	if (id)
		menu.id=id
	if (className)
		menu.className=className
	this.menu=menu
}
ddlistmenu.prototype={
	addItem:function(url, text, target){
		var li=document.createElement('li')
		li.innerHTML='<a href="'+url+'" target="'+target+'">'+text+'</a>'
		this.menu.appendChild(li)
		this.li=li
		return this
	},
	addSubMenu:function(){
		var s=new ddlistmenu(null, null)
		this.li.appendChild(s.menu)
		return s
	}
}
// ==========================================================
// ===  end FLEXDROPDOWN MENU
// ==========================================================

// ==========================================================
// ===  LIST PAGE
// ==========================================================
//=== LAYOUT VARIABLES
var nPageCols      = 3;	
var nPageRows      = 8;	
var nCurrentKey    = -1;
var nCurrentOrder  = -1;
var nCurrentPage   = -1;
var sCurrentFilter = "imenu_opts_0";
var nLastPage      = 0;
var nSortLT        = -1;
var nSortGT        = 1;
var nSortElement   = 1;
var nItemsPage     = 0;
var bPageText      = false;
var aShow;

//=== RENDER VIEW 
function renderView( nPage, nKey, nOrder, sFilter, bNoAdd ) { var sHTML;
  if (document.forms.navi.loadStatus.value=="") { return false; }
  nPage  = (nPage)  ? nPage  : nCurrentPage;
  nKey   = (nKey)   ? nKey   : nCurrentKey;
  nOrder = (nOrder) ? nOrder : nCurrentOrder;
  if (sFilter) { if (!bNoAdd) { nPage = 1; } }
  else { sFilter = sCurrentFilter; }
  if ((nCurrentKey!=nKey) || (nCurrentOrder!=nOrder)) {
    sortProducts( nKey, nOrder );
    sHTML = buildSortOptions();
    document.getElementById("navi_sort_top" ).innerHTML = sHTML; }
  if (sFilter!="imenu_opts_0" && sFilter!="") {
    var tst = parseInt(document.getElementById(sFilter).value);
    aShow = new Array();
    for (k in aPL) { if (aPL[k][2]==tst) { aShow[aShow.length]=aPL[k]; } } }
  else { aShow = aPL; }
  if (bPageText) { document.forms.navi.viewText.value='Pics';
    sHTML = buildTextLayout(nPage); } 
  else { document.forms.navi.viewText.value='Text';
    sHTML = buildLayout(nPage,nPageRows,nPageCols); }
  document.getElementById("prod_layout").innerHTML = sHTML;
  nCurrentPage   = nPage;
  nCurrentKey    = nKey;
  nCurrentOrder  = nOrder;
  sCurrentFilter = sFilter;
  if (!bNoAdd) { viewCreate(nCurrentPage,nCurrentKey,nCurrentOrder,sCurrentFilter); }
  sHTML = buildPageLinks();
  document.getElementById("navi_page_top" ).innerHTML = sHTML;
  document.getElementById("navi_page_bott").innerHTML = sHTML.replace(/return renderView/g, "scroll(0,0); return renderView");
  return false; }

//=== SORT PRODUCTS ARRAY
function sortProducts( nKey, nOrder ) { 
  nCurrentKey   = nKey;
  nCurrentOrder = nOrder;
  nCurrentPage  = 0;
  nSortGT       = nOrder;
  nSortLT       = -1 * nOrder;
  var aKeys     = new Array(0,1,1,3,8);
  nSortElement  = aKeys[nKey];
  if (nKey==1) { 
    if (nOrder==1) { aPL.sort(sortInsensitiveUp2);   }
    else           { aPL.sort(sortInsensitiveDown2); } } 
  else if (nKey==2) { 
    if (nOrder==2) { aPL.sort(sortInsensitiveUp);   }
    else           { aPL.sort(sortInsensitiveDown); } } 
  else             { aPL.sort(sortByElement);       } }
function sortByElement(a,b) {
  if (a[nSortElement]<b[nSortElement]) return nSortLT;
  if (a[nSortElement]>b[nSortElement]) return nSortGT;
  return 0; }
function sortInsensitiveUp(a,b) {
  if (a[nSortElement].toLowerCase()<b[nSortElement].toLowerCase()) return nSortLT;
  if (a[nSortElement].toLowerCase()>b[nSortElement].toLowerCase()) return nSortGT;
  return 0; }
function sortInsensitiveDown(a,b) {
  if (a[nSortElement].toLowerCase()<b[nSortElement].toLowerCase()) return nSortLT;
  if (a[nSortElement].toLowerCase()>b[nSortElement].toLowerCase()) return nSortGT;
  return 0; }
function sortInsensitiveUp2(a,b) {
  if (a[9]+a[nSortElement].toLowerCase()<b[9]+b[nSortElement].toLowerCase()) return nSortLT;
  if (a[9]+a[nSortElement].toLowerCase()>b[9]+b[nSortElement].toLowerCase()) return nSortGT;
  return 0; }
function sortInsensitiveDown2(a,b) {
  if (a[10]+a[nSortElement].toLowerCase()<b[10]+b[nSortElement].toLowerCase()) return nSortLT;
  if (a[10]+a[nSortElement].toLowerCase()>b[10]+b[nSortElement].toLowerCase()) return nSortGT;
  return 0; }

//=== BUILD NAVIGATION CONTROLS
function buildPageLinks() {
  var nPage;
  sPages = "Page:&nbsp;&nbsp;&nbsp;";
  if (nCurrentPage!=1) {
    nPage   = nCurrentPage - 1;
    sPages += "<span onmouseover='this.className=\"ctrl_over\"' onmouseout='this.className=\"ctrl_out\"' onclick='return ";
    sPages += "renderView(" + nPage + "," + nCurrentKey + "," + nCurrentOrder + ",false);'>PREV</span>&nbsp;"; }
  else { sPages += "<span style='color:gray;'>PREV</span>&nbsp;"; }
  for (i=1; i<=nLastPage; i++) {
    if (i==nCurrentPage) {sPages += "&nbsp;<span style='padding-left:2px; padding-right:2px; color:white; background:#202020;'>" + i + "</span>"; }
    else{ sPages += "&nbsp;<a href='home.php?cat=" + nCategoryID;
      if (i!=1) { sPages += "&page=" + i; }
      sPages += "' onclick='return renderView(" + i + "," + nCurrentKey + "," + nCurrentOrder + ",false); return false;'>" + i + "</a>";
      if ((i%15==0) && (i<nLastPage)) sPages += "<br />"; } }
  if (nCurrentPage!=nLastPage) { 
    nPage   = nCurrentPage + 1;
    sPages += "&nbsp;&nbsp;<span onmouseover='this.className=\"ctrl_over\"' onmouseout='this.className=\"ctrl_out\"' onclick='return ";
    sPages += "renderView(" + nPage + "," + nCurrentKey + "," + nCurrentOrder + ",false);'>NEXT</span>"; }
  else { sPages += "&nbsp;&nbsp;<span style='color:gray;'>NEXT</span>"; }
  sPages += "&nbsp;&nbsp;";
  return sPages; }
function buildSortOptions() {
  var aSorts  = new Array( "", "Catalog", "Title", "Price", "Discount" ), tmp;
  var aOrders = new Array( 0, 1, 1, 1, -1 );
  var sSort = "Sort:&nbsp;";
  for (i=1; i<aSorts.length; i++) {
    if (aOrders[i]!=0) {
      if (i==nCurrentKey) {
        tmp    = (nCurrentOrder==1) ? 'ctrlUp' : 'ctrlDown';
        sSort += "&nbsp;<span class='" + tmp + "_out' onmouseover='this.className=\"" + tmp + "_over\"' onmouseout='this.className=\"" + tmp + "_out\"'";
        sSort += " onclick='renderView(1," + i + ",";
        sSort += (nCurrentOrder==1) ? -1 : 1;
        sSort += ",false);'>" + aSorts[i] + "</span>&nbsp;"; }
      else {
        sSort += "&nbsp;<span onmouseover='this.className=\"ctrl_over\"' onmouseout='this.className=\"ctrl_out\"'";
        sSort += " onclick='renderView(1," + i + "," + aOrders[i] + ",false);'>";
        sSort += aSorts[i] + "</span>&nbsp;"; } } }
  return sSort + "&nbsp;&nbsp;"; }

//=== BUILD PAGE LAYOUT
function buildTextLayout(nThisPage) {
  nItemsPage     = 100;
  var nPages     = Math.ceil(aShow.length/nItemsPage);
  nLastPage      = nPages;
  var nFirstItem = (nThisPage-1) * nItemsPage;
  var nLastItem  = nFirstItem + nItemsPage - 1;
  var nLastItem  = Math.min( nLastItem, aShow.length-1 );
  var sLayout    = "<table border='0' cellpadding='2' cellspacing='0' width='100%'>";
  sLayout       += "<tr><td align='left'>Description</td><td align='right'>Retail</td><td align='right'>Our Price</td><td align='right'>Save</td></tr>";
  var sBack      = 'prod_text_2';
  var sCell      = "";
  for (p=nFirstItem; p<=nLastItem; p+=1) {
    sBack = (sBack=='prod_text_2') ? 'prod_text_1' : 'prod_text_2';
    sCell  = "<tr width='100%' class='" + sBack + "'>";
    sCell += "<td width='295' align='left' class='" + sBack + "'>";
    sCell += "<a href='product.php?productid=" + aShow[p][0] + "' title='"+aShow[p][1]+" "+aShow[p][3]+"'>";
    sCell += aShow[p][1] + "</a></td>";
    sCell += "<td width='80' class='prod_text_low' align='right'>$" + buildPrice(aShow[p][4]) + "</td>";
    sCell += "<td width='80' align='right'>$" + buildPrice(aShow[p][3]) + "</td>";
    if (aShow[p][8]>0) { sCell += "<td width='40' class='prod_text_high' align='right'>" + aShow[p][8] + "%</td>"; } 
    else {               sCell += "<td width='40'>&nbsp;</td>"; }
    sCell += "</tr>";
    sLayout += sCell; }
  return sLayout + "</table>"; }
function buildLayout(nThisPage, nRowsHigh, nCellsWide) {
  nItemsPage     = nCellsWide * nRowsHigh;
  var nPages     = Math.ceil(aShow.length/nItemsPage);
  var nFirstItem = (nThisPage-1) * nItemsPage;
  var nLastItem  = nFirstItem + nItemsPage - 1;
  var nLastItem  = Math.min( nLastItem, aShow.length-1 );
  var sLayout    = "<table border='0' cellpadding='4' cellspacing='6' width='100%'>";
  var nCurRow    = 0;
      nLastPage  = nPages;
  for (p=nFirstItem; p<=nLastItem; p+=nCellsWide) {
    sLayout += buildRow(p, nCurRow, nCellsWide);
    nCurRow++;}
  return sLayout + "</table>"; }
function buildRow(nFirstCell, nThisRow, nCellsWide) { 
  var nCellWidth = Math.floor(100/nCellsWide);
  var nThisCol = 0;
  var sRow = "<tr class='product_row'>"
  for (i=0; i<nCellsWide; i++) {
    if (aShow[nFirstCell+i]) {
      sRow += buildCell(aShow[nFirstCell+i], nThisRow, nThisCol, nCellWidth);
      nThisCol++; } }
  while (nThisCol<nCellsWide) {
      sRow += "<td height='200' width='" + nCellWidth + "%' id='PC" + "_" + nThisRow + "_" + nThisCol + "' class='product_cell'>&nbsp;</td>";
      nThisCol++; }
  return sRow + "</tr>"; }
function buildCell(aItem, nThisRow, nThisCol, nCellWidth) {
  var sCell = '';
  sCell  = "<td height='200' width='" + nCellWidth + "%' id='PC_" + nThisRow + "_" + nThisCol;
  sCell += "' class='product_cell' onmouseover='this.className=\"product_over\";' onmouseout='this.className=\"product_cell\";' align='center'>";
  sCell += "<a href='product.php?productid=" + aItem[0] + "' title='"+aItem[1]+" $"+aItem[3]+"'>";
  sCell += "<img height='" +aItem[7]+ "' width='" +aItem[6]+ "' valign='top' src='images/T/";
  sCell += aItem[5]+"' alt='"+aItem[1]+" $"+aItem[3]+"' border='0'><br>"
  sCell += aItem[1]+"</a><br>";
  if (aItem[3]>0) {
    if (isNaN(aItem[8]) || (aItem[8]==0)) { sCell += "<b>$" + buildPrice(aItem[3]) + "</b></td>"; } 
    else { sCell += "$<s>" +buildPrice(aItem[4])+ "</s> <b>$" +buildPrice(aItem[3])+ "</b> " +aItem[8]+ "% Off</a></td>"; } }
  return sCell; }
function buildPrice(nPrice) { if (isNaN(nPrice)) { return "?"; }
  sTst = nPrice.toString(); nLoc = sTst.indexOf('.');
  if (nLoc<0) {	return sTst + '.00'; } 
  else { sTst += '00'; return sTst.substr(0,nLoc+3); } }

//=== VIEW HISTORY 
function viewLoader() {
  if (typeof(aPL)=="object") { 
    for (i=0; i<aPL.length; i++) {
      aPL[i][3]  = (isNaN(aPL[i][3])) ? 0 : aPL[i][3];
      aPL[i][4]  = (isNaN(aPL[i][4])) ? 0 : aPL[i][4];
      aPL[i][8]  = ((aPL[i][3]<aPL[i][4]) && (aPL[i][4]>0)) ? Math.round((aPL[i][4]-aPL[i][3])*100/aPL[i][4]) : 0; 
      aPL[i][9]  = (aPL[i][8]==0) ? "a" : "b";
      aPL[i][10] = (aPL[i][8]==0) ? "b" : "a"; } }
  if (document.forms.navi) { 
    var tmp = document.forms.navi.loadStatus.value;
    if (tmp=="") {
      document.forms.navi.reset();
      if (document.forms.navi.navisele) document.forms.navi.navisele.blur();
      document.forms.navi.loadStatus.value="0"; }
    var aViewHistory = document.forms.navi.loadStatus.value.split(",");
    if (aViewHistory.length>1) {
      if (aViewHistory.length>parseInt(aViewHistory[0])) { viewGo(0); } 
      else { tmp=""; } }

    if (tmp=="") { 
      // viewCreate(1, 1, 1, sCurrentFilter);		// OLD Log only
      renderView( 1, 1, 1, sCurrentFilter, false );	// NEW Render & Log
      viewButtons("viewBack", "gray", true); } 

    document.getElementById("navi_wait").style.visibility = "hidden";
    if (document.forms.navi.navisele) { document.forms.navi.navisele.disabled = false; }
    setOpacity("navi_top_fade",99);
    document.body.focus(); } }
function viewGo(n) {
  var aViewHistory = document.forms.navi.loadStatus.value.split(",");
  if (aViewHistory.length>0) aViewHistory[0] = parseInt(aViewHistory[0]);
  if ( (aViewHistory[0]+n > 0) && aViewHistory[aViewHistory[0]+n] ) {
    aViewHistory[0] = aViewHistory[0] + n;
    if (aViewHistory[0]>aViewHistory.length-2) { viewButtons("viewFwd", "gray", true); }
    else { viewButtons("viewFwd", "black", false); }
    if (aViewHistory[0]>1) { viewButtons("viewBack", "black", false); }
    else { viewButtons("viewBack", "gray", true); }
    document.getElementById("viewFwd").blur();
    document.getElementById("viewBack").blur();
    var aH = aViewHistory[aViewHistory[0]].split(".");
    if (document.forms.navi.navisele) { document.getElementById(aH[3]).selected = true; }
    bPageText = (aH[4]=="0") ? false : true;
    renderView( parseInt(aH[0]), parseInt(aH[1]), parseInt(aH[2]), aH[3], true );
    document.forms.navi.loadStatus.value = aViewHistory.join(","); } }
function viewCreate(nPg,nKy,nOr,sFi) {
  viewButtons("viewBack", "black", false);
  viewButtons("viewFwd", "gray", true);
  tmp = (bPageText) ? "1" : "0";
  tmp = nPg+"."+nKy+"."+nOr+"."+sFi+"."+tmp;
  var aViewHistory = document.forms.navi.loadStatus.value.split(",");
  if (aViewHistory.length>0) aViewHistory[0] = parseInt(aViewHistory[0]);
  aViewHistory[0] = aViewHistory[0] + 1;
  aViewHistory[ aViewHistory[0] ] = tmp; 
  aViewHistory.length = aViewHistory[0] + 1; 
  document.forms.navi.loadStatus.value = aViewHistory.join(","); }
function viewButtons(sButtonId,sColor,bDisabled) {
  var o=document.getElementById(sButtonId)
  o.style.color = sColor;
  o.disabled    = bDisabled; }
// ==========================================================
// ===  end LIST PAGE
// ==========================================================
