//-------------------------------------------------------//
//THIS ARRAYS SHOULD NOT BE ALTERED NO MATTER WHAT.
var countryNames 	= ["Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua And Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia And Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", "Cook Islands", "Costa Rica", "Cote D'Ivoire", "Croatia (Local Name: Hrvatska)", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "France, Metropolitan", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island & Mcdonald Islands", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Republic Of", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, Democratic People's Republic Of", "Korea, Republic Of", "Kuwait", "Kyrgyzstan", "Lao People'S Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libyan Arab Jamahiriya", "Liechtenstein", "Lithuania", "Luxembourg", "Macau", "Macedonia, The Former Yugoslav Republic Of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States Of", "Moldova, Republic Of", "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", "Reunion", "Romania", "Russian Federation", "Rwanda", "Saint Kitts And Nevis", "Saint Lucia", "Saint Vincent And The Grenadines", "Samoa", "San Marino", "Sao Tome And Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Slovakia (Slovak Republic)", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", "Sri Lanka", "Saint Helena", "Saint Pierre And Miquelon", "Sudan", "Suriname", "Svalbard And Jan Mayen Islands", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan, Province Of China", "Tajikistan", "Tanzania, United Republic Of", "Tatarstan", "Thailand", "Togo", "Tokelau", "Tonga", "Trinidad And Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks And Caicos Islands", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", "Vatican City State (Holy See)", "Venezuela", "Viet Nam", "Virgin Islands (British)", "Virgin Islands (U.S.)", "Wallis And Futuna Islands", "Western Sahara", "Yemen", "Yugoslavia", "Zaire", "Zambia", "Zimbabwe"];
var countryCodeAlpha2 		= ["AF", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CK", "CR", "CI", "HR", "CU", "CY", "CZ", "DK", "DJ", "DM", "DO", "TL", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "FX", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GN", "GW", "GY", "HT", "HM", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IL", "IT", "JM", "JP", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "AN", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "KN", "LC", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SK", "SI", "SB", "SO", "ZA", "ES", "LK", "SH", "PM", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", " ", "TH", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VA", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "YU", "ZR", "ZM", "ZW"];
var countryCodeAlpha3 		= ["AFG", "ALB", "DZA", "ASM", "AND", "AGO", "AIA", "ATA", "ATG", "ARG", "ARM", "ABW", "AUS", "AUT", "AZE", "BHS", "BHR", "BGD", "BRB", "BLR", "BEL", "BLZ", "BEN", "BMU", "BTN", "BOL", "BIH", "BWA", "BVT", "BRA", "IOT", "BRN", "BGR", "BFA", "BDI", "KHM", "CMR", "CAN", "CPV", "CYM", "CAF", "TCD", "CHL", "CHN", "CXR", "CCK", "COL", "COM", "COG", "COK", "CRI", "CIV", "HRV", "CUB", "CYP", "CZE", "DNK", "DJI", "DMA", "DOM", "TLS", "ECU", "EGY", "SLV", "GNQ", "ERI", "EST", "ETH", "FLK", "FRO", "FJI", "FIN", "FRA", "FXX", "GUF", "PYF", "ATF", "GAB", "GMB", "GEO", "DEU", "GHA", "GIB", "GRC", "GRL", "GRD", "GLP", "GUM", "GTM", "GIN", "GNB", "GUY", "HTI", "HMD", "HND", "HKG", "HUN", "ISL", "IND", "IDN", "IRN", "IRQ", "IRL", "ISR", "ITA", "JAM", "JPN", "JOR", "KAZ", "KEN", "KIR", "PRK", "KOR", "KWT", "KGZ", "LAO", "LVA", "LBN", "LSO", "LBR", "LBY", "LIE", "LTU", "LUX", "MAC", "MKD", "MDG", "MWI", "MYS", "MDV", "MLI", "MLT", "MHL", "MTQ", "MRT", "MUS", "MYT", "MEX", "FSM", "MDA", "MCO", "MNG", "MSR", "MAR", "MOZ", "MMR", "NAM", "NRU", "NPL", "NLD", "ANT", "NCL", "NZL", "NIC", "NER", "NGA", "NIU", "NFK", "MNP", "NOR", "OMN", "PAK", "PLW", "PAN", "PNG", "PRY", "PER", "PHL", "PCN", "POL", "PRT", "PRI", "QAT", "REU", "ROU", "RUS", "RWA", "KNA", "LCA", "VCT", "WSM", "SMR", "STP", "SAU", "SEN", "SRB", "SYC", "SLE", "SGP", "SVK", "SVN", "SLB", "SOM", "ZAF", "ESP", "LKA", "SHN", "SPM", "SDN", "SUR", "SJM", "SWZ", "SWE", "CHE", "SYR", "TWN", "TJK", "TZA", " ", "THA", "TGO", "TKL", "TON", "TTO", "TUN", "TUR", "TKM", "TCA", "TUV", "UGA", "UKR", "ARE", "GBR", "USA", "UMI", "URY", "UZB", "VUT", "VAT", "VEN", "VNM", "VGB", "VIR", "WLF", "ESH", "YEM", "YUG", "ZAR", "ZMB", "ZWE"];
//THE ABOVE ARRAYS SHOULD NOT BE ALTERED
//------------------------------------------------------//


