function isFilled(elm) {
	value = elm.value.replace(/^\s+/,"");
	if (value == "" || value == null) {
		return false;
	} else {
		return true;
	}
}

function isEmail(elm) {
	if (elm.value.indexOf("@") + "" != "-1" && elm.value.indexOf(".") + "" != "-1" && elm.value != "") {
		return true;
	} else {
		return false;
	}
}

function isEqual(elm, elm2) {
	if (elm.value == elm2.value) {
		return true;
	} else {
		return false;
	}
}

function isNumeric(str) {
	var strValidChars = "0123456789";
	var strChar;
	
	if (str.length == 0) return false;
	
	//  test strString consists of valid characters listed above
	for (i = 0; i < str.length; i++) {
		strChar = str.charAt(i);
		if (strValidChars.indexOf(strChar) == -1) {
			return false;
		}
	}
}

function isRegister(form) {
	
	if (isEmail(form.i_email) == false) {
		alert("Please insert a correct email address.");
		form.i_email.focus();
		return false;
	}
	if (isFilled(form.i_forename) == false) {
		alert("Please fill in your first name.");
		form.i_forename.focus();
		return false;
	}
	if (isFilled(form.i_surname) == false) {
		alert("Please fill in your last name.");
		form.i_surname.focus();
		return false;
	}
	if (isFilled(form.i_address1) == false) {
		alert("Please enter your address.");
		form.i_address1.focus();
		return false;
	}
	if (isFilled(form.i_town) == false) {
		alert("Please enter your town.");
		form.i_town.focus();
		return false;
	}
	if (isFilled(form.i_postCode) == false) {
		alert("Please enter your postcode / zipcode.");
		form.i_postCode.focus();
		return false;
	}
	if (isFilled(form.i_password) == false) {
		alert("Please enter a password.");
		form.i_password.focus();
		return false;
	}
	if (isFilled(form.i_password2) == false) {
		alert("Please confirm your password.");
		form.i_password2.focus();
		return false;
	}
	if (isEqual(form.i_password, form.i_password2) == false) {
		alert("Your passwords do not match.");
		form.i_password.value='';
		form.i_password2.value='';
		form.i_password.focus();
		return false;
	}
	if (form.i_tandc.checked == false) {
		alert("You must agree to the terms and conditions before you can register.");
		form.i_tandc.focus();
		return false;
	}

	return true;
}

function isProfile(form) {
	
	if (isFilled(form.i_forename) == false) {
		alert("Please fill in your first name.");
		form.i_forename.focus();
		return false;
	}
	if (isFilled(form.i_surname) == false) {
		alert("Please fill in your last name.");
		form.i_surname.focus();
		return false;
	}
	if (isFilled(form.i_address1) == false) {
		alert("Please enter your address.");
		form.i_address1.focus();
		return false;
	}
	if (isFilled(form.i_town) == false) {
		alert("Please enter your town.");
		form.i_town.focus();
		return false;
	}
	if (isFilled(form.i_postCode) == false) {
		alert("Please enter your postcode / zipcode.");
		form.i_postCode.focus();
		return false;
	}

	return true;
}

function isDelivery(form) {
	
	if (isFilled(form.i_name) == false) {
		alert("Please fill in your invoice name.");
		form.i_name.focus();
		return false;
	}
	if (isFilled(form.i_address1) == false) {
		alert("Please enter your invoice address.");
		form.i_address1.focus();
		return false;
	}
	if (isFilled(form.i_town) == false) {
		alert("Please enter your invoice town.");
		form.i_town.focus();
		return false;
	}
	if (isFilled(form.i_postCode) == false) {
		alert("Please enter your invoice postcode / zipcode.");
		form.i_postCode.focus();
		return false;
	}
	if (form.i_postCode.value.length > 10) {
		alert("Your postcode is too long.");
		form.i_postCode.focus();
		return false;
	}
	if (isFilled(form.i_telephone) == true) {
		if (isNumeric(form.i_telephone.value) == false) {
			alert("Your telephone number can only contain numeric values. (no spaces)");
			form.i_telephone.focus();
			return false;
		}
	}

	if (document.getElementById('deliveryaddress').style.display == 'block') {
		if (isFilled(form.i_name2) == false) {
			alert("Please fill in your delivery name.");
			form.i_name2.focus();
			return false;
		}
		if (isFilled(form.i_address12) == false) {
			alert("Please enter your delivery address.");
			form.i_address12.focus();
			return false;
		}
		if (isFilled(form.i_town2) == false) {
			alert("Please enter your delivery town.");
			form.i_town2.focus();
			return false;
		}
		if (isFilled(form.i_postCode2) == false) {
			alert("Please enter your delivery postcode / zipcode.");
			form.i_postCode2.focus();
			return false;
		}
		if (form.i_postCode2.value.length > 10) {
			alert("Your postcode is too long.");
			form.i_postCode2.focus();
			return false;
		}
		if (isFilled(form.i_country2) == false) {
			alert("Please enter your delivery country.");
			form.i_country2.focus();
			return false;
		}
		if (isFilled(form.i_telephone2) == true) {
			if (isNumeric(form.i_telephone2.value) == false) {
				alert("Your telephone number can only contain numeric values.");
				form.i_telephone2.focus();
				return false;
			}
		}
	}
	
	return true;
}

function isCredit(form) {

	if (isFilled(form.i_payment_card.options[form.i_payment_card.selectedIndex]) == false) {
		alert("Please select a card type.");
		form.i_payment_card.focus();
		return false;
	}
	if (isFilled(form.i_name) == false) {
		alert("Please fill in your name.");
		form.i_name.focus();
		return false;
	}
	if (isFilled(form.i_number) == false) {
		alert("Please fill in your card number.");
		form.i_number.focus();
		return false;
	}
	if (isNumeric(form.i_number.value) == false) {
		alert("Your card number can only contain numeric values.");
		form.i_number.focus();
		return false;
	}
	var todayDate = new Date();
	var myDate = new Date();
	myDate.setFullYear(form.i_expireYear.value, (form.i_expireMonth.value-1), 31);
	if (todayDate > myDate) {
		alert("Please enter a valid expiry date.");
		return false;
	}
	if (isFilled(form.i_cvv) == false) {
		alert("Please fill in your CVV number.");
		form.i_cvv.focus();
		return false;
	}
	if (form.i_cvv.value.length != 3) {
		alert ("Your CVV number must be 3 digits long.");
		form.i_cvv.focus();
		return false;
	}
	if (isNumeric(form.i_cvv.value) == false) {
		alert("Your CVV number can only contain numeric values.");
		form.i_number.focus();
		return false;
	}
	return true;
}

function number_format( number, decimals, dec_point, thousands_sep ) {
	// http://kevin.vanzonneveld.net
	// +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +     bugfix by: Michael White (http://crestidg.com)
	// +     bugfix by: Benjamin Lupton
	// *     example 1: number_format(1234.5678, 2, '.', '');
	// *     returns 1: 1234.57
	
	var i, j, kw, kd, km;
	
	// input sanitation & defaults
	if( isNaN(decimals = Math.abs(decimals)) ){
	decimals = 2;
	}
	if( dec_point == undefined ){
	dec_point = ".";
	}
	if( thousands_sep == undefined ){
	thousands_sep = ",";
	}
	
	i = parseInt(number = (+number || 0).toFixed(decimals)) + "";
	
	if( (j = i.length) > 3 ){
	j = j % 3;
	} else{
	j = 0;
	}
	
	km = (j ? i.substr(0, j) + thousands_sep : "");
	kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
	//kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).slice(2) : "");
	kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : "");
	
	
	return km + kw + kd;
}
