var gUseMainAddr;

function initForm(form,referred) {
	gLoaded=true;
	if (referred) {
		with(form) {
			var obj=getEmailField();
			if (obj)
				obj.value=gEmailCheckOut;
		}
		return;
	}
	var obj=getEmailField();
	if (obj && obj.value=='') {
		obj.value=gInitParms[0];
		obj.focus();
	}
	if(gCrtUser){ 
		if(gShowAddress){
			if (gInitParms[1]) getAddress1Field().value=gInitParms[1];
			if (gInitParms[2]) getAddress2Field().value=gInitParms[2];
			if (gInitParms[3]) getAddress3Field().value=gInitParms[3];
			if (gInitParms[4]) getAddress4Field().value=gInitParms[4];
			if (gInitParms[5]) getPostcodeField().value=gInitParms[5];
		}
		if (gInitParms[6]) getPhoneField().value=gInitParms[6];
		if (gInitParms[7]) getMobileField().value=gInitParms[7];
		if (gInitParms[8]) getNameField().value=gInitParms[8];
	}
	dspCardDtls('cardDtls1');
	dspCardDtls('cardDtls2');
}

function getEmailField() {
	return document.main.email;
}

function getPasswordField() {
	return document.main.password;
}

function getConfPasswordField() {
	return document.main.confPassword;
}

function getNameField() {
	return document.main.custName;
}

function getAddress1Field() {
	return document.main.address1;
}

function getAddress2Field() {
	return document.main.address2;
}

function getAddress3Field() {
	return document.main.address3;
}

function getAddress4Field() {
	return document.main.address4;
}

function getPostcodeField() {
	return document.main.postcode;
}
function getCardNameField() {
	return document.main.cardName;
}

function getCardAddress1Field() {
	return document.main.cardAddress1;
}

function getCardAddress2Field() {
	return document.main.cardAddress2;
}

function getCardAddress3Field() {
	return document.main.cardAddress3;
}

function getCardAddress4Field() {
	return document.main.cardAddress4;
}

function getCardPostcodeField() {
	return document.main.cardPostcode;
}
function getPhoneField() {
	return document.main.phone;
}

function getMobileField() {
	return document.main.mobile;
}

function getCardTypeField() {
	return document.main.ccType;
}

function getCardNumberField() {
	return document.main.ccNumber;
}

function getIssueNumberField() {
	return document.main.issueNumber;
}

function getIssueNumber() {
	if (!getIssueNumberField())
		return '00';
	if (isEmpty(getIssueNumberField().value))
		return '00';
	return getIssueNumberField().value;
}

function getExpMthField() {
	return document.main.expMth;
}

function getExpYearField() {
	return document.main.expYear;
}

function getReadItField() {
	return document.main.readIt;
}

function getPaymentField() {
	return document.main.payment;
}

function getExpiryDate() {
	var year = getSelectionValue(getExpYearField());
	if (year=='')
		return null;
	var month = getSelectionValue(getExpMthField());
	if (month=='')
		return null;
	return year + "-" + pad(month,"0",2) + "-01";
}

function getStrMthField() {
	return document.main.strMth;
}

function getStrYearField() {
	return document.main.strYear;
}

