function check(fStrType, fStrId, fStrError, fBlnEmpty, fIntLength)
{
   var field = document.getElementById(fStrId);
   var blnReturn = true;

   if(fBlnEmpty)
   {
      var field1 = field;

      if(!field)
      {
         if(fStrType == 'date')
         {
            field    = document.getElementById('rd' + fStrId);
            field1   = document.getElementById('rj' + fStrId);
         }
         if(fStrType == 'postcodesplit' || fStrType == 'zipcodesplit')
         {
            field    = document.getElementById('num' + fStrId);
            field1   = document.getElementById('char' + fStrId);
         }
      }

      if(field.value == "" && field1.value == "")
      {
         return true;
      }
   }

   switch(fStrType)
   {
      case 'checkbox' :
         blnReturn = checkCheckbox(field);
         break;
      case 'date' :
         blnReturn = checkDate(fStrId);
         break;
      case 'email' :
         blnReturn = checkEmail(field);
         break;
      case 'number' :
         blnReturn = checkNumber(field);
         break;
      case 'password' :
      case 'select' : 
      case 'text' :
      case 'textarea' :
         blnReturn = checkEmpty(field);
         break;
      case 'phone' :
         blnReturn = checkPhone(field);
         break;
      case 'postcode' :
      case 'zipcode' :
         blnReturn = checkZipCode(field);
         break;
      case 'postcodesplit' :
      case 'zipcodesplit' :
         blnReturn = checkZipCodeSplit(fStrId);
         break;
      case 'radio' :
         blnReturn = checkRadio(field, fIntLength);
         break;
   }

   if(!blnReturn)
   {
      alert(fStrError);
      field.focus();
   }

   return blnReturn;
}

function checkCheckbox(fObjField)
{
   return fObjField.checked;
}

function checkDate(fObjField)
{
   fObjField = (typeof fObjField == "string") ? fObjField : fObjField.id;

   year  = document.getElementById("rj" + fObjField);
   month = document.getElementById("rm" + fObjField);
   day   = document.getElementById("rd" + fObjField);

   if(!year || !month || !day)
   {
      return false;
   }

   if(checkEmpty(year) && checkEmpty(day))
   {
      var testDate = new Date(parseInt(year.value), parseInt(month.value) - 1, parseInt(day.value));
      year.value  = testDate.getFullYear();
      month.value = testDate.getMonth();
      day.value   = testDate.getDate();
   }
}

function checkEmpty(fObjField)
{
   if(trim(fObjField.value) == "")
   {
      return false;
   }
   return true;
}

function checkEmail(fObjField)
{
   var regEmail = new RegExp("^[A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[@]" + 
      "[A-Za-z0-9][A-Za-z0-9]+([.-][A-Za-z0-9-]+)*[.]([A-Za-z]){2,6}$");
   return regEmail.test(fObjField.value);
}

function checkNumber(fObjField)
{
   var regNumber = new RegExp("^([0-9]+)$");
   return regNumber.test(fObjField.value);
}

function checkPhone(fObjField)
{
   var regPhone = new RegExp("^([+.()_-]*([0-9])){10,15}$");
   return regPhone.test(fObjField.value);
}

function checkZipCode(fObjField)
{
   var regZip = new RegExp("^([0-9]){4}( ?)[A-Za-z]{2}$");
   return regZip.test(fObjField.value);
}

function checkZipCodeSplit(fstrId)
{
   var zipNum = document.getElementById('num' + fStrId);
   var zipChr = document.getElementById('char' + fStrId);

   var regNum  = new RegExp("^([0-9]){4}$");
   var regChr  = new RegExp("^[A-Za-z]{2}$");

   if(!zipNum || !zipChr)
   {
      return false;
   }

   if(!regNum.test(zipNum) || !regChr.test(zipChr))
   {
      return false;
   }
   return true;
}

function checkRadio(fObjField, fIntLength)
{
   var checked = false;
   for(i=0; i<fIntLength; i++)
   {
      if(fObjField[i].checked = true)
      {
         checked = true;
      }
   }
   return checked;
}

function changeDay(fStrId, fIntCount)
{
   var day = document.getElementById("rd" + fStrId);

   if(!day) return false;

   var value = parseInt(day.value);
   if(trim(day.value) == "")
   {
      value = 1;
   }
   day.value = value + fIntCount;

   checkDate(fStrId);
   return false;
}

function changeYear(fStrId, fIntCount)
{
   var year = document.getElementById("rj" + fStrId);
   if(!year) return false;

   var value = parseInt(year.value);
   if(trim(year.value) == "")
   {
      value = 1960;
   }

   valueNew = value + fIntCount;
   if(valueNew < 1900 || valueNew > 3000)
   {
      valueNew = value;
   }

   year.value = valueNew;

   checkDate(fStrId);

   return false;
}

function trim(fStrValue)
{
   return fStrValue.replace(/^\s*|\s*$/g,"");
}
