function valEmail(oField)
{
  if(! validateEmail(oField.value))
  {
    alert('Invalid Email address.');
    oField.focus();
    return false;
  }
  return true;
}

function valInt(oField)
{
  var sNum = Trim(oField.value);
  if(sNum == '')
    return true;
  sNum = toInt(sNum);
  if(sNum == '')
  {
    alert('Please enter only numbers.');
    oField.focus();
    return false;
  }
  else
  {
    oField.value = sNum;
  }
  return true;
}

function valMoney(oField)
{
  var sVal = Trim(oField.value);
  var ch = '';
  var bOK = true;
  var nCount = 0;
  for(var i = 0; i < sVal.length && bOK; i++)
  {
    ch = sVal.substring(i, i + 1);
    if(ch < '0' || ch > '9')
    {
      if(ch == '.')
      {
        nCount++;
        if(nCount > 1)
        {
          bOK = false;
        }
      }
      else
      {
        bOK = false;
      }
    }
  }
  if(bOK)
    return true;
  alert('Please enter only numbers.');
  oField.focus();
  return false;
}

function valChar(oField, sValues)
{
  var sTemp = Trim(oField.value);
  var sMsg = '';
  if(sTemp == '') return true;
  sTemp = sTemp.toUpperCase();
  if(sValues.indexOf(sTemp) < 0)
  {
    for(var i = 0; i < sValues.length; i++)
    {
      if(sMsg > '')
        sMsg += ', ';
      sMsg += sValues.substring(i, i + 1);
    }
    alert('Valid values are ' + sMsg);
    oField.focus();
    oField.select();
    return false;
  }
  oField.value = sTemp;
  return true;
}

function valPercent(oField)
{
  var sNum = Trim(oField.value);
  if(sNum == '') return true;
  sNum = toInt(sNum);
  if(sNum == '')
  {
    alert('Please enter a number between 0 and 100.');
    oField.focus();
    return false;
  }
  else
  {
    var nTemp = sNum * 1;
    if(nTemp > 100 || nTemp < 0)
    {
      alert('Please enter a number between 0 and 100.');
      oField.focus();
      oField.select();
      return false;
    }
    oField.value = sNum;
  }
  return true;
}

function valZipCode(oField)
{
  var sNum = Trim(oField.value);
  if(sNum == '')
    return true;
  sNum = toInt(sNum);
  if(sNum.length != 5)
  {
    alert('Invalid Zip Code.');
    oField.focus();
    return false;
  }
  return true;
}

function validateZIP(field) {
var valid = "0123456789-";
var hyphencount = 0;

if (field.length!=5 && field.length!=10) {
alert("Please enter your 5 digit or 5 digit+4 zip code.");
return false;
}
for (var i=0; i < field.length; i++) {
temp = "" + field.substring(i, i+1);
if (temp == "-") hyphencount++;
if (valid.indexOf(temp) == "-1") {
alert("Invalid characters in your zip code.  Please try again.");
return false;
}
if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
return false;
   }
}
return true;
}

function valYear(oField)
{
  var sYear = Trim(oField.value);
  if(sYear == '')
    return true;
  var nYear = validateYear(sYear, true);
  if(nYear > 0)
  {
    oField.value = nYear;
  }
  else
  {
    alert('Invalid Year.');
    oField.focus();
    oField.select();
    return false;
  }
  return true;
}

function valBDate(oField)
{
  var sDate = Trim(oField.value);
  if(sDate == '')
    return true;
  sDate = ConvDate(sDate, false);
  if(sDate == '')
  {
    alert('Invalid Date');
    oField.focus();
    return false;
  }
  oField.value = sDate;
  return true;
}

function valDate(oField)
{
  var sDate = Trim(oField.value);
  if(sDate == '')
    return true;
  sDate = ConvDate(sDate, true);
  if(sDate == '')
  {
    alert('Invalid Date');
    oField.focus();
    return false;
  }
  oField.value = sDate;
  return true;
}

