
// =================================================================================================
// The following code validates the date fields on the form
// This code was supplied via Experts-Exchange from the following link
// http://www.smartwebby.com/DHTML/date_validation.asp
// =================================================================================================

var dtCh= "/";
var minYear=1900;
var maxYear=2100;
var digits = "0123456789";

// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";

// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";

// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 8;

function changeVal(b) {
	if (b == 0){
		document.Lifeform.DOB.value = ""
   	}
   	else if (b == 1){
   		document.Lifeform.PartnerDOB.value = ""
   	}
}

//function changeVal() {
//   document.Lifeform.PartnerDOB.value = ""
//}

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   }
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : dd/mm/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

// =================================================================================================
// End of the Date Validation code
// =================================================================================================


// =================================================================================================
// The following code validates the date fields on the form
// This code was supplied from the following link
// http://www.smartwebby.com/DHTML/date_validation.asp
// =================================================================================================

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

// =================================================================================================
// End of the Telephone Validation Code
// =================================================================================================


// =================================================================================================
// Specific Validation Tasks
// =================================================================================================

function isFilled(elm) {
    if (elm.value == "" || elm.value == null)
    return false;
    else return true;
}


function isPostCode(elm){
	// TODO: Need to complete this
	return true;
}


// =================================================================================================
// Specific to the validation of an email address.....
// =================================================================================================

function isEmail(elm) {
    if (elm.value.indexOf("@") + "" != "-1" &&
        elm.value.indexOf(".") + "" != "-1" &&
        elm.value != "")
    return true;
    else return false;
}


// =================================================================================================
// Called before the form is submitted to client-side validate the form
// =================================================================================================