/*var countryNames_pair = [["Algeria", "^[0-9]{5}$"], ["Andorra", "^([A-Z]{2}[0-9]{3})|([A-Z]{2}[\ ][0-9]{3})$"], 
							["Australia","^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$"],
							["Azerbaijan","^[A][Z](.?)[0-9]{4}$"],["Bahrain","^([1][0-9]|[0-9])[1-9]{2}$"], ["Bangladesh","^[1-9][0-9]{3}$"],
							["Belarus","^[0-9]{6}$"], ["Belgium","^[1-9]{1}[0-9]{3}$"], ["Brunei Darussalam","^[B|K|T|P][A-Z][0-9]{4}$"], 
							["Canada","^[ABCEGHJ-NPRSTVXY]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$"], 
							["Chile","^[0-9]{7}$"], ["China","^[0-9]{6}$"], ["Croatia (Local Name: Hrvatska)","^[0-9]{5}$"], 
							["Cyprus","^[0-9]{4}$"], ["Denmark","^[1-9]{1}[0-9]{3}$"], ["Egypt","^[0-9]{5}$"], ["Estonia","^[0-9]{5}$"], 
							["Ethiopia","^[1-9][0-9]{3}$"], ["Faroe Islands","^[F][O][\s]?[0-9]{3}$"], ["France","^([0-9]{2})[0-9]{3}$"], 
							["United Kingdom","^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$"], 
							["United States","	^\d{5}([\-]\d{4})?$"]];

*/

//returns the countryName given the country_code
//assumes that the length of countryNames and countryCodeAlpha2/countryCodeAlpha3 
//is the exactly the same and follow the same order of listing the countries.
function getCountryName(country_code) {
	var country_name = "";
	if (country_code.length == 3){
		for (var i = 0; i<countryCodeAlpha3.length; i++){
			if (countryCodeAlpha3[i] == country_code) {
				country_name = countryNames[i];
			}
		}
	}
	else if (country_code.length == 2) {
		for (var j = 0; j<countryCodeAlpha2.length; j++) {
			if (countryCodeAlpha2[j] == country_code) {
				country_name = countryNames[j];
			}
		}
	}
	return country_name;
}

