/* ********************************************************************
Validation functions
******************************************************************** */

var errorColor = "#E5F2FF";
var FIELD_CLASS = "staticLi"
var ERROR_CLASS = "staticError"
var ASSUMPTIONS_CLASS = "quickQuoteAssumptionsField"

var okColor = "transparent";

function validateInstant() { /* Homepage instant quote */ 
	var error=0;

	var age=document.getElementById("age");
	var ageErr=document.getElementById("error1");
	
	/* Arekibo */
	var ddlNoClaims = (document.all!=null?document.all["noClaims"]:document.getElementById("noClaims"));
	var ddlLicenseType = (document.all!=null?document.all["licence"]:document.getElementById("licence"));
	var ddlLocation = (document.all!=null?document.all["location"]:document.getElementById("location"));
	var ddlEngineSize = (document.all!=null?document.all["engineSize"]:document.getElementById("engineSize"));	
	var errorNoClaims = (document.all!=null?document.all["errorNoClaims"]:document.getElementById("errorNoClaims"));
	var errorNoClaimsAge = (document.all!=null?document.all["errorNoClaimsAge"]:document.getElementById("errorNoClaimsAge"));
	var errorLicenseType = (document.all!=null?document.all["errorLicenseType"]:document.getElementById("errorLicenseType"));
	var errorLocation = (document.all!=null?document.all["errorLocation"]:document.getElementById("errorLocation"));
	var errorEngineSize = (document.all!=null?document.all["errorEngineSize"]:document.getElementById("errorEngineSize"));	
	
	if(validateDDL(ddlNoClaims)==false)
	{
	    error = 1;
	    errorNoClaims.style.display = "block";
	    document.getElementById("noClaimsLabel").className=ERROR_CLASS

	}
	else
	{
	    errorNoClaims.style.display = "none";
	    document.getElementById("noClaimsLabel").className=FIELD_CLASS;

    }
		
	if(validateDDL(ddlLicenseType)==false)
	{
	    error = 1;
	    errorLicenseType.style.display = "block";
	    document.getElementById("licenceLabel").className=ERROR_CLASS

	}
	else
	{	
	    errorLicenseType.style.display = "none"; 
	    document.getElementById("licenceLabel").className=FIELD_CLASS
	}
	
	if(validateDDL(ddlLocation)==false)
	{
	    error = 1;
	    errorLocation.style.display = "block";
	    document.getElementById("locationLabel").className=ERROR_CLASS

	}
	else
	{
	    errorLocation.style.display = "none";
	    document.getElementById("locationLabel").className=FIELD_CLASS

	}    
	    
	if(validateDDL(ddlEngineSize)==false)
	{
	    error = 1;
	    errorEngineSize.style.display = "block";
	    document.getElementById("engineSizeLabel").className=ERROR_CLASS

	}
	else
	{
	    errorEngineSize.style.display = "none";
	    document.getElementById("engineSizeLabel").className=FIELD_CLASS

    }
	/***********/
	

	if (validateNumeric(age.value)) {
		if (age.value<17) {
			error=1;
			document.getElementById("error1").innerHTML = "You must be at least 17 years to purchase car insurance here";
			ageErr.style.display="block";
			document.getElementById("ageLabel").className=ERROR_CLASS
			
		} else {
			ageErr.style.display="none";
			document.getElementById("ageLabel").className=FIELD_CLASS

			
			if(validateNoClaimAndAge()==false){
				    error = 1;
				    errorNoClaimsAge.style.display = "block";
				    document.getElementById("noClaimsLabel").className=ERROR_CLASS
				}
			else{
				    errorNoClaimsAge.style.display = "none";
				    document.getElementById("noClaimsLabel").className=FIELD_CLASS
			    }
		}
	} else {
		error=1;
		document.getElementById("error1").innerHTML = "Please enter a valid age"; 
		ageErr.style.display="block";
		document.getElementById("ageLabel").className=ERROR_CLASS
	}
	

	var carvalue=document.getElementById("carValue");
	var carvalueErr=document.getElementById("error2");

	if (validatePositiveNumeric(stripCommas(carvalue.value))) {
		carvalueErr.style.display="none";
		document.getElementById("carValueLabel").className=FIELD_CLASS

	} else {
		error=1;
		carvalueErr.style.display="block";
		document.getElementById("carValueLabel").className=ERROR_CLASS

	}

	var accept=document.getElementById("accept");
	var acceptErr=document.getElementById("error3");

	if (!accept.checked) {
		error=1;
		acceptErr.style.display="block";
		accept.parentNode.className=ERROR_CLASS;

		
	} else {
		acceptErr.style.display="none";

	}
	
	if (error==1) {
		return false;
	} else {
		return true;
	}
}