function isReady(form)
{

// Personal Information ==========================================================================
// Name

    var myTitle = document.getElementById("Title");
    if (myTitle.value == "") {
    alert("Please enter your Title.");
    return false;
    }

    if (isFilled(form.ForeName) == false) {
    alert("Please enter your forename.");
    form.ForeName.focus();
	form.elements['ForeName'].style.backgroundColor = 'Pink';
    return false;
    }else{
		if(form.ForeName.value.indexOf("<a href=") != -1) {
			alert("Please do not enter links into the form fields");
			return false;
		}
	}
	
    if (isFilled(form.SurName) == false) {
    alert("Please enter your surname.");
    form.SurName.focus();
	form.elements['SurName'].style.backgroundColor = 'Pink';
    return false;
    }else{
		if(form.SurName.value.indexOf("<a href=") != -1) {
			alert("Please do not enter links into the form fields");
			return false;
		}
	}

// Tel - checking tel no

    if (isFilled(form.Phone) == false) {
    alert("Please enter your contact phone number.");
    form.Phone.focus();
	form.elements['Phone'].style.backgroundColor = 'Pink';
    return false;
    }else{
		if(form.Phone.value.indexOf("<a href=") != -1) {
			alert("Please do not enter links into the form fields");
			return false;
		}
	}

    if (checkInternationalPhone(form.Phone.value)==false){
    alert("Please Enter a Valid Phone Number\n Valid characters are as follows:\n0-9\n()\n- +")
    form.Phone.focus()
	form.elements['Phone'].style.backgroundColor = 'Pink';
    return false
    }


// Email - no point checking e-mail if request is for tel

    if (isEmail(form.Email) == false) {
    alert("Sorry but your quotation cannot be sent until you have given us a valid e-mail address to which we can respond. Please provide these details and then resubmit your request. Thank you.");
    form.Email.focus();
	form.elements['Email'].style.backgroundColor = 'Pink';
    return false;
    }

// Postcode

    if (isFilled(form.HouseNumber) == false) {
    alert("Please enter your House Number/ House Name.");
    form.HouseNumber.focus();
	form.elements['HouseNumber'].style.backgroundColor = 'Pink';
    return false;
    }

    if (isFilled(form.Postcode) == false) {
    alert("Please enter your Postcode.");
    form.Postcode.focus();
	form.elements['Postcode'].style.backgroundColor = 'Pink';
    return false;
    }

// Personal Gender

    if((!form.Gender[0].checked) && (!form.Gender[1].checked)){
    alert("Please enter your gender.");
    return false;
    }

// Date

    if (isFilled(form.DOB) == false) {
    alert("Please enter your Date Of Birth.");
    form.DOB.focus();
	form.elements['DOB'].style.backgroundColor = 'Pink';
    return false;
    }

    var dt=form.DOB;
    if (isDate(dt.value)==false){
    dt.focus();
	form.elements['DOB'].style.backgroundColor = 'Pink';
    return false;
    }

// Personal Smoking

    if((!form.Smoker[0].checked) && (!form.Smoker[1].checked)){
    alert("Please enter if you have smoked a tobacco product in the last 12 months.");
    return false;
    }

// Partner Information ===========================================================================
	var PartnerInfo = document.getElementById("pTitle");
	if (PartnerInfo.style.display == ""){
		// Name
		var myTitle = document.getElementById("PartnerTitle");
		if (myTitle.value == "") {
		alert("Please enter your partners title.");
		return false;
		}

    		if (isFilled(form.PartnerForeName) == false) {
    		alert("Please enter your partners forename.");
    		form.PartnerForeName.focus();
			form.elements['PartnerForeName'].style.backgroundColor = 'Pink';
	    	return false;
		}

    		if (isFilled(form.PartnerSurName) == false) {
    		alert("Please enter your partners surname.");
    		form.PartnerSurName.focus();
			form.elements['PartnerSurName'].style.backgroundColor = 'Pink';
    		return false;
    		}

		// Partner Gender

    		if((!form.PartnerGender[0].checked) && (!form.PartnerGender[1].checked)){
    		alert("Please enter your partners gender.");
    		return false;
    		}

		// Date Testing
		var pdt=document.Lifeform.DOB;
    		if (isDate(pdt.value)==false){
    		pdt.focus();
			form.elements['DOB'].style.backgroundColor = 'Pink';
    		return false;
    		}

		// Partner Smoking

    		if((!form.PartnerSmoker[0].checked) && (!form.PartnerSmoker[1].checked)){
    		alert("Please enter if youre partner has smoked any tobacco in the last 12 months.");
    		return false;
    		}
	}



// For the quotes we only need to check against the "Cover Amount" and the Years as the radio
// buttons already have default values.
// Quote One =====================================================================================

    if (isFilled(form.Quote_1_CoverAmount) == false) {
    alert("Please enter your amount of cover for Quote 1.");
    form.Quote_1_CoverAmount.focus();
	form.elements['Quote_1_CoverAmount'].style.backgroundColor = 'Pink';
    return false;
    }

    if (isInteger(form.Quote_1_CoverAmount.value) == false){
    alert("The cover amount for Quote 1 must be numerical.");
    form.Quote_1_CoverAmount.value = "";
    form.Quote_1_CoverAmount.focus();
	form.elements['Quote_1_CoverAmount'].style.backgroundColor = 'Pink';
    return false;
    }


    if (isFilled(form.Quote_1_YearsOfCover) == false) {
    alert("Please enter the number of years you want to be covered for in Quote 1.");
    form.Quote_1_YearsOfCover.focus();
	form.elements['Quote_1_YearsOfCover'].style.backgroundColor = 'Pink';
    return false;
    }

    if (form.Quote_1_YearsOfCover.value > 99){
    alert("The years of cover for Quote 1 must be less than 100.");
    form.Quote_1_YearsOfCover.value = "";
    form.Quote_1_YearsOfCover.focus();
	form.elements['Quote_1_YearsOfCover'].style.backgroundColor = 'Pink';
    return false;
    }

    if (isInteger(form.Quote_1_YearsOfCover.value) == false){
    alert("The years of cover for Quote 1 must be numerical.");
    form.Quote_1_YearsOfCover.value = "";
    form.Quote_1_YearsOfCover.focus();
	form.elements['Quote_1_YearsOfCover'].style.backgroundColor = 'Pink';
    return false;
    }

// Quote Two =====================================================================================

	var statusTwo = document.getElementById("qTwo");
	if (statusTwo.style.display == ""){

	    if (isFilled(form.Quote_2_CoverAmount) == false) {
	    alert("Please enter your amount of cover for Quote 2.");
   	    form.Quote_2_CoverAmount.focus();
		form.elements['Quote_2_CoverAmount'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isInteger(form.Quote_2_CoverAmount.value) == false){
	    alert("The cover amount for Quote 2 must be numerical.");
	    form.Quote_2_CoverAmount.value = "";
	    form.Quote_2_CoverAmount.focus();
		form.elements['Quote_2_CoverAmount'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isFilled(form.Quote_2_YearsOfCover) == false) {
	    alert("Please enter the number of years you want to be covered for in Quote 2.");
	    form.Quote_2_YearsOfCover.focus();
		form.elements['Quote_2_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (form.Quote_2_YearsOfCover.value > 99){
	    alert("The years of cover for Quote 2 must be less than 100.");
	    form.Quote_2_YearsOfCover.value = "";
	    form.Quote_2_YearsOfCover.focus();
		form.elements['Quote_2_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isInteger(form.Quote_2_YearsOfCover.value) == false){
	    alert("The years of cover for Quote 2 must be numerical.");
	    form.Quote_2_YearsOfCover.value = "";
	    form.Quote_2_YearsOfCover.focus();
		form.elements['Quote_2_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }
    }

// Quote Three ===================================================================================

	var statusThree = document.getElementById("qThree");
	if (statusThree.style.display == ""){

	    if (isFilled(form.Quote_3_CoverAmount) == false) {
	    alert("Please enter your amount of cover for Quote 3.");
	    form.Quote_3_CoverAmount.focus();
		form.elements['Quote_3_CoverAmount'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isInteger(form.Quote_3_CoverAmount.value) == false){
	    alert("The cover amount for Quote 3 must be numerical.");
	    form.Quote_3_CoverAmount.value = "";
	    form.Quote_3_CoverAmount.focus();
		form.elements['Quote_3_CoverAmount'].style.backgroundColor = 'Pink';
	    return false;
	    }


	    if (isFilled(form.Quote_3_YearsOfCover) == false) {
	    alert("Please enter the number of years you want to be covered for in Quote 3.");
	    form.Quote_3_YearsOfCover.focus();
		form.elements['Quote_3_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (form.Quote_3_YearsOfCover.value > 99){
	    alert("The years of cover for Quote 3 must be less than 100.");
	    form.Quote_3_YearsOfCover.value = "";
	    form.Quote_3_YearsOfCover.focus();
		form.elements['Quote_3_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isInteger(form.Quote_3_YearsOfCover.value) == false){
	    alert("The years of cover for Quote 3 must be numerical.");
	    form.Quote_3_YearsOfCover.value = "";
	    form.Quote_3_YearsOfCover.focus();
		form.elements['Quote_3_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }
    }

// Quote Four ====================================================================================

	var statusFour = document.getElementById("qFour");
	if (statusFour.style.display == ""){

	    if (isFilled(form.Quote_4_CoverAmount) == false) {
	    alert("Please enter your amount of cover for Quote 4.");
	    form.Quote_4_CoverAmount.focus();
		form.elements['Quote_4_CoverAmount'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isInteger(form.Quote_4_CoverAmount.value) == false){
	    alert("The cover amount for Quote 4 must be numerical.");
	    form.Quote_4_CoverAmount.value = "";
	    form.Quote_4_CoverAmount.focus();
		form.elements['Quote_4_CoverAmount'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isFilled(form.Quote_4_YearsOfCover) == false) {
	    alert("Please enter the number of years you want to be covered for in Quote 4.");
	    form.Quote_4_YearsOfCover.focus();
		form.elements['Quote_4_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (form.Quote_4_YearsOfCover.value > 99){
	    alert("The years of cover for Quote 4 must be less than 100.");
	    form.Quote_4_YearsOfCover.value = "";
	    form.Quote_4_YearsOfCover.focus();
		form.elements['Quote_4_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }

	    if (isInteger(form.Quote_4_YearsOfCover.value) == false){
	    alert("The years of cover for Quote 4 must be numerical.");
	    form.Quote_4_YearsOfCover.value = "";
	    form.Quote_4_YearsOfCover.focus();
		form.elements['Quote_4_YearsOfCover'].style.backgroundColor = 'Pink';
	    return false;
	    }
    }

// How Did You Hear About Us
    var HowDidYouHear = document.getElementById("HowDidYouHear");
    if (HowDidYouHear.value == "") {
    alert("Please select how you heard about us");
    return false;
    }
	
    if (isFilled(form.imgVal) == false) {
    alert("Please enter the Validation code seen on the image.");
    form.imgVal.focus();
	form.elements['imgVal'].style.backgroundColor = 'Pink';
    return false;
    } else {
		if(usefulValue != form.imgVal.value) {
			alert("The code you have entered is not correct.");
			return false;
		}
	}
}



// =================================================================================================
// The following functions are used to Dynamically control the state of the form.
// =================================================================================================



// This is to hide the partner details from the user of the sight
function goSingle(i) {
	for( i = 0; i < document.Lifeform.elements.length; i++)
		if(document.Lifeform.elements[i].type == "radio"){
			if(document.Lifeform.elements[i].checked){
				if (document.Lifeform.elements[i].value == "Joint")
					return true;
			}
		}
	Hide_SingleJoint();
}


function Hide_SingleJoint()
{
	var myElement = document.getElementById("pTitle");
	myElement.style.display = "none";
	var myElement = document.getElementById("pName");
	myElement.style.display = "none";
	var myElement = document.getElementById("pGender");
	myElement.style.display = "none";
	var myElement = document.getElementById("pSmoking");
	myElement.style.display = "none";
}


function goJoint()
{
	var myElement = document.getElementById("pTitle");
	myElement.style.display = "";
	var myElement = document.getElementById("pName");
	myElement.style.display = "";
	var myElement = document.getElementById("pGender");
	myElement.style.display = "";
	var myElement = document.getElementById("pSmoking");
	myElement.style.display = "";
}

function ShowQuote() {
	var myElement = document.getElementById("AddNew");
	var statusTwo = document.getElementById("qTwo");
	var statusThree = document.getElementById("qThree");
	var statusFour = document.getElementById("qFour");

	if (statusTwo.style.display == "none") {
		statusTwo.style.display = "";
		if ((statusThree.style.display == "") && (statusFour.style.display == "")) {
			myElement.style.display = "none"; // hides the layer
		}
		return;
	}

	if (statusThree.style.display == "none") {
		statusThree.style.display = "";
		if ((statusTwo.style.display == "") && (statusFour.style.display == "")) {
			myElement.style.display = "none"; // hides the layer
		}
		return;
	}

	if (statusFour.style.display == "none") {
		statusFour.style.display = "";
		if ((statusTwo.style.display == "") && (statusThree.style.display == "")) {
			myElement.style.display = "none"; // hides the layer
		}
		return;
	}
}

function CloseQuote(i)
{
	if(i == 2) 	{
		var myElement = document.getElementById("qTwo");
		myElement.style.display = "none"; // hides the layer
	}

	if(i == 3) 	{
		var myElement = document.getElementById("qThree");
		myElement.style.display = "none"; // hides the layer
	}
	if(i == 4) 	{
		var myElement = document.getElementById("qFour");
		myElement.style.display = "none"; // hides the layer
		var myShowNew = document.getElementById("AddNew");
		myShowNew.style.display = "none"; // hides the layer
	}
	var myShowNew = document.getElementById("AddNew");
	myShowNew.style.display = ""; // shows the layer
}


function swap(show, hide) {
	var showpanel = document.getElementById(show);
	var hidepanel = document.getElementById(hide);
	showpanel.className = 'hide';
	hidepanel.className = 'show';
}