function checkEmail()
{
	var yourEmail = document.emailForm.yourEmail.value;
	var friendEmail = document.emailForm.friendEmail.value;
	if(yourEmail=="")
	{
		alert("Please enter your Email address");
		return false;
	}
	else if(friendEmail=="")
	{
		alert("Please enter your friend's Email address");
		return false;
	}
	if(verifyEmail(yourEmail)&&verifyEmail(friendEmail))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function verifyEmail(emailStr)
{
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {
		alert("Email address "+emailStr+" seems incorrect (check @ and .'s)");
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	
	for (i=0; i<user.length; i++) {
	if (user.charCodeAt(i)>127) {
		alert("The username in  "+emailStr+" contains invalid characters.");
		return false;
   	}
	}
	for (i=0; i<domain.length; i++) {
	if (domain.charCodeAt(i)>127) {
		alert("Ths domain name in  "+emailStr+" contains invalid characters.");
		return false;
   }
  }

	if (user.match(userPat)==null) {
		alert("The username in  "+emailStr+" doesn't seem to be valid.");
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
		if (IPArray[i]>255) {
		alert("Destination IP in  "+emailStr+" is invalid!");
		return false;
   	}
}
return true;
}

var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
alert("The domain name in  "+emailStr+" does not seem to be valid.");
return false;
   }
}

if (checkTLD && domArr[domArr.length-1].length!=2 &&
domArr[domArr.length-1].search(knownDomsPat)==-1) {
alert( emailStr+"  must end in a well-known domain or two letter " + "country.");
return false;
}

if (len<2) {
alert( emailStr+"  is missing a hostname!");
return false;
}

return true;
}

var arrInput = new Array();
arrInput = ['Forename', 'Surname', 'MaritalStatus', 'DOBDay', 'DOBMonth', 'DOBYear','sex','NCDYears','HouseName','PostCode','DaytimePhone','EveningPhone','EmailAddress','Occupation','Registration','YearManufacture'];


function checkEntry()
{
    resetEntry()
    var arrErrors = new Array();
    var alertString = ''
    var errorFlag = 0

    for (i=0; i < arrInput.length; i++)
	{
        var formName = arrInput[i];
        if (document.quoteForm[formName].value=='')
		{
          errorName = arrInput[i] + '_error';
          arrErrors[arrErrors.length] = errorName;
          errorFlag++
        }
    }
	
    if (errorFlag > 0)
	{
      showErrors(arrErrors);
      alert('Please check entries marked with a cross.');
      return false;
    }

    if (checkDay(document.quoteForm['DOBDay'].value))
	{
      showError('DOBDay');
      alert ('Please ensure you have entered a correctly formatted date of birth.');
      return false;
    }

    if (checkMonth(document.quoteForm['DOBMonth'].value))
	{
      showError('DOBMonth');
      alert ('Please ensure you have entered a correctly formatted date of birth.');
      return false;
    }

    if (checkFullYear(document.quoteForm['DOBYear'].value))
	{
      showError('DOBYear');
      alert ('Please ensure you have entered a correctly formatted date of birth.');
      return false;
    }
	
	if (checkManufactureYear(document.quoteForm['YearManufacture'].value))
	{
		showError('YearManufacture');
		alert ('Please ensure you have entered a correctly formatted year of manufacture');
		return false;
	}

    var CheckDate=document.quoteForm['DOBDay'].value + '/' + document.quoteForm['DOBMonth'].value + '/' + document.quoteForm['DOBYear'].value;
    if(!ValidDate(CheckDate))
    {
      showError('DOBDay');
      alert('The date of birth you have entered is not a valid date.');
      return false;
    }

    if (checkPostcodeError(document.quoteForm['PostCode'].value))
	{
      showError('PostCode');
      alert('Please ensure you have entered a correctly formatted postcode.');
      return false;
    }
    if (checkMail(document.quoteForm['EmailAddress'].value))
	{
      showError('EmailAddress');
      alert ('Please ensure you have entered a correctly formatted e-mail address.');
      return false;
    }

    if (checkNumberError(document.quoteForm['DaytimePhone'].value))
	{
      showError('DaytimePhone');
      alert('Please ensure you have entered a correctly formatted telephone number.');
      return false;
    }

    if (checkNumberError(document.quoteForm['EveningPhone'].value))
	{
      showError('EveningPhone');
      alert('Please ensure you have entered a correctly formatted telephone number.');
      return false;
    }
	return true;
}

function resetEntry()
{
	showLinks();
	for (i=0; i < arrInput.length; i++)
	{
    	var errorNameToReset = arrInput[i] + '_error';
        if (document.getElementById)
		{
          document.getElementById(errorNameToReset).style.visibility = 'hidden';
        }
	}
}

