var digits = "0123456789";

var phoneNumberDelimiters = "()- ";

var validWorldPhoneChars = phoneNumberDelimiters + "+";

var minDigitsInIPhoneNumber = 11;



//get the element

function _gel(a)

{

	return document.getElementById(a)

}



function addDisplay()

{

	_gel("PanelAddLine").className="addbox_start";

	_gel("PanelAdd").className="addbox_after";

	return false;

}



//check if the address panel is displayed

function fillInAdd()

{



	if(_gel("PanelAdd").className=="addbox_start")

	{

		//alert("Please fill in the address by address finder or manually.");

		//return false;

		_gel("PanelAddLine").className="addbox_start";

		_gel("PanelAdd").className="addbox_after";

	}

	//else

		//return true;

}



function Trim(StrValue)

{

  var st = StrValue;

  while ((st.length > 0) && (st.charAt(0) == " ")) 

	st = st.substring(1, st.length);

  while ((st.length > 0) && (st.charAt(st.length-1) == " "))    

    st = st.substring(0, st.length-1);  

  return st;

}



function blnCheckEmail(pstrEmail)

{

	var k, intFirstAtSignPos, intFirstDotPos, strLastDomainInAddress

	var strValidChar = new String("abcdefghijklmnopqrstuvwxyz1234567890-_.@");

	pstrEmail = Trim(pstrEmail);

	for (k = 0; k <= pstrEmail.length; k++)

		if (strValidChar.indexOf((pstrEmail.substr(k, 1)).toLowerCase()) == -1) return false;

	if (pstrEmail.indexOf("..") >= 0) return false;		

	intFirstAtSignPos = pstrEmail.indexOf("@")

	if(intFirstAtSignPos < 1) return false;

	if (pstrEmail.indexOf("@", (intFirstAtSignPos+1)) >= 0) return false;

	intFirstDotPos = pstrEmail.indexOf(".")

	if(intFirstDotPos < 0) return false;

	if (pstrEmail.indexOf("_", intFirstAtSignPos) != -1) return false;

	strLastDomainInAddress = pstrEmail.substr((pstrEmail.lastIndexOf(".") + 1))

	if (strLastDomainInAddress.length < 2 || strLastDomainInAddress.length > 4) return false;

	return true;

}





function hide(obj, id) {

		var div_ref = document.getElementById(id);

		div_ref.style.display = "none";

}



function show(obj, id) {

		var div_ref = document.getElementById(id);

		div_ref.style.display= "";

} 









//add 2nd person details

function update_leadNat() {

	var f = document.getElementById("Form1");

	if (f) {                

		if(f["CheckBox2P"].checked)

			//_gel("Panel2P").className="addbox_after";

			show(f, 'Panel2P');

		else

			//_gel("Panel2P").className="addbox_start";

			hide(f, 'Panel2P');

	}

}

		

function checkStep2()

{

	var form = document.forms[0]; // for button tag

	

	if ( form.Life_Cover_Amount.value == "" )

	{

		alert("Please enter a valid amount of life cover");	

		form.Life_Cover_Amount.focus();

		return false;

	}

	else if ( form.Life_Cover_Term_Standard.value == "" )

	{

		alert("Please select the term length you require");

		form.Life_Cover_Term_Standard.focus();

		return false;

	}

	else return true;

}	



function checkStep3a()

