// Any valid float, +/-/0
function IsFloat(s)
{
  rePosFlt1=/^\s+$/;
  rePosFlt2=/^\s*[\-\+]?[0-9.]+\s*$/;
  rePosFlt3=/.*\..*\./;
  rePosFlt4=/.*,.?.?,.*/;
  rePosFlt5=/,.?.?\s*$/;
  if(rePosFlt1.test(s)) return false;
  if(!rePosFlt2.test(s)) return false;
  if(rePosFlt3.test(s)) return false;
  if(rePosFlt4.test(s)) return false;
  if(rePosFlt5.test(s)) return false;
	return true;
}

function IsEmpty(s)
{
  return (s.length == 0);
}

function IsFloatOrEmpty(s)
{
	return (IsEmpty(s) || IsFloat(s));
}

function NoLongerThan(s, length)
{
	return (s.length <= length);
}

// any valid integer, +/-/0
function IsInt(s)
{
  var rePosInt1, rePosInt2;
  rePosInt1=/^\s+$/;
  rePosInt2=/^\s*[\-\+]?[0-9]+\s*$/;
  if(rePosInt1.test(s)) return false;
  if(!rePosInt2.test(s)) return false;
  return true;
}

function IsSSN(s)
{
  reSSN1=/^\s*\d{3}-\d{2}-\d{4}\s*$/;
  if(!reSSN1.test(s)) 
  {
    return false;
  }
  return true;
}

function IsPhone(s)
{
  rePhone=/^\s*\d{3}-\d{3}-\d{4}\s*$/;
  if(!rePhone.test(s)) 
  {
		return false;
  }
  return true;
}

// Returns reformatted ]date as mm/dd/yyyy if valid, null otherwise
function ValidDate(s) // [bFixYear = true, bFixDay = true]
{
        // get optional params
   bFixYear = (arguments.length > 1 ? arguments[1] : true);
   bFixDay = (arguments.length > 2 ? arguments[2] : true);

   var reVal = /[^\d-\/. ]/;
   var reSep = /([-\/. ])/;
   
   // valid len/chars
   if (!s.length)
      return null;
      
   //if (RegExp("[^\\d-/. ]").test(s))
   if (reVal.test(s))
      return null;
      
   

   // find seperator and split
   var sDay;
   var sMonth;
   var sYear;
   if (reSep.test(s))
   {
                // brute force split approach
      da = s.split(RegExp.lastMatch);
                if (da.length == 1) da = s.split('/');
                if (da.length == 1) da = s.split('-');
                if (da.length == 1) da = s.split(' ');
                if (da.length == 1) da = s.split('.');

      if (da.length == 3)
      {
         sMonth = da[0];
         sDay = da[1];
         sYear = da[2];
      }
      else if ((da.length == 2) && bFixDay)
      {
         sMonth = da[0];
         sDay = 1;
         sYear = da[1];
      }
      else
         return null;
   }
   else
      return null;

   if (sYear.length == 2)
        {
      if (eval(sYear) > 50)
         sYear = '19' + sYear;
      else
         sYear = '20' + sYear;
   }
   if (sYear.length != 4)
      return null;
      
   //alert(sDay + '/' + sMonth + '/' + sYear);

   var iDay;
   var iMonth;
   var iYear;
   iDay = parseInt(sDay, 10);
   iMonth = parseInt(sMonth, 10);
   iYear = parseInt(sYear, 10);

        if ((iDay < 1) || (iMonth < 1) || (iYear < 1))
                return null;

   if (iMonth>12)
      return null;
   if ((iMonth == 1 || iMonth == 3 || iMonth == 5 || iMonth == 7 || iMonth == 8 || iMonth == 10 || iMonth == 12) && (iDay > 31))
      return null;
   if ((iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11) && (iDay > 30))
      return null;
   if ((iMonth == 2) && (iDay > 28))
        {
      if (LeapYear(iYear) && (iDay > 29))
         return null;
   }

   return (iMonth + "/" + iDay + "/" + iYear);
}

function LeapYear(y) {
   if (y % 100 == 0)
      if (y % 400 == 0) return true;
   else
      if (y % 4 == 0) return true;
   return false;
}

//Date
function IsDate(s)
{
   s = ValidDate(s);
   if (s)
   {
        return true;
   }
   return false;
}