function isEmpty(inp){ if (inp==null || inp == "") { return true; } return false; }
function isFilled(inp){ if (inp==null || inp == "") { return false; } return true; }

function verifyForm(){
	// Make sure that the minimum required fields are filled in
	var form=document.getElementById('apply');
	if (isEmpty(form.realname.value)){
		alert("Name Not Filled In");
		return false;
	}
	if (isEmpty(form.email.value) &&
        isEmpty(form.Address.value) &&
        isEmpty(form.tel_num.value) ){
		alert("Please Enter at Least one\nMethod by which we can\nContact you.");
		return false;
	} 
	
	// If we get to here then we have all our data so we can submit the form
	return true;
}

var age1=20;
var age2=20;
var gender1="Male";
var gender2="Male";
var smokes1="Yes";
var smokes2="Yes";
var assurance="Level";
var joint="Single";
var payout=100000;
var term="term1";

function setdata(form,name){
 
  var myindex;

  if (name=="gender1"){
	myindex=form.gender1.selectedIndex;
	gender1 = form.gender1.options[myindex].value;
  }
  if (name=="gender2"){
	myindex=form.gender2.selectedIndex;
	gender2 = form.gender2.options[myindex].value;
  }
  if (name=="termlist"){
	myindex=form.termlist.selectedIndex;
	term = form.termlist.options[myindex].value;
  }
  return 1;
}

function recalc(form){
	setdata(form,'gender1');
	if (joint == "Joint"){
		setdata(form,'gender2');
	}
	setdata(form,'termlist');
	age1=form.agep1.value;
	var prem = premium();
	form.premium.value = prem;

	var quote_area = document.getElementById("quote_amount");
	if (prem < 1)
	{
		quote_area.innerHTML="--.--";
		window.alert('We can not quote on this term for the age(s) given.\nPlease contact us to discuss your individual needs.');
		return;
	}
	quote_area.innerHTML = "£"+prem;
}

function go(){
	recalc(document.getElementById('quote'));
}

function CreateArray(length)
{
   this.size=(length+3);
   for(var i = 1; i <= length+3; i++)
      this[i] = "Unacceptable character\nOnly alpha-numerics, underscores, hyphens and periods are allowed.";
}

function valMail(address)
{
	
   if(address.length == 0) return 0; 
	
   invalidchars = new Array(' ', ',', '[', ']', '/', '=', ';', '`', '+', '!', '#', '$', '%', '^', '&', '*', '(', ')', '~', ':', '"', '\'', '\b', '<', '>', '?', '|', '{', '}');
   var numchars = invalidchars.length;
   error_messages = new CreateArray(numchars);  
   error_messages[0] = "Valid";
   error_messages[1] = "Address must have an @ then a '.'\nand cannot begin with @";
   error_messages[2] = "Address cannot have '.' next to @ or as final character";
   error_messages[3] = "Spaces are invalid";
   error_messages[4] = "Commas are invalid";
   error_messages[5] = "Brackets are invalid";
   error_messages[6] = "Brackets are invalid";
   error_messages[7] = "Slashes are invalid";
   error_messages[8] = "Equals are invalid";
   error_messages[9] = "Semi-Colons are invalid";
   error_messages[10] = "Accents are invalid";

   var atloc=address.indexOf('@');
   var dotloc=address.lastIndexOf('.');
         
   // Tests For one '.' and one '@' in correct order
   // And makes sure first substring isn't null
   if(atloc<1||dotloc==-1||dotloc<atloc)
   {
      alert("\nInvalid E-Mail Address\n" + error_messages[1] + "\nExample: bob@foo.com" );           
      return 1;
   }
                
   // Tests second and third substrings for nullness
   else if(dotloc < atloc+2 || address.length < dotloc+2)
   {
      alert("\nInvalid E-Mail Address\n"+error_messages[2] + "\nExample: bob@foo.com");     
      return 2;
   }             
        
   // Tests for individual syntax errors
   // Only common keystroke errors included!        
   for(var ct=0;ct<numchars;ct++)
   {
      status=invalidchars[ct];
      if(address.indexOf(invalidchars[ct])!=-1)
      {
         alert("\nInvalid E-mail Address\n" + error_messages[ct+3] + "\nExample: bob@foo.com");
         return (ct+3);
      }
   }
   return 0;
}