function valDateTime(oField)
{
  var sDate = Trim(oField.value);
  var sTime = '';
  var i = 0;
  if(sDate == '')
    return true;
  i = sDate.indexOf(' ');
  if(i >= 0)
  {
    sTime = sDate.substr(i+1);
    sDate = sDate.substr(0, i);
  }
  sDate = ConvDate(sDate, true);
  if(sDate == '')
  {
    alert('Invalid Date');
    oField.focus();
    return false;
  }
  sTime = ConvTime(sTime);
  oField.value = Trim(sDate + ' ' + sTime);
  return true;
}


function valPhone2(oField)
{
  var sPhone = Trim(oField.value);
  if(sPhone == '')
    return true;
  sPhone = FormatPhone2(sPhone);
  if(sPhone == '')
  {
    alert('Invalid Phone Number.');
    oField.focus();
    return false;
  }
  else
  {
    oField.value = sPhone;
  }
  return true;
}

function valPhone2(oField)
{
  var sPhone = Trim(oField.value);
  if(sPhone == '')
    return true;
  sPhone = FormatPhone2(sPhone);
  if(sPhone == '')
  {
    alert('Invalid Phone Number.');
    oField.focus();
    return false;
  }
  else
  {
    oField.value = sPhone;
  }
  return true;
}


function fullPhone2(oField)
{
  var sPhone = Trim(oField.value);
  if(sPhone == '')
    return true;
  sPhone = FormatPhone2(sPhone);
  if(sPhone == '')
  {
    alert('Invalid Phone Number.');
    oField.focus();
    return false;
  }
  if(sPhone.length < 14)
  {
    alert('Please include the area code.')
    oField.focus();
    return false;
  }
  if(sPhone.length > 14)
  {
    alert('Please enter only the area code and phone number. (999.999.9999)');
    oField.focus();
    return false;
  }
  oField.value = sPhone;
  return true;
}


function valPhone(oField)
{
  var sPhone = Trim(oField.value);
  if(sPhone == '')
    return true;
  sPhone = FormatPhone(sPhone);
  if(sPhone == '')
  {
    alert('Invalid Phone Number.');
    oField.focus();
    return false;
  }
  else
  {
    oField.value = sPhone;
  }
  return true;
}

function fullPhone(oField)
{
  var sPhone = Trim(oField.value);
  if(sPhone == '')
    return true;
  sPhone = FormatPhone(sPhone);
  if(sPhone == '')
  {
    alert('Invalid Phone Number.');
    oField.focus();
    return false;
  }
  if(sPhone.length < 14)
  {
    alert('Please include the area code.')
    oField.focus();
    return false;
  }
  if(sPhone.length > 14)
  {
    alert('Please enter only the area code and phone number. (999.999.9999)');
    oField.focus();
    return false;
  }
  oField.value = sPhone;
  return true;
}

function toNum(sParam)
{
  var n = 0;
  var m = 0;
  var sTemp = toInt(sParam);
  for (n = 0; n < sTemp.length && sTemp.charAt(n) == '0'; n++);
  for (m = sTemp.length - 1; m > n && sTemp.charAt(m) == ' '; m--);
  sTemp = sTemp.substring(n, m + 1);
  if(sTemp == '')
    return 0;
  else
    return sTemp * 1;
}

function toInt(sParam)
{
  var sReturn = '';
  var sVal = Trim(String(sParam));
  var ch = '';
  for(var i = 0; i < sVal.length; i++)
  {
    ch = sVal.substring(i, i + 1);
    if(ch >= '0' && ch <= '9')
      sReturn += ch;
    else
      break;
  }
  return sReturn;
}

function convInt(sVal)
{
  var sNum = toInt(sVal);
  if(sNum == '')
    return 0;
  else
    return sNum * 1;
}

function valEntry(oField, sPrompt)
{
  var sType = oField.type;
  switch(sType)
  {
    case 'text':
    {
      if(Trim(oField.value) == '')
      {
        alert(sPrompt);
        oField.focus();
        return false;
      }
    }
    case 'select-one':
    {
      if(oField.selectedIndex == 0)
      {
        alert(sPrompt);
        oField.focus();
        return false;
      }
    }
  }
  return true;
}