function stripCommas(num)
{	
	var re = /,/g;
    return num.replace(re,"");
}

function onInstantSubmit() {
    if(validateInstant()) {
        document.qqForm.submit();
    } else {
        return false;
    }
}

function removeErrorStyle() {
    var genderErr=document.getElementById("errorGender");
    genderErr.style.display="none";
}

function validateQuoteRetrieve(){
   	var error = 0;
     	
    var email = document.getElementById("emailAddress");
    var password = document.getElementById("password");
    var emailErr = document.getElementById("errorEmail");
    var passwordErr = document.getElementById("errorPassword");
    
    if (validateEmail(email.value)==false)
    {
        error = 1;
        emailErr.style.display = "block";
        emailErr.style.background = errorColor;
    }
    else
    {
        emailErr.style.display = "none";
        emailErr.style.background = okColor;
    }
    
    if (validateAlphaNumeric(password.value)==false || password.value == "")
    {
        error = 1;
        passwordErr.style.display = "block";
        passwordErr.style.background = errorColor;
    }
    else
    {
        passwordErr.style.display = "none";
        passwordErr.style.background = okColor;
    }
    
    if (error==1) {
        return false;
    } else {
		document.logForm.submit();	        
	}
}

function validateRetrieve() { /* Homepage quote retrieve */
	var error=0;
	var coupon=document.getElementById("coupon");
	var couponErr=document.getElementById("error4");

	if (validateAlphaNumeric(coupon.value) && coupon.value.length == 6) {
		return true;
	} else {
		couponErr.style.display="block";
		couponErr.style.background = errorColor;
		return false;
	}
}

function validateWebform() {  /* Webform - e.g. 'Ask a Question' */
	var error = 0;
		
	error = checkNotEmptyAndValidEmail("clientemail", error);
	error = checkNotEmptyAndValidAlphaNumeric("firstname", error);
	error = checkNotEmptyAndValidAlphaNumeric("surname", error);
	error = checkValidPolicyIfNotEmpty("policynumber", error);
	error = checkNotEmptyAndValidPhoneNumber("phonenumber", error);
	error = checkNotDefaultSelection("county", error);
	error = checkNotDefaultSelection("branch", error);
	error = checkNotEmptyAndValidTextBoxEntry("question", error);
	error = checkNotDefaultSelection("service", error);

	if (error==1) {
		return false;
	} else {
		return true;
	}
}

function validateClaimWebform() {  
	var error = 0;
		
	error = checkNotEmptyAndValidEmail("clientemail", error);
	error = checkNotEmptyAndValidAlphaNumericSpacesAllowed("policyholdername", error);
	error = checkNotEmptyAndValidPolicy("policynumber", error);
	error = checkNotEmptyAndValidPhoneNumber("phonenumber", error);
	error = checkNotEmptyAndValidDate("date", error);
	error = checkNotDefaultSelection("claimtype", error);
	error = checkNotEmptyAndValidTextBoxEntry("claimDescription", error);

	if (error==1) {
		return false;
	} else {
		return true;
	}
}

function onWebformSubmit(){
	if (validateWebform()){
		//alert(buildInputElementDescription('myform'));
		document.myform.submit();
	}
	else {
		return false;
	}
}

function onClaimWebformSubmit(){
	if (validateClaimWebform()){
		//alert(buildInputElementDescription('myform'));
		document.myform.submit();
	}
	else {
		return false;
	}
}