function getStartDate() {
	var year = getSelectionValue(getStrYearField());
	if (isEmpty(year))
		return '0001-01-01';
	var month = getSelectionValue(getStrMthField());
	if (isEmpty(month))
		return '0001-01-01';
	return year + "-" + pad(month,"0",2) + "-01";
}
function getUseLastCCField() {
	return document.main.useLastCC;
}
function checkEmail() {
	var obj=getEmailField();
	if (!obj)
		return true;
	// R436 Ensure email contains no double quotes or spaces (possible that user pasted into field)
    obj.value=obj.value.replace(/["\s]/g,"");
	var str=new String(obj.value);
	var exp=eval("/^.+@{1,1}.+\\.{1,1}.+/g");
	var matches=str.match(exp);
	if (matches && matches.length==1 && matches[0]==str) {
		return true;
	}
	alert(gMsg1);
	obj.focus();
	return false;
}

function checkPassword() {
	var obj=getPasswordField();
	if (!obj || gPwdOptional)
		return true;
	if (isEmpty(obj.value)) {
		alert(gMsg2);
		obj.focus();
		return false;
	}
	return true;
}

function checkConfPassword() {
	var obj=getConfPasswordField();
	if (!obj || gPwdOptional)
		return true;
	if (isEmpty(obj.value)) {
		alert(gMsg3);
		obj.focus();
		return false;
	}
	return true;
}

function checkName() {
	var obj=getNameField();
	if (isEmpty(obj.value)) {
		alert(gMsg5);
		obj.focus();
		return false;
	}
	return true;
}

function checkAddress() {
	var obj=getAddress1Field();
	if(gShowAddress){
		if (isEmpty(obj.value) && isEmpty(getAddress2Field().value)) {
			alert(gMsg6);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkTown() {
	var obj=getAddress3Field();
	if(gShowAddress){
		if (isEmpty(obj.value)) {
			alert(gMsg17);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkPostcode() {
	if(gShowAddress){
		var obj=getPostcodeField();
		if (gPostCodeMandatory && isEmpty(obj.value)) {
			alert(gMsg8);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkCardName() {
	var obj=getCardNameField();
	if(!gUseMainAddr){
		if (isEmpty(obj.value)) {
			alert(gMsg5);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkCardAddress() {
	var obj=getCardAddress1Field();
	if(gShowAddress && !gUseMainAddr){
		if (isEmpty(obj.value) && isEmpty(getCardAddress2Field().value)) {
			alert(gMsg6);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkCardTown() {
	var obj=getCardAddress3Field();
	if(gShowAddress && !gUseMainAddr){
		if (isEmpty(obj.value)) {
			alert(gMsg17);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkCardPostcode() {
	if(gShowAddress && !gUseMainAddr){
		var obj=getCardPostcodeField();
		if (gPostCodeMandatory && isEmpty(obj.value)) {
			alert(gMsg8);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkPhoneNbrs() {
	var obj1=getPhoneField();
	var obj2=getMobileField();
	if (trim(obj1.value).length<7 && trim(obj2.value).length<7) {
		alert(gMsg15);
		obj1.focus();
		return false;
	}
	return true;
}

function checkCardType() {
	var obj=getCardTypeField();
	if (getSelectionValue(obj)=='') {
		alert(gMsg10);
		obj.focus();
		return false;
	}
	
	return checkCurrency();
}

function checkCardNumber() {
	var obj=getCardNumberField();
	if ((trim(obj.value)).length<8) {
		alert(gMsg11);
		obj.focus();
		return false;
	}
	return true;
}

function checkExpDate() {
	var obj=getExpMthField();
	if (obj.selectedIndex<1 || getExpYearField().selectedIndex<1) {
		alert(gMsg12);
		obj.focus();
		return false;
	}
	var mth=getSelectionValue(getExpMthField());
	var yr=getSelectionValue(getExpYearField());
	var expDate=Number(yr)*12 + Number(mth);
	var testDate=Number(gStartYear)*12 + Number(gStartMonth);
	if (expDate < testDate) {
		alert(gMsg13);
		obj.focus();
		return false;
	}
	return true;
}

function checkIssueNumber() {
	var cType = getSelectionValue(getCardTypeField());
	var sDate = getStartDate();
	if ((cType == "SW" || cType == "SO") && sDate == '0001-01-01') {
		var obj=getIssueNumberField();
		if (isEmpty(obj.value)) {
			alert(gMsg14);
			obj.focus();
			return false;
		}
	}
	return true;
}

function checkStrDate() {
	var cType = getSelectionValue(getCardTypeField());
	if(getIssueNumberField()){
		var issue = getIssueNumberField().value;
		var obj=getStrMthField();
		if ((cType == "SW"  || cType == "SO") && isEmpty(issue)) {
			if (obj.selectedIndex<1 || getStrYearField().selectedIndex<1) {
				alert(gMsg14);
				obj.focus();
				return false;
			}
		}
		if ((cType == "SW"  || cType == "SO")) {
			var yr=getSelectionValue(getStrYearField());
			var mth=getSelectionValue(getStrMthField());
			var strDate=Number(yr)*12 + Number(mth);
			var testDate=Number(gStartYear)*12 + Number(gStartMonth);
			if (strDate > testDate) {
				alert(gMsg16);
				obj.focus();
				return false;
			}
		}
	}
	return true;
}

function checkMatch() {
	if (checkPassword() && checkConfPassword()) {
		var obj=getPasswordField();
		if (!obj || gPwdOptional)
			return true;
		if (obj.value== getConfPasswordField().value) 
			return true;
		alert(gMsg4);
		obj.focus();
	}
       return false;
}

function checkReadIt() {
	var obj=getReadItField();
	if (!obj || obj.checked)
		return true;
	alert(gMsg18);
	return false;
}

function SubmitFormGetBkDtl(submitter,receiver) {
	if (gLoaded && checkEmail() && checkPassword()) {
		with (receiver){ 
 			email.value=getEmailField().value;
			password.value=getPasswordField().value;
			gLoaded=false;
			submit();
			return false;
		}
	}
	return false;
}

function checkForm() {
	var obj=getPaymentField();
	var useLast=getUseLastCCField();
	if (gPaymentGateway) {
		return checkContact() && checkReadIt();
	}
	if ((!obj || obj.checked) && (!useLast || !useLast.checked))
		return checkContact() && checkPayment() && checkReadIt();
	return checkContact() && checkReadIt();
}

function checkContact() {
	if(gCrtUser){
		return checkEmail() && 
		checkMatch() && 
		checkName() && 
		checkAddress() &&
		checkTown() &&
		checkPostcode() && 
		checkPhoneNbrs() &&
		checkIncludes() &&
		checkTravelClub();		
	}
	return true;
	}

function checkIncludes() {
	if(gShowMembershipDetails) 
		return checkMembership();
	return true;
}

function checkTravelClub() {
	if(gIsTravelClub) {
		//Email must be entered for Travel Club
		if (gEnterEmail) { 
			alert(gMsg492);
			return false;
		}
		//If previous Email was valid but the one entered hasnt been validated
		var obj=getEmailField();
		if (obj) {
			if (gTravelClubEmail.toUpperCase()!=obj.value.toUpperCase()) {
				alert(gMsg493);
				return false;		
			}
		}
	}
	return true;
}

function checkPayment() {
	var addrOk= true;
	if(gUseMainAddr && gIsNav){
		if(!isEmpty(getCardNameField().value) ||
			!isEmpty(getCardAddress1Field().value) ||
			!isEmpty(getCardAddress2Field().value) ||
			!isEmpty(getCardAddress3Field().value) ||
			!isEmpty(getCardAddress4Field().value) ||
			!isEmpty(getCardPostcodeField().value)){
				if (!confirm(gMsg19))
					return false;
		}
	}else{
		addrOk = checkCardAddress() &&
		checkCardTown() &&
		checkCardPostcode(); 
	}
	return addrOk &&
	checkCardType() && 
	checkCardNumber() && 
	checkExpDate() && 
	checkIssueNumber() && 
	checkStrDate() &&
	checkExtraCCDetails();
}

function SubmitFormCheckOut(submitter,receiver) {
	gUseMainAddr=(document.forms[0].useMainAddr && document.forms[0].useMainAddr.checked);
	if (gLoaded && checkForm()) {
		with (receiver){ 
			if(gCrtUser){
				custName.value=getNameField().value;
				if(gShowAddress){
					address1.value=getAddress1Field().value;
					address2.value=getAddress2Field().value;
					address3.value=getAddress3Field().value;
					address4.value=getAddress4Field().value;
					postcode.value=getPostcodeField().value;
				}else{
					address1.value='.';
					address2.value='';
					address3.value='';
					address4.value='';
					postcode.value='';
				}
				phone.value=getPhoneField().value;
				mobile.value=getMobileField().value;
			}
			
			//Membership Details
			if(gShowMembershipDetails) 
				setMembershipFormDetails(receiver);
				
			var obj=getEmailField();
			if (obj)
				email.value=obj.value.toUpperCase();
			var obj=getPasswordField();
			if (obj)
				password.value=obj.value;
			var obj=getPaymentField();
			if (obj && !obj.checked) {
				obj.value=false;
			}else{
				if (!gPaymentGateway) {
					useLastCard=getUseLastCCField();
					if(!useLastCard || !useLastCard.checked){
						if(gUseMainAddr && gShowAddress){
							cardName.value=getNameField().value;
							cardAddress1.value=getAddress1Field().value;
							cardAddress2.value=getAddress2Field().value;
							cardAddress3.value=getAddress3Field().value;
							cardAddress4.value=getAddress4Field().value;
							cardPostcode.value=getPostcodeField().value;
						}else{
							cardName.value=getCardNameField().value;
							if(gShowAddress){
								cardAddress1.value=getCardAddress1Field().value;
								cardAddress2.value=getCardAddress2Field().value;
								cardAddress3.value=getCardAddress3Field().value;
								cardAddress4.value=getCardAddress4Field().value;
								cardPostcode.value=getCardPostcodeField().value;
							}else{
								cardAddress1.value=address1.value;
								cardAddress2.value=address2.value;
								cardAddress3.value=address3.value;
								cardAddress4.value=address4.value;
								cardPostcode.value=postcode.value.toUpperCase();
							}
						}
						cardType.value=getSelectionValue(getCardTypeField());
						cardNumber.value=getCardNumberField().value;
						ccEDate.value=getExpiryDate();
						ccSDate.value=getStartDate();
						ccIssue.value=getIssueNumber();
					}else{
						useLast.value = true;
					}
				}
			}
			gLoaded=false;
			submit();
		}
 	}
	return false;
}
function getCardDesc(code){
	var cardCodes = gCardVal.split('|');
	var cardNames = gCardOpt.split('|');
	var i = null;

	for(i=0; i<cardCodes.length; i++){
		if (cardCodes[i] == code) {
			document.write(cardNames[i]);
			break;
		}
	}
	
}
function refreshPage(){
	var refreshForm=document.forms['refresh'];
	var obj=document.forms[0].payment;
	if(obj)
		refreshForm.payment.value=obj.checked;
	obj=document.forms[0].useLastCC;
	if (obj)
		refreshForm.useLast.value=obj.checked;
	refreshForm.submit();
}
function dspCardDtls(layer){
	var divObj=getLayer(layer);
	if (!divObj || !document.forms[0].useMainAddr) return;
	if (divObj.style) {
		divObj.style.display=document.forms[0].useMainAddr.checked?"none":"inline";
	} else {
		divObj.display=document.forms[0].useMainAddr.checked?"none":"block";
	}
	return false;
}
function checkCurrency() {
	var cTypeObj = getCardTypeField();
	var cCur = getPreferredCurrencyValue();
	if ((cTypeObj.value == "SW") && (cCur != "GBP")) {
		alert(gMsg272);
		cTypeObj.focus();
		return false;
	}
	if ((cTypeObj.value == "JC" && cCur != "YEN") || (cTypeObj.value == "LS" && cCur != "EUR")) {
		alert(gMsg335);
		cTypeObj.focus();
		return false;
	}
	if (((cTypeObj.value == "VP") || (cTypeObj.value == "IG")) && !((cCur == "USD") || (cCur == "SHK"))) {
		alert(gMsg335);
		cTypeObj.focus();
		return false;
	}	
	return true;
}

function getPreferredCurrencyValue() {
	return document.submitForm.prefCcy.value;
}
