  function checkDate(d,m,y)
  { // Checks for valid date in range 1/1/1900 to 31/12/2099
    if (!isNumeric(d) || !isNumeric(m) || !isNumeric(y)) {return false;}
        if (m<1 || m>12) {return false;}
        if (y<1900 || y>2099) {return false;}
    var daysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        if (y%1000==0 ||(y%4==0 && y%100!=0)) {daysInMonth[1]=29;}
        if (d<1 || d>daysInMonth[m-1]) {return false;}
        return true;
  }


  function checkEmail(email)
  { // this checks for a valid format email address
    var pattern=/^[a-zA-Z0-9]+([.|_|-][a-zA-Z0-9]+)*[@]{1}[a-zA-Z0-9]+([.|_|-][a-zA-Z0-9]+)*[.]{1}[a-zA-Z0-9]{2,3}$/;
    var result=email.match(pattern);
    if (result==null)
      {
       return false;
      }
      else  return true;
  }


  function checkForm(f)
  {
//  alert ("Here in checkForm");
//  alert ("Name=" + f.name);

/*   To test the chosen option in a Select statement:
              var opt=f.selectname.selectedIndex;
                  var field=f.selectname.options[opt].text;

 (Can use value instead of text if the option statements have a value clause)
*/
    if (f.buttonPressed.value=="Cancel") {return true;}
    if (f.buttonPressed.value=="Delete")
    {
      if (confirm("Are you really sure you want to delete this record?"))
      {return true;}
      else {return false;}
    }
    var errMsg="";

    switch (f.name)
    {
      case "bookingForm":
        if (empty(f.bookingName.value))
        {
          if (errMsg=="") {f.bookingName.focus();}
          errMsg+="Please enter your Name\n";
        }

        if (empty(f.address.value))
        {
          if (errMsg=="") {f.address.focus();}
          errMsg+="Please enter your Address\n";
        }

        if (empty(f.phone.value))
        {
          if (errMsg=="") {f.phone.focus();}
          errMsg+="Please enter your Telephone No.\n";
        }

        if (!empty(f.email.value))
        {
          if (!checkEmail(f.email.value))
          {
            if (errMsg=="") {f.email.focus();}
            errMsg+="That Email Address is not valid\n";
          }
        }

        var totalTickets=0;
        var opt=f.mondayTickets.selectedIndex;
        totalTickets=totalTickets + f.mondayTickets.options[opt].value*1;

        opt=f.tuesdayTickets.selectedIndex;
        totalTickets=totalTickets + f.tuesdayTickets.options[opt].value*1;

        opt=f.wednesdayTickets.selectedIndex;
        totalTickets=totalTickets + f.wednesdayTickets.options[opt].value*1;
        opt=f.thursdayTickets.selectedIndex;
        totalTickets=totalTickets + f.thursdayTickets.options[opt].value*1;
        opt=f.fridayTickets.selectedIndex;
        totalTickets=totalTickets + f.fridayTickets.options[opt].value*1;
        opt=f.saturdayMatineeTickets.selectedIndex;
        totalTickets=totalTickets + f.saturdayMatineeTickets.options[opt].value*1;
        opt=f.saturdayEveningTickets.selectedIndex;
        totalTickets=totalTickets + f.saturdayEveningTickets.options[opt].value*1;

        if(totalTickets==0)
        {
          if (errMsg=="") {f.mondayTickets.focus();}
          errMsg+="Please enter your Ticket Requirements\n";
        }
/*
        if (empty(f.field20.value))
            {
              if (errMsg=="") {f.field20.focus();}
          errMsg+="Please enter the field20\n";
        }

        if (empty(f.field21.value))
            {
              if (errMsg=="") {f.field21.focus();}
          errMsg+="Please enter the field21\n";
        }

        if (empty(f.field22.value))
            {
              if (errMsg=="") {f.field22.focus();}
          errMsg+="Please enter the field22\n";
        }
*/
       break;


      case "joinerForm":
        if (empty(f.joinerName.value))
        {
          if (errMsg=="") {f.joinerName.focus();}
          errMsg+="Please enter your Name\n";
        }

        if (empty(f.address.value))
        {
          if (errMsg=="") {f.address.focus();}
          errMsg+="Please enter your Address\n";
        }

        if (empty(f.phone.value))
        {
          if (errMsg=="") {f.phone.focus();}
          errMsg+="Please enter your Telephone Number\n";
        }
        else
        {
          if (!checkPhoneNo(f.phone.value))
          {
            if (errMsg=="") {f.phone.focus();}
            errMsg+="Telephone Numbers must be numeric, minimum 11 digits\n";
          }

        }

        if (!empty(f.email.value) && !checkEmail(f.email.value))
        {
          if (errMsg=="") {f.email.focus();}
          errMsg+="That Email Address is not valid\n";
        }

/*
        if (empty(f.field09.value))
        {
          if (errMsg=="") {f.field09.focus();}
          errMsg+="Please enter your field09\n";
        }

        if (empty(f.field10.value))
        {
          if (errMsg=="") {f.field10.focus();}
          errMsg+="Please enter your field10\n";
        }
*/
      break;

      case "newsForm":
        var dateError=false;

        if (!checkDate(f.displayFromDay.value, f.displayFromMonth.value,f.displayFromYear.value))
        {
          if (errMsg=="") {f.displayFromDay.focus();}
          errMsg+="The Display From date is not a valid date\n";
          dateError = true;
        }

        if (!checkDate(f.displayToDay.value, f.displayToMonth.value,f.displayToYear.value))
        {
          if (errMsg=="") {f.displayToDay.focus();}
          errMsg+="The Display To date is not a valid date\n";
          dateError = true;
        }

        if (!dateError)
        {
          var toDay= "" + f.displayToDay.value;
          if (f.displayToDay.value<10) {toDay="0" + toDay;}
          var fromDay= "" + f.displayFromDay.value;
          if (f.displayFromDay.value<10) {fromDay="0" + fromDay;}


          var fromDate="" + f.displayFromYear.value + f.displayFromMonth.value + fromDay;
          var toDate="" + f.displayToYear.value + f.displayToMonth.value + toDay;

          if (toDate<fromDate)
          {
            if (errMsg=="") {f.displayFromDay.focus();}
            errMsg+="The Display To date cannot precede the Display From date\n";
          }
        }

        if (empty(f.newsText.value))
        {
          if (errMsg=="") {f.newsText.focus();}
          errMsg+="Please enter the Text of the Item\n";
        }
        else
        {
           if (f.newsText.value.length>250)
          {
            if (errMsg=="") {f.newsText.focus();}
            errMsg+="That News Item is too long (max 250 chars)\n";
          }
        }
/*
        if (empty(f.field05.value))
        {
          if (errMsg=="") {f.field05.focus();}
          errMsg+="Please enter the field05\n";
        }
*/
       break;

      case "contactForm":
        if (empty (f.contactName.value))
        {
           if (errMsg=="")  {f.contactName.focus();}
           errMsg+="Please enter your Name\n";
        }

/*
        if (empty (f.company.value))
        {
           if (errMsg=="")  {f.company.focus();}
           errMsg+="Please enter your Company Name\n";
        }
*/

        if (empty (f.address1.value))
        {
           if (errMsg=="")  {f.address1.focus();}
           errMsg+="Please enter your Address\n";
        }


        if (empty (f.phone.value))
        {
           if (errMsg=="")  {f.phone.focus();}
           errMsg+="Please enter your Telephone number\n";
        }
        else
        {
          if (!checkPhoneNo (f.phone.value))
          {
           if (errMsg=="")  {f.phone.focus();}
           errMsg+="Telephone numbers must be numeric, minimum 11 digits\n";
          }
        }

        if (empty (f.email.value))
        {
           if (errMsg=="")  {f.email.focus();}
           errMsg+="Please enter your Email address\n";
        }
        else
        {
          if (!checkEmail (f.email.value))
          {
           if (errMsg=="")  {f.email.focus();}
           errMsg+="That Email address is not valid\n";
          }
        }
/*
        if (empty (f.comments.value))
        {
           if (errMsg=="")  {f.comments.focus();}
           errMsg+="Please enter details of your Enquiry\n";
        }

        if (empty (f.spare1.value))
        {
           if (errMsg=="")  {f.spare1.focus();}
           errMsg+="Please enter your spare1\n";
        }

        if (empty (f.spare2.value))
        {
           if (errMsg=="")  {f.spare2.focus();}
           errMsg+="Please enter your spare2\n";
        }

        if (empty (f.spare3.value))
        {
           if (errMsg=="")  {f.spare3.focus();}
           errMsg+="Please enter your spare3\n";
        }

        if (empty (f.spare4.value))
        {
           if (errMsg=="")  {f.spare4.focus();}
           errMsg+="Please enter your spare4\n";
        }
*/
      break;

      case "eventForm":

        if (empty(f.event.value))
        {
          if (errMsg=="") {f.event.focus();}
          errMsg+="Please enter the Event Title\n";
        }

        if (!checkDate(f.eventDateDay.value, f.eventDateMonth.value, f.eventDateYear.value))
        {
          if (errMsg=="") {f.eventDate.focus();}
          errMsg+="That Event Date is not a valid date\n";
        }


        if (empty(f.venue.value))
        {
          if (errMsg=="") {f.venue.focus();}
          errMsg+="Please enter the Venue\n";
        }

        if (empty(f.contact.value))
        {
          if (errMsg=="") {f.contact.focus();}
          errMsg+="Please enter the name of the person to contact\n";
        }

        if (!isNumeric(f.price.value, 2))
        {
          if (errMsg=="") {f.price.focus();}
          errMsg+="The Price must be numeric, maximum 2 decimal places\n";
        }

/*
        if (empty(f.field15.value))
        {
          if (errMsg=="") {f.field15.focus();}
          errMsg+="Please enter the field15\n";
        }

        if (empty(f.field16.value))
        {
          if (errMsg=="") {f.field16.focus();}
          errMsg+="Please enter the field16\n";
        }
*/
      break;

      case "linkForm":
        if (empty(f.linkName.value))
        {
          if (errMsg=="") {f.linkName.focus();}
          errMsg+="Please enter the Link Name\n";
        }

/*
        if (empty(f.description.value))
        {
          if (errMsg=="") {f.description.focus();}
          errMsg+="Please enter the Description\n";
        }
*/
        if (empty(f.webAddress.value))
        {
          if (errMsg=="") {f.webAddress.focus();}
          errMsg+="Please enter the Web Address\n";
        }

       break;

      case "ticketDetailsForm":
        if (empty(f.ticketSecretaryName.value))
        {
          if (errMsg=="") {f.ticketSecretaryName.focus();}
          errMsg+="Please enter the Ticket Secretary's Name\n";
        }

        if (empty(f.ticketSecretaryAddress.value))
        {
          if (errMsg=="") {f.ticketSecretaryAddress.focus();}
          errMsg+="Please enter the Ticket Secretary's Address\n";
        }

        if (empty(f.ticketSecretaryPhone.value))
        {
          if (errMsg=="") {f.ticketSecretaryPhone.focus();}
          errMsg+="Please enter the Ticket Secretary's Telephone No.\n";
        }

        if (!empty(f.ticketSecretaryEmail.value) && !checkEmail(f.ticketSecretaryEmail.value))
        {
          if (errMsg=="") {f.ticketSecretaryEmail.focus();}
          errMsg+="That Email address is not valid\n";
        }

        if (empty(f.mondayPrice.value))
        {
          if (errMsg=="") {f.mondayPrice.focus();}
          errMsg+="Please enter the Price for Monday Night tickets\n";
        }
        else
        {
          if (!isNumeric(f.mondayPrice.value, 2))
          {
            if (errMsg=="") {f.mondayPrice.focus();}
            errMsg+="The Price for Monday Night tickets is invalid\n";
          }
        }

        if (empty(f.tuesdayPrice.value))
        {
          if (errMsg=="") {f.tuesdayPrice.focus();}
          errMsg+="Please enter the Price for Tuesday Night tickets\n";
        }
        else
        {
          if (!isNumeric(f.tuesdayPrice.value, 2))
          {
            if (errMsg=="") {f.tuesdayPrice.focus();}
            errMsg+="The Price for Tuesday Night tickets is invalid\n";
          }
        }

        if (empty(f.wednesdayPrice.value))
        {
          if (errMsg=="") {f.wednesdayPrice.focus();}
          errMsg+="Please enter the Price for Wednesday Night tickets\n";
        }
        else
        {
          if (!isNumeric(f.wednesdayPrice.value, 2))
          {
            if (errMsg=="") {f.wednesdayPrice.focus();}
            errMsg+="The Price for Wednesday Night tickets is invalid\n";
          }
        }

        if (empty(f.thursdayPrice.value))
        {
          if (errMsg=="") {f.thursdayPrice.focus();}
          errMsg+="Please enter the Price for Thursday Night tickets\n";
        }
        else
        {
          if (!isNumeric(f.thursdayPrice.value, 2))
          {
            if (errMsg=="") {f.thursdayPrice.focus();}
            errMsg+="The Price for Thursday Night tickets is invalid\n";
          }
        }

        if (empty(f.fridayPrice.value))
        {
          if (errMsg=="") {f.fridayPrice.focus();}
          errMsg+="Please enter the Price for Friday Night tickets\n";
        }
        else
        {
          if (!isNumeric(f.fridayPrice.value, 2))
          {
            if (errMsg=="") {f.fridayPrice.focus();}
            errMsg+="The Price for Friday Night tickets is invalid\n";
          }
        }

        if (empty(f.saturdayMatineePrice.value))
        {
          if (errMsg=="") {f.saturdayMatineePrice.focus();}
          errMsg+="Please enter the Price for Saturday Matinee tickets\n";
        }
        else
        {
          if (!isNumeric(f.saturdayMatineePrice.value, 2))
          {
            if (errMsg=="") {f.saturdayMatineePrice.focus();}
            errMsg+="The Price for Saturday Matinee tickets is invalid\n";
          }
        }


        if (empty(f.saturdayEveningPrice.value))
        {
          if (errMsg=="") {f.saturdayEveningPrice.focus();}
          errMsg+="Please enter the Price for Saturday Evening tickets\n";
        }
        else
        {
          if (!isNumeric(f.saturdayEveningPrice.value, 2))
          {
            if (errMsg=="") {f.saturdayEveningPrice.focus();}
            errMsg+="The Price for Saturday Evening tickets is invalid\n";
          }
        }


        if (empty(f.postage.value))
        {
          if (errMsg=="") {f.postage.focus();}
          errMsg+="Please enter the Postage Charge\n";
        }
        else
        {
          if (!isNumeric(f.postage.value,2))
          {
            if (errMsg=="") {f.postage.focus();}
            errMsg+="The Postage Charge is invalid\n";
          }
        }
      break;

      case "registerForm":
        if (empty(f.memberName.value))
        {
          if (errMsg=="") {f.memberName.focus();}
          errMsg+="Please enter your Name\n";
        }

        if (empty(f.phone.value))
        {
          if (errMsg=="") {f.phone.focus();}
          errMsg+="Please enter your Home Telephone No.\n";
        }

        if (empty(f.email.value))
        {
          if (errMsg=="") {f.email.focus();}
          errMsg+="Please enter your Email Address\n";
        }
        else
        {
          if (!checkEmail(f.email.value))
          {
            if (errMsg=="") {f.email.focus();}
            errMsg+="That Email Address is not valid\n";
          }
        }
      break;

      default:
        return true;
    }

    if (errMsg!="")
    {
      alert(errMsg);
      return false;
    }
    else return true;
  }


  function checkPass(pass)
  { // This checks password is 6-12 chars, starts with a letter and contains
    // only alphanumerics

        if (pass.length<6 || pass.length>12) {return false;}
        var pattern=/^[a-zA-Z][a-zA-Z0-9]{0,11}$/;
    var result=pass.match(pattern);
    if (result==null)
      {
       return false;
      }
      else  return true;
  }

  function checkPhoneNo(phone)
  { // This checks a phone number contains at least 11 digits. It
    // ignores blanks and hyphens
        var p=phone.replace(/ |-/g,""); // Remove blanks or hyphens
        if (p.length<11 || !isNumeric(p)) {return false;}
        else {return true;}
  }

  function checkTime(h,m)
  {
    if (!isNumeric(h) || !isNumeric(m)) {return false;}
        if (h<0 || h>23) {return false;}
        if (m<0 || m>59) {return false;}
        return true;
  }

  function checkURL(URL)
  { // this checks for a valid format URL
    // NB this does not check anything beyond the basic address - ie no parameters
    var pattern=/^(http:\/\/)?[a-zA-Z0-9]+([.|_|-][a-zA-Z0-9]+)*[.]{1}[a-zA-Z0-9]{2,3}/;
    var result=URL.match(pattern);
    if (result==null)
      {
       return false;
      }
      else  return true;
  }

  function empty(s)
  {
    if (s=="" || s==null || isblank(s)) {return true;}
        else {return false;}
  }

  function generateRandomNo(x, y)
  { // This function generates a random integer between x & y
    var range = y - x + 1;
    return Math.floor(Math.random() * range) + x;
  }

  function getElement(id)
  {
    if (document.getElementById) {var elmt=document.getElementById(id);}
    else
    {
      if (document.all) {var elmt=document.all[id];}
          else
          {
            if (document.layers) {var elmt=document.layers[id];}
            else elmt=false;
          }
    }
    return elmt;
  }

  function isblank (s)
  { // Returns false if field contains any non-blank chars other than new line
    for (var i=0; i<s.length; i++) {
      var c=s.charAt(i);
          if (c!=" " && c!="\n" && c!="") {
          return false;
          }
    }
    return true;
  }


  function isNumeric (number, decPlaces)
  { // This function checks for numerics with a maximum of decPlaces decimal places
    var pattern="/^[0-9]+$/";
    if (decPlaces!='0')
    { // Decimal places allowed
      var dPlaces=2;
      var strPlaces=String(decPlaces);
      var result=strPlaces.match(pattern);
      if (result)  {dPlaces=decPlaces;}
      pattern=eval("/^[0-9]+([.][0-9]{1," + dPlaces + "})?$/");
    }
    var result=number.match(pattern);
    return result;
  }


  function makeTime(f, timeName)
  { // Returns a string containng the time in hh:mm form
    var opt=eval("f." + timeName + "Hour.selectedIndex");
        var hour=eval("f." + timeName + "Hour.options[opt].text");
        opt=eval("f." + timeName + "AmPm.selectedIndex");
        var amPm=eval("f." + timeName + "AmPm.options[opt].text");
        opt=eval("f." + timeName + "Minutes.selectedIndex");
        var minutes=eval("f." + timeName + "Minutes.options[opt].text");
        if (amPm=="pm" && hour!=12) {hour=Number(hour)+12;}
        else
        {
          if (hour<10) {hour="0"+hour;}
        }
        if (minutes<10) {minutes="0" + minutes;}
        return hour+":"+minutes;
  }


  function newWindow(url, w, h)
  { // Opens URL w in a new window positioned top left and ensures it has the focus
    if (!w) {var wide=400;} else {wide=w;}
        if (!h) {var high=450;} else {high=h;}
        var paras="width=" + wide + ",height=" + high + "align=center scrollbars=yes, left=0, top=0, screenx=0, screeny=0";
    var x=window.open(url, "newWindow", paras);
        x.window.focus();
  }

  function validateDate(f, dateName)
  {
        var opt=eval("f." + dateName + "Day.selectedIndex");
        var day=eval("f." + dateName + "Day.options[opt].text");
        opt=eval("f." + dateName + "Month.selectedIndex");
        var month=eval("f." + dateName + "Month.options[opt].value");
        opt=eval("f." + dateName + "Year.selectedIndex");
        var year=eval("f." + dateName + "Year.options[opt].text");
        return checkDate(day, month, year);
  }

  function validateSlashDate(ddmmyy)
  {
    var dateArray=ddmmyy.split("/");
        var d=dateArray[0];
        var m=dateArray[1];
        var y=dateArray[2];
        if (empty(d) || empty(m) || empty(y)) {return false;}
        var valid=checkDate(d, m, y);
        return valid;
  }

