/* ==========================================================
Tools Site Javascript

This file deals with form validation

author:    Sam Hocking
website:   http://www.parkertools.co.uk
============================================================ */
// Helper function to display alert with text for empty/null fields.
function validateRequired(field,alertTxt) {
    with (field) {
    	if (value==null||value==""||value==" "||value==undefined) {
    		alert(alertTxt);
    		return false;
    	} else {
    		return true;
    	}
	}
}

// Helper function to validate email address
function validateEmail(address, alertTxt){
	var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if(address.match(emailRegEx)){
		//valid
		return true;
	}else{
		alert(alertTxt);
		return false;
	}
}

// Validates any UK postcode (excludes British Forces postcodes)
function validatePostcode(postcode, alertTxt){
	var postcodeRegEx = /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/;
	if(postcode.toUpperCase().match(postcodeRegEx)){
		//valid
		return true;
	}else{
		alert(alertTxt);
		return false;
	}
}

function validateFieldLength (value, minLength, alertTxt) {
	if(value.length < minLength) {
		alert(alertTxt);
		return false;
	} else {
		return true;
	}
}

// Main function to validate Contact form
function validateContactForm(thisForm, literatureForm) {
	with (thisForm) {
		if (validateRequired(fullName,"Name must be filled out!")==false) {
			fullName.focus();return false;
		}
		if (validateRequired(emailAddress,"Email must be filled out!")==false) {
			emailAddress.focus();return false;
		}
		if (validateEmail(emailAddress.value,"Invalid Email Address!")==false) {
			emailAddress.focus();return false;
		}
		if (validateRequired(addressLine1,"Address Line 1 must be filled out!")==false) {
			addressLine1.focus();return false;
		}
		if (validateRequired(town,"Town/City must be filled out!")==false) {
			town.focus();return false;
		}
		if (validateRequired(county,"County must be filled out!")==false) {
			town.focus();return false;
		}
		if (validateRequired(postCode1,"First part of postcode must be filled out!")==false) {
			postCode1.focus();return false;
		}
		if (validateRequired(postCode2,"Second part of postcode must be filled out!")==false) {
			postCode2.focus();return false;
		}
		if(!literatureForm) {
			if (validateRequired(comments,"Please enter some comments regarding your enquiry with us!")==false) {
				comments.focus();return false;
			}
		}
	}
}

//Main function to validate Contact form
function validateFindItForm(thisForm) {
	with (thisForm) {
		if (validateRequired(fullName,"Name must be filled out!")==false) {
			fullName.focus();return false;
		}
		
		if (validateRequired(emailAddress,"Email must be filled out!")==false) {
			emailAddress.focus();return false;
		}
		
		if (validateEmail(emailAddress.value,"Invalid Email Address!")==false) {
			emailAddress.focus();return false;
		}
		
		if (validateRequired(comments,"Please enter a Product Description to help us find the products you looking for!")==false) {
			comments.focus();return false;
		}
	}
}