function checkMail(){
	var address=parent.main.apply.email.value;
	var ret = valMail(address);
	if (ret != 0){
		parent.main.apply.email.value = "";
	}
}

function premdata(term1,term2,term3,term4,term5,term6){
	this.term1=term1;
	this.term2=term2;
	this.term3=term3;
	this.term4=term4;
	this.term5=term5;
	this.term6=term6;
}

male_smk=new Array(7)
male_smk[0]=new premdata(6.81,7.25,7.54,7.85,8.44,8.93,9.97,11.08,12.99);
male_smk[1]=new premdata(7.2,8.01,7.84,8.54,9,9.4,10.9,12.9,-1);
male_smk[2]=new premdata(7.9,9.05,9.46,10.2,11,17.9,15.6,19,-1);
male_smk[3]=new premdata(9.6,11.1,12.4,13.6,16.12,18.69,24.1,29.4,-1);
male_smk[4]=new premdata(13.1,15.5,17.9,20.83,25.2,29.66,39.9,52.4,-1);
male_smk[5]=new premdata(18.1,22,26,29.9,36.7,46.65,57.71,61.7,-1);
male_smk[6]=new premdata(27.32,36.4,42.3,50.2,64.04,78.14,85.5,-1,-1);
male_smk[7]=new premdata(43,59.3,72.44,88.4,105.3,108.2,-1,-1,-1);
male_smk[8]=new premdata(52.9,73.4,91.3,110.3,130.7,-1,-1,-1);

male_nosmk=new Array(7)
male_nosmk[0]=new premdata(5.02,5.23,5.39,5.57,5.76,5.97,6.66,7.3,8.6,10.62);
male_nosmk[1]=new premdata(5.7,5.94,5.9,6.11,6.1,6.2,6.9,7.9,10.83);
male_nosmk[2]=new premdata(6.15,6.36,6.6,6.8,6.9,8.9,9,10.7,-1);
male_nosmk[3]=new premdata(6.7,8.11,7.7,8.3,9.2,10.9,12.9,15.7,-1);
male_nosmk[4]=new premdata(8.1,9.5,10.5,11.8,13.4,15.55,20.4,23.7,-1);
male_nosmk[5]=new premdata(9.2,9.8,10.7,12.4,15.6,17.9,24.6,26.2,-1);
male_nosmk[6]=new premdata(10.2,12.2,13.9,15.9,18.4,21.8,29.2,31.7,-1);
male_nosmk[7]=new premdata(14.57,18.1,21,24.2,31.3,36.5,42.8,-1,-1);
male_nosmk[8]=new premdata(25.5,34.2,41.9,51.3,69,-1,-1,-1,-1);

female_nosmk=new Array(7)
female_nosmk[0]=new premdata(5,5,5,5,5,5.17,5.51,5.71,6.43,8.41);
female_nosmk[1]=new premdata(5,5.1,5.4,5.6,5.7,5.71,6.11,6.2,-1,-1);
female_nosmk[2]=new premdata(5.01,5.35,5.43,5.72,6.08,6.2,7.1,8.3,-1);
female_nosmk[3]=new premdata(5.57,5.89,6.4,6.5,7.4,8.5,10,12.3,-1);
female_nosmk[4]=new premdata(6.5,7.5,8.4,9.4,10.7,12.7,15.6,20,-1);
female_nosmk[5]=new premdata(8.3,10.3,11.6,12.98,15,18.2,22.6,24.2,-1);
female_nosmk[6]=new premdata(12,15.16,17,19.7,24,29.78,32.2,-1,-1);
female_nosmk[7]=new premdata(15.1,18.8,21.9,25.2,33,38.4,45,-1,-1);
female_nosmk[8]=new premdata(22.2,29.5,35.04,43.6,56.3,60.1,-1,-1,-1);

