//********************************************************************************
//********************************************************************************
// Version 01.00 - 28/04/2006
// Version 01.10 - 27/04/2007 - Modified to handle new individual demographics
//
// This file contains some routines specific to this application
//********************************************************************************
//********************************************************************************


//********************************************************************************
//    Author: Steve Betts
//      Date: Jun 2010
//      Desc: Show main form data once user has confirmed that they are the main
//            shopper in the household.
//********************************************************************************
function onclick_eConfirm()
{
  document.getElementById('eSignupDIV').style.display = 'inline';
  document.getElementById('eSignupDIV').style.visibility = 'visible';
  document.getElementById('eConfirm').disabled=true;
};


//********************************************************************************
//    Author: Steve Betts
//      Date: Jun 2010
//      Desc: When number of people in the household changes, show or hide the 
//            various form elements that are dependent on the number of people.
//********************************************************************************
function onchange_ePeople(p_nIndivs)
{
  var nPtr;

// ----------------------------------------------------------------
// If more than one person in the household initialise and show the
// other people section of the form. The maximum number of people 
// catered for is 9.
// ----------------------------------------------------------------
  if (p_nIndivs < 2)
  {
    document.getElementById('ePeopleDIV').style.display = 'none';
    document.getElementById('ePeopleDIV').style.visibility = 'hidden';
  }
  else
  {
    document.getElementById('ePeopleDIV').style.display = 'inline';
    document.getElementById('ePeopleDIV').style.visibility = 'visible';

    for (nPtr=2; nPtr <= p_nIndivs; nPtr++)
    {
      document.getElementById('eIndiv' + nPtr + 'TR').style.display = 'inline';
      document.getElementById('eIndiv' + nPtr + 'TR').style.visibility = 'visible';

      document.getElementById('eFName' + nPtr).value='';
      document.getElementById('eLName' + nPtr).value='';
      document.getElementById('eGender' + nPtr).value='X';
      document.getElementById('eWStatus' + nPtr).value='X';
      document.getElementById('eSmoker' + nPtr).value='X';
      document.getElementById('eVegie' + nPtr).value='X';
      document.getElementById('eDOB' + nPtr + 'DD').value='';
      document.getElementById('eDOB' + nPtr + 'MM').value='';
      document.getElementById('eDOB' + nPtr + 'YY').value='';
    };

    for (nPtr=p_nIndivs+1; nPtr <= 9; nPtr++)
    {
      document.getElementById('eIndiv' + nPtr + 'TR').style.display = 'none';
      document.getElementById('eIndiv' + nPtr + 'TR').style.visibility = 'hidden';
    }; 
  };

// -------------------------------------------------------------------------
// When the number of individuals changes all CIE details are reset. The CIE
// section is only displayed when a number of individuals has been selected 
// ie. > 0. The who is CIE question (eCIEWhoIs) is only asked if more than 1
// individual is in the household and the caption text changes depending on
// the number of individuals in the household.
// -------------------------------------------------------------------------
  document.getElementById('eCIEWhoIs').options.length=0;
  document.getElementById('eCIEWhoIs').options[0]=new Option('Please Select', 'X', true, false)
  document.getElementById('eCIEBenefits').value='X';
  document.getElementById('eCIEWorking').value='X';
  HideCIEQuestions();

  if (p_nIndivs == 0)  {
    document.getElementById('eCIEDIV').style.display = 'none';
    document.getElementById('eCIEDIV').style.visibility = 'hidden';
  }
  else {
    document.getElementById('eCIEDIV').style.display = 'inline';
    document.getElementById('eCIEDIV').style.visibility = 'visible';

    if (p_nIndivs == 1)  {
       document.getElementById('eCIEWhoIs').value=1;

       document.getElementById('eCIEWhoIsTR').style.display = 'none';
       document.getElementById('eCIEWhoIsTR').style.visibility = 'hidden';

       document.getElementById('eCIEHeaderX').innerHTML = 'Tell us about yourself, the Chief Income Earner';
       document.getElementById('eCIEWorkingX').innerHTML = 'Are you currently working, or have you been working in the last 6 months?';
       document.getElementById('eCIEBenefitsX').innerHTML = 'Are you on state benefits only?';
       document.getElementById('eCIEOccupationX').innerHTML = 'What is your most recent or current occupation?';
       document.getElementById('eCIECompanyX').innerHTML = 'What Type of Company/Organisation do you work for?';
       document.getElementById('eCIEManualX').innerHTML = 'Is your job Manual or Non-Manual?';
       document.getElementById('eCIEQualificationsX').innerHTML = 'Do you have any qualifications? If so, please provide details of these.';
       document.getElementById('eCIEWorkforceX').innerHTML = 'What is the size of the workforce at your place of work?';
       document.getElementById('eCIEStaffX').innerHTML = 'How many staff are you responsible for?';
    }
    else {
       document.getElementById('eCIEWhoIsTR').style.display = 'inline';
       document.getElementById('eCIEWhoIsTR').style.visibility = 'visible';

       document.getElementById('eCIEHeaderX').innerHTML = 'Tell us about the Chief Income Earner';
       document.getElementById('eCIEWorkingX').innerHTML = 'Is the Chief Income Earner currently working, or have they been working in the last 6 months?';
       document.getElementById('eCIEBenefitsX').innerHTML = 'Is the Chief Income Earner on state benefits only?';
       document.getElementById('eCIEOccupationX').innerHTML = 'What is the Chief Income Earners most recent or current occupation?';
       document.getElementById('eCIECompanyX').innerHTML = 'What Type of Company/Organisation does the Chief Income Earner work for?';
       document.getElementById('eCIEManualX').innerHTML = 'Is the Chief Income Earners job Manual or Non-Manual?';
       document.getElementById('eCIEQualificationsX').innerHTML = 'Does the Chief Income Earner have any qualifications? If so, please provide details of these.';
       document.getElementById('eCIEWorkforceX').innerHTML = 'What is the size of the workforce at the Chief Income Earners place of work?';
       document.getElementById('eCIEStaffX').innerHTML = 'How many staff is the Chief Income Earner responsible<br>for?';
    };
  };

};


