function js_add_accessory(kitId,groupId,areaId,valName,divName,projectAdd) {
	var qn=document.getElementById(valName).value;
	var url="kid="+kitId+"&gid="+groupId+"&ar="+areaId+"&qn="+qn;
	if (projectAdd) url=url+'&prj=1';
	js_cart_update_disp(url,projectAdd);
	document.getElementById(divName).innerHTML="added";
}

function js_add_accessory_qn(kitId,groupId,areaId,valName,divName) {
	var qn=document.getElementById(valName).value;
	var url="kid="+kitId+"&gid="+groupId+"&ar="+areaId+"&qn="+qn;
	js_cart_update_disp(url,false);
	document.getElementById(divName).innerHTML="Added "+qn+" to cart";
}

function js_add_custom(kitId) {
	var groupId=(+js_radio_value('color'))+(+js_radio_value('size'));
	js_add_accessory(kitId,groupId,1,'qn_id','div_id');
}

function js_big_picture(objPct, objCaption) {
  document.getElementById('Photo_Main').src = objPct;
  document.getElementById('Photo_Main').alt = objCaption;
  document.getElementById('Photo_Main_Caption').innerHTML = objCaption;
}

function js_boot_select(objQn) {
	var Cur=document.getElementById('boot_qn').value;
	if (Cur=='' || Cur==0) {
		document.getElementById('boot_qn').value=objQn;
	}
}

function js_cart_clear() {
	if (confirm('Are you sure you want to remove\nall the items in your cart?')) {
		var url="del_cart=1";
		var txt=js_get_xml_data(url);
		document.cartForm.submit();
	}
}

function js_cart_update_disp(url,projectAdd) {
//	alert(url);
	var txt=js_get_xml_data(url);
	var ary=txt.split(':'); 
	if (! projectAdd) {
		document.getElementById('cart_status_quan').innerHTML=ary[0];
		document.getElementById('cart_status_price').innerHTML=ary[1];
	}
	return ary;
}

function js_cart_remove(recNum) {
	var url="del_rec="+recNum;
	var txt=js_get_xml_data(url);
	document.cartForm.submit();
}

function string_replace(srch,rplc,txt) {
	if (txt.length == 0) return;
	var tmpTxt = txt;
	var txtFront = '';   
	var txtOutput = '';
	var ofset = 0;
	var sl=srch.length;
	do {
		ofset = tmpTxt.toUpperCase().indexOf(srch.toUpperCase());
		if (ofset == -1) break;
		txtOutput = txtOutput + tmpTxt.substring(0, ofset) + rplc;
		tmpTxt = tmpTxt.substring(ofset + sl);
	} while (1 == 1);
	return txtOutput+tmpTxt;
}

function js_coupon_check(cpnId) {
	var txt=document.getElementById(cpnId).value;
	var url="promo="+string_replace('&','@|and|@',txt);
	txt=js_get_xml_data(url);
	switch (txt) {
	case '0':
		document.cartForm.submit();
	//	window.location.reload(false);
		break;
	case '1':
		document.getElementById('couponMsg').innerHTML='This code is not correct';
		break;
	case '2':
		document.getElementById('couponMsg').innerHTML='This promo has not started yet';
		break;
	case '3':
		document.getElementById('couponMsg').innerHTML='This promo has ended';
		break;
	case '4':
		document.getElementById('couponMsg').innerHTML='This promo has ended';
		break;
	}
}

function js_display_ship_selection() {
	var prm=document.getElementById('ups_dropdown').options[document.getElementById('ups_dropdown').selectedIndex].value;
	var t=prm.split(':');
	document.getElementById('amountShip').innerHTML='$'+t[0];
	document.getElementById('amountTotal').innerHTML='$'+t[1];
}

function js_display_ship_data(itemAmount,salesTax,ups_txt) {
//	var ary=ups_txt.split('|');
//	var t=ary[0].split(':');
	document.getElementById('shipDropdown').innerHTML=ups_txt;
	document.getElementById('amountItems').innerHTML='$'+itemAmount;
	document.getElementById('amountTax').innerHTML='$'+salesTax;
	js_display_ship_selection();
}