{

	var form = document.forms[0]; // for button tag

	

	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;

	var check=/@[\w\-]+\./;

	var checkend=/\.[a-zA-Z]{2,3}$/;



	DOB_Day_First = form.DOB_Day_First.value;

	DOB_Month_First = form.DOB_Month_First.value;

	DOB_Year_First = form.DOB_Year_First.value;

	DOB_Day_Second = form.DOB_Day_Second.value;

	DOB_Month_Second = form.DOB_Month_Second.value;

	DOB_Year_Second = form.DOB_Year_Second.value;

	var age = 0;

	

	if (form.DOB_Year_First.value != "" && form.DOB_Month_First.value != "" && form.DOB_Day_First.value != "")

	{

		age = GetAge(form.DOB_Year_First.value, form.DOB_Month_First.value, form.DOB_Day_First.value, "years", 0, "rounddown");

	}



	if ( form.Title.value == "Select" )

	{

		alert("Please enter your title");

		form.Title.focus();

		return false;

	}

	else if ( form.FullName_First.value == "" )

	{

		alert("Please enter your full name");

		form.FullName_First.focus();

		return false;

	}

	else if ( form.DOB_Day_First.value == "" || form.DOB_Day_First.value.length < 1 || form.DOB_Day_First.value > 31 || form.DOB_Day_First.value < 1 || (form.DOB_Day_First.value == 31 && (form.DOB_Month_First.value==2 || form.DOB_Month_First.value==4 || form.DOB_Month_First.value==6 || form.DOB_Month_First.value==9 || form.DOB_Month_First.value==11)))

	{

		alert("Please complete your date of birth correctly to proceed");

		form.DOB_Day_First.focus();

		return false;

	}

	else if ( form.DOB_Month_First.value == "" || DOB_Month_First.length <= 1 || form.DOB_Month_First.value > 12 )

	{

		alert("Please enter a correctly formatted month (mm)");

		form.DOB_Month_First.focus();

		return false;

	}

	else if ( form.DOB_Year_First.value == "" || DOB_Year_First.length <= 3 || form.DOB_Year_First.value > 2000 || form.DOB_Year_First.value < 1900 )

	{

		alert("Please enter a correctly formatted year (yyyy)");

		form.DOB_Year_First.focus();

		return false;

	}

	else if (age != 0 && form.Life_Cover_Term_Standard.value*1 >= 10 && (form.Life_Cover_Term_Standard.value*1 + age*1 > 70))

	{

		alert("Maximum term available would be to your 70th birthday");

		form.DOB_Year_First.focus();

		return false;

	}

	else if (age != 0 && form.Life_Cover_Term_Standard.value*1 < 10 && (form.Life_Cover_Term_Standard.value*1 + age*1 > 76))

	{

		alert("Maximum term available would be to your 75th birthday");

		form.DOB_Year_First.focus();

		return false;

	}

	else if ( form.WorkPhone.value == "" )

	{

		alert("Please enter a valid daytime telephone number");

		form.WorkPhone.focus();

		return false;	

	}

	else if (((form.WorkPhone.value!=null)&&(form.WorkPhone.value!=""))&&checkInternationalPhone(form.WorkPhone.value)==false)

	{

		alert("Please enter a valid daytime telephone number - must be 11 digits")

		form.WorkPhone.value="";

		form.WorkPhone.focus();

		return false;

	}

	else if (!CheckTelNo(form.WorkPhone.value))

	{

		alert("Please enter your daytime telephone number correctly");

		form.WorkPhone.focus();

		return false;

	}

	else if ( form.HomePhone.value == "" )

	{

		alert("Please enter a valid mobile number");

		form.HomePhone.focus();

		return false;	

	}

	else if (((form.HomePhone.value!=null)&&(form.HomePhone.value!=""))&&checkInternationalPhone(form.HomePhone.value)==false)

	{

		alert("Please enter a valid mobile number - must be 11 digits")

		form.HomePhone.value="";

		form.HomePhone.focus();

		return false;

	}

	else if (!CheckTelNo(form.HomePhone.value))

	{

		alert("Please enter your mobile number correctly");

		form.HomePhone.focus();

		return false;

	}

//	else if (((form.Email.value.search(exclude) != -1)

//		||(form.Email.value.search(check)) == -1)

//		||(form.Email.value.search(checkend) == -1))

//	{

//		alert("Please enter a valid email address");

//		form.Email.focus(); 

//		return false;

//	}

	else if ( form.Email.value == "" )

	{

		alert("Please enter your email address");

		form.Email.focus();

		return false;

	} 

	else if (!blnCheckEmail(form.Email.value))

	{

		alert("Please enter a valid email address");

		form.Email.focus(); 

		return false;

	}

	else return true;

}

	

//validate form

//function checkFields(form) //for form tag

function checkFields() // for button tag

