var intCurrentScreen=0;  // first showing the welcome page

var strUKPostcodes="ABALB1B2B3B4B5B6B7B8B9BABBBDBHBLBNBRBSBTCACBCFCHCMCOCRCTCVCWDADDDEDGDHDLDNDTDYE1E2E3E4E5E6E7E8E9ECEHENEXFKFYG1G2G3G4G5G6G7G8GLGUGYHAHDHGHPHRHSHUHXIGIMIPIVKAKTKWKYL1L2L3L4L6L9LALDLELLLNLSLUM1M2M3M4M5M6M7M8M9MEMKMLN1N2N3N4N5N6N7N8N9NENGNNNPNRNWOLOXPAPEPHPLPOPRRGRHRMS1S2S3S4S5S6S7S8S9SASESGSKSLSMSNSOSPSRSSSTSWSYTATDTFTNTQTRTSTWUBW1W2W3W4W5W6W7W8W9WAWCWDWFWNWRWSWVYOZE";
var strDomains=".biz.info.name.museum.coop.aero.pro.com.net.org.edu.int.gov.mil.ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az.ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.cr.cu.cv.cx.cy.cz.de.dj.dk.dm.do.dz.ec.ee.eg.eh.er.es.et.fi.fj.fk.fm.fo.fr.ga.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gq.gr.gs.gt.gu.gw.gy.hk.hm.hn.hr.ht.hu.id.ie.il.im.in.io.iq.ir.is.it.je.jm.jo.jp.ke.kg.kh.ki.km.kn.kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz.na.nc.ne.nf.ng.ni.nl.no.np.nr.nu.nz.om.pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.ps.pt.pw.py.qa.re.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.sv.sy.sz.tc.td.tf.tg.th.tj.tk.tm.tn.to.tp.tr.tt.tv.tw.tz.ua.ug.uk.um.us.uy.uz.va.vc.ve.vg.vi.vn.vu.wf.ws.ye.yt.yu.za.zm.zw.";

var strMonths=new Array();
c_populate("(select),january,february,march,april,may,june,july,august,september,october,november,december,january,", strMonths, ",");


function fnValidation(objInputObject, strRuleName, ynOptional)