// Application specific functions

    function changeRow(r)
  {
    if (document.getElementById)
        { // Check if browser supports the method
          var e=document.getElementById("w2");
      if (!e.innerText)
          {return;}
    }
        else {return;}

    r.className='on';
        var count=r.children.length;
        var id=r.children[0].value;
        for (i=0;i<count;i++)
        { // Set
          r.children[i].className="on";
        }

        var memberID=r.id;  // Member ID
    var extraInfo="";
        var mobileID="jsmobile" + memberID;
        var mobileNo=document.EOSMemberForm[mobileID].value;
        var addressID="jsaddress" + memberID;
    var address4=document.EOSMemberForm[addressID].value;
    if (address4!=""){extraInfo+=address4 + "\n";}
    if (mobileNo!=""){extraInfo+="Mobile: " + mobileNo + "\n";}

    var pos=r.offsetTop;
        if (extraInfo!="")
        {
          e.innerText=extraInfo;
//        alert ("rtop=" + r.offsetTop);
          e.style.top=pos-20;
          e.className="window2";
        }

  }

  function changeRowBack(r)
  {
    if (document.getElementById)
        { // Check if browser supports the method
          var e=document.getElementById("w2");
      if (!e.innerText)
          {return;}
    }
        else {return;}

    r.className='off';
        var count=r.children.length;
        for (i=0;i<count;i++)
        {
          r.children[i].className="off";
        }
    var e=document.getElementById("w2");
        e.className="window3";
  }

  function setWindow()
  {
    if (document.getElementById)
        { // Check if browser supports the method
          var main=document.getElementById("outerDiv");
    }
        else {return;}
        var w=window.screen.availWidth*9/10;
        main.style.width=w;
        main.style.visibility="visible";

  }


  function setBrowserOK(f)
  {
    if (document.getElementById)
        { // Check if browser supports the method
          var main=document.getElementById("outerDiv");
    }
        else {return;}
        f.bCapable.value="Y";
  }

  function turnOnOff(e)
  {
//    alert ("value= " + e.value);
    if (document.getElementById)
        {
//          alert ("td=yes");
          var td=document.getElementById("eTd");
        }
        else {return;}

        if (e.value=="no")
        {
          td.className="visibleOn";
          for (var i=0; i<statusArray.length; i++)
          {
            var b=document.getElementById(statusArray[i]);
            b.disabled=false;
          }
        }
        else
        {
          td.className="visibleOff";

          for (var i=0; i<statusArray.length; i++)
          {
            var b=document.getElementById(statusArray[i]);
            b.disabled=true;
          }
    }
  }

  function highlightRow(r)
  {
    if (r.className=="currentOff")  {r.className="currentOn";}
    else {r.className="currentOff";} 
  }