{

	var form = document.forms[0]; // for button tag

	

	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;

	var check=/@[\w\-]+\./;

	var checkend=/\.[a-zA-Z]{2,3}$/;



	DOB_Day_First = form.DOB_Day_First.value

	DOB_Month_First = form.DOB_Month_First.value

	DOB_Year_First = form.DOB_Year_First.value

	DOB_Day_Second = form.DOB_Day_Second.value

	DOB_Month_Second = form.DOB_Month_Second.value

	DOB_Year_Second = form.DOB_Year_Second.value

	var age = 0;

	

	if (form.DOB_Year_First.value != "" && form.DOB_Month_First.value != "" && form.DOB_Day_First.value != "")

	{

		age = GetAge(form.DOB_Year_First.value, form.DOB_Month_First.value, form.DOB_Day_First.value, "years", 0, "rounddown");

	}

	

	if ( form.Life_Cover_Amount.value == "" )

	{

		alert("Please enter a valid amount of life cover");	

		form.Life_Cover_Amount.focus();

		return false;

	}

	else if ( form.Life_Cover_Term_Standard.value == "" )

	{

		alert("Please select the term length you require");

		form.Life_Cover_Term_Standard.focus();

		return false;

	}


	else if ( form.Title.value == "Select" )

	{

		alert("Please enter your title");

		form.Title.focus();

		return false;

	}

	else if ( form.FullName_First.value == "" )

	{

		alert("Please enter your full name");

		form.FullName_First.focus();

		return false;

	}

	else if ( form.DOB_Day_First.value == "" || form.DOB_Day_First.value.length < 1 || form.DOB_Day_First.value > 31 || form.DOB_Day_First.value < 1 || (form.DOB_Day_First.value == 31 && (form.DOB_Month_First.value==2 || form.DOB_Month_First.value==4 || form.DOB_Month_First.value==6 || form.DOB_Month_First.value==9 || form.DOB_Month_First.value==11)))

	{

		alert("Please complete your date of birth correctly to proceed");

		form.DOB_Day_First.focus();

		return false;

	}

	else if ( form.DOB_Month_First.value == "" || DOB_Month_First.length <= 1 || form.DOB_Month_First.value > 12 )

	{

		alert("Please enter a correctly formatted month (mm)");

		form.DOB_Month_First.focus();

		return false;

	}

	else if ( form.DOB_Year_First.value == "" || DOB_Year_First.length <= 3 || form.DOB_Year_First.value > 2000 || form.DOB_Year_First.value < 1900 )

	{

		alert("Please enter a correctly formatted year (yyyy)");

		form.DOB_Year_First.focus();

		return false;

	}

	else if (age != 0 && form.Life_Cover_Term_Standard.value*1 >= 10 && (form.Life_Cover_Term_Standard.value*1 + age*1 > 70))

	{

		alert("Maximum term available would be to your 70th birthday");

		form.DOB_Year_First.focus();

		return false;

	}

	else if (age != 0 && form.Life_Cover_Term_Standard.value*1 < 10 && (form.Life_Cover_Term_Standard.value*1 + age*1 > 76))

	{

		alert("Maximum term available would be to your 75th birthday");

		form.DOB_Year_First.focus();

		return false;

	}

	else if ( form.WorkPhone.value == "" )

	{

		alert("Please enter a valid daytime telephone number");

		form.WorkPhone.focus();

		return false;	

	}

	else if (((form.WorkPhone.value!=null)&&(form.WorkPhone.value!=""))&&checkInternationalPhone(form.WorkPhone.value)==false)

	{

		alert("Please enter a valid daytime telephone number - must be 11 digits")

		form.WorkPhone.value="";

		form.WorkPhone.focus();

		return false;

	}

	else if (!CheckTelNo(form.WorkPhone.value))

	{

		alert("Please enter your daytime telephone number correctly");

		form.WorkPhone.focus();

		return false;

	}

	else if ( form.HomePhone.value == "" )

	{

		alert("Please enter a valid mobile number");

		form.HomePhone.focus();

		return false;	

	}

	else if (((form.HomePhone.value!=null)&&(form.HomePhone.value!=""))&&checkInternationalPhone(form.HomePhone.value)==false)

	{

		alert("Please enter a valid mobile number - must be 11 digits")

		form.HomePhone.value="";

		form.HomePhone.focus();

		return false;

	}

	else if (!CheckTelNo(form.HomePhone.value))

	{

		alert("Please enter your mobile number correctly");

		form.HomePhone.focus();

		return false;

	}

//	else if (((form.Email.value.search(exclude) != -1)

//		||(form.Email.value.search(check)) == -1)

//		||(form.Email.value.search(checkend) == -1))

//	{

//		alert("Please enter a valid email address");

//		form.Email.focus(); 

//		return false;

//	}

	else if ( form.Email.value == "" )

	{

		alert("Please enter your email address");

		form.Email.focus();

		return false;

	} 

	else if (!blnCheckEmail(form.Email.value))

	{

		alert("Please enter a valid email address");

		form.Email.focus(); 

		return false;

	}

	else if ( form.Smoker_First.value == "Select" )

	{

		alert("Please select whether you have smoked or not");

		form.Smoker_First.focus();

		return false;

	}

	/*

	else if ( form.Address1.value == "" )

	{

		alert("Please click your street address");

		//form.Address1.focus();

		fillInAdd();

		return false;

	}

	

	else if ( form.Town.value == "" )

	{

		alert("Please click your town");

		form.Town.focus();

		return false;

	}

	*/

	else if ( form.houseNum.value == "" )

	{

		alert("Please enter your house number / name");

		form.houseNum.focus();

		return false;

	}
	
		else if ( form.Postcode.value == "" )

	{

		alert("Please enter your postcode");

		form.Postcode.focus();

		return false;

	}

//	else if ( form.County.value == "" )

//	{

//		alert("Please click your county");

//		form.County.focus();

//		return false;

//	}

	else if (form.CheckBox2P.checked)

	{

		if ( form.Title_Second.value == "Select" )

		{

			alert("Please enter your title");

			form.Title_Second.focus();

			return false;

		}

		else if ( form.FullName_Second.value == "" )

		{

			alert("Please enter your full name");

			form.FullName_Second.focus();

			return false;

		}

		else if ( form.DOB_Day_Second.value == "" || form.DOB_Day_Second.value.length < 1 || form.DOB_Day_Second.value > 31 || form.DOB_Day_Second.value < 1 || (form.DOB_Day_Second.value == 31 && (form.DOB_Month_Second.value==2 || form.DOB_Month_Second.value==4 || form.DOB_Month_Second.value==6 || form.DOB_Month_Second.value==9 || form.DOB_Month_Second.value==11)))

		{

			alert("Please complete your date of birth correctly to proceed");

			form.DOB_Day_Second.focus();

			return false;

		}

		else if ( form.DOB_Month_Second.value == "" || DOB_Month_Second.length <= 1 || form.DOB_Month_Second.value > 12 )

		{

			alert("Please enter a correctly formatted month (mm)");

			form.DOB_Month_Second.focus();

			return false;

		}

		else if ( form.DOB_Year_Second.value == "" || DOB_Year_Second.length <= 3 || form.DOB_Year_Second.value > 2000 || form.DOB_Year_Second.value < 1900 )

		{

			alert("Please enter a correctly formatted year (yyyy)");

			form.DOB_Year_Second.focus();

			return false;

		}

		else if ( form.Smoker_Second.value == "Select" )

		{

			alert("Please select whether you have smoked or not");

			form.Smoker_Second.focus();

			return false;

		}

		else return true;

	}

	else return true;

}