//********************************************************************************
//    Author: Steve Betts
//      Date: Sep 2010
//      Desc: When a mobile number is entered make the consent to texts question
//            visible.
//********************************************************************************
function onchange_eMobilePhone(p_sMobile)
{
 if (Trim(p_sMobile) == '')  {
    document.getElementById('eConsentDIV').style.display = 'none';
    document.getElementById('eConsentDIV').style.visibility = 'hidden';
    document.getElementById('eConsent').value='0';
 }
 else {
    document.getElementById('eConsentDIV').style.display = 'inline';
    document.getElementById('eConsentDIV').style.visibility = 'visible';
    document.getElementById('eConsent').value='X';
    document.getElementById('eConsent').focus();
 };

};


//********************************************************************************
//    Author: Steve Betts
//      Date: Jun 2010
//      Desc: Enable appropriate CIE questions.
//********************************************************************************
function ApplyCIERouting()
{
  var sWorking;
  var sBenefits;

  sWorking = document.getElementById('eCIEWorking').value;
  sBenefits = document.getElementById('eCIEBenefits').value;

  if ( (sWorking != 'X')  && (sBenefits != 'X') ) {

     if ( (sWorking == '0') && (sBenefits == '1') ) {
        HideCIEQuestions();
     }
     else {
        document.getElementById('eCIENoteTR').style.display = 'inline';
        document.getElementById('eCIENoteTR').style.visibility = 'visible';
        document.getElementById('eCIEOccupationTR').style.display = 'inline';
        document.getElementById('eCIEOccupationTR').style.visibility = 'visible';
        document.getElementById('eCIECompanyTR').style.display = 'inline';
        document.getElementById('eCIECompanyTR').style.visibility = 'visible';
        document.getElementById('eCIEManualTR').style.display = 'inline';
        document.getElementById('eCIEManualTR').style.visibility = 'visible';
        document.getElementById('eCIEQualificationsTR').style.display = 'inline';
        document.getElementById('eCIEQualificationsTR').style.visibility = 'visible';
        document.getElementById('eCIEWorkforceTR').style.display = 'inline';
        document.getElementById('eCIEWorkforceTR').style.visibility = 'visible';
        document.getElementById('eCIEStaffTR').style.display = 'inline';
        document.getElementById('eCIEStaffTR').style.visibility = 'visible';
     };
  }
  else {
     HideCIEQuestions();
  };

};


