
//
// BACKLOAD4U JS
// (c) WeDoWebsites 2010
// Revison 0.7
// PS, 20 Nov
//



// init
window.onload= function () {

	//should be attach event listener, mumble mumble cross browser drama

	//dopreloads precaches images previously queued by preload()
	//doing it here ensures that normal images take priority in the load queue

	dopreloads();

	//mailto protectors
	//depending on how heavy your page is this may be too late to do it here
	//if thats the case insert into the bottom of your page body with: <script>convertmail()</script>
	// you can style mail class to look like your links
	convertmail();

}




//---------PRELOAD FNS-----------//

//globals for preloads
var preloadfiles = new Array;
var preloadimgs =  new Array;
var preloadindex=0;

//create a queue

function preload(file) {
	file= file.replace(/&amp;/ig,'&');
	preloadfiles[preloadindex] =  file;
	preloadindex++;
}

//action the preload queue on window load

function dopreloads() {
	var c;
	for (c=0;c<preloadindex;c++){
		preloadimgs[c] = new Image;
		preloadimgs[c].src = preloadfiles[c];
	}
}




//-------EMAIL FUNCTIONS---------//


//add antispam event handlers, and mailto tag in two seperate very very paranoid steps
//mail protector
//converts mail class to mailto: href

function convertmail(){
	var elements= document.all?document.all:document.getElementsByTagName('span');
	var i,obj,email;
	for (i=0; i< elements.length; i++) {
		if (elements[i].className =='mail'){
			obj=elements[i];
			email= obj.innerHTML;
			email= email.replace(/blablabla/ig,'');
			obj.innerHTML= email.replace(/ /g,'');
			obj.onmouseover= function (){ insertmailto(this);}
		}
	}
}
function insertmailto(obj) {
	var email = obj.innerHTML;
	email = email.replace(/blablabla/ig,'');
	email = email.replace(/ /g,'');
	obj.innerHTML = '<a href="mailto:'+email+'">'+email+'</a>';
	obj.onmouseover= function (){};
}




/*SUBS*/

//updates 'cart' total
//and then totals
function subcalc(){

	//get sub selection value and load into pre_gst_total
	if (document.subscribe.product_id.selectedIndex) {
		var prod = (document.subscribe.product_id.options[document.subscribe.product_id.selectedIndex].text);
		if (prod) {
			var resultArray = prod.match(/\(\$[\d\.]+\)$/);

			if (resultArray) {
				price = resultArray.toString();
				price = price.replace(/[^\d\.]/g,'');

				document.subscribe.pre_gst_total.value= zeropadtwodp(price);
			}
		}
	}
	else price=0;

	document.subscribe.pre_gst_total.value= zeropadtwodp(price);

	var carttotal=     parseFloat(document.subscribe.pre_gst_total.value);
	var gstinclusive=  parseInt(document.subscribe.gst_inclusive.value);
	var gstpercent=    parseFloat(document.subscribe.gst_percent.value);
	var post_freight = carttotal;

	//gst
	if (gstinclusive==1) {
		var gst_amount=post_freight-post_freight/(100+gstpercent)*100;
		var grand_total=  post_freight;
	}
	else {
		var gst_amount=   post_freight*gstpercent/100;
		var grand_total=  post_freight+gst_amount;
	}

	document.subscribe.gst_amount.value =    zeropadtwodp(gst_amount);
	document.subscribe.grand_total.value =   zeropadtwodp(grand_total);
}



function settarget(url){
	document.checkout.action= url;
}

function subvalidate(n){


	function is_phone(what){
		var i;
		for (i=0; i<what.length; i++){  /* for each character in whatever is passed (the phone number) do the following */
			var c = what.charAt(i);/* read the character in question */
			if (!((c>='0'&&c<='9') || (c==' ') || (c=='+') || (c=='(') || (c==')') )){/* if its not a valid character (0-9, plus, bracket, space)...)*/
				return false;
			}
		}
		return true;
	}

	var frm=document.subscribe; /*document.yourformname */
	var allesgut = true;
	var msg = '';
	//empty truck form additions
	if (n==2) {
		 if (frm.pickup_town.options[frm.pickup_town.selectedIndex].value == '0'){
         msg = msg+"The required field \"Pickup town\" is empty. Please select a value.\n";
         frm.pickup_town.className = 'selFormMenuError';
         allesgut = false;
       }
		 if (frm.delivery_town.options[frm.delivery_town.selectedIndex].value == '0'){
         msg = msg+"The required field \"Delivery town\" is empty. Please select a value.\n";
         frm.delivery_town.className = 'selFormMenuError';
         allesgut = false;
       }
	}
	//product chosen?
	if (!document.subscribe.product_id.selectedIndex){
		msg = msg+"The required field \"Subscription type\" is empty. Please select a value.\n";
      frm.product_id.className = 'selFormMenuError';
		allesgut = false;
	}



	if (frm.realname.value.length == 0){/*realname is the name of the field. The rest doesnt change*/
		msg = msg+"Sorry, you have not entered a name.\n";/*append the errormessage if this check fails*/
		allesgut = false;/* tells function that at least one error was found*/
	}


	if(frm.delivery_address.value.length == 0){/* as above */
		msg = msg+"Sorry, you have not entered an address.\n";
		allesgut = false;
	}

	if(frm.email.value.length == 0){/* frm.nameofemailfield.etc - whats between frm. and .value is all you muck with */
		msg = msg+"Sorry, you have not entered an email address.\n";
		allesgut = false;
	}
	var email_checkchar1=frm.email.value.indexOf("@");/* frm.nameofemailfield.etc - whats between frm. and .value is all you muck with */
	var email_checkchar2=frm.email.value.lastIndexOf(".");/* frm.nameofemailfield.etc - whats between frm. and .value is all you muck with */
	if((frm.email.value.length > 0)&&(email_checkchar1==-1 || email_checkchar2==-1 || email_checkchar2 < email_checkchar1)){/* if email exists and doesnt: contain @ or contais . or the @ is before the last . or there are letters inbetween... */
		msg = msg+"Sorry, you have not entered a valid email address.\n";/* then it cant be a real email */
		allesgut = false;
	}

	if(frm.phone.value.length==0){/* as before */
		msg = msg+"Sorry, you have not entered your contact phone number.\n";
		allesgut = false;
	}else{
		if(!(is_phone(frm.phone.value))){/* ...but if doesnt look like a real phone number (function at top) */
			msg = msg+"Sorry, you have not entered a valid telephone number (numbers only please).\n";
			allesgut = false;
		}
	}


	if (allesgut == false) {/* if any errors, alert message and return false (stops form submitting) */
		alert(msg);
		return false;
	}
}