function buildInputElementDescription(formname){
	var fields=document.getElementById(formname).getElementsByTagName('input');
	var field, alertStr = "";
	
	for(var i=0; i < fields.length; i++){
		field = fields[i];
		if (i>0) {
			alertStr += "\n\n";
		}
		alertStr += "Name: " + field.name + "\nID: " + field.id + "\nValue: "+ field.value;
	}

	fields=document.getElementById(formname).getElementsByTagName('select');

	for(var i=0; i < fields.length; i++){
		field = fields[i];
		alertStr += "\n\nName: " + field.name + "\nID: " + field.id + "\nValue: "+ field.options[field.selectedIndex].value;
	}
	
	fields=document.getElementById(formname).getElementsByTagName('textarea');

	for(var i=0; i < fields.length; i++){
		field = fields[i];
		alertStr += "\n\nName: " + field.name + "\nID: " + field.id + "\nValue: "+ field.value;
	}
	return alertStr;
}

function decideErrorFieldName(fieldName){
	return "error" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
}

function checkNotEmptyAndValidAlphaNumeric(fieldName, errorFlag){
	var field = document.getElementById(fieldName);
	var errField = document.getElementById(decideErrorFieldName(fieldName));
	
	if (field != null){
		if (field.value.trim() == "" || validateAlphaNumeric(field.value.trim())==false){
			errorFlag = 1;
			errField.style.display = "block";
		}
		else {
			errField.style.display = "none";
		}
	}
	
	return errorFlag;
}

function checkNotEmptyAndValidAlphaNumericSpacesAllowed(fieldName, errorFlag){
	var field = document.getElementById(fieldName);
	var errField = document.getElementById(decideErrorFieldName(fieldName));
	
	if (field != null){
		if (checkField(field)==false){
			errorFlag = 1;
			errField.style.display = "block";
		}
		else {
			errField.style.display = "none";
		}
	}
	
	return errorFlag;
}