//********************************************************************************
//    Author: Steve Betts
//      Date: Jun 2010
//      Desc: Initialises and hides the CIE additional questions section
//********************************************************************************
function HideCIEQuestions()
{
 document.getElementById('eCIECompany').value='';
 document.getElementById('eCIEManual').value='X';
 document.getElementById('eCIEOccupation').value='';
 document.getElementById('eCIEQualifications').value='';
 document.getElementById('eCIEStaff').value='';
 document.getElementById('eCIEWorkforce').value='';

 document.getElementById('eCIENoteTR').style.display = 'none';
 document.getElementById('eCIENoteTR').style.visibility = 'hidden';
 document.getElementById('eCIEOccupationTR').style.display = 'none';
 document.getElementById('eCIEOccupationTR').style.visibility = 'hidden';
 document.getElementById('eCIECompanyTR').style.display = 'none';
 document.getElementById('eCIECompanyTR').style.visibility = 'hidden';
 document.getElementById('eCIEManualTR').style.display = 'none';
 document.getElementById('eCIEManualTR').style.visibility = 'hidden';
 document.getElementById('eCIEQualificationsTR').style.display = 'none';
 document.getElementById('eCIEQualificationsTR').style.visibility = 'hidden';
 document.getElementById('eCIEWorkforceTR').style.display = 'none';
 document.getElementById('eCIEWorkforceTR').style.visibility = 'hidden';
 document.getElementById('eCIEStaffTR').style.display = 'none';
 document.getElementById('eCIEStaffTR').style.visibility = 'hidden';
};


//********************************************************************************
//    Author: Steve Betts
//      Date: Jun 2010
//      Desc: Initialise form variables
//********************************************************************************
function InitSignup()
{
  var nPtr;

  document.getElementById('eAddr1').value='';  
  document.getElementById('eAddr2').value='';
  document.getElementById('eAddr3').value='';
  document.getElementById('eAddr4').value='';
  document.getElementById('eBroadband').value='X';
  document.getElementById('eCableTV').value='X';
  document.getElementById('eCats').value='X';
  document.getElementById('eCIEBenefits').value='X';
  document.getElementById('eCIECompany').value='';
  document.getElementById('eCIEManual').value='X';
  document.getElementById('eCIEOccupation').value='';
  document.getElementById('eCIEQualifications').value='';
  document.getElementById('eCIEStaff').value='';
  document.getElementById('eCIEWhoIs').value='X';
  document.getElementById('eCIEWorkforce').value='';
  document.getElementById('eCIEWorking').value='X';
  document.getElementById('eConfirm').checked=false;
  document.getElementById('eConsent').value='X';
  document.getElementById('eCouncilTax').value='X';
  document.getElementById('eDayPhone').value='';
  document.getElementById('eDogs').value='X';
  document.getElementById('eEMail1').value='';
  document.getElementById('eEMail1x').value='';
  document.getElementById('eFreeviewTV').value='X';
  document.getElementById('eIncome').value='X';
  document.getElementById('eMilkman').value='X';
  document.getElementById('eMobilePhone').value='';
  document.getElementById('eNightPhone').value='';
  document.getElementById('ePeople').value='00';
  document.getElementById('ePostcode').value='';
  document.getElementById('ePrivacy0').checked=true;
  document.getElementById('eSecondHome').value='X';
  document.getElementById('eSkyTV').value='X';
  document.getElementById('eWebview').value='X';
  document.getElementById('eWinVer').value='None';

  for (nPtr=1; nPtr <= 9; nPtr++)
  {
    document.getElementById('eFName' + nPtr).value='';
    document.getElementById('eLName' + nPtr).value='';
    document.getElementById('eGender' + nPtr).value='X';
    document.getElementById('eWStatus' + nPtr).value='X';
    document.getElementById('eSmoker' + nPtr).value='X';
    document.getElementById('eVegie' + nPtr).value='X';
    document.getElementById('eDOB' + nPtr + 'DD').value='';
    document.getElementById('eDOB' + nPtr + 'MM').value='';
    document.getElementById('eDOB' + nPtr + 'YY').value='';
  };

};


