var digits = "0123456789";
var lowerCaseLetters = "abcdefghijklmnopqrstuvwxyz";
var upperCaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whiteSpace = " \t\n\r";
var decimalPointDelimiter = ".";
var phoneNumberDelimiters = "()- \t";
var validPhoneChars = digits + phoneNumberDelimiters;
var ssnDelimiters = "- \t";
var validSsnChars = digits + ssnDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInPhoneNumber = 10;
var creditCardDelimiters = " ";
var daysInMonth = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var childWindowForMeshwork;
var addressBookWindow;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function delete_timecatalog(a) {
  document.delete_favorite.id.value = a;
  var suppressOk;
  suppressOk = window.confirm('Are you sure?');
  if (!suppressOk){
	  return;
  }
  else{
	  document.delete_favorite.submit();
  }
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function CutString(string, len, terminate) {
  return (string.length > len) ? string.substr(0, len) + terminate : string;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function NewWindow(url, width, height) {
  if (self.name == "childWindowForMeshwork") self.resizeTo(width, height);
  if (childWindowForMeshwork != null && childWindowForMeshwork.open) childWindowForMeshwork.close();
  wLeft = screen.width / 2 - width / 2;
  wTop = screen.height / 2 - height / 2;
  childWindowForMeshwork = window.open(url, 'childWindowForMeshwork', 'location=0,toolbar=0,menubar=0,resizable=0,status=0,scrollbars=0,width=' + width + ',height=' + height + ',left=' + wLeft + ',top=' + wTop);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function NewScrollWindow(url, width, height) {
  if (childWindowForMeshwork != null && childWindowForMeshwork.open) childWindowForMeshwork.close();
  wLeft = screen.width / 2 - width / 2;
  wTop = screen.height / 2 - height / 2;
  childWindowForMeshwork = window.open(url, 'childWindowForMeshwork', 'location=0,toolbar=0,menubar=0,resizable=0,status=0,scrollbars=1,width=' + width + ',height=' + height + ',left=' + wLeft + ',top=' + wTop);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsEmail(s) {
  if (s.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) return true;
  else return false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsUndefined(s) {
  var undef;
  return (s == undef);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsEmpty(s) {
  return ((s == null) || (s.length == 0));
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsWhiteSpace (s) {
var i;

  if (IsEmpty(s)) return true;
  for (i = 0; i < s.length; i++) {   
    var c = s.charAt(i);
    if (whiteSpace.indexOf(c) == -1) return false;
  }

  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function StripCharsInBag (s, bag) {
var i;
var returnString = "";

  for (i = 0; i < s.length; i++) {   
    var c = s.charAt(i);
    if (bag.indexOf(c) == -1) returnString += c;
  }

  return returnString;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function StripCharsNotInBag (s, bag) {
var i;
var returnString = "";

  for (i = 0; i < s.length; i++) {   
    var c = s.charAt(i);
    if (bag.indexOf(c) != -1) returnString += c;
  }
 
  return returnString;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function StripWhiteSpace (s) {
  return StripCharsInBag (s, whiteSpace);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function NeatCharsInBag (s, bag, replaceChar) {
var i, j;
var returnString = "";

  if (replaceChar == null || replaceChar == "") replaceChar = " ";
  for (i = 0; i < s.length; i++) {
    if (bag.indexOf(s.charAt(i)) == -1) break;
  }
  for (j = i; j < s.length; j++) {   
    if (bag.indexOf(s.charAt(j)) == -1) returnString += s.charAt(j);
	else if (j > 0 && bag.indexOf(s.charAt(j - 1)) == -1) returnString += replaceChar;
  }

  return returnString;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsInteger (s) {
var i;

  if (IsEmpty(s)) return false;

  var startPos = (s.charAt(0) == "-" || s.charAt(0) == "+") ? 1 : 0;
  for (i = startPos; i < s.length; i++) {   
    var c = s.charAt(i);
    if (!(c >= "0" && c <= "9")) return false;
  }

  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsFloat (s) {
var i;
var seenDecimalPoint = false;

  if (IsEmpty(s)) return false;

  if (s == decimalPointDelimiter) return false;

  var startPos = (s.charAt(0) == "-" || s.charAt(0) == "+") ? 1 : 0;
  for (i = startPos; i < s.length; i++) {   
    var c = s.charAt(i);
    if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
    else if (!(c >= "0" && c <= "9")) return false;
  }
  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsAlpha (s) {
var i;

  if (IsEmpty(s)) return false;

  for (i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    if (!(c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) return false;
  }
  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsAlphaNumeric (s) {
var i;

  if (IsEmpty(s)) return false;

  for (i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    if (!((c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || (c >= "0" && c <= "9"))) return false;
  }
  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsPhone (s) {
  if (IsEmpty(s)) return false;

  var normalizedPhone = StripCharsInBag(s, phoneNumberDelimiters)
  if (!IsInteger(normalizedPhone) || normalizedPhone.length != digitsInPhoneNumber) return false;
  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsSsn (s) {

  if (IsEmpty(s)) return false;

  var normalizedSsn = StripCharsInBag(s, ssnDelimiters);
  if (!IsInteger(normalizedSsn) || normalizedSsn.length != digitsInSocialSecurityNumber) return false;
  return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function Reformat (s) {
var arg;
var sPos = 0;
var resultString = "";

  for (var i = 1; i < reformat.arguments.length; i++) {
    arg = reformat.arguments[i];
    if (i % 2 == 1) resultString += arg;
    else {
      resultString += s.substring(sPos, sPos + arg);
      sPos += arg;
    }
  }
  return resultString;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function ReformatPhone (s) {
  return Reformat(s, "(", 3, ") ", 3, "-", 4);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function ReformatSsn (s) {
  return Reformat(s, "", 3, "-", 2, "-", 4);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsEmail (s) {
  if (IsEmpty(s)) return false;
  if (IsWhiteSpace(s)) return false;

  var i = 1;
  var sLength = s.length;

  while ((i < sLength) && (s.charAt(i) != "@")) i++;

  if ((i >= sLength) || (s.charAt(i) != "@")) return false;
  else i += 2;

  while ((i < sLength) && (s.charAt(i) != ".")) i++;

  if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
  else return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsIntegerInRange (s, a, b) {
  if (IsEmpty(s)) return false;
  if (!IsInteger(s)) return false;

  var num = parseInt (s);
  return ((num >= a) && (num <= b));
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsDate (month, day, year) {
var today = new Date();

  if (year == null || year.length == 0) year = "" + today.getYear();
  if (! (IsInteger(year) && (year.length == 2 || year.length == 4)
      && IsIntegerInRange(month, 1, 12) && IsIntegerInRange (day, 1, 31) ) ) return false;

    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);

    if (intDay > daysInMonth[intMonth - 1]) return false;

    //if ((intMonth == 2) && (intDay > ((year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0 ) ) ? 29 : 28)) return false;

    return true;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsCreditCard(s) {
  s = StripCharsInBag(s, whiteSpace);

  if (s.length > 19) return (false);

  sum = 0; mul = 1; l = s.length;
  for (i = 0; i < l; i++) {
    digit = s.substring(l - i - 1, l - i);
    tproduct = parseInt(digit, 10) * mul;

    if (tproduct >= 10) sum += (tproduct % 10) + 1;
    else sum += tproduct;

    if (mul == 1) mul++;
    else mul--;
  }

  if ((sum % 10) == 0) return true;
  else return false;

} 

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsVisa(s) {
  s = StripCharsInBag(s, whiteSpace);

  if ((s.length == 16 || s.length == 13) && s.substring(0, 1) == 4) return IsCreditCard(s);
  return false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsMasterCard(cc) {
  s = StripCharsInBag(s, whiteSpace);

  firstdig = s.substring(0, 1);
  seconddig = s.substring(1, 2);

  if (s.length == 16 && firstdig == 5 && (seconddig >= 1 && seconddig <= 5)) return IsCreditCard(s);
  return false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsAmericanExpress(s) {
  s = StripCharsInBag(s, whiteSpace);

  firstdig = s.substring(0, 1);
  seconddig = s.substring(1, 2);
  if (s.length == 15 && firstdig == 3 && (seconddig == 4 || seconddig == 7)) return IsCreditCard(s);
  return false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function IsDiscover(s) {
  s = StripCharsInBag(s, whiteSpace);

  first4digs = s.substring(0, 4);

  if (s.length == 16 && first4digs == "6011") return IsCreditCard(s);
  return false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

function IsAnyCard(s) {
  s = StripCharsInBag(s, whiteSpace);

  if (!IsCreditCard(s)) return false;
  if (!IsMasterCard(s) && !IsVisa(s) && !IsAmericanExpress(s) && !IsDiscover(cc)) return false;
  return true;
}
