function FieldValidate(field,strType) {

// General purpose validation code
// Call with either   date, num, money, alpha or char as the type


 var valid;
 var DateMsg = new Array ("0",
                   "The date is not formated correctly - use DD/MM/YYYY",
                   "The day entered is not numeric",
                   "The month entered is not numeric",
                   "The year entered is not numeric",
                   "Month number must be between 1 and 12",
                   "Number of days must be 31 or less",
                   "Number of days must be 30 or less",
                   "The day number must be 1 or more",
                   "February only has 29 days (leap year)",
                   "February only has 28 days");

 if (strType.toLowerCase() == "int")
   valid = "0123456789 ";
 else if (strType.toLowerCase() == "num")
   valid = "0123456789+-., ";
 else if (strType.toLowerCase() == "money")
   valid = "0123456789.,£$ ";
 else if (strType.toLowerCase() == "alpha")
   valid = "abcdefghijklmnopqrstuvwxyz -,.";
 else if (strType.toLowerCase() == "char")
   valid = "abcdefghijklmnopqrstuvwxyz0123456789 -,.";
 else
   valid = "";
 
 var ok = "yes";
 var temp;

 if (strType.toLowerCase() == "date") {

  var DateErr = chkdate(field);
  if (DateErr > 0) {
   alert( DateMsg[DateErr] );
   ok = "no";
  }

 } else {

  for (var i=0; i<field.value.length; i++) {
   temp = "" + field.value.substring(i, i+1).toLowerCase();
   if (valid.indexOf(temp) == "-1") ok = "no";
  }

 }

 if (ok == "no")
  return false
 else
  return true;
}


function chkdate(objName) {
 //var strDatestyle = "US"; //United States date style
 var strDatestyle = "EU";  //European date style
 var strDate;
 var strDateArray;
 var strDay;
 var strMonth;
 var strYear;
 var intday;
 var intMonth;
 var intYear;
 var booFound = false;
 var datefield = objName;
 var strSeparatorArray = new Array("-"," ","/",".");
 var intElementNr;
 var err = 0;
 var strMonthArray = new Array(12);
 strMonthArray[0] = "Jan";
 strMonthArray[1] = "Feb";
 strMonthArray[2] = "Mar";
 strMonthArray[3] = "Apr";
 strMonthArray[4] = "May";
 strMonthArray[5] = "Jun";
 strMonthArray[6] = "Jul";
 strMonthArray[7] = "Aug";
 strMonthArray[8] = "Sep";
 strMonthArray[9] = "Oct";
 strMonthArray[10] = "Nov";
 strMonthArray[11] = "Dec";
 strDate = datefield.value;

 if (strDate.length < 1) {
  return err;
 }

 for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
  if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
   strDateArray = strDate.split(strSeparatorArray[intElementNr]);
   if (strDateArray.length != 3) {
    err = 1;
    return err;
   } else {
    strDay = strDateArray[0];
    strMonth = strDateArray[1];
    strYear = strDateArray[2];
   }
   booFound = true;
  }
 }

 if (booFound == false) {
  if (strDate.length>5) {
   strDay = strDate.substr(0, 2);
   strMonth = strDate.substr(2, 2);
   strYear = strDate.substr(4);
  } else {
    err = 1;
    return err;
  }
 }

 if (strYear.length == 2) {
  strYear = '20' + strYear;
 }

// US style
 if (strDatestyle == "US") {
  strTemp = strDay;
  strDay = strMonth;
  strMonth = strTemp;
 }
 intday = parseInt(strDay, 10);
 if (isNaN(intday)) {
  err = 2;
  return err;
 }
 intMonth = parseInt(strMonth, 10);
 if (isNaN(intMonth)) {
  for (i = 0;i<12;i++) {
   if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
    intMonth = i+1;
    strMonth = strMonthArray[i];
    i = 12;
   }
  }
  if (isNaN(intMonth)) {
   err = 3;
   return err;
  }
 }
 intYear = parseInt(strYear, 10);
 if (isNaN(intYear)) {
  err = 4;
  return err;
 }
 if (intMonth>12 || intMonth<1) {
  err = 5;
  return err;
 }
 if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
  err = 6;
  return err;
 }
 if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
  err = 7;
  return err;
 }
 if (intday < 1) {
  err = 8;
  return err;
 }
 if (intMonth == 2) {
  if (LeapYear(intYear) == true) {
   if (intday > 29) {
    err = 9;
    return err;
   }
  }
  else {
   if (intday > 28) {
    err = 10;
    return err;
   }
  }
 }
 if (strDatestyle == "US") {
  datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
 } else {
  datefield.value = intday + " " + strMonthArray[intMonth-1] + " " + strYear;
 }
 return err;
}

function LeapYear(intYear) {
 if (intYear % 100 == 0) {
  if (intYear % 400 == 0) { return true; }
 } else {
  if ((intYear % 4) == 0) { return true; }
 }
 return false;
}