female_smk=new Array(7)
female_smk[0]=new premdata(5,5.15,5.33,5.69,6.21,7.30,7.80,9.58,13.34);
female_smk[1]=new premdata(5.39,5.6,5.81,6,6.7,7.8,8.8,10.3,-1);
female_smk[2]=new premdata(5.95,6.2,6.6,7.6,8.9,10.4,12.5,14.7,-1);
female_smk[3]=new premdata(6.8,7.9,9.1,10.8,13.1,15.5,18.1,23.9,-1);
female_smk[4]=new premdata(9.7,12.2,14.3,17.3,20.9,24.8,32,39,-1);
female_smk[5]=new premdata(14.1,18.1,21.2,25.1,30.18,36.9,46.9,50.4,-1);
female_smk[6]=new premdata(14.8,19,22.2,26.4,31.76,38.8,49.9,53.1,-1);
female_smk[7]=new premdata(23.7,31.1,37.1,44.6,55.5,66.4,72.3,-1,-1);
female_smk[8]=new premdata(38.9,52.3,63.46,78.9,95.4,102.5,-1,-1,-1);

function agerange(age){
	if (age < 20){
		return -1;
	} else if (age >= 20 && age < 25){
		return 0;
	} else if (age >= 25 && age < 30){
		return 1;
	} else if (age >= 30 && age < 35){
		return 2;
	} else if (age >= 35 && age < 40){
		return 3;
	} else if (age >= 40 && age < 45){
		return 4;
	} else if (age >= 45 && age < 50){
		return 5;
	} else if (age >= 50 && age < 55){
		return 6;
	} else if (age >= 55 && age < 65){
		return 7;
	} else if (age >= 65){
		return 8;
	}
}

function getdata(age,gender,smokes){
	var range = agerange(age);
	var prem = 0;
	var prem1 = new premdata;
	var prem2 = new premdata;
	var sex = gender.toLowerCase();
	var ages = new Array(20,25,30,35,40,45,50,55);

	if (range == -1){
		if (smokes == "Yes"){
			prem1 = eval (sex + "_smk[0]." + term);
		} else {
			prem1 = eval (sex + "_nosmk[0]." + term);
		}
		return (prem1/20) * age;
	} else if (range == 0){
		if (smokes == "Yes"){
			prem1 = eval (sex + "_smk[0]." + term);
		} else {
			prem1 = eval (sex + "_nosmk[0]." + term);
		}
		return (prem1/20) * age;
	} else if (range == 7){
		if (smokes == "Yes"){
			prem1 = eval (sex + "_smk[7]." + term);
		} else {
			prem1 = eval (sex + "_nosmk[7]." + term);
		}
		return (prem1/55) * age;
	} else {
		if (smokes == "Yes"){
			prem1 = eval (sex + "_smk[" + range + "]." + term);
			prem2 = eval (sex + "_smk[" + (range+1) + "]." + term);
		} else {
			prem1 = eval (sex + "_nosmk[" + range + "]." + term);
			prem2 = eval (sex + "_nosmk[" + (range+1) + "]." + term);
		}
		return prem1 + (((prem2 - prem1) /5)*(age-ages[range]));
	}
}

function format(expr, decplaces){
	var str="" + Math.round( eval(expr) * Math.pow(10,decplaces))
	while ( str.length <= decplaces){
		str = "0"+str;
	}
	var decpoint=str.length - decplaces;
	return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}
function premium (){
	var prem1;
	var prem2;
	var finalcost=0.0;

	if (joint == "Single"){
		finalcost = getdata(age1,gender1,smokes1);
	} else {
		prem1=getdata(age1,gender1,smokes1);
		prem2=getdata(age2,gender2,smokes2);
		finalcost = prem1 + prem2;
	}
	if (assurance == "Decreasing"){
		finalcost = (finalcost/100) * 90;
	}
	//finalcost = finalcost * 0.85;
	return format(finalcost,2);
}