//Main function to validate Registration form
function validateRegistrationForm(thisForm) {
	with (thisForm) {
		if (validateRequired(title,"Title must be selected!")==false) {
			title.focus();return false;
		}
		if (validateRequired(forename,"First Name must be filled out!")==false) {
			forename.focus();return false;
		}
		if (validateRequired(surname,"Last Name must be filled out!")==false) {
			surname.focus();return false;
		}
		if (!individual.checked) {
			if (validateRequired(companyName,"Company Name must be filled out!")==false) {
				companyName.focus();return false;
			}
		}
		if (validateRequired(emailAddress,"Email Address must be filled out!")==false) {
			emailAddress.focus();return false;
		}
		if (validateEmail(emailAddress.value,"Invalid Email Address!")==false) {
			emailAddress.focus();return false;
		}
		if (validateRequired(phoneNumber,"Telephone must be filled out!")==false) {
			phoneNumber.focus();return false;
		}
		if(isNaN(phoneNumber.value.replace(/\s/g,''))) {
			alert("Please enter a numerical Telephone number only!");
			phoneNumber.focus();return false;
		}
		if (faxNumber.value!=null && isNaN(faxNumber.value.replace(/\s/g,''))) {
			alert("Please enter a numerical Fax number only or leave blank!");
			faxNumber.focus();return false;
		}
		if(isNaN(phoneNumber.value.replace(/\s/g,''))) {
			alert("Please enter a numerical Telephone number only!");
			phoneNumber.focus();return false;
		}
		if (validateRequired(addressLine1,"First line of Address must be filled out!")==false) {
			addressLine1.focus();return false;
		}
		if (validateRequired(town,"Town/City must be filled out!")==false) {
			town.focus();return false;
		}
		if (validateRequired(county,"County line of Address must be filled out!")==false) {
			county.focus();return false;
		}
		if (validateRequired(postcode,"Postcode must be filled out!")==false) {
			postcode.focus();return false;
		}
		if (validatePostcode(postcode.value,"Invalid Postcode. Please ensure you use a space between the two parts.")==false) {
			postcode.focus();return false;
		}
		if (validateRequired(userName,"Username must be filled out!")==false) {
			userName.focus();return false;
		}
		if (validateFieldLength(userName.value, 4, "Your username must be at least 4 characters in length!")==false) {
			userName.focus();return false;
		}
		if (validateFieldLength(password.value, 5, "Your password must be at least 5 characters in length. We recommend you use both letters and numbers to increase your passwords security.")==false) {
			password.focus();return false;
		}
		if (confirmPassword.value != password.value) {
			alert("Please confirm your password!");
			confirmPassword.focus();return false;
		}

		if(document.getElementById("existingAccountNo")) {
			if (existingAccount[1].checked) {
				if (validateRequired(account,"Account Number must be filled out!")==false) {
					account.focus();return false;
				}
			}
		}
		if (validateRequired(question,"Security Question must be selected!")==false) {
			question.focus();return false;
		}
		if (validateRequired(answer,"Please provide an answer to the Security Question!")==false) {
			answer.focus();return false;
		}
		if(document.getElementById("TandCAgreement")) {
			if (!TandCAgreement.checked) {
				alert("Please agree to be bound by the Terms & Conditions in order to submit your Registration!")
				TandCAgreement.focus();return false;
			}
		}
	}
}

//Main function to validate Registration form
function validateReturnsForm(thisForm) {

	with (thisForm) {
		// Company Details
		if (validateRequired(fullName,"Name must be filled out!")==false) {
			fullName.focus();return false;
		}
		if (validateRequired(emailAddress,"Email Address must be filled out!")==false) {
			emailAddress.focus();return false;
		}
		if (validateEmail(emailAddress.value,"Invalid Email Address!")==false) {
			emailAddress.focus();return false;
		}
		if (validateRequired(addressLine1,"First line of Company Address must be filled out!")==false) {
			addressLine1.focus();return false;
		}
		if (validateRequired(town,"Company Town/City must be filled out!")==false) {
			town.focus();return false;
		}
		if (validateRequired(county,"County line of Company Address must be filled out!")==false) {
			county.focus();return false;
		}
		if (validateRequired(postCode1,"First part of Company Postcode must be filled out!")==false) {
			postCode1.focus();return false;
		}
		
		if (validateRequired(postCode2,"Second part of company Postcode must be filled out!")==false) {
			postCode2.focus();return false;
		}
		// Return Details
		if (returnReason.value == "Other") {
			if (validateRequired(comments,"You have selected the reason for wanting to return your goods is 'Other'. Please add the reason in the comments field!")==false) {
				comments.focus();return false;
			}
		}
		if (validateRequired(documentNo, documentID[documentID.selectedIndex].text + " Number must be filled out!")==false) {
			documentNo.focus();return false;
		}
		// Collection Address
		if (validateRequired(collectionAddressLine1,"First line of Company Address must be filled out!")==false) {
			collectionAddressLine1.focus();return false;
		}
		if (validateRequired(collectionTown,"Company Town/City must be filled out!")==false) {
			collectionTown.focus();return false;
		}
		if (validateRequired(collectionCounty,"County line of Company Address must be filled out!")==false) {
			collectionCounty.focus();return false;
		}
		if (validateRequired(collectionPostCode1,"First part of Company Postcode must be filled out!")==false) {
			collectionPostCode1.focus();return false;
		}
		if (validateRequired(collectionPostCode2,"Second part of company Postcode must be filled out!")==false) {
			collectionPostCode2.focus();return false;
		}
	}
}

