
function checkVATNumber(toCheck){var vatexp=new Array();var defCCode="GB";vatexp.push(/^(AT)U(\d{8})$/);vatexp.push(/^(BE)(\d{9,10})$/);vatexp.push(/^(BG)(\d{9,10})$/);vatexp.push(/^(CY)(\d{8}[A-Z])$/);vatexp.push(/^(CZ)(\d{8,10})(\d{3})?$/);vatexp.push(/^(DE)(\d{9})$/);vatexp.push(/^(DK)((\d{8}))$/);vatexp.push(/^(EE)(\d{9})$/);vatexp.push(/^(EL)(\d{8,9})$/);vatexp.push(/^(ES)([A-Z]\d{8})$/);vatexp.push(/^(ES)(\d{8}[A-Z])$/);vatexp.push(/^(ES)([A-Z]\d{7}[A-Z])$/);vatexp.push(/^(EU)(\d{9})$/);vatexp.push(/^(FI)(\d{8})$/);vatexp.push(/^(FR)(\d{11})$/);vatexp.push(/^(FR)[(A-H)|(J-N)|(P-Z)]\d{10}$/);vatexp.push(/^(FR)\d[(A-H)|(J-N)|(P-Z)]\d{9}$/);vatexp.push(/^(FR)[(A-H)|(J-N)|(P-Z)]{2}\d{9}$/);vatexp.push(/^(GB)?(\d{9})$/);vatexp.push(/^(GB)?(\d{10})$/);vatexp.push(/^(GB)?(\d{12})$/);vatexp.push(/^(GB)?(\d{13})$/);vatexp.push(/^(GB)?(GD\d{3})$/);vatexp.push(/^(GB)?(HA\d{3})$/);vatexp.push(/^(GR)(\d{8,9})$/);vatexp.push(/^(HU)(\d{8})$/);vatexp.push(/^(IE)(\d{7}[A-W])$/);vatexp.push(/^(IE)([7-9][A-Z\*\+)]\d{5}[A-W])$/);vatexp.push(/^(IT)(\d{11})$/);vatexp.push(/^(LV)(\d{11})$/);vatexp.push(/^(LT)(\d{9}|\d{12})$/);vatexp.push(/^(LU)(\d{8})$/);vatexp.push(/^(MT)(\d{8})$/);vatexp.push(/^(NL)(\d{9})B\d{2}$/);vatexp.push(/^(PL)(\d{10})$/);vatexp.push(/^(PT)(\d{9})$/);vatexp.push(/^(RO)(\d{2,10})$/);vatexp.push(/^(SI)(\d{8})$/);vatexp.push(/^(SK)(\d{9}|\d{10})$/);vatexp.push(/^(SE)(\d{10}\d[1-4])$/);var VATNumber=toCheck.toUpperCase();var chars=[" ","-",",","."];for(var i=0;i<chars.length;i++){while(VATNumber.indexOf(chars[i])!=-1){VATNumber=VATNumber.slice(0,VATNumber.indexOf(chars[i]))+VATNumber.slice(VATNumber.indexOf(chars[i])+1);}}
var valid=false;for(i=0;i<vatexp.length;i++){if(vatexp[i].test(VATNumber)){var cCode=RegExp.$1;var cNumber=RegExp.$2;if(cCode.length==0)cCode=defCCode;switch(cCode){case"AT":valid=ATVATCheckDigit(cNumber);break;case"BE":valid=BEVATCheckDigit(cNumber);break;case"BG":valid=true;break;case"CY":valid=CYVATCheckDigit(cNumber);break;case"CZ":valid=CZVATCheckDigit(cNumber);break;case"DE":valid=DEVATCheckDigit(cNumber);break;case"DK":valid=DKVATCheckDigit(cNumber);break;case"EE":valid=EEVATCheckDigit(cNumber);break;case"EL":valid=ELVATCheckDigit(cNumber);break;case"ES":valid=ESVATCheckDigit(cNumber);break;case"EU":valid=EUVATCheckDigit(cNumber);break;case"FI":valid=FIVATCheckDigit(cNumber);break;case"FR":valid=FRVATCheckDigit(cNumber);break;case"GB":valid=UKVATCheckDigit(cNumber);break;case"GR":valid=ELVATCheckDigit(cNumber);break;case"HU":valid=HUVATCheckDigit(cNumber);break;case"IE":valid=IEVATCheckDigit(cNumber);break;case"IT":valid=ITVATCheckDigit(cNumber);break;case"LT":valid=LTVATCheckDigit(cNumber);break;case"LU":valid=LUVATCheckDigit(cNumber);break;case"LV":valid=LVVATCheckDigit(cNumber);break;case"MT":valid=MTVATCheckDigit(cNumber);break;case"NL":valid=NLVATCheckDigit(cNumber);break;case"PL":valid=PLVATCheckDigit(cNumber);break;case"PT":valid=PTVATCheckDigit(cNumber);break;case"RO":valid=ROVATCheckDigit(cNumber);break;case"SE":valid=SEVATCheckDigit(cNumber);break;case"SI":valid=SIVATCheckDigit(cNumber);break;default:valid=true;}
if(valid)valid=VATNumber;break;}}
return valid;}
function ATVATCheckDigit(vatnumber){var total=0;var multipliers=[1,2,1,2,1,2,1];var temp=0;for(var i=0;i<7;i++){temp=Number(vatnumber.charAt(i))*multipliers[i];if(temp>9)
total=total+Math.floor(temp/10)+temp%10
else
total=total+temp;}
total=10-(total+4)%10;if(total==10)total=0;if(total==vatnumber.slice(7,8))
return true
else
return false;}
function BEVATCheckDigit(vatnumber){if(vatnumber.length==10&&vatnumber.slice(0,1)!="0")return false;if(vatnumber.length==9)vatnumber="0"+vatnumber;if(97-vatnumber.slice(0,8)%97==vatnumber.slice(8,10))
return true
else
return false;}
function CYVATCheckDigit(vatnumber){var total=0;for(var i=0;i<8;i++){var temp=Number(vatnumber.charAt(i));if(i%2==0){switch(temp){case 0:temp=1;break;case 1:temp=0;break;case 2:temp=5;break;case 3:temp=7;break;case 4:temp=9;break;default:temp=temp*2+3;}}
total=total+temp;}
total=total%26;total=String.fromCharCode(total+65);if(total==vatnumber.substr(8,1))
return true
else
return false;}
function CZVATCheckDigit(vatnumber){var total=0;var multipliers=[8,7,6,5,4,3,2];if(vatnumber.length!=8)return true;for(var i=0;i<7;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=11-total%11;if(total==10)total=0;if(total==11)total=1;if(total==vatnumber.slice(7,8))
return true
else
return false;}
function DEVATCheckDigit(vatnumber){var product=10;var sum=0;var checkdigit=0;for(var i=0;i<8;i++){sum=(Number(vatnumber.charAt(i))+product)%10;if(sum==0){sum=10};product=(2*sum)%11;}
if(11-product==10){checkdigit=0}else{checkdigit=11-product};if(checkdigit==vatnumber.slice(8,9))
return true
else
return false;}
function DKVATCheckDigit(vatnumber){var total=0;var multipliers=[2,7,6,5,4,3,2,1];for(var i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=total%11;if(total==0)
return true
else
return false;}
function EEVATCheckDigit(vatnumber){var total=0;var multipliers=[3,7,1,3,7,1,3,7];for(var i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=10-total%10;if(total==10)total=0;if(total==vatnumber.slice(8,9))
return true
else
return false;}
function ELVATCheckDigit(vatnumber){var total=0;var multipliers=[256,128,64,32,16,8,4,2];if(vatnumber.length==8){vatnumber="0"+vatnumber};for(var i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=total%11;if(total>9){total=0;};if(total==vatnumber.slice(8,9))
return true
else
return false;}
function ESVATCheckDigit(vatnumber){var total=0;var temp=0;var multipliers=[2,1,2,1,2,1,2];var esexp=new Array();esexp.push(/^[A-H]\d{8}$/);esexp.push(/^[N|P|Q|S]\d{7}[A-Z]$/);esexp.push(/^[0-9]{8}[A-Z]$/);var i=0;if(esexp[0].test(vatnumber)){for(i=0;i<7;i++){temp=Number(vatnumber.charAt(i+1))*multipliers[i];if(temp>9)
total=total+Math.floor(temp/10)+temp%10
else
total=total+temp;}
total=10-total%10;if(total==10){total=0;}
if(total==vatnumber.slice(8,9))
return true
else
return false;}
else if(esexp[1].test(vatnumber)){for(i=0;i<7;i++){temp=Number(vatnumber.charAt(i+1))*multipliers[i];if(temp>9)
total=total+Math.floor(temp/10)+temp%10
else
total=total+temp;}
total=10-total%10;total=String.fromCharCode(total+64);if(total==vatnumber.slice(8,9))
return true
else
return false;}
else if(esexp[2].test(vatnumber)){return vatnumber.charAt(8)=='TRWAGMYFPDXBNJZSQVHLCKE'.charAt(Number(vatnumber.substring(0,8))%23);}
else return true;}
function EUVATCheckDigit(vatnumber){return true;}
function FIVATCheckDigit(vatnumber){var total=0;var multipliers=[7,9,10,5,8,4,2];for(var i=0;i<7;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=11-total%11;if(total>9){total=0;};if(total==vatnumber.slice(7,8))
return true
else
return false;}
function FRVATCheckDigit(vatnumber){if(!(/^\d{11}$/).test(vatnumber))return true;var total=vatnumber.substring(2);total=(total*100+12)%97;if(total==vatnumber.slice(0,2))
return true
else
return false;}
function HUVATCheckDigit(vatnumber){var total=0;var multipliers=[9,7,3,1,9,7,3];for(var i=0;i<7;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=10-total%10;if(total==10)total=0;if(total==vatnumber.slice(7,8))
return true
else
return false;}
function IEVATCheckDigit(vatnumber){var total=0;var multipliers=[8,7,6,5,4,3,2];if(/^\d[A-Z\*\+]/.test(vatnumber)){vatnumber="0"+vatnumber.substring(2,7)+vatnumber.substring(0,1)+vatnumber.substring(7,8);}
for(var i=0;i<7;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=total%23;if(total==0)
total="W"
else
total=String.fromCharCode(total+64);if(total==vatnumber.slice(7,8))
return true
else
return false;}
function ITVATCheckDigit(vatnumber){var total=0;var multipliers=[1,2,1,2,1,2,1,2,1,2];var temp;temp=Number(vatnumber.slice(0,7));if(temp==0)return false;temp=Number(vatnumber.slice(7,10));if((temp<1)||(temp>201))return false;for(var i=0;i<10;i++){temp=Number(vatnumber.charAt(i))*multipliers[i];if(temp>9)
total=total+Math.floor(temp/10)+temp%10
else
total=total+temp;}
total=10-total%10;if(total>9){total=0;};if(total==vatnumber.slice(10,11))
return true
else
return false;}
function LTVATCheckDigit(vatnumber){if(vatnumber.length!=9)return true;var total=0;for(var i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*(i+1);if(total%11==10){var multipliers=[3,4,5,6,7,8,9,1];total=0;for(i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];}
total=total%11;if(total==10){total=0;};if(total==vatnumber.slice(8,9))
return true
else
return false;}
function LUVATCheckDigit(vatnumber){if(vatnumber.slice(0,6)%89==vatnumber.slice(6,8))
return true
else
return false;}
function LVVATCheckDigit(vatnumber){if((/^[0-3]/).test(vatnumber))return true;var total=0;var multipliers=[9,1,4,8,3,10,2,5,7,6];for(var i=0;i<10;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];if(total%11==4&&vatnumber[0]==9)total=total-45;if(total%11==4)
total=4-total%11
else if(total%11>4)
total=14-total%11
else if(total%11<4)
total=3-total%11;if(total==vatnumber.slice(10,11))
return true
else
return false;}
function MTVATCheckDigit(vatnumber){var total=0;var multipliers=[3,4,6,7,8,9];for(var i=0;i<6;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=37-total%37;if(total==vatnumber.slice(6,8)*1)
return true
else
return false;}
function NLVATCheckDigit(vatnumber){var total=0;var multipliers=[9,8,7,6,5,4,3,2];for(var i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=total%11;if(total>9){total=0;};if(total==vatnumber.slice(8,9))
return true
else
return false;}
function PLVATCheckDigit(vatnumber){var total=0;var multipliers=[6,5,7,2,3,4,5,6,7];for(var i=0;i<9;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=total%11;if(total>9){total=0;};if(total==vatnumber.slice(9,10))
return true
else
return false;}
function PTVATCheckDigit(vatnumber){var total=0;var multipliers=[9,8,7,6,5,4,3,2];for(var i=0;i<8;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=11-total%11;if(total>9){total=0;};if(total==vatnumber.slice(8,9))
return true
else
return false;}
function ROVATCheckDigit(vatnumber){var multipliers=[7,5,3,2,1,7,5,3,2,1];var VATlen=vatnumber.length;multipliers=multipliers.slice(10-VATlen);var total=0;for(var i=0;i<vatnumber.length-1;i++){total=total+Number(vatnumber.charAt(i))*multipliers[i];}
total=(10*total)%11;if(total==10)total=0;if(total==vatnumber.slice(vatnumber.length-1,vatnumber.length))
return true
else
return false;}
function SEVATCheckDigit(vatnumber){var total=0;var multipliers=[2,1,2,1,2,1,2,1,2];var temp=0;for(var i=0;i<9;i++){temp=Number(vatnumber.charAt(i))*multipliers[i];if(temp>9)
total=total+Math.floor(temp/10)+temp%10
else
total=total+temp;}
total=10-(total%10);if(total==10)total=0;if(total==vatnumber.slice(9,10))
return true
else
return false;}
function SKVATCheckDigit(vatnumber){var total=0;var multipliers=[8,7,6,5,4,3,2];for(var i=3;i<9;i++){total=total+Number(vatnumber.charAt(i))*multipliers[i-3];}
total=11-total%11;if(total>9)total=total-10;if(total==vatnumber.slice(9,10))
return true
else
return false;}
function SIVATCheckDigit(vatnumber){var total=0;var multipliers=[8,7,6,5,4,3,2];for(var i=0;i<7;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];total=11-total%11;if(total>9){total=0;};if(total==vatnumber.slice(7,8))
return true
else
return false;}
function UKVATCheckDigit(vatnumber){var multipliers=[8,7,6,5,4,3,2];if(vatnumber.substr(0,2)=='GD'){if(vatnumber.substr(2,3)<500)
return true
else
return false;}
if(vatnumber.substr(0,2)=='HA'){if(vatnumber.substr(2,3)>499)
return true
else
return false;}
if(vatnumber.length==9||vatnumber.length==10){var total=0;if(vatnumber.length==10&&vatnumber.slice(9,10)!='3')return false;for(var i=0;i<7;i++)total=total+Number(vatnumber.charAt(i))*multipliers[i];while(total>0){total=total-97;}
total=Math.abs(total);if(total==vatnumber.slice(7,9))
return true
else
return false;}
return true;}
function isPhoneNumber(input)
{return true;}
function isEmailAddress(email)
{
	var regexp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|cat))$/
	return regexp.test(email);
}

function isUrl(s) {
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	return regexp.test(s);
}

function isWebAddress(s) {
	var regexp = /(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	return regexp.test(s);
}

function isSPAMNumber(doc, frm) {
	var regexp = /^2514$/
    // anti spam not always there so check first
	if  (
	    (doc.getElementById("SPMChecker").style.display == "none")
        ||
			(
			(frm.SPMChk.value != "")
			&&
			regexp.test(frm.SPMChk.value)
			)
	    )
	{
	    return true;
	}
	else
	{
	    return false;
	}
}