function showErrors(myErrorArray)
{
	for (t=0;t<myErrorArray.length; t++)
	{
    	myErrorName = myErrorArray[t];
        //alert("Showing this error: " + myErrorName);
      	if (document.getElementById)
		{
       		document.getElementById(myErrorName).style.visibility = 'visible';
      	}
    }
}

function checkDay(oStringToCheck)
{
	var myNumber = Number(oStringToCheck)
    if (isNaN(myNumber) || myNumber < 0 || myNumber > 31)
		return true;
}

function showError(errorName)
{
	myErrorName = errorName + '_error';
    if (document.getElementById)
	{
    	document.getElementById(myErrorName).style.visibility = 'visible';
    }
}

function checkMonth(oStringToCheck)
{
	var myNumber = Number(oStringToCheck)
    if (isNaN(myNumber) || myNumber < 0 || myNumber > 12) 
		return true;
}

function checkFullYear(oStringToCheck)
{
	var myNumber = Number(oStringToCheck)
    if (isNaN(myNumber) || myNumber < 1900 || myNumber > 2010) 
		return true;
}

function checkManufactureYear(oStringToCheck)
{
	var myNumber = Number(oStringToCheck)
	if (isNaN(myNumber) || myNumber < 1905 || myNumber > 2005)
		return true;
}

function ValidDate(inputDate)
{
	//Assumes dd/mm/ccyy as format
	rx=new RegExp('^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$');
	if(rx.exec(inputDate)==null){
		return false;
	}
	var substrings=inputDate.split('/');
	var strDay = substrings[0]
	var strMonth = substrings[1]
	var strYear = substrings[2]
	var strDate = strMonth + "/" + strDay + "/" + strYear
	var testDate = new Date(strDate);
	return (testDate.getFullYear()==substrings[2] && (testDate.getMonth()+1)==substrings[1] && testDate.getDate()==substrings[0])
}

function checkPostcodeError(oStringToCheck)
{
    var postcodeError = 0;

    // strip spaces & convert to upper case
    oStringToCheck = oStringToCheck.replace(/ /g, ""); 
    oStringToCheck = oStringToCheck.toUpperCase();

    size = oStringToCheck.length;

    // incode is the last 3 chars
    var incode  = oStringToCheck.substr(size-3, 3);
 
    // outcode is everything except the last 3 chars
    var outcode = oStringToCheck.substr(0, size-3);

    // incode must equal 9AA format
    if (incode.match(/[0-9][A-Z][A-Z]/)) 
	{ 
        //alert("incode success");
    } 
    else 
	{
        //alert("incode failure");
        postcodeError++;
    }

    // incode must equal A9, A99, AA9, AA99, AA9A, A9A or AAA format
    if (outcode.match(/^[A-Z][0-9]$/)           ||
        outcode.match(/^[A-Z][0-9][0-9]$/)      ||
        outcode.match(/^[A-Z][A-Z][0-9]$/)      ||
        outcode.match(/^[A-Z][A-Z][0-9][0-9]$/) ||
        outcode.match(/^[A-Z][A-Z][0-9][A-Z]$/) ||
        outcode.match(/^[A-Z][0-9][A-Z]$/)      ||
        outcode.match(/^[A-Z][A-Z][A-Z]$/) ) 
	{

        //alert("outcode success");
    }  
    else 
	{
        //alert("outcode failure");
        postcodeError++;
    }

    if (postcodeError > 0)
	{
    	return true;
    } 
	else
	{
    	return false;
    }
}

function checkMail(oStringToCheck)
{
    var mailError = 0;
    var charError = 0;
    var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.@";
    //alert('checkIllegalChars')
    for (n = 0; n < oStringToCheck.length; n++)
	{
      //alert("checking: " + checkOK.indexOf(oStringToCheck.charAt(n)) + ", val: " + oStringToCheck.charAt(n));
      if (checkOK.indexOf(oStringToCheck.charAt(n)) == -1)
	  {
        charError++;
      }
    }

    if (charError > 0)
	{
      return true;
    } 

    var atSymbol = oStringToCheck.indexOf('@');
    var period = oStringToCheck.lastIndexOf('.')
    if (atSymbol == -1 || period == -1 || period==oStringToCheck.length)
	{
      mailError++;
    }
    if (mailError > 0) 
	{
      return true;
    }
	else 
	{
      return false;
    }
}

function checkNumberError(oStringToCheck)
{
    var charError = 0;
    var checkOK = "0123456789 ";
    for (n = 0; n < oStringToCheck.length; n++)
	{
        if (checkOK.indexOf(oStringToCheck.charAt(n)) == -1 || oStringToCheck.length < 10 || oStringToCheck.length > 12)
		{
          charError++;
        }
    }
    if (charError > 0)
	{
    	return true;
    }
	else
	{
      return false;
    }
}