function stringFilter (input)

{

	if (input.value != "")

	{

		s = input.value;

		filteredValues = "1234567890";     // Characters to leave

		var i;

		var returnString = "";

		ignoreRest = false;



		for (i = 0; i < s.length; i++)

		{

			// Search through string and append to unfiltered values to returnString.

			var c = s.charAt(i);

			if (c == ".")

				ignoreRest = true;

			if (filteredValues.indexOf(c) != -1 && !ignoreRest)

				// numeric char, add it to the string

				returnString += c;

			if ((c == "k" || c ==  "K") && !ignoreRest)

				// convert k to 000

				returnString += "000";

		}

		input.value = returnString;

	}

}



//get dob

function calcDate()

{

	var f = document.getElementById("Form1");

	if (f) {                              

		var mm = parseInt(f["DOB_Month_First"].value, 10);

		var dd = parseInt(f["DOB_Day_First"].value, 10);

		var yy = parseInt(f["DOB_Year_First"].value, 10);

		f["fullDate"].value = dd + "/" + mm + "/" + yy;

	}

}



//checks that data are valid 

	function checkNumber(input, min, max, msg) {



		msg = msg + " field has invalid data: " + input.value;



		//this makes sure that the number is a number

		var str = input.value;

		for (var i = 0; i < str.length; i++) {

			var ch = str.substring( i, i + 1)

			if ((ch < "0" || "9" < ch) && ch != '.') {

				alert(msg);

				return false;

			}

		}



		//this makes sure that the number lies between the min and max values allowed

		var num = 0 + str

		if (num < min || max < num) {

			alert(msg + " not in range [" + min + ".." + max + "]");

			return false;

		}

		input.value = str;

		return true;

	}



	function computeField(input) {

		if (input.value != null && input.value.length != 0)

		{

			input.value = "" + eval(input.value);

		}

		computeForm(input.form);



	}

	

