function FormatNum(nVal, nDec, bDollar)
{
  var nStart = 0;
  var sVal = '';
  var sReturn = '';
  var sDec = '';
  var sInt = '';
  var sNeg = '';
  var i = 0;
  sVal = toDbl(nVal, nDec);
  if(sVal == '')
    return sVal;
  sNeg = sVal.substring(0, 1);
  if(sNeg == '-')
  {
    sVal = sVal.substring(1);
  }
  else
  {
    sNeg = '';
  }
  if(nDec > 0)
  {
    nStart = sVal.indexOf('.');
    if (nStart >= 0)
    {
      sDec = sVal.substring(nStart);
      sInt = sVal.substring(0, nStart);
    }
    else
    {
      sInt = sVal;
      sDec = '.';
    }
    nStart = sDec.length - 1;
    for(i = nStart; i < nDec; i++)
      sDec += '0';
  }
  else
  {
    sInt = ExtractNumeric(sVal, nDec , false);
    sDec = '';
  }
  nStart = 0;
  for(i = sInt.length; i > 0; i--)
  {
    nStart++;
    sReturn = sInt.charAt(i-1) + sReturn;
    if (nStart > 2 && i > 1)
    {
      nStart = 0;
      sReturn = ',' + sReturn;
    }
  }
  sReturn = sNeg + sReturn;
  if(bDollar) sReturn = '$' + sReturn;
  sReturn += sDec;
  return sReturn;
}

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
        {
          havedec = true;
          sReturn += ch;
        }
      }
    }
    else
    {
      if(havedec)
      {
        if(deccount < 1)
          return sReturn;
        deccount--;
      }
      sReturn += ch;
    }
  }
  return sReturn;
}

function validateEmail(sVal)
{
  if (Trim(sVal).length == 0)
    return true;
  var oExp = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
  return oExp.test(sVal);
}

function validateDate(sVal)
{
  if (Trim(sVal).length == 0)
    return true;
  if(ConvDate(sVal).length == 0)
    return false;
  else
    return true;
}

function validateYear(aYear)
{
  var nYear = ExtractNumeric(aYear, 0, false);
  if(nYear == '')
    return(0);
  nYear -= 0;
  if(nYear < 100)
  {
    var dToday = new Date();
    var nCurrentYear = dToday.getFullYear() % 100;
    var nCent = Math.floor(dToday.getFullYear() / 100);
    if (nCurrentYear <= 50)
    {
      if(nYear >= (nCurrentYear + 50)) nCent--;
    } 
    else if (nCurrentYear > 50) 
    {
      if(nYear <= (nCurrentYear - 50)) nCent++;
    }
    nYear += nCent * 100;
  }
  if(nYear < 1753)
    nYear = 1753;
  if(nYear > 9999)
    nYear = new Date().getFullYear();
  return nYear;
}

function ConvDate(theDate)
{
  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);
      break;
    case 6:
      nMonth = theDate.substring(0, 2) - 0;
      nDay = theDate.substring(2, 4) - 0;
      nYear = theDate.substring(4) - 0;
      nYear = validateYear(nYear);
      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);
      break;
    case 8:
      nMonth = theDate.substring(0, 2) - 0;
      nDay = theDate.substring(2, 4) - 0;
      nYear = theDate.substring(4) - 0;
      nYear = validateYear(nYear);
      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);
      }
    }
  }
  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 validatePhone(sNumber)
{
  if(Trim(sNumber).length == 0)
    return true;
  if(FormatPhone(sNumber).length == 0)
    return false;
  return true;
}

function FormatPhone(sNumber)
{
  var sVal = ExtractNumeric(sNumber, 0, false);
  var nPos = 0;
  var nLen = sVal.length;
  var sReturn = '';
  if (nLen < 7)
  {
    return sReturn;
  }
  if (nLen < 8 )
  {
    sReturn = sVal.substring(0, 3) + '-' + sVal.substring(3, 7);
    return sReturn;
  }
  if (nLen < 9)
  {
    sReturn = sVal.substring(0, 1) + '-' + sVal.substring(1, 4) + '-' + sVal.substring(4, 8);
    return sReturn;
  }
  if (nLen < 10)
  {
    sReturn = sVal.substring(0, 2) + '-' + sVal.substring(2, 5) + '-' + sVal.substring(5, 9);
    return sReturn;
  }
  if (nLen < 11)
  {
    sReturn = '(' + sVal.substring(0, 3) + ') ' + sVal.substring(3, 6) + '-' + sVal.substring(6, 10);
    return sReturn;
  }
  if(nLen < 15)
  {
    nPos = nLen - 10;
    sReturn = sVal.substring(0, nPos);
    sReturn += ' (' + sVal.substring(nPos, nPos + 3) + ') ';
    sReturn += sVal.substring(nPos + 3, nPos + 6) + '-' + sVal.substring(nPos + 6, nPos + 10);
  }
  else
  {
    sReturn = sVal;
  }
  return sReturn;
}

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
  var sRes = ''
  var sChar = '';
  sVal += '';
  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 GetIndex(oSelect, sValue)
{
  for(var i = 0; i < oSelect.length; i++)
  {
    if(oSelect.options[i].value == sValue)
    {
      oSelect.selectedIndex = i;
      return;
    }
  }
  oSelect.selectedIndex = 0;
  return;
}

function SetIndex(oSelect, sValue)
{
  for(var i = 0; i < oSelect.length; i++)
  {
    if(oSelect.options[i].value == sValue)
    {
      oSelect.options[i].selected = true;
      return;
    }
  }
  return;
}

function showElement(sID)
{
  var oObj = document.getElementById(sID);
  if(typeof(oObj) == 'undefined')
    return;
  try
  {
    oObj.style.display = '';
    oObj.style.visibility = 'visible';
  }
  catch(e){};
}

function hideElement(sID)
{
  var oObj = document.getElementById(sID);
  if(typeof(oObj) == 'undefined')
    return;
  try
  {
    oObj.style.display = 'none';
    oObj.style.visibility = 'hidden';
  }
  catch(e)
  {
    return;
  }
}