//********************************************************************************
//    Author: Steve Betts
//      Date: Jun 2010
//      Desc: Populate entries for the Who Is CIE dropdown list once all
//            names of people in the household have been entered.
//********************************************************************************
function UpdateCIEWhoIs()
{
  var oCIE;
  var nMissing;
  var nIndivs;
  var nPtr;
  var sFName;
  var sLName;

  oCIE = document.getElementById('eCIEWhoIs');
  oCIE.options.length=0;
  oCIE.options[0]=new Option('Please Select', 'X', true, false)

  nMissing = 0;
  nIndivs = parseInt(document.getElementById('ePeople').value,10);

  for (nPtr=1; nPtr <= nIndivs; nPtr++)
  {
    sFName = Trim(document.getElementById('eFName' + nPtr).value);
    sLName = Trim(document.getElementById('eLName' + nPtr).value);

    if ( (sFName != '') && (sLName != '') ) {
       oCIE.options[nPtr]=new Option(sLName + ', ' + sFName, nPtr , false, false);
    }
    else
    {
      nMissing = nMissing + 1;
    };
  };

  if ( nMissing != 0) {
     oCIE.options.length=0;
     oCIE.options[0]=new Option('Please Select', 'X', true, false)
  };
};


//********************************************************************************
//    Author: Steve Betts
//      Date: Oct 2005
//      Desc: Validate the form fields.
//            This master function calls a series of sub-functions, each of which
//            checks a single form field.
//
// Amendment:
//********************************************************************************
function validate_form(p_oForm, p_sAction) {

 var nPtr

 if (p_sAction == '50SUBMIT') {

    var why = '';

    why += checkFName(p_oForm.eFName1.value,1);
    why += checkLName(p_oForm.eLName1.value,1);
    why += checkGender(p_oForm.eGender1.value,1);
    why += checkWorkStatus(p_oForm.eWStatus1.value,1);
    why += checkSmoker(p_oForm.eSmoker1.value,p_oForm.eDOB1DD.value,p_oForm.eDOB1MM.value,p_oForm.eDOB1YY.value,1);
    why += checkVegie(p_oForm.eVegie1.value,1);
    why += checkDOB(p_oForm.eDOB1DD.value,p_oForm.eDOB1MM.value,p_oForm.eDOB1YY.value,1);
    why += checkEmail(p_oForm.eEmail1.value);
    why += checkDupeEmail(p_oForm.eEmail1x.value, p_oForm.eEmail1.value);

    why += checkAddr1(p_oForm.eAddr1.value);
    why += checkAddr2(p_oForm.eAddr2.value);
    why += checkPostcode(p_oForm.ePostcode.value);
    why += checkMobilePhone(p_oForm.eMobilePhone.value); 
    why += checkConsent(p_oForm.eConsent.value, p_oForm.eMobilePhone.value);
    why += checkDayPhone(p_oForm.eDayPhone.value);
    why += checkNightPhone(p_oForm.eNightPhone.value);
    why += checkPeople(p_oForm.ePeople.value);
    why += checkDogs(p_oForm.eDogs.value);
    why += checkCats(p_oForm.eCats.value);
    why += checkMilkman(p_oForm.eMilkman.value);
    why += checkCableTV(p_oForm.eCableTV.value);
    why += checkSkyTV(p_oForm.eSkyTV.value);
    why += checkFreeviewTV(p_oForm.eFreeviewTV.value);
    why += checkCouncilTax(p_oForm.eCouncilTax.value);
    why += checkSecondHome(p_oForm.eSecondHome.value);
    why += checkIncome(p_oForm.eIncome.value);

    for (nPtr=2; nPtr <= p_oForm.ePeople.value; nPtr++)
    {
      why += checkFName(eval('p_oForm.eFName' + nPtr + '.value'),nPtr);
      why += checkLName(eval('p_oForm.eLName' + nPtr + '.value'),nPtr);
      why += checkGender(eval('p_oForm.eGender' + nPtr + '.value'),nPtr);
      why += checkWorkStatus(eval('p_oForm.eWStatus' + nPtr + '.value'),nPtr);
      why += checkSmoker(eval('p_oForm.eSmoker' + nPtr + '.value'),eval('p_oForm.eDOB' + nPtr + 'DD.value'),eval('p_oForm.eDOB' + nPtr + 'MM.value'),eval('p_oForm.eDOB' + nPtr + 'YY.value'),nPtr);
      why += checkVegie(eval('p_oForm.eVegie' + nPtr + '.value'),nPtr);
      why += checkDOB(eval('p_oForm.eDOB' + nPtr + 'DD.value'),eval('p_oForm.eDOB' + nPtr + 'MM.value'),eval('p_oForm.eDOB' + nPtr + 'YY.value'),nPtr);
    };

    why += checkCIE(p_oForm);

    why += checkWinVer(p_oForm.eWinVer.value);
    why += checkBroadband(p_oForm.eBroadband.value);

    why += checkPrivacy(p_oForm.ePrivacy1.checked);

    why += checkWebview(p_oForm.eWebview.value);


    if (why != '') {
       alert(why);
       return false;
    };
 };

 return true;
};