function computeForm(form) 

{

	var A=form.A.value;

	var T=form.T.value;

	var R=form.R.value;



	//making sure that an entry has been made in each field.

	if ((A == null || A.length == 0) || (R == null || R.length == 0)) 

	{

		//alert('not all fields filled in');

		return;

	}



	// making sure that entries are valid by using check number

	if (!checkNumber(form.A, 1, 999999, "Amount") ||!checkNumber(form.R, .001, 1000, "Interest Rate") ||!checkNumber(form.T, 6, 300, "Period")) 

	{

		form.Cm.value = "Invalid";

		return;

	}



	// maths et al to be computed

	R = R / 100;

	var rate=R/12;

	var nper=T;

	var pv=A;

	

	var P = (pv*(Math.pow((1+rate),nper)))/((Math.pow((1+rate),nper)-1)/rate)/(1+rate); //old one with 20p diff

	//var P = (pv*R*(Math.pow((1+(R/12)),nper)))/(12*(Math.pow((1+(R/12)),nper)-1));

	form.Cm.value = poundsPence( P );

	P = ((A*0.12)/12) * (1 / (1-(Math.pow((1/1.12),T))));

	form.CCm.value = poundsPence( P );

	P = (A*R)/12;

	form.CI.value = poundsPence( P );

	P = (A*0.12)/12;

	form.CCI.value = poundsPence( P );

}

	

	/*bbc fomula

	function computeForm(form) {

		var A=form.A.value;

		var T=form.T.value;

		var R=form.R.value;



		//making sure that an entry has been made in each field.

		if ((A == null || A.length == 0) ||

			(R == null || R.length == 0)) 

		{

			//alert('not all fields filled in');

			return;

		}



		// making sure that entries are valid by using check number

		if (!checkNumber(form.A, 1, 999999, "Amount") ||

			!checkNumber(form.R, .001, 1000, "Interest Rate") ||

			!checkNumber(form.T, 5, 30, "Period")) 

		{

			form.Cm.value = "Invalid";

			return;

		}



		// maths et al to be computed

		R = R / 100;

		var P = ((A*R)/12) * (1/(1-(Math.pow(1/(1+R),T))));

		form.Cm.value = poundsPence( P );

		P = ((A*0.12)/12) * (1 / (1-(Math.pow((1/1.12),T))));

		form.CCm.value = poundsPence( P );

		P = (A*R)/12;

		form.CI.value = poundsPence( P );

		P = (A*0.12)/12;

		form.CCI.value = poundsPence( P );

	}

	*/



	function poundsPence( N ) {

		// don't try this with ie3 because it's rubbish

		if ((navigator.appName.indexOf('Microsoft')>-1)

			&& (navigator.appVersion.indexOf('3.0')>-1) )

		{

			return N;

		}

		S = new String( N );

		var i = S.indexOf('.');

		if (i != -1) {

			S = S.substr( 0, i+3 );

			if (S.length-i < 3)

				S = S + '0';

		}

		return S;

	}