function toDbl(sParam, nDec)
{
  var sReturn = '';
  var havedec = false;
  var sVal = Trim(sParam);
  var deccount = nDec;
  var i = 0;
  if(sVal.substring(0, 1) == '-')
  {
    i++;
    sReturn = '-';
  }
  for (; i < sVal.length; i++)
  {
    var ch = sVal.substring(i, i + 1);
    if(ch < '0' || ch > '9')
    {
      if(ch == '.')
      {
        if(havedec)
        {
          return sReturn;
        }
        else
        {
          if(sReturn == '' || sReturn == '-')
          {
            sReturn += '0';
          }
          havedec = true;
          sReturn += ch;
        }
      }
    }
    else
    {
      if(havedec)
      {
        if(deccount < 1)
          return sReturn;
        deccount--;
      }
      sReturn += ch;
    }
  }
  return sReturn;
}

function convDbl(sVal)
{
  var sNum = toDbl(sVal, 2);
  if(sNum == '')
    return 0;
  else
    return sNum * 1;
}

function validateEmail(sVal)
{
  var nPos = 0;
  var i = 0;
  var sChr = '';
  var sAddr = Trim(sVal);
  var sDomain = '';
  if(sAddr == '')
    return true;
  if(sAddr.length < 7)
      return false;
  nPos = sAddr.indexOf('@');
  if(nPos > 0)
  {
    sDomain = Trim(sAddr.substring(nPos + 1));
    sAddr = sAddr.substring(0, nPos);
    nPos = sDomain.indexOf('.');
    if(nPos < 1)
      sDomain = '';
  }
  else
  {
    sDomain = '';
    sAddr = '';
  }
  if(sDomain == '')
    return false;
  if(sAddr == '')
    return false;
  for(i = 0; i < sAddr.length; i++)
  {
    sChr = sAddr.substring(i, i + 1);
    if(sChr == ' ' || sChr == '|')
      return false;
  }
  
  for(i = 0; i < sDomain.length; i++)
  {
    sChr = sDomain.substring(i, i + 1);
    if(sChr == ' ' || sChr == '|')
      return false;
  }
  
  return true;
}

function validateYear(aYear, bFuture)
{
  
  var nYear = toInt(aYear);
  if(nYear == '')
    return 0;
  nYear -= 0; 
  var dToday = new Date();
  var nCurrentYear = dToday.getFullYear() % 100;
  var nCent = Math.floor(dToday.getFullYear() / 100);
  if(nYear < 100)
  {
    if(bFuture)
    {
      if(nCurrentYear <= 50)
      {
        if(nYear >= (nCurrentYear + 50)) nCent--;
      } 
      else
      {
        if(nYear <= (nCurrentYear - 50)) nCent++;
      }
    }
    else
    {
      if(nYear > nCurrentYear) nCent--;
    }
    nYear += nCent * 100;
  }
  if(nYear < 1753)
    nYear = 1753;
  if(nYear > 9999)
    nYear = dToday.getFullYear();
  return nYear;
}

function ConvTime(theTime)
{
  var sHour = '0';
  var sMinute = '0';
  var sSecond = '0';
  var sAMPM = '';
  var sTemp = '';
  var sItem = '';
  var nTemp = 0;
  var nPos = 0;
  
  sTemp = Trim(theTime);
  if(sTemp > '')
  {
    nPos = sTemp.indexOf(':');
    if(nPos >= 0)
    {
      sItem = sTemp.substr(0, nPos);
      sTemp = sTemp.substr(nPos + 1);
    }
    else
    {
      sItem = sTemp;
      sTemp = '';
    }
    nTemp = toNum(sItem);
    if(nTemp > 23) nTemp = 0;
    if(nTemp > 11) sAMPM = 'PM';
    if(nTemp > 12) nTemp -= 12;
    sHour = String(nTemp);
  }
  if(sTemp > '')
  {
    nPos = sTemp.indexOf(':');
    if(nPos >= 0)
    {
      sItem = sTemp.substr(0, nPos);
      sTemp = sTemp.substr(nPos + 1);
    }
    else
    {
      sItem = sTemp;
      sTemp = '';
    }
    nTemp = toNum(sItem);
    if(nTemp > 59) nTemp = 0;
    sMinute = String(nTemp);
  }
  
  if(sTemp > '')
  {
    nPos = sTemp.indexOf(' ');
    if(nPos >= 0)
    {
      sItem = sTemp.substr(0, nPos);
      sTemp = sTemp.substr(nPos + 1);
    }
    else
    {
      sItem = sTemp;
      sTemp = '';
    }
    nTemp = toNum(sItem);
    if(nTemp > 59) nTemp = 0;
    sSecond = String(nTemp);
  }
  
  if(sTemp > '')
  {
    sAMPM = Trim(sTemp.toUpperCase());
    if(! (sAMPM == 'AM' || sAMPM == 'PM'))
      sAMPM = '';
    
  }
  if(sHour.length < 2) sHour = '0' + sHour;
  if(sMinute.length < 2) sMinute = '0' + sMinute;
  if(sSecond.length < 2) sSecond = '0' + sSecond;
  
  return Trim(sHour + ':' + sMinute + ':' + sSecond + ' ' + sAMPM);
}

