
function checkPostCode (toCheck) {
var pcexp = new Array ();
pcexp.push (/^([a-z]{1,2}[0-9]{1,2})(\s*)([0-9]{1}[abdefghjlnpqrstuwxyz]{2})$/i);
pcexp.push (/^([a-z]{1,2}[0-9]{1}[a-z]{1})(\s*)([0-9]{1}[abdefghjlnpqrstuwxyz]{2})$/i);
pcexp.push (/^(GIR)(\s*)(0AA)$/i);
var postCode = toCheck;
var valid = false;
for ( var i=0; i<pcexp.length; i++) {
if (pcexp[i].test(postCode)) {
pcexp[i].exec(postCode);
postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();
valid = true;
break;
}
}
if (valid) {return postCode;} else return false;
}


function checkUKTelephone (telephoneNumber) {
var telnum = telephoneNumber + " ";
if (telnum.length == 1)  {
telNumberErrorNo = 1;
return false
}
telnum.length = telnum.length - 1;
var exp = /^(\+)[\s]*(.*)$/;
if (exp.test(telnum) == true) {
telNumberErrorNo = 2;
return false;
}
while (telnum.indexOf(" ")!= -1)  {
telnum = telnum.slice (0,telnum.indexOf(" ")) + telnum.slice (telnum.indexOf(" ")+1)
}
while (telnum.indexOf("-")!= -1)  {
telnum = telnum.slice (0,telnum.indexOf("-")) + telnum.slice (telnum.indexOf("-")+1)
}
exp = /^[0-9]{10,11}$/
if (exp.test(telnum) != true) {	telNumberErrorNo = 3;	return false;	}
exp = /^0[0-9]{9,10}$/
if (exp.test(telnum) != true) {
telNumberErrorNo = 4;
return false;
}
exp = /^(01|02|05|070|077|078|079)[0-9]+$/;
if (exp.test(telnum) != true) {
telNumberErrorNo = 5;
return false;
}
return telnum;
}
var telNumberErrorNo = 0;
var telNumberErrors = new Array ();
telNumberErrors[0] = "Valid UK telephone number";
telNumberErrors[1] = "Telephone number not provided";
telNumberErrors[2] = "UK telephone number without the country code, please";
telNumberErrors[3] = "UK telephone numbers should contain 10 or 11 digits";
telNumberErrors[4] = "The telephone number should start with a 0";
telNumberErrors[5] = "The telephone number is either invalid or inappropriate";

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function checkCreditCard (cardnumber, cardname) {

var cards = new Array();
cards [0] = {name: "Visa", 
		length: "13,16", 
		prefixes: "4",
		checkdigit: true};
  cards [1] = {name: "MasterCard", 
		length: "16", 
		prefixes: "51,52,53,54,55",
		checkdigit: true};

var cardType = -1;
for (var i=0; i<cards.length; i++) {
if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
cardType = i;
break;
}
}
  
if (cardType == -1) {	ccErrorNo = 0;	return false;	}
if (cardnumber.length == 0)  {	ccErrorNo = 1;	return false;	}
var cardNo = cardnumber
var cardexp = /^([0-9]{4})\s?([0-9]{4})\s?([0-9]{4})\s?([0-9]{1,4})$/;
if (!cardexp.exec(cardNo))  {	ccErrorNo = 2;	return false;	}
cardexp.exec(cardNo);
cardNo = RegExp.$1 + RegExp.$2 + RegExp.$3 + RegExp.$4;
if (cards[cardType].checkdigit) {
var checksum = 0;
var mychar = "";
var j = 1;
var calc;
for (i = cardNo.length - 1; i >= 0; i--) {
calc = Number(cardNo.charAt(i)) * j;
if (calc > 9) {
checksum = checksum + 1;
calc = calc - 10;
}
checksum = checksum + calc;
if (j ==1) {j = 2} else {j = 1};
} 
if (checksum % 10 != 0)  {
ccErrorNo = 3;
return false; 
}
}  
var LengthValid = false;
var PrefixValid = false; 
var undefined; 
var prefix = new Array ();
var lengths = new Array ();
prefix = cards[cardType].prefixes.split(",");
for (i=0; i<prefix.length; i++) {
var exp = new RegExp ("^" + prefix[i]);
if (exp.test (cardNo)) PrefixValid = true;
}
if (!PrefixValid) {
ccErrorNo = 3;
return false; 
}
lengths = cards[cardType].length.split(",");
for (j=0; j<lengths.length; j++) {
if (cardNo.length == lengths[j]) LengthValid = true;
}
if (!LengthValid) {
ccErrorNo = 4;
return false; 
};   
return true;
}