//   -----------------------------------------------------------------------
//   --------------------   Validation Check Routines  ---------------------
//   -----------------------------------------------------------------------

function checkAddr1 (p_sValue) {
 var sError = '';
 var sValue = Trim(p_sValue);

 if (sValue == '') {
    sError = 'Address Line 1 is missing.\n';
 }
 else if (sValue.length < 3) {
   sError = 'Address Line 1 is insufficient.\n';
 };
 return sError;
};       

function checkAddr2 (p_sValue) {
 var sError = '';
 var sValue = Trim(p_sValue);

 if (sValue == '') {
    sError = 'Address Line 2 is missing.\n';
 }
 else if (sValue.length < 3) {
   sError = 'Address Line 2 is insufficient.\n';
 };
 return sError;
};       

function checkPostcode (p_sValue) {
 var sError = '';
 var sValue = Trim(p_sValue);

 if (sValue == '') {
    sError = 'Postcode is missing.\n';
 }
 else if (sValue.length < 5) {
   sError = 'Postcode is incomplete.\n';
 };
 return sError;
};       

function checkDayPhone (p_sValue) {
 var sError = '';
 var sValue = Trim(p_sValue);

 if (sValue == '') {
    sError = 'Telephone (Daytime) is missing.\n';
 }
 else if (sValue.length < 5) {
   sError = 'Telephone (Daytime) is incomplete.\n';
 };
 return sError;
};       

function checkNightPhone (p_sValue) {
 var sError = '';
 var sValue = Trim(p_sValue);

 if (sValue == '') {
    sError = 'Telephone (Night) is missing.\n';
 }
 else if (sValue.length < 5) {
   sError = 'Telephone (Night) is incomplete.\n';
 };
 return sError;
};       