{
  var strOutputString;
  var strTestAgaist;
  var strInputString;
  var strTemp;
  var ynInnerValid;

  var intMinLength;
  var intMaxLength;
  var intSwitchCase;
  var strAlphas;
  var strNumbers;
  var strLast1;
  var strLast2;
  var ynIsValid=true;
  var strValidChars;
  var strHostOK

  var strUser=new Array();
  var strHost=new Array();
  var strSplit=new Array();

  var intLastHost, intLastUser;

  strInputString=objInputObject.value;

if (strInputString.length ==0)
  {
  if (ynOptional)
    {
    ynIsValid=true;
    }
  else
    {
    ynIsValid=false;
    }
  }
else
  {
  strAlphas="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  strNumbers="0123456789";
  strEmailOthers="!#$%&'*+-/=?^_`{|}~"+"@.";
  strHostOK=strAlphas+strNumbers+"-.";

  intMinLength=1;
  intMaxLength=5;
  intSwitchCase=0;  //0=none, 1=UPPER, 2=lower, 3=TitleCase

  //alert(strInputString+", "+strRuleName);

  switch (strRuleName)
  {
  case "firstname" :
    intMinLength=2; intMaxLength=20; intSwitchCase=3; strValidChars=strAlphas; break;
  case "surname" :
    intMinLength=2; intMaxLength=20; intSwitchCase=3; strValidChars=strAlphas+" -"; break;
  case "house" :
    intMinLength=1; intMaxLength=10; intSwitchCase=1; strValidChars=strAlphas+strNumbers; break;
  case "postcode" :
    intMinLength=5; intMaxLength=7;  intSwitchCase=1; strValidChars=strAlphas+strNumbers; break;
  case "email" :
    intMinLength=5; intMaxLength=40; intSwitchCase=2; strValidChars=strAlphas+strNumbers+strEmailOthers; break;
  case "landline" :
    intMinLength=10;intMaxLength=11; intSwitchCase=0; strValidChars=strNumbers; break;
  case "mobile" :
    intMinLength=10;intMaxLength=11; intSwitchCase=0; strValidChars=strNumbers; break;
  case "year":
    intMinLength=4; intMaxLength=4;  intSwitchCase=0; strValidChars=strNumbers; break;
  case "message":
    intMinLength=1; intMaxLength=350;  intSwitchCase=0; strValidChars=strValidChars=strAlphas+strNumbers+strEmailOthers+" ()"; break;

  }

  // sort out the case

  switch (intSwitchCase) {
  case 1: strOutputString=strInputString.toUpperCase(); break;
  case 2: strOutputString=strInputString.toLowerCase(); break;
  case 3: strOutputString=strInputString.substr(0, 1).toUpperCase() + strInputString.substr(1).toLowerCase(); break;
  default: strOutputString=strInputString; break;
  }


  strOutputString=fnRemoveBad(strOutputString, strValidChars);

  if (strOutputString.length > intMaxLength)
   {strOutputString=strOutputString.substring(0, intMaxLength)}

  if (strOutputString!=strInputString)
   {objInputObject.value=strOutputString };


  if (strOutputString.length < intMinLength)
   {ynIsValid=false}
  else
  {


   // Finished checking for things that can be changed for the user

  switch (strRuleName)
  {
  case "postcode":
    ynInnerValid=false;

    // Postcodes must start with a valid code
    for (intI=0; intI<strUKPostcodes.length; intI=intI+2)
    {
     if (strOutputString.substr(0,2)==strUKPostcodes.substr(intI,2)) ynInnerValid=true;
    }

    if ((strOutputString.length >= intMinLength))
    {
    	// Last 2 must be letters
     strLast1=strOutputString.substring(strOutputString.length-2, strOutputString.length-1);
     strLast2=strOutputString.substring(strOutputString.length-1, strOutputString.length);
     if (strAlphas.indexOf(strLast1)==-1 | strAlphas.indexOf(strLast2)==-1) ynInnerValid=false;
     // Third from the end is a number
     strLast1=strOutputString.substring(strOutputString.length-3, strOutputString.length-2);
     if (strNumbers.indexOf(strLast1)==-1) ynInnerValid=false;

    }
    //else
    //{
    // ynInnerValid=false;
    //}

    if (!ynInnerValid) ynIsValid=false;
    break;

   // phone number extra tests

   case "landline":
    if (!(strOutputString.substring(0,1)=="0" && (strOutputString.substring(1,2)=="1" || strOutputString.substring(1,2)=="2")))
    {
    	ynIsValid=false;
    }
   break;

   case "mobile":
    if (!(strOutputString.substring(0,2)=="07" && (strOutputString.substring(2,3)=="7" || strOutputString.substring(2,3)=="8" || strOutputString.substring(2,3)=="9")))
    {
    	ynIsValid=false;
    }
   break;


   case "email":
     if (strOutputString.indexOf("..")!=-1) ynIsValid=false;
     if (strOutputString.indexOf(".@")!=-1) ynIsValid=false;
     if (strOutputString.indexOf("@.")!=-1) ynIsValid=false;


     if (c_populate(strOutputString+"@", strSplit, "@") == 2)
     {
      if ((intLastHost=c_populate(strSplit[1]+".", strHost, "."))>1)
       {
        if ((strDomains.indexOf("."+strHost[intLastHost-1]+"."))!=-1)
          {
            if ((strSplit[1])!=fnRemoveBad(strSplit[1],strHostOK)) ynIsValid=false;
          }
        else ynIsValid=false;
       }
       else ynIsValid=false;

     if (strSplit[0].length==0 || strSplit[0].substring(0,1)==".") ynIsValid=false;

     }
     else ynIsValid=false;


   break;


   case "year":
     if (!(strOutputString.substring(0,2)=="19" || strOutputString.substring(0,2)=="20"))
     {
         ynIsValid=false;
     }
   break;

  }
 }
}

return ynIsValid;

}

function isAValidDate(intYear, intMonth, intDay)
{
var dtDate = new Date(intYear, intMonth, intDay);

return ((intYear==dtDate.getFullYear()) && (intMonth == dtDate.getMonth()) && (intDay == dtDate.getDate()));
}




function isAValidDateOfset(intYear, intMonth, intDay, intYearOfset)
{

var ynAnswer=false;
var fpYearMs=1000*60*60*24*356;

if (isAValidDate(intYear, intMonth, intDay))
 {
  var dtTester = new Date(intYear, intMonth, intDay);
  var dtNow = new Date();
  var diff=(dtTester-dtNow)/fpYearMs;
  //var dtDiff=new Date(dtTester-dtNow);


  if (intYearOfset<0) {
    ynAnswer=(intYearOfset>=diff) }
  else {
    ynAnswer=(intYearOfset<=diff) }

 //alert("dtNow="+dtNow+" dtTester="+dtTester+" diff="+diff);


 }

return ynAnswer;

}




function showMonthControl()
{
var intI;

for (intI=-1; intI<12; intI++)
 {
  document.write("<option value="+intI+">"+strMonths[intI+1]+"<\/option>");
 };
}

function showDateControl()
{
var intI;

  document.write("<option value=0>()<\/option>");

for (intI=1; intI<=31; intI++)
 {
  document.write("<option value="+intI+">"+intI+"<\/option>");
 };
}



function c_populate(u,arrptr,chr)
{
var v="";
var ctr=0;

for (i=0; i<u.length; i++)
{
  c=u.charAt(i);
    if (c != chr) { v=v+c; }
  else
    {
      arrptr[ctr]=v;
      v="";
      ctr+=1;
    };
}

return ctr;

}




function fnRemoveBad(strString, strValid)
{
var strTemp="";
   for (var intI=0; intI<strString.length; intI++)
   {
    strC=strString.substring(intI, intI+1);
    if (strValid.indexOf(strC)==-1) {strC=""};
    strTemp=strTemp+strC;
   }

return strTemp;
}


function fnX(strName, objObject)
{

  return strName+"="+objObject.value+"&";
}