function ConvDate(theDate, bFuture)
{
  var iPos = 0;
  var dToday = new Date();
  var nCent, nYear, nMonth, nDay;
  var dResult;
  var sSep = '';

  if ((iPos = theDate.indexOf('-')) >= 0)
  {
    sSep = '-';
  }
  else
  {
    if ((iPos = theDate.indexOf('/')) >= 0) 
      sSep = '/';
  }

  if (sSep == '') 
  {
    switch (theDate.length) 
    {
    case 1:
      return '';
    case 2:
      nMonth = theDate.substring(0, 1) - 0;
      nDay = theDate.substring(1, 2) - 0;
      nYear = dToday.getFullYear();
      break;
    case 3:
      nMonth = theDate.substring(0, 2) - 0;
      if(nMonth > 12)
      {
        nMonth = theDate.substring(0, 1) - 0;
        nDay = theDate.substring(1, 3) - 0;
      }
      else
      {
        nDay = theDate.substring(2, 4) - 0;
        if(nDay > 31)
        {
          nMonth = theDate.substring(0, 1) - 0;
          nDay = theDate.substring(1, 3) - 0;
        }
      }
      nYear = dToday.getFullYear();
      break;
    case 4:
      nMonth = theDate.substring(0, 2) - 0;
      nDay = theDate.substring(2, 4) - 0;
      nYear = dToday.getFullYear();
      break;
    case 5:
      nMonth = theDate.substring(0, 1) - 0;
      nDay = theDate.substring(1, 3) - 0;
      nYear = theDate.substring(3) - 0;
      nYear = validateYear(nYear, bFuture);
      break;
    case 6:
      nMonth = theDate.substring(0, 2) - 0;
      nDay = theDate.substring(2, 4) - 0;
      nYear = theDate.substring(4) - 0;
      nYear = validateYear(nYear, bFuture);
      break;
    case 7:
      nMonth = theDate.substring(0, 2) - 0;
      if(nMonth > 12)
      {
        nMonth = theDate.substring(0, 1) - 0;
        nDay = theDate.substring(1, 3) - 0;
      }
      else
      {
        nDay = theDate.substring(2, 3) - 0;
      }
      nYear = theDate.substring(3) - 0;
      nYear = validateYear(nYear, bFuture);
      break;
    case 8:
      nMonth = theDate.substring(0, 2) - 0;
      nDay = theDate.substring(2, 4) - 0;
      nYear = theDate.substring(4) - 0;
      nYear = validateYear(nYear, bFuture);
      break;
    }
  } 
  else // sSep <> ''
  {
    nMonth = theDate.substring(0, iPos) - 0;
    theDate = theDate.substring(iPos + 1);
    iPos = theDate.indexOf(sSep);
    if (iPos == -1) 
    {
      nDay = theDate - 0;
      nYear = dToday.getFullYear();
    }
    else
    {
      nDay = theDate.substring(0, iPos) - 0;
      if (iPos == (theDate.length - 1)) 
      {
        nYear = dToday.getFullYear();
      } 
      else
      {
        nYear = theDate.substring(iPos + 1) - 0;
        nYear = validateYear(nYear, bFuture);
      }
    }
  }
  dResult = new Date(nYear, nMonth - 1, nDay);
  if (isNaN(dResult)) return '';
  if (nYear == dResult.getFullYear() && nMonth == (dResult.getMonth() + 1) && nDay == dResult.getDate()) 
    return nMonth + '/' + nDay + '/' + nYear;
  return '';
}