function checkMobilePhone (p_sValue) {
 var sError = '';
 var sValue = Trim(p_sValue);

 if (sValue != '') {
    if (sValue.length < 5) {
       sError = 'Mobile Telephone is incomplete.\n';
    };
 };
 return sError;
};       


function checkConsent (p_sConsent, p_sMobile) {
 var sError = '';

 if ( Trim(p_sMobile) != '') {
    if (p_sConsent == 'X') {
       sError = 'Consent to text messages is missing.\n';
    };
 };
 return sError;
};       

function checkDogs (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Number of dogs is missing.\n';
 };
 return sError;
};       

function checkCats (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Number of cats is missing.\n';
 };
 return sError;
};       

function checkPeople (p_sValue) {
 var sError = '';

 if ((p_sValue == '0') || (p_sValue == '00')) {
    sError = 'Number of people is missing.\n';
 };
 return sError;
};       

function checkMilkman (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Milk delivered is missing.\n';
 };
 return sError;
};       

function checkCableTV (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Cable TV is missing.\n';
 };
 return sError;
};       

function checkSkyTV (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Sky TV is missing.\n';
 };
 return sError;
};       

function checkFreeviewTV (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Freeview TV is missing.\n';
 };
 return sError;
};       

function checkCouncilTax (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Council tax is missing.\n';
 };
 return sError;
};       

function checkSecondHome (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Second home is missing.\n';
 };
 return sError;
};       

function checkIncome (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Income is missing.\n';
 };
 return sError;
};       

function checkFName (p_sValue, p_nIndiv) {
 var sPerson = '';
 var sError  = '';
 var sValue  = Trim(p_sValue);

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (sValue == '') {
    sError = 'First name of ' + sPerson + ' is missing.\n';
 }
 else if (sValue.length < 2) {
   sError = 'First name of ' + sPerson + ' is incomplete.\n';
 };
 return sError;
};       

function checkLName (p_sValue, p_nIndiv) {
 var sPerson = '';
 var sError  = '';
 var sValue  = Trim(p_sValue);

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (sValue == '') {
    sError = 'Last name of ' + sPerson + ' is missing.\n';
 }
 else if (sValue.length < 2) {
   sError = 'Last name of ' + sPerson + ' is incomplete.\n';
 };
 return sError;
};       

function checkGender (p_sValue, p_nIndiv) {
 var sPerson = '';
 var sError  = '';

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (p_sValue == 'X') {
    sError = 'Gender of ' + sPerson + ' is missing.\n';
 };
 return sError;
};       

function checkWorkStatus (p_sValue, p_nIndiv) {
 var sPerson = '';
 var sError  = '';

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (p_sValue == 'X') {
    sError = 'Work Status of ' + sPerson + ' is missing.\n';
 };
 return sError;
};       

function checkSmoker (p_sValue, p_sDD, p_sMM, p_sYY, p_nIndiv) {
 var sPerson = '';
 var sError  = '';
 var dNow     = new Date();
 var nMinYear = 1900;
 var nMaxYear = dNow.getFullYear();
 var nAge     = 0;

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (p_sValue == 'X') {
    sError = 'Is ' + sPerson + ' a smoker? is missing.\n';
 }
 else {
    if (p_sValue == '1') {
       if ( IsDate(p_sDD,p_sMM,p_sYY,nMinYear,nMaxYear) ) {
          nAge = CalcAge(parseInt(p_sDD,10), parseInt(p_sMM,10), parseInt(p_sYY,10));
          if (nAge < 16) {
             sError = 'Smoker? is invalid for ' + sPerson + ', must be aged 16 or over.\n'
          };
       };
    }; 
 };

 return sError;
};
 