function validatecheckout2(){
	var msg='';
	var allesgut = true;
	var radioset=0;
	var i;

	if (document.checkout.paykey.length ==  undefined) var radioset=1;
	else {
		for (i = 0; i <  document.checkout.paykey.length; i++) {
			if (document.checkout.paykey[i].checked) {
				var radioset = document.checkout.paykey[i].value;
			}
		}
	}
	if (!radioset){
		msg = msg+"Sorry, you have not selected a payment method.\n";
		allesgut = false;
	}
	if (document.checkout.terms_conditions.checked==false){
		msg = msg+"Sorry, you have not agreed to the terms and conditions.\n";
		allesgut = false;
	}


	if (allesgut == false) {
		alert(msg);
		return false;
	}
}












//-------HOUSEKEEPING FUNCTIONS---------//

function moneyformat(wk){
	wk=parseFloat(wk);
	wk=Math.round(wk*100)/100;
	if (parseInt(wk)==wk) return ('$'+wk+'.00');
	if (parseInt(wk*10)==(wk*10)) return ('$'+wk+'0');
	return ('$'+wk);
}
function zeropadtwodp(wk){
	wk=parseFloat(wk);
	wk=Math.round(wk*100)/100;
	if (parseInt(wk)==wk) return (wk+'.00');
	if (parseInt(wk*10)==(wk*10)) return (wk+'0');
	return (wk);
}

function twodp(wk){
	wk=Math.round(wk*100)/100;

	return(wk);
}




//FUNCTIONS TO DIVIDE A FILENAME INTO PARTS
//wrapper fucntions for getquery and fileparts
// you could do this in like 3 lines in php

function getbasename(wk) {
	var parts= new Array();
	parts=  fileparts(wk);
	var basename=  parts[1];
	var query=     parts[4];
	return (basename);
}
function getquery(wk) {
	var parts= new Array();
	parts=  fileparts(wk);
	var basename=  parts[1];
	var query=     parts[4];
	return (query);
}
function getqueryvalue(a,wk) {
	var pairs= new Array();
	pairs=  splitquery(a);
	if (pairs[wk]) {
		return (pairs[wk]);
	}
	else return ('');
}


// USAGE CORE FUNCTIONS
// myarray=fileparts(filename)
// myarray[0]=path
// myarray[1]=basename
// myarray[2]=barename
// myarray[3]=suffix
// myarray[4]=query

// myarray= splitquery(query){
// myarray[keys]=values


//fn to split a query string

function splitquery(query){
	var ret = new Array();
	var wk =  new Array();
	var pair=  new Array();
	wk= query.split('&');
	for (c=0; c< wk.length; c++) {
		if(wk[c].indexOf('=')>0){
			pair=wk[c].split('=');
			ret[pair[0]]=pair[1];
		}
	}
	return (ret);
}



//fn to divide full filepath into path, basename, and query string

function fileparts (wk){
	var ret = new Array();
	var path;
	var basename;
	var barename;
	var suffix;
	var query;
	var balance;

	//get path
	var i = wk.lastIndexOf('/')
	if (i>0) {
		path=     wk.substring(0,i);
		wk =      wk.substring(i+1);
	}
	else  path='';

	//get basename and query
	i = wk.indexOf('?')
	if (i>0) {
		basename = wk.substring(0,i);
		query=     wk.substring(i+1);
		wk=basename;
	}
	else  {  basename = wk; query=''; }

	//get suffix
	i = wk.lastIndexOf('.')
	if (i>0) {
		barename = wk.substring(0,i);
		suffix=     wk.substring(i+1);
	}
	else  {  barename = wk; suffix=''; }

	ret[0]=path;
	ret[1]=basename;
	ret[2]=barename;
	ret[3]=suffix;
	ret[4]=query;
	return (ret);
}