function validateFastRegister(thisForm) {
    with (thisForm) {
	    if (validateRequired(userName,"Username must be filled out!")==false) {
		    userName.focus();return false;
	    }
	    if (validateFieldLength(userName.value, 4, "Your username must be at least 4 characters in length!")==false) {
		    userName.focus();return false;
	    }
	    if (validateFieldLength(password.value, 5, "Your password must be at least 5 characters in length.\nWe recommend you use both letters and numbers to increase your passwords security.")==false) {
		    password.focus();return false;
	    }
	    if (confirmPassword.value != password.value) {
	    	alert("Please confirm your password!");
		    confirmPassword.focus();return false;
	    }	
	    if (validateRequired(question,"Security Question must be selected!")==false) {
		    question.focus();return false;
		}
		if (validateRequired(answer,"Please provide an answer to the Security Question!")==false) {
		    answer.focus();return false;
		}
		if (!TandCAgreement.checked) {
			alert("Please agree to be bound by the Terms & Conditions in order to submit your Registration!")
			TandCAgreement.focus();return false;
		}
    }
}


function validateAccountApplicationForm(thisForm) {
    with (thisForm) {
       	// Personal Details
    	if (validateRequired(title,"Title must be selected!")==false) {
			title.focus();return false;
		}
		if (validateRequired(forename,"First Name must be filled out!")==false) {
			forename.focus();return false;
		}
		if (validateRequired(surname,"Last Name must be filled out!")==false) {
			surname.focus();return false;
		}
		if (validateRequired(emailAddress,"Email Address must be filled out!")==false) {
			emailAddress.focus();return false;
		}
		if (validateEmail(emailAddress.value,"Invalid Email Address!")==false) {
			emailAddress.focus();return false;
		}
		if (validateRequired(phoneNumber,"Telephone must be filled out!")==false) {
			phoneNumber.focus();return false;
		}
		if(isNaN(phoneNumber.value.replace(/\s/g,''))) {
			alert("Please enter a numerical Telephone number only!");
			phoneNumber.focus();return false;
		}
		if (faxNumber.value!=null && isNaN(faxNumber.value.replace(/\s/g,''))) {
			alert("Please enter a numerical Fax number only or leave blank!");
			faxNumber.focus();return false;
		}
		if(isNaN(phoneNumber.value.replace(/\s/g,''))) {
			alert("Please enter a numerical Telephone number only!");
			phoneNumber.focus();return false;
		}
		
		// Company Details
		if (validateRequired(companyName,"Company Name must be filled out!")==false) {
			companyName.focus();return false;
		}
		if (validateRequired(addressCompanyLine1,"First line of Company Address must be filled out!")==false) {
			addressCompanyLine1.focus();return false;
		}
		if (validateRequired(townCompany," Town/City of Company Address must be filled out!")==false) {
			townCompany.focus();return false;
		}
		if (validateRequired(countyCompany,"County of Company Address must be filled out!")==false) {
			countyCompany.focus();return false;
		}
		if (validateRequired(postcodeCompany,"Postcode of Company Address must be filled out!")==false) {
			postcodeCompany.focus();return false;
		}
		if (validatePostcode(postcodeCompany.value,"Invalid Postcode of Company Address. Please ensure you use a space between the two parts.")==false) {
			postcodeCompany.focus();return false;
		}
		if (validateRequired(areaOfBusiness,"Companys area of business must be selected!")==false) {
			areaOfBusiness.focus();return false;
		}
		if (validateRequired(companyType,"Company Type of business must be selected!")==false) {
			companyType.focus();return false;
		}
		if (companyType.value == "LLP" || companyType.value == "PLC" || companyType.value == "LTD") {
			if (validateRequired(registrationNumber,"Registration Number must be filled out!")==false) {
				registrationNumber.focus();return false;
			}
			if(isNaN(registrationNumber.value)) {
				alert("Please enter a numerical Registration number only!");
				registrationNumber.focus();return false;
			}
		}
		if (validateRequired(yearsTrading,"No of Years Trading must be filled out!")==false) {
			yearsTrading.focus();return false;
		}
		if(isNaN(yearsTrading.value)) {
			alert("No of Years Trading must be a number only!");
			yearsTrading.focus();return false;
		}
		
		// Statement Address
		if (validateRequired(addressStatementLine1,"First line of Statement Address must be filled out!")==false) {
			addressStatementLine1.focus();return false;
		}
		if (validateRequired(townStatement," Town/City of Statement Address must be filled out!")==false) {
			townStatement.focus();return false;
		}
		if (validateRequired(countyStatement,"County of Statement Address must be filled out!")==false) {
			countyStatement.focus();return false;
		}
		if (validateRequired(postcodeStatement,"Postcode of Statement Address must be filled out!")==false) {
			postcodeStatement.focus();return false;
		}
		if (validatePostcode(postcodeStatement.value,"Invalid Postcode of Statement Address. Please ensure you use a space between the two parts.")==false) {
			postcodeStatement.focus();return false;
		}
		// Invoice Address
		if (validateRequired(addressInvoiceLine1,"First line of Invoice Address must be filled out!")==false) {
			addressInvoiceLine1.focus();return false;
		}
		if (validateRequired(townInvoice," Town/City of Invoice Address must be filled out!")==false) {
			townInvoice.focus();return false;
		}
		if (validateRequired(countyInvoice,"County of Invoice Address must be filled out!")==false) {
			countyInvoice.focus();return false;
		}
		if (validateRequired(postcodeInvoice,"Postcode of Invoice Address must be filled out!")==false) {
			postcodeInvoice.focus();return false;
		}
		if (validatePostcode(postcodeInvoice.value,"Invalid Postcode of Invoice Address!")==false) {
			postcodeInvoice.focus();return false;
		}
		
		// Credit Details
		if (validateRequired(monthlyRequirement,"Maximum Monthly Requirement must be filled out!")==false) {
			monthlyRequirement.focus();return false;
		}
		if(isNaN(monthlyRequirement.value)) {
			alert("Maximum Monthly Requirement must be a number only!");
			monthlyRequirement.focus();return false;
		}
		
		if(companyType.value == "PLC" || companyType.value == "LTD" ) {
			// Directors1 Details
			if (validateRequired(titleDirector1,"Director 1 Title must be selected!")==false) {
				titleDirector1.focus();return false;
			}
			if (validateRequired(forenameDirector1,"Director 1 First Name must be filled out!")==false) {
				forenameDirector1.focus();return false;
			}
			if (validateRequired(surnameDirector1,"Director 1 Last Name must be filled out!")==false) {
				surnameDirector1.focus();return false;
			}
			if (validateRequired(positionDirector1,"Director 1 Position must be selected!")==false) {
				positionDirector1.focus();return false;
			}
		}
		if(companyType.value == "Partnership" || companyType.value == "LLP") {
			for(var i=1; i<=noOfPartners;i++) { // no of partners is stored in functions.js
				if (validateRequired(eval("titlePartner" + i),"Partner " + i + " Title must be selected!")==false) {
					eval("titlePartner" + i).focus();return false;
				}
				if (validateRequired(eval("forenamePartner" + i),"Partner " + i + " First Name must be filled out!")==false) {
					eval("forenamePartner" + i).focus();return false;
				}
				if (validateRequired(eval("surnamePartner" + i),"Partner " + i + " Last Name must be filled out!")==false) {
					eval("surnamePartner" + i).focus();return false;
				}
				if (validateRequired(eval("addressPartner" + i + "Line1"),"First line of Partner " + i + " Address must be filled out!")==false) {
					eval("addressPartner" + i + "Line1").focus();return false;
				}
				if (validateRequired(eval("townPartner" + i)," Town/City of Partner " + i + " Address must be filled out!")==false) {
					eval("townPartner" + i).focus();return false;
				}
				if (validateRequired(eval("countyPartner" + i),"County of Partner " + i + " Address must be filled out!")==false) {
					eval("countyPartner" + i).focus();return false;
				}
				if (validateRequired(eval("postcodePartner" + i),"Postcode of Partner " + i + " Address must be filled out!")==false) {
					eval("postcodePartner" + i).focus();return false;
				}
				if (validatePostcode(eval("postcodePartner" + i).value,"Invalid Postcode of Partner " + i + " Address. Please ensure you use a space between the two parts.")==false) {
					eval("postcodePartner" + i).focus();return false;
				}
			}
		}
		
		if(companyType.value == "Sole Trader") {
			//Proprietor Details
			if (validateRequired(titleProprietors,"Proprietors Title must be selected!")==false) {
				titleProprietors.focus();return false;
			}
			if (validateRequired(forenameProprietors,"Proprietors First Name must be filled out!")==false) {
				forenameProprietors.focus();return false;
			}
			if (validateRequired(surnameProprietors,"Proprietors Last Name must be filled out!")==false) {
				surnameProprietors.focus();return false;
			}
			if (validateRequired(addressProprietorsLine1,"First line of Proprietors Address must be filled out!")==false) {
				addressProprietorsLine1.focus();return false;
			}
			if (validateRequired(townProprietors," Town/City of Proprietors Address must be filled out!")==false) {
				townProprietors.focus();return false;
			}
			if (validateRequired(countyProprietors,"County of Proprietors Address must be filled out!")==false) {
				countyProprietors.focus();return false;
			}
			if (validateRequired(postcodeProprietors,"Postcode of Proprietors Address must be filled out!")==false) {
				postcodeProprietors.focus();return false;
			}
			if (validatePostcode(postcodeProprietors.value,"Invalid Postcode of Proprietors Address. Please ensure you use a space between the two parts.")==false) {
				postcodeProprietors.focus();return false;
			}
		}
		
		// Reference 1 Details
		if (validateRequired(nameReference1,"Reference 1 Name must be filled out!")==false) {
			nameReference1.focus();return false;
		}
		if (validateRequired(companyNameReference1,"First line of Reference 1 Address must be filled out!")==false) {
			addressReference1.focus();return false;
		}
		if (validateRequired(addressReference1Line1,"First line of Reference 1 Address must be filled out!")==false) {
			addressReference1Line1.focus();return false;
		}
		if (validateRequired(townReference1," Town/City of Reference 1 Address must be filled out!")==false) {
			townReference1.focus();return false;
		}
		if (validateRequired(countyReference1,"County of Reference 1 Address must be filled out!")==false) {
			countyReference1.focus();return false;
		}
		if (validateRequired(postcodeReference1,"Postcode of Reference 1 Address must be filled out!")==false) {
			postcodeReference1.focus();return false;
		}
		if (validatePostcode(postcodeReference1.value,"Invalid Postcode of Reference 1 Address. Please ensure you use a space between the two parts.")==false) {
			postcodeReference1.focus();return false;
		}
		
		// Reference 2 Details
		if (validateRequired(nameReference2,"Reference 2 Name must be filled out!")==false) {
			nameReference2.focus();return false;
		}
		if (validateRequired(companyNameReference2,"First line of Reference 2 Address must be filled out!")==false) {
			addressReference2.focus();return false;
		}
		if (validateRequired(addressReference1Line1,"First line of Reference 2 Address must be filled out!")==false) {
			addressReference2Line1.focus();return false;
		}
		if (validateRequired(townReference2," Town/City of Reference 2 Address must be filled out!")==false) {
			townReference2.focus();return false;
		}
		if (validateRequired(countyReference2,"County of Reference 2 Address must be filled out!")==false) {
			countyReference2.focus();return false;
		}
		if (validateRequired(postcodeReference2,"Postcode of Reference 2 Address must be filled out!")==false) {
			postcodeReference2.focus();return false;
		}
		if (validatePostcode(postcodeReference2.value,"Invalid Postcode of Reference 2 Address. Please ensure you use a space between the two parts.")==false) {
			postcodeReference2.focus();return false;
		}
		
		// Reference 3 Details
		if (validateRequired(nameReference3,"Reference 3 Name must be filled out!")==false) {
			nameReference3.focus();return false;
		}
		if (validateRequired(companyNameReference3,"First line of Reference 3 Address must be filled out!")==false) {
			addressReference3.focus();return false;
		}
		if (validateRequired(addressReference3Line1,"First line of Reference 3 Address must be filled out!")==false) {
			addressReference3Line1.focus();return false;
		}
		if (validateRequired(townReference3," Town/City of Reference 3 Address must be filled out!")==false) {
			townReference3.focus();return false;
		}
		if (validateRequired(countyReference3,"County of Reference 3 Address must be filled out!")==false) {
			countyReference3.focus();return false;
		}
		if (validateRequired(postcodeReference3,"Postcode of Reference 3 Address must be filled out!")==false) {
			postcodeReference3.focus();return false;
		}
		if (validatePostcode(postcodeReference3.value,"Invalid Postcode of Reference 3 Address. Please ensure you use a space between the two parts.")==false) {
			postcodeReference3.focus();return false;
		}
		
		if(document.getElementById("loginDetails").style.display == "block" || document.getElementById("loginDetails").style.display == "") {
			// Login Details
			if (validateRequired(userName,"Username must be filled out!")==false) {
				userName.focus();return false;
			}
			if (validateFieldLength(userName.value, 4, "Your username must be at least 4 characters in length!")==false) {
				userName.focus();return false;
			}
			if (validateFieldLength(password.value, 5, "Your password must be at least 5 characters in length. We recommend you use both letters and numbers to increase your passwords security.")==false) {
				password.focus();return false;
			}
			if (confirmPassword.value != password.value) {
				alert("Please confirm your password!");
				confirmPassword.focus();return false;
			}
		}
		if (!TandCAgreement.checked) {
			alert("Please agree to be bound by the Terms & Conditions in order to submit your Registration!")
			TandCAgreement.focus();return false;
		}
    }
}