function postcode_is_valid(postcode, country_code) {
	
	var isValid = true;
	
	//check whether a regular expression 
	//exists for that country code - true by default
	var regExp_exists = true;
	
	var regexp;

	//algeria
	if (country_code == "DZA" || country_code == "DZ") {
		regexp = "^[0-9]{5}$";
	}
	//andorra
	else if (country_code == "AND" || country_code == "AD") {
		regexp = "^([A-Z]{2}[0-9]{3})|([A-Z]{2}[\\ ][0-9]{3})$";
	}
	//azerbaijan
	else if (country_code == "AZE" || country_code == "AZ") {
		regexp = "^[A][Z](.?)[0-9]{4}$";
	}
	//bangladesh
	else if (country_code == "BGD" || country_code == "BD") {
		regexp = "^[1-9][0-9]{3}$";
	}
	//belarus
	else if (country_code == "BLR" || country_code == "BY") {
		 regexp =  "^[0-9]{6}$";
	}
	//denmark
	else if (country_code == "DNK" || country_code == "DK") {
		regexp = "^[1-9]{1}[0-9]{3}$";
	}
	//estonia
	else if (country_code == "EST" || country_code == "EE") {
		regexp = "^[0-9]{5}$";
	}
	//ethiopia
	else if (country_code == "ETH" || country_code == "ET") {
		regexp = "^[1-9][0-9]{3}$";
	}
	//great britain
	else if (country_code == "GBR" || country_code == "GB") {
		 regexp = "^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|" +
					 "([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$";
	}
	//united states
	else if (country_code == "USA" || country_code == "US") {
		regexp = "^\\d{5}([\\-]\\d{4})?$";
	}
	//cyprus
	else if (country_code == "CYP" || country_code == "CY") {
		regexp = "^[0-9]{4}$";
	}
	//australia
	else if (country_code == "AUS" || country_code == "AU") {
		regexp = "^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$";
	}
	//china
	else if (country_code == "CHN" || country_code == "CN") {
		regexp = "^[0-9]{6}$";
	}
	//france
	else if (country_code == "FRA" || country_code == "FR") {
		regexp = "^([0-9]{2})[0-9]{3}$";
	}
	//bahrain
	else if (country_code == "BHR" || country_code == "BH") {
		regexp = "^([1][0-9]|[0-9])[1-9]{2}$";
	}
	//belgium
	else if (country_code == "BEL" || country_code == "BE") {
		regexp = "^[1-9]{1}[0-9]{3}$";
	}
	//canada
	else if (country_code == "CAN" || country_code == "CA") {
		regexp = "^[ABCEGHJ-NPRSTVXY]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$";
	}
	//chile
	else if (country_code == "CHL" || country_code == "CL") {
		regexp = "^[0-9]{7}$";
	}
	//croatia
	else if (country_code == "HRV" || country_code == "HR") {
		regexp = "^[0-9]{5}$";
	}
	//egypt
	else if (country_code == "EGY" || country_code == "EG") {
		regexp = "^[0-9]{5}$";
	}
	//sweeden
	else if (country_code == "SWE" || country_code == "SE") {
		regexp = "^(s-|S-){0,1}[0-9]{3}\\s?[0-9]{2}$";
	}
	//germany
	else if (country_code == "DEU" || country_code == "DE") {
		regexp = "\\b((?:0[1-46-9]\\d{3})|(?:[1-357-9]\\d{4})|(?:[4][0-24-9]\\d{3})|(?:[6][013-9]\\d{3}))\\b";
	}	
	//india
	else if (country_code == "IND" || country_code == "IN") {
		regexp = 	"^\\d{3}\\s?\\d{3}$";
	}
	//italy
	else if (country_code == "ITA" || country_code == "IT") {
		regexp = "^(V-|I-)?[0-9]{4}$"; 
	}
	//netherlands
	else if (country_code == "NLD" || country_code == "NL") {
		regexp = "^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$";
	}
	//russia
	else if (country_code == "RUS" || country_code == "RU") {
		regexp = "^[0-9]{6}";
	}
	//spain
	else if (country_code == "ESP" || country_code == "ES") {
		regexp = "^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$";
	}
	//greece
	else if (country_code == "GRC" || country_code == "GR") {
		regexp = "^[0-9]{5}$"; 
	}
	//czech republic
	else if (country_code == "CZE" || country_code == "CZ") {
		regexp = "^[0-9]{5}$";
	}
	//japan
	else if (country_code == "JPN" || country_code == "JP") {
		regexp = "^[0-9]{3}(|-)[0-9]{4}$";
	}
	//Austria
	else if (country_code == "AUT" || country_code == "AT") {
		regexp = "^[0-9]{4}$"; 
	}
	//brazil
	else if (country_code == "BRA" || country_code == "BR") {
		regexp = "^[0-9]{5}(|-)[0-9]{3}$";
	}
	//new zealand
	else if (country_code == "NZL" || country_code == "NZ") {
		regexp = "^[0-9]{4}$"; 
	}
	else if (country_code == "NOR" || country_code == "NO") {
		regexp = "^[0-9]{4}$"; 
	}
	//pakistan
	else if (country_code == "PK" || country_code == "PKA") {
		regexp = "^[0-9]{5}$"; 
	}
	//philipinnes
	else if (country_code == "PHL" || country_code == "PH") {
		regexp = "^[0-9]{4}$"; 
	}
	//poland
	else if (country_code == "POL" || country_code == "PL") {
		regexp = "^[0-9]{2}(|-)[0-9]{3}$";
	}
	//south africa
	else if (country_code == "ZAF" || country_code == "ZA") {
		regexp = "^[0-9]{4}$"; 
	}
	//United Arab Emirates
	else if (country_code == "ARE" || country_code == "AE") {
	}
	//switzerland
	else if (country_code == "CHE" || country_code == "CH") {
		regexp = "^[0-9]{4}$"; 
	}
	//switzerland
	else if (country_code == "ROU" || country_code == "RO") {
		regexp = "^[0-9]{4}$"; 
	}
	else {
		regExp_exists = false;
	}
	if (regExp_exists) {
		if (!postcode.match(regexp)) {
			isValid = false;
		}
	}
	return isValid;	
}
	
	
	