function js_get_xml_data(url) {
	if (window.XMLHttpRequest) {
		xmlhttp=new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		if (new ActiveXObject("Microsoft.XMLHTTP")) {
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		} else {
			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
	}
	xmlhttp.open("GET",'includes/caller_program.php?'+url,false);
	xmlhttp.send(null);
	var txt=xmlhttp.responseText;
	return txt;
}

function js_go_checkout(progName) {
	var vl=0;
	var txt='';
	//alert('here');
	var doc = document.getElementsByTagName('select');
	for (var i = 0; i < doc.length; i++){
		if (doc[i].name.substr(0,12)=='promo_selct_') {
			txt='span_'+doc[i].name;
			if (doc[i].selectedIndex==0) {
				vl=vl+1;
				document.getElementById(txt).innerHTML=' Select';
			} else {
				document.getElementById(txt).innerHTML='';				
			}
		}
	}
	if (vl>0) {
		if (vl>1) {
			txt='You have '+vl+' promo selections that have not been set.\n\nClick Cancel to make selection.\n\nClick OK to continue with checkout.';
		} else {
			txt='You have 1 promo selection that has not been set.\n\nClick Cancel to make selection.\n\nClick OK to continue with checkout.';
		}
		if (! confirm(txt)) return;
	}
	window.location.href='https://zoneoffroad.com/'+progName;
}

function js_jump(objLink) {
	window.location=objLink;
}

function js_package_box() {
	var amnt=parseFloat(document.getElementById('kit_real_price').value);
	var nm='';
	var vl=0;
	for (var i=0; i<document.package_area.elements.length; i++) {
		if (document.package_area.elements[i].checked==true) {
			nm=document.package_area.elements[i].name;
			nm='val_'+nm;
			vl=document.getElementById(nm).value;
			amnt=amnt+parseFloat(vl);
		}
	}
	document.getElementById('kit_display_price').innerHTML='$'+num_format(amnt.toString(),2,'.',',');
}

function js_promo_selection(ctrl) {
  var sel=document.getElementById(ctrl).options[document.getElementById(ctrl).selectedIndex].value;
  var url="promo="+ctrl+"&num="+sel;
  var ary=js_cart_update_disp(url,false);
  document.getElementById('cart_item_total').innerHTML=ary[1];
}

function js_quan_ed(recNum) {
	var qn=document.getElementById('cart_qn'+recNum).value;
	if (qn<0) {
		qn=0;
		document.getElementById('cart_qn'+recNum).value=qn;
	}
	var url="qn_upd="+recNum+"&qn="+qn;
	var ary=js_cart_update_disp(url,false);
	document.cartForm.submit();
}

function js_radio_value(ctrlName) {
	var e=document.getElementsByName(ctrlName);
	for (var i=0;i<e.length;i++) {
		if (e[i].checked) {
			var rval=e[i].value;
			break;
		}
	}
	return rval;
}

function js_recmnd_buy(ctrl,prm) {
	var qn=document.getElementById(ctrl).value
	js_cart_update_disp(prm+"&qn="+qn,false);
	document.cartForm.submit();
//	window.location.reload(false);

}

function js_ship_area() {
	if (document.getElementById('estShipping').style.display == "none") { 
		js_zip_change();
		document.getElementById('estShipping').style.display = "block"; 
	} else {
		document.getElementById('estShipping').style.display = "none";
	}
}
					  
function js_validate(kitId,projectAdd,pkgId) {
  var crt_flag_cntr=0;
  var crt_name_cntr=0;
  var crt_name='';
  var tmp='';
  var url='gid=-1&kid='+kitId;
  if (pkgId != '') url=url+'&package='+pkgId;
  var bootqn=0;
  var bootid='';
  for (var i=0; i<document.prodForm.elements.length; i++) {
	if (document.prodForm.elements[i].name=='boot_qn') {
	  bootqn=document.prodForm.elements[i].value;
	  if (bootqn<1) {
	    bootqn=0;
	    bootid='';
	  }
	} else if (document.prodForm.elements[i].name=='boot_id') {
		bootid=document.getElementById('boot_id').options[document.getElementById('boot_id').selectedIndex].value;
    } else if (document.prodForm.elements[i].type=='radio') {
      tmp=document.prodForm.elements[i].name;
      if (tmp.substr(0,4)=='crt_') {
        if (crt_name!=tmp) {
          crt_name=tmp;
          crt_name_cntr++;
        }
        if (document.prodForm.elements[i].checked==true) {
			crt_flag_cntr++;
			tmp=document.prodForm.elements[i].value;
			url=url+'&crt'+crt_flag_cntr+'='+tmp.substr(6);
		}
      }
    }
  }
  if (crt_flag_cntr!=crt_name_cntr) {
    tmp=document.getElementById('CriticalTitleName').innerHTML;
    alert('You must make a '+tmp+' to proceed.');
  } else {
	if (bootqn>0) url=url+'&bti='+bootid+'&btq='+bootqn;
	if (projectAdd) url=url+'&prj=1';
	js_cart_update_disp(url,projectAdd);
	if (projectAdd) {
		document.getElementById('wasGaraged').innerHTML=" Added to Garage";
		if (pkgId != '') document.getElementById('wasGaraged'+pkgId).innerHTML=" Added to Garage";	
	} else {
		document.getElementById('wasAdded').innerHTML=" Added to Cart";
		if (pkgId != '') document.getElementById('wasAdded'+pkgId).innerHTML=" Added to Cart";	
	}
  }
}

function js_zip_change() {
	document.getElementById('estShippingDisplay').style.display = "none";
	var zip=document.getElementById('zipInput-cart').value;
	if (zip.length>0) {
		document.getElementById('estShipMsg').innerHTML='Getting shipping amount for this cart...';	
	}
	setTimeout("js_zip_changed('"+zip+"')",200);
}

function js_zip_changed(zip) {
	var url="zip="+zip;
	var txt=js_get_xml_data(url);
	var ary=txt.split('||');
	var t=ary[0].split(':');
//t[x] x= 0 err, 1 item total, 2 sales tax, 3 city, 4 state
//err: 0  no error, 1 no zip code (blank), 2 invalid zip, 3	error in get_ups_rates, 
//4	error in get_ups_rates function for 'free frieght amount', 
//5 returns all results, indicates outside free freight area
	switch (t[0]) {
	case '0':
		js_display_ship_data(t[1],t[2],ary[1]);
		document.getElementById('estShipMsg').innerHTML=t[3]+', '+t[4];		
		document.getElementById('estShippingDisplay').style.display = "block";
		break;
	case '1':
		document.getElementById('estShipMsg').innerHTML='';		
		document.getElementById('estShippingDisplay').style.display = "none";
		break;
	case '2':
		document.getElementById('estShipMsg').innerHTML='Invalid zip code';		
		document.getElementById('estShippingDisplay').style.display = "none";
		break;
	case '3':
		document.getElementById('estShipMsg').innerHTML='error getting freight quote';	
		document.getElementById('estShippingDisplay').style.display = "none";
		break;
	case '4':
		document.getElementById('estShipMsg').innerHTML='error getting freight quote';	
		document.getElementById('estShippingDisplay').style.display = "none";
		break;
	case '5':
		js_display_ship_data(t[1],t[2],ary[1]);
		document.getElementById('estShipMsg').innerHTML=t[3]+', '+t[4]+' (out of free shipping area)';		
		document.getElementById('estShippingDisplay').style.display = "block";
		break;
	}
}

function num_format(number,decimals,dec_point,thousands_sep) {
    var n = number, prec = decimals;
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec);
    var abs = Math.abs(n).toFixed(prec);
    var _, i;
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
         s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
     return s;
}