function checkVegie (p_sValue, p_nIndiv) {
 var sPerson = '';
 var sError  = '';

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (p_sValue == 'X') {
    sError = 'Is ' + sPerson + ' a vegetarian? is missing.\n';
 };
 return sError;
};       

function checkDOB (p_sDD, p_sMM, p_sYY, p_nIndiv) {
 var sPerson  = '';
 var sError   = '';
 var dNow     = new Date();
 var nMinYear = 1900;
 var nMaxYear = dNow.getFullYear();
 var nAge     = 0;

 if (p_nIndiv == 1) {
    sPerson='main shopper'
 }
 else {
    sPerson='other person (' + (p_nIndiv - 1) + ')'
 };

 if (!(IsDate(p_sDD,p_sMM,p_sYY,nMinYear,nMaxYear))) {
    sError = 'DOB of ' + sPerson + ' is missing/invalid.\n';
 }
 else if (p_nIndiv == 1) {
    nAge = CalcAge(parseInt(p_sDD,10), parseInt(p_sMM,10), parseInt(p_sYY,10));
    if (nAge < 18) {
       sError = 'Main shopper must be aged 18 or over.\n'
    }; 
 };

 return sError;
};       

function checkEmail (p_sValue) {
 var nValid = 0;
 var sError = '';
 var sValue = Trim(p_sValue);

  
 if (sValue == '') {
    sError = 'Email of main shopper is missing.\n';
 }
 else {
    nValid = VerifyEmailFormat(p_sValue);
    if (nValid != 0) sError = 'Email of main shopper has an invalid format.\n';
 };
 return sError;
};       

function checkDupeEmail (p_sEmail1, p_sEmail2) {
 var sError = '';
 var sEmail1=Trim(p_sEmail1);
 var sEmail2=Trim(p_sEmail2);

 if (sEmail1 == '') {
    sError = 'Confirmation of email address is missing.\n';
 }
 else if (sEmail2 != '') {
   if (sEmail1 != sEmail2) {
      sError = 'Email addresses do not match.\n';
   };
 };
 return sError;
};       

function checkWinVer (p_sValue) {
 var sError = '';

 if (p_sValue == 'None') {
    sError = 'Windows version is missing.\n';
 };
 return sError;
};       

function checkBroadband (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'Broadband is missing.\n';
 };
 return sError;
};       

function checkPrivacy (p_bValue) {
 var sError = '';

 if (!p_bValue) {
    sError = 'You must read and agree to the privacy policy.\n';
 }
 return sError;
}  

function checkWebview (p_sValue) {
 var sError = '';

 if (p_sValue == 'X') {
    sError = 'WebView answer is missing.\n';
 };
 return sError;
};       

function checkCIE (p_Form) {

 var sWorking;
 var sBenefits;
 var sError = '';
 var nPeople= nPeople = parseInt(p_Form.ePeople.value,10);
 
 if ( nPeople != 0 ) {

    sWorking = p_Form.eCIEWorking.value;
    sBenefits = p_Form.eCIEBenefits.value;

    if ( (nPeople > 1) && (p_Form.eCIEWhoIs.value == 'X') ) {
       sError += 'Who is CIE is missing.\n';
    };

    if ( sWorking == 'X' ) {
       sError += 'Is CIE working is missing.\n';
    };

    if ( sBenefits == 'X' ) {
       sError += 'Is CIE on benefits is missing.\n';
    };


    if ( (sWorking != 'X')  && (sBenefits != 'X') ) {

       if ( ! ((sWorking == '0') && (sBenefits == '1')) ) {

          if ( Trim(p_Form.eCIEOccupation.value) == '' ) {
             sError += 'CIE occupation is missing.\n';
          };

          if ( Trim(p_Form.eCIECompany.value) == '' ) {
             sError += 'CIE company is missing.\n';
          };

          if ( p_Form.eCIEManual.value == 'X' ) {
             sError += 'CIE manual/non-manual is missing.\n';
          };

          if ( Trim(p_Form.eCIEQualifications.value) == '' ) {
             sError += 'CIE qualifications is missing.\n';
          };

          if ( Trim(p_Form.eCIEWorkforce.value) == '' ) {
             sError += 'CIE workforce is missing.\n';
          };

          if ( Trim(p_Form.eCIEStaff.value) == '' ) {
             sError += 'CIE staff is missing.\n';
          };


       };
    };

 };

 return sError;
}  