//clears form

function clearForm(form) {

		form.A.value = "";

		form.T.value = "";

		form.R.value = "";

}

	

//DOB entry Supporting JS functions

function fieldFocus(objTxtFormField) 

{

	objTxtFormField.value='';

}

		

function onlyNumeric()

{

	if ((event.keyCode < 48) || (event.keyCode > 57)) event.returnValue = false;		

}		



function monthOnKeyUp(objTxtSortCode, intPart) 

{

	var intValue = objTxtSortCode.value;

	if (intValue&&intValue.length==2) {

		_gel(intPart).focus();

		if(intPart=="DOB_Year_First" || intPart=="DOB_Year_Second")

			_gel(intPart).value="19";

	}

}

		

function yearOnKeyUp(objTxtAccNum, intPart) 

{

	var intValue = objTxtAccNum.value;

	if (intValue&&intValue.length==4) {	

		_gel(intPart).focus();

	}

}



function coreRefOnKeyUp(objTxtRefNum, intPart, intRefLen) 

{

	var intValue = objTxtRefNum.value;

	if (intValue) 

	{

		if (intPart==intRefLen) return true;

		else document.frm.txtReferenceNum[intPart].focus();

	}

}	

	

function ddNumOnKeyUp(objTxtDDNum, intPart) 

{

	var intValue = objTxtDDNum.value;

	if (intValue) 

	{

		if (intPart==15) document.frm.txtAccountHolders.focus();

		else document.frm.txtApplicationNum[intPart].focus();

	}

}	



function onlyAlphabetic()

{

	if ((event.keyCode < 48) || (event.keyCode > 57)) event.returnValue = true;

	else event.returnValue = false;

}



function stripCharsInBag(s, bag)

{   var i;

    var returnString = "";

    for (i = 0; i < s.length; i++)

    {   

        var c = s.charAt(i);

        if (bag.indexOf(c) == -1) returnString += c;

    }

    return returnString;

}



function isInteger(s)

{   var i;

    for (i = 0; i < s.length; i++)

    {   

        var c = s.charAt(i);

        if (((c < "0") || (c > "9"))) return false;

    }

    return true;

}



function checkInternationalPhone(strPhone)

{

	s = stripCharsInBag(strPhone,validWorldPhoneChars);

	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);

}



var one_day     = 1000*60*60*24;

var one_month   = 1000*60*60*24*30;

var one_year    = 1000*60*60*24*30*12;

function GetAge(yr, mon, day, countunit, decimals, rounding)

{

    var Age;

    

    today = new Date();

    var pastdate = new Date(yr, mon-1, day);



    finalunit = (countunit=="days")? one_day : (countunit=="months")? one_month : one_year;

    decimals = (decimals<=0)? 1 : decimals*10;



    if (countunit != "years")

    {

        if (rounding == "rounddown")

            Age = Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals;

        else

            Age = Math.ceil((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals;

    }

    else

    {

        yearspast=today.getFullYear()-yr-1

        tail=(today.getMonth()>mon-1 || today.getMonth()==mon-1 && today.getDate()>=day)? 1 : 0

        pastdate.setFullYear(today.getFullYear())

        pastdate2=new Date(today.getFullYear()-1, mon-1, day)

        tail=(tail==1)? tail+Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals : Math.floor((today.getTime()-pastdate2.getTime())/(finalunit)*decimals)/decimals

        Age = yearspast+tail;

    }

    

    return Age;

}



function CheckTelNo(pstrTelNo)

{

	pstrTelNo = Trim(pstrTelNo);

	if (pstrTelNo.length >= 4)

	{

		if (pstrTelNo.substring(0, 4) == "0704")

			return false;

		else

			return true;

	}

	else

	{

		return true;

	}

}