function checkField(which) 
{
	nm = which.value;
	nm = nm.replace(/^\s+/,""); // strip leading spaces
	if ((/[^a-z\s&'-\.]/gi.test(nm)) || (nm.length == 0)) 
	{
		which.value = "";
		which.focus();
		return false;
	}
	return true;
}

function checkNotEmptyAndValidDate(fieldName, errorFlag){
	var field = document.getElementById(fieldName);
	var errField = document.getElementById(decideErrorFieldName(fieldName));
	
	if (field.value == "" || validateDate(field.value)==false){
		errorFlag = 1;
		errField.style.display = "block";
	}
	else {
		errField.style.display = "none";
	}
	
	return errorFlag;
}

function checkNotEmptyAndValidPhoneNumber(fieldName, errorFlag){
	var field = document.getElementById(fieldName);
	var errField = document.getElementById(decideErrorFieldName(fieldName));

	if (field != null){
		if(field.value == "" || validatePhone (field.value)==false)
		{
			errorFlag = 1;
		    errField.style.display = "block";
		}
		else
		{
		    errField.style.display = "none";
	    }	
	}
	return errorFlag;
}

function checkNotEmptyAndValidTextBoxEntry(fieldName, errorFlag){
	var field = document.getElementById(fieldName);
	
	if (field != null){
		var errField = document.getElementById(decideErrorFieldName(fieldName));
	
		if(field.value == "" )
		{
			errorFlag = 1;
			errField.style.display = "block";		
		}
		else {
			if (hasIllegalChrs(field.value)){
				// Sanitize string to protect against cross-site scripting attacks
				field.value = sanitizeBadCharString(field.value);
			}
			errField.style.display = "none";
		}
	}
	
	return errorFlag;
}

/*
* Author: Noel O Connor
*Description: validates the number of no claims years with the age of the driver to see if the NCD is possible.
*noClaims is the NCD and -1 is being taken from it because the value and plus 1 from what the actually options are.
* i.e. value = 1, options =1year NCD
*/
function validateNoClaimAndAge(){
	
	var noClaims=document.getElementById("noClaims");
	var age=document.getElementById("age");

	if((age.value - (noClaims.value - 1)) < 17)
		return false;
	else
		return true;
}	

function checkNotEmptyAndValidEmail(fieldName, errorFlag){
	var field = document.getElementById(fieldName);
	var errField = document.getElementById(decideErrorFieldName(fieldName));

	if (field != null){
		if (field.value == "" || validateEmail(field.value)==false )
		{
			errorFlag = 1;
			errField.style.display = "block";
		}
		else
		{
			errField.style.display = "none";
		}
	}
	
	return errorFlag;
}

function checkValidPolicyIfNotEmpty(policyFieldName, errorFlag){
	var field = document.getElementById(policyFieldName);
	var errField = document.getElementById(decideErrorFieldName(policyFieldName));
	
	if (field != null){
		if (field.value != ""){
			if (validatePolicy(field.value)==false){
				errorFlag = 1;
				errField.style.display = "block";
			}
			else {
				errField.style.display = "none";
			}
		}
	}
	return errorFlag;
}

function checkNotEmptyAndValidPolicy(policyFieldName, errorFlag){
	var field = document.getElementById(policyFieldName);
	var errField = document.getElementById(decideErrorFieldName(policyFieldName));
	
	if (field.value == "" || validatePolicy(field.value)==false){
		errorFlag = 1;
		errField.style.display = "block";
	}
	else {
		errField.style.display = "none";
	}

	return errorFlag;
}

function checkNotDefaultSelection (selectionFieldName, errorFlag){
	var field = document.getElementById(selectionFieldName);
	var errField = document.getElementById(decideErrorFieldName(selectionFieldName));

	if (field != null){
		if (validateDDL(field)==false){
			errorFlag = 1;
			errField.style.display = "block";
		}
		else {
			errField.style.display = "none";
		}
	}

	return errorFlag;
}

function validateFull_1() { /* Full quote - page 1 */
	var error=0;
	var make=document.getElementById("make");
	var model=document.getElementById("model");
	var modelErr=document.getElementById("error1");

	if (!make.value || !model.value) {
		error=1;
		modelErr.style.display="block";
	} else {
		modelErr.style.display="none";
	}

	var firstname=document.getElementById("firstname");
	var firstnameErr=document.getElementById("error2");

	if (firstname.value=="") {
		error=1;
		firstnameErr.style.display="block";
	} else {
		firstnameErr.style.display="none";
	}

	var surname=document.getElementById("surname");
	var surnameErr=document.getElementById("error3");

	if (surname.value=="") {
		error=1;
		surnameErr.style.display="block";
	} else {
		surnameErr.style.display="none";
	}

	var phonenumber=document.getElementById("phonenumber");
	var phonenumberErr=document.getElementById("error4");

	if (!validatePhone(phonenumber.value)) {
		error=1;
		phonenumberErr.style.display="block";
	} else {
		phonenumberErr.style.display="none";
	}

	var email=document.getElementById("email");
	var emailErr=document.getElementById("error5");

	if (!validateEmail(email.value)) {
		error=1;
		emailErr.style.display="block";
	} else {
		emailErr.style.display="none";
	}

	if (error==1) {
		window.scroll(0,118);
		return false;
	} else {
		return true;
	}
}

/*********************************************************************
Type validation functions
*********************************************************************/
function validateNumeric(val) { /* Numeric */
	if (val=="") {
		return false;
	}

	var validChars="0123456789";
	var Char;

	for (i = 0; i<val.length; i++) {
		Char=val.charAt(i);
		if (validChars.indexOf(Char)==-1) {
			return false;
		}
	}

	return true;
}

function validatePositiveNumeric(val) { /* Numeric */
	if (val=="") {
		return false;
	}

	var validChars="0123456789";
	var Char;
	var nonZero = false;

	for (i = 0; i<val.length; i++) {
		Char=val.charAt(i);
		if (validChars.indexOf(Char)==-1) {
			return false;
		}
		if(Char!="0"){
			nonZero = true;
		}
	}
	if(!nonZero)
		return false;
	return true;
}


function checkCharacterEnteredIsNumber(elementId)
{
    var element = document.getElementById(elementId);
    
    if(isNaN(new Number(element.value)))
    {
        element.value = element.value.substring(0, element.value.length - 1);
    } 
}


//Function RemoveBad taken directly from Microsoft's Knowledge Base article Q25985 
function sanitizeBadCharString(text){ 
    text = text.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"  "); 
    return text; 
} 

// check to see if input is alphanumeric
function hasIllegalChrs(val){
	if (val.match(/[\<\>\\\"\[\]]/)){
		return true;
	}
	else {
		return false;
	} 
}

function validateAlphaNumeric(val) { /* Alphanumeric */
	var numaric=val;

	for(var j=0; j<numaric.length; j++) {
		var alphaa=numaric.charAt(j);
		var hh=alphaa.charCodeAt(0);		
		if((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123) || (hh == 32) || (hh == 39)) {
		} else {
			return false;
		}
	}

	return true;
}

function validateAlphaNumericAllowSpaces(val) { /* Alphanumeric */
	var numaric=val;

	for(var j=0; j<numaric.length; j++) {
		var alphaa=numaric.charAt(j);
		var hh=alphaa.charCodeAt(0);
		if(hh==32 || (hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123)) {
		} else {
			return false;
		}
	}

	return true;
}

function validatePhone(val) { /* Phone Number */
	if (val=="") {
		return false;
	}

	var validChars="+() 0123456789";
	var Char;

	for (i = 0; i<val.length; i++) {
		Char=val.charAt(i);
		if (validChars.indexOf(Char)==-1) {
			return false;
		}
	}

	return true;
}

function validateEmail(val) { /* Email address */
	var emailRegExp = /^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/; 
	var regex=new RegExp(emailRegExp);

	if (!regex.test(val)) {
		return false;
	}

	return true;
}

/*
 * Validates that value other than the default '----------- Please select ----------' or 'empty' has been selected.
  */
function validateSelectOption(val) { /* Value other than default '---------Please Select---------' */
	if (val=="" || "----------- Please select ----------"==val || "empty"==val) {
		return false;
	}
	else {
		return true;
	}
}

function autoWebformValidationInit()
{
	var email=document.getElementById("clientemail");
	email.errorMessage = document.getElementById("errorClientemail");
	email.onchange = autoValidateEmail;
	
	var firstname=document.getElementById("firstname");
	firstname.errorMessage = document.getElementById("errorFirstname");
	firstname.onchange = autoValidateText;
	
	var surname=document.getElementById("surname");
	surname.errorMessage = document.getElementById("errorSurname");
	surname.onchange = autoValidateText;
	
	var policynumber=document.getElementById("policynumber");
	if (policynumber !=null){
		policynumber.errorMessage = document.getElementById("errorPolicynumber");
		policynumber.onchange = autoValidateTextAllowSpaces;
	}
	
	var phonenumber=document.getElementById("phonenumber");
	phonenumber.errorMessage = document.getElementById("errorPhonenumber");
	phonenumber.onchange = autoValidatePhone;
	
	var county=document.getElementById("county");
	if (county !=null){
		county.errorMessage = document.getElementById("errorCounty");
		county.onchange = function(evt){refreshBranchOptions(county);autoValidateDropDownSelection(evt);}
	
		var branch=document.getElementById("branch");
		branch.errorMessage = document.getElementById("errorBranch");
		branch.onchange = function(evt){holdBranchSelection(branch.selectedIndex);autoValidateDropDownSelection(evt);}
		
		if (county.value != "empty" && branch.value == "empty"){
			refreshBranchOptions(county);
		}
	}
	
	var question=document.getElementById("question");
	if (question !=null){
		question.errorMessage = document.getElementById("errorQuestion");
		question.onchange = autoValidateTextBoxEntry;
	}

	var service=document.getElementById("service");
	if (service !=null){
		service.errorMessage = document.getElementById("errorService");
		service.onchange = function(evt){refreshSubject(service);autoValidateDropDownSelection(evt);}
	}
}

function autoClaimWebformValidationInit()
{
	var email=document.getElementById("clientemail");
	email.errorMessage = document.getElementById("errorClientemail");
	email.onchange = autoValidateEmail;
	
	var policyholdername=document.getElementById("policyholdername");
	policyholdername.errorMessage = document.getElementById("errorPolicyholdername");
	policyholdername.onchange = autoValidateTextAllowSpaces;
	
	var policynumber=document.getElementById("policynumber");
	policynumber.errorMessage = document.getElementById("errorPolicynumber");
	policynumber.onchange = autoValidateTextAllowSpaces;
	
	var phonenumber=document.getElementById("phonenumber");
	phonenumber.errorMessage = document.getElementById("errorPhonenumber");
	phonenumber.onchange = autoValidatePhone;
	
	var date=document.getElementById("date");
	date.errorMessage = document.getElementById("errorDate");
	date.onchange = autoValidateDate;
	
	var claimtype=document.getElementById("claimtype");
	claimtype.errorMessage = document.getElementById("errorClaimtype");
	claimtype.onchange = function(evt){refreshSubject(claimtype);autoValidateDropDownSelection(evt);}
	
	var claimDescription=document.getElementById("claimDescription");
	claimDescription.errorMessage = document.getElementById("errorClaimDescription");
	claimDescription.onchange = autoValidateTextBoxEntry;
}	


/* Arekibo Validation functions */
function validateDDL(ddl)
{
    return (ddl != null && ddl.selectedIndex > 0);
}

function autoValidationInit()
{
    var age=document.getElementById("age");
	var ageErr=document.getElementById("error1");
	var ddlNoClaims = (document.all!=null?document.all["noClaims"]:document.getElementById("noClaims"));
	var ddlLicenseType = (document.all!=null?document.all["licence"]:document.getElementById("licence"));
	var ddlLocation = (document.all!=null?document.all["location"]:document.getElementById("location"));
	var ddlEngineSize = (document.all!=null?document.all["engineSize"]:document.getElementById("engineSize"));	
	var errorNoClaims = (document.all!=null?document.all["errorNoClaims"]:document.getElementById("errorNoClaims"));
	var errorNoClaimsAge = (document.all!=null?document.all["errorNoClaimsAge"]:document.getElementById("errorNoClaimsAge"));
	var errorLicenseType = (document.all!=null?document.all["errorLicenseType"]:document.getElementById("errorLicenseType"));
	var errorLocation = (document.all!=null?document.all["errorLocation"]:document.getElementById("errorLocation"));
	var errorEngineSize = (document.all!=null?document.all["errorEngineSize"]:document.getElementById("errorEngineSize"));	
	var carvalue=document.getElementById("carValue");
	var carvalueErr=document.getElementById("error2");
	var accept=document.getElementById("accept");
	var acceptErr=document.getElementById("error3");
	
	age.errorMessage = ageErr;
	age.isNumericValidation = true;
	ddlNoClaims.errorMessage = errorNoClaims;
	ddlEngineSize.errorMessage = errorEngineSize;
	ddlLicenseType.errorMessage = errorLicenseType;
	ddlLocation.errorMessage = errorLocation;
	carvalue.errorMessage = carvalueErr;
	carvalue.isNumericValidation = true;
	accept.errorMessage = acceptErr;
	ddlNoClaims.errorMessageAge = errorNoClaimsAge;
	
	ddlNoClaims.onchange = autoValidateNoClaims;
	ddlEngineSize.onchange = autoValidateDDL;
	ddlLicenseType.onchange = autoValidateDDL;
	ddlLocation.onchange = autoValidateDDL;
	accept.onclick = autoValidateCBX;
	
	//Removed due to issue 2508
	//age.onblur = autoValidateAge;
	//carvalue.onblur = autoValidateText;	
}

function autoValidateAge(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = false;
    
    
    if (input.value == ''|| !validateNumeric(input.value)) {
			error=true;
			document.getElementById("error1").innerHTML = "Please enter a valid age";
	}
    else if (input.value<17) {
			error=true;
			document.getElementById("error1").innerHTML = "You must be at least 17 years to purchase car insurance here";
	} 
	else {	
			error=false;
	}
    
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
    input.parentNode.className=(error?ERROR_CLASS:FIELD_CLASS);
}


function autoValidateDropDownSelection(ev){
    if (! ev)
		ev = event;
  
    var input = ev.target || ev.srcElement;
    var error = !validateSelectOption(input.value);
	
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);	
}

function autoValidateText(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = false;
    
    if(input.isNumericValidation)
    {
        error = !validateNumeric(input.value);
    }
    else
    {
        error = !validateAlphaNumeric(input.value);
    }
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
    input.parentNode.className=(error?ERROR_CLASS:FIELD_CLASS);
}

function clearNoClaimsAgeError(input){
	input.errorMessageClaimsAge.style.display = (error?"block":"none");
}

function autoValidateTextAllowSpaces(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = false;
    
    if(input.isNumericValidation)
    {
        error = !validateNumericAllowSpaces(input.value);
    }
    else
    {
        error = !validateAlphaNumericAllowSpaces(input.value);
    }
    
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
}

function autoValidatePhone(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = !validatePhone(input.value);
        
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
}

function autoValidateEmail(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = !validateEmail(input.value);
        
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
}

function autoValidateDate(ev)
{

    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
	
    var error = !validateDate(input.value);
         
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
}

function autoValidateTextBoxEntry(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = (input.value == "");
	
	if (!error && hasIllegalChrs(input.value)){
		// Sanitize string to protect against cross-site scripting attacks
		input.value = sanitizeBadCharString(input.value);
	}
	 
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
}

function autoValidateDDL(ev)
{
    var select;
    if(document.all)
        select = event.srcElement;
    else
        select = ev.target;
    
    var error = !validateDDL(select);
    
    select.errorMessage.style.display = (error?"block":"none");
}

function autoValidateNoClaims(ev)
{
    var select;
	var errorAge = false;
	
    if(document.all)
        select = event.srcElement;
    else
        select = ev.target;
    
    var error = !validateDDL(select);
	
    if(!error)
	{
		errorAge = !validateNoClaimAndAge();
    }
	
	
	select.errorMessage.style.display = (error?"block":"none");
   	select.parentNode.className=(error?ERROR_CLASS:FIELD_CLASS);
	select.errorMessageAge.style.display = (errorAge?"block":"none");
	select.parentNode.className=(errorAge?ERROR_CLASS:FIELD_CLASS);
	
		
}

function autoValidateCBX(ev)
{
    var input;
    if(document.all)
        input = event.srcElement;
    else
        input = ev.target;
    
    var error = !input.checked;
    
    input.errorMessage.style.display = (error?"block":"none");
    input.parentNode.style.backgroundColor = (error?errorColor:okColor);
    input.parentNode.className=(error?ERROR_CLASS:FIELD_CLASS);
    
}

function validateAlpha(val) { /* Alpha */

    if(val.trim().length==0)

        return false;

      var regexp = /^( )*([a-zA-Z ]+)( )*$/;    

    var regex=new RegExp(regexp);

      return regex.test(val);

}


function validateDate(date)
{
    var regexp = /^(((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))$/;
    var regex = new RegExp(regexp);
    return regex.test(date);    
}

function validatePolicy(policy)
{
    // var regexp = /^( )*((RA|ra)\d{8})( )*$/;
    // var regex = new RegExp(regexp);
    // return regex.test(policy);
	return validateAlphaNumericAllowSpaces(policy);
}


function validateAlphaQueryOLD(text)

{

    if(text.trim().length==0)

        return false;



    var regexp = /^([0-9a-zA-Z' ']{5,}s)+$/;
	 
	//[ a-zA-Z0-9,.?' ']

    var regex = new RegExp(regexp);

    return regex.test(text);    

}

function validateAlphaQuery(text){
	var field = text;
	
	 if(text.trim().length==0)
        return false;

		if (hasIllegalChrs(field)){
			return false;
		}
			
		return true
	}
	

String.prototype.trim = function() {

    a = this.replace(/^\s+/, '');

    return a.replace(/\s+$/, '');

};


function assumptionFadeIn(value) {

		var nodes = document.getElementById('maincontainer').getElementsByTagName('select');
		
		for(var i=0;i<nodes.length;i++) 
		 {
			var node = nodes[i];
			node.style.visibility = ("hidden");
		 }
		
		fadeIn(value);
	}

function assumptionFadeOut(value) {

		var nodes = document.getElementById('maincontainer').getElementsByTagName('select');
		
		for(var i=0;i<nodes.length;i++) 
		 {
			var node = nodes[i];
			node.style.visibility = ("");
		 }
		
		fadeOut(value);
	}
	
// This function removes non-numeric characters 
function stripNonNumeric(str) {
	str += "";
	var validChars = "0123456789";
	var out = "";
	var char = "";
	var i = 0;
	
	for (i = 0; i < str.length; i++) {
		char = str.charAt(i);
		if (!(validChars.indexOf(char) == -1)) {
			out += str.charAt(i);
		}
	}
	if (out == "") {
		return "";
	} else {
		return out;
	}
}