//   -----------------------------------------------------------------------
//   ----------------  End Of Validation Check Routines  -------------------
//   -----------------------------------------------------------------------


//********************************************************************************
//    Author: Steve Betts
//      Date: Nov 2005
//      Desc: CalcAge
//            Calculates current age from date of birth
//
// Amendment:
//********************************************************************************
function CalcAge(p_nDOBDay, p_nDOBMonth, p_nDOBYear){

 var dToday;
 var nDay;
 var nMonth;
 var nYear;
 var nAge;

 dToday = new Date();
 nDay   = dToday.getDate();
 nMonth = dToday.getMonth() + 1;
 nYear  = dToday.getFullYear();

 nAge = nYear - p_nDOBYear;
 if (nAge <= 0) {
    nAge = 0;
 }
 else
 {
   if (p_nDOBMonth > nMonth) {
      nAge = nAge - 1;
   }
   else
   {
     if ((p_nDOBMonth == nMonth) && (p_nDOBDay > nDay)) {
        nAge = nAge - 1;
     };
   };
 };

 return nAge;
};


//********************************************************************************
//    Author: Steve Betts
//      Date: Oct 2005
//      Desc: IsDate
//            Returns true if the three elements of the date make up a valid date
//
// Amendment:
//********************************************************************************
function IsDate(p_sDay, p_sMonth, p_sYear, p_nMinYear, p_nMaxYear){

var nDaysInMonth=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
var sDay;
var sMonth;
var sYear;
var nDay;
var nMonth;
var nYear;


// --------------------------------------
// All elements must exist and be numeric
// --------------------------------------
sDay=Trim(p_sDay);
sMonth=Trim(p_sMonth);
sYear=Trim(p_sYear);
if ((sDay.length==0) || !(IsInteger(sDay)) || (sMonth.length==0) || !(IsInteger(sMonth)) || (sYear.length==0) || !(IsInteger(sYear))) return false;

// ------------------------
// Convert string to number
// ------------------------
nDay=parseInt(sDay,10);
nMonth=parseInt(sMonth,10);
nYear=parseInt(sYear,10);
if ((nDay==0) || (nMonth==0) || (nYear==0)) return false;

// --------------------------------------
// Adjust days in February for leap years
// --------------------------------------
if ((nYear % 4 == 0) && ((!(nYear % 100 == 0)) || (nYear % 400 == 0))) nDaysInMonth[2]=29;

// -----------------
// Validate elements
// -----------------
if (nMonth<1 || nMonth>12) return false;
if (nDay > nDaysInMonth[nMonth]) return false;
if (nYear<p_nMinYear || nYear>p_nMaxYear) return false;
return true;
}


//********************************************************************************
//    Author: Steve Betts
//      Date: Oct 2005
//      Desc: IsInteger
//            Returns true if string value is an integer
//
// Amendment:
//********************************************************************************
function IsInteger(p_sValue){
 var nPtr;
 var sChar;

 for (nPtr = 0; nPtr < p_sValue.length; nPtr++){   
   sChar = p_sValue.charAt(nPtr);
   if (((sChar < '0') || (sChar > '9'))) return false;
 };
 return true;
};


//********************************************************************************
//    Author: Steve Betts
//      Date: Oct 2005
//      Desc: NoEnter
//            Traps the [Enter] key to prevent a form from being submitted
//
// Amendment:
//********************************************************************************
function NoEnter() {
  return !(window.event && window.event.keyCode == 13); 
};