function FormatPhone(sNumber)
{
  var sVal = ExtractNumeric(sNumber, false, false);
  var nLen = sVal.length;
  if (nLen < 7) return '';
  switch (nLen) 
  {
    case 7:
    {
      return sVal.substring(0, 3) + '-' + sVal.substring(3, 7);
    }
    case 8:
    {
      return sVal.substring(0, 1) + '-' + sVal.substring(1, 4) + '-' + sVal.substring(4, 8);
    }
    case 9:
    {
      return sVal.substring(0, 2) + '-' + sVal.substring(2, 5) + '-' + sVal.substring(5, 9);
    }
    case 10:
    {
      return '(' + sVal.substring(0, 3) + ') ' + sVal.substring(3, 6) + '-' + sVal.substring(6, 10);
    }
    default:
    {
      return sNumber;
    }
  }
}

function FormatPhone2(sNumber)
{
  var sVal = ExtractNumeric(sNumber, false, false);
  var nLen = sVal.length;
  if (nLen < 7) return '';
  switch (nLen) 
  {
    case 7:
    {
      return sVal.substring(0, 3) + ' ' + sVal.substring(3, 7);
    }
    case 8:
    {
      return sVal.substring(0, 1) + ' ' + sVal.substring(1, 4) + ' ' + sVal.substring(4, 8);
    }
    case 9:
    {
      return sVal.substring(0, 2) + ' ' + sVal.substring(2, 5) + ' ' + sVal.substring(5, 9);
    }
    case 10:
    {
      return '' + sVal.substring(0, 3) + ' ' + sVal.substring(3, 6) + ' ' + sVal.substring(6, 10);
    }
    default:
    {
      return sNumber;
    }
  }
}

function Trim(vVal)
{
  var sVal = vVal + '';
  var m,n;
  for (n = 0; n < sVal.length && sVal.charAt(n) == ' '; n++);
  for (m = sVal.length - 1; m > n && sVal.charAt(m) == ' '; m--);
  return sVal.substring(n, m + 1);
}

function ExtractAlpha(sVal)
{
  var n = 0;
  var sRes = '';
  var sChar = '';
  for (n = 0; n < sVal.length; n++)
  {
    sChar = sVal.charAt(n);
    if ((sChar >= 'A' && sChar <= 'Z') || (sChar >= 'a' && sChar <= 'z') || sChar == ' ')
      sRes += sChar;
  }
  return sRes;
}

function ExtractNumeric(sVal, nDec, bNeg)
{
  var n = 0, sRes = '', sChar;
  if (bNeg)
  {
    sChar = sVal.substring(0, 1);
    if (sChar == '-')
    {
      sRes = '-';
      n = 1;
    }
    else if (sChar == '+')
    {
      n = 1;
    }
  }
  if (nDec > 0)
  {
    var bDec = true;
    for (; n < sVal.length; n++)
    {
      sChar = sVal.charAt(n);
      if (sChar >= '0' && sChar <= '9')
      {
        sRes += sChar;
      }
      else if (sChar == '.' && bDec)
      {
        sRes += '.';
        bDec = false;
      }
    }
  }
  else
  {
    for (; n < sVal.length; n++)
    {
      sChar = sVal.charAt(n);
      if (sChar >= '0' && sChar <= '9')
      {
        sRes += sChar;
      }
    }
  }
  return sRes;
}

function setIndex(oSelect, sValue, bText)
{
  for(var i = 0; i < oSelect.length; i++)
  {
    if(bText)
    {
      if(oSelect.options[i].text == sValue)
      {
        oSelect.selectedIndex = i;
        return;
      }
    }
    else
    {
      if(oSelect.options[i].value == sValue)
      {
        oSelect.selectedIndex = i;
        return;
      }
    }
  }
  oSelect.selectedIndex = 0;
  return;
}

function getField(sName)
{
  for(var i = 0; i < document.Form1.length; i++)
  {
    if(document.Form1.elements[i].name == sName)
      return document.Form1.elements[i];
  }
  return null;
}