var NameDictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZ'- ";
function isAValidNameCharacter( v ) {
   return (v.length==0 || v.length>1) ? false : (NameDictionary.indexOf(v)!=-1);
}
function isAValidName( v ) {
   //if (v.length==0) return false;
   v = v.toUpperCase();
   for (i=0,iLen=v.length; i<iLen; i++) {
      if (!isAValidNameCharacter(v.charAt(i))) return false;
   }
   return true;
}

function ltrim( v ) {
   while(''+v.charAt(0)==' ') v=v.substring(1,v.length);
   return v;
}

function rtrim( v ) {
   while(''+v.charAt(v.length-1)==' ') v=v.substring(0,v.length-1);
   return v;
}

function trim( v ) {
   return ltrim( rtrim (v) );
}

function trimObj( obj ) {
	if (obj==null) return;
	if (obj.type == "text") obj.value = trim(obj.value);
}

function stripBlanks( sBinputStr ) {
   var sBoutputStr = "";
   for (var i = 0; i < sBinputStr.length; i++) {
      if (sBinputStr.charAt(i) != " ") {
         sBoutputStr = sBoutputStr + sBinputStr.charAt(i);
      }
   }
   return sBoutputStr;
}

function stripDashes( sDinputStr ) {
   var sDoutputStr = "";
   for (var i = 0; i < sDinputStr.length; i++) {
      if (sDinputStr.charAt(i) != "-") sDoutputStr += sDinputStr.charAt(i);
   }
   return sDoutputStr;
}

function stripCommas( sCinputStr ) {
    var sCoutputStr=""; 
    for (var i=0; i < sCinputStr.length; i++) {
        if (sCinputStr.charAt(i)!=",") sCoutputStr += sCinputStr.charAt(i);
    }
    return sCoutputStr;
}

function isEmpty( inputStr ) {
   if ((inputStr != null) && (inputStr != "")) {
      for (var i = 0; i < inputStr.length; i++) {
         if (inputStr.charAt(i) != " ") return false;
      }
   }
   return true;
}

function isDigital( inputStr ) {
   if (getNumberOfTokens(inputStr, ".") > 2) return false;
   inputStr = inputStr.replace(".", "");
   return isNumber(inputStr);
}

function isNumber( inputStr ) {
   for (var i = 0; i < inputStr.length; i++) {
      var c = inputStr.charAt(i);
      if ((c < "0") || (c > "9")) return false;
   }
   return true;
}

function getNumbers( inputStr ) {
	var sOut = "";
	for (var i = 0; i < inputStr.length; i++) {
		var c = inputStr.charAt(i);
		if (isNumber(c)) sOut += c;
	}
	return sOut;
}

function isLetter( inputStr ) {
	for (var i = 0; i < inputStr.length; i++) {
		var c = inputStr.charAt(i);
		if (!(((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")))) return false;
	}
	return true;
}

function isAlphaNum( inputStr ) {  
	for (var i = 0; i < inputStr.length; i++) {
		var c = inputStr.charAt(i);
		if (!isLetter(c) && !isNumber(c)) return false;
	}
	return true;
}

function getAlphas ( inputStr ) {
	var sOut = "";
	for (var i = 0; i < inputStr.length; i++) {
		var c = inputStr.charAt(i);
		if (isLetter(c)) sOut += c;
	}
	return sOut;
}

function getAlphaNum( inputStr ) {
	var sOut = "";
	for (var i = 0; i < inputStr.length; i++) {
		var c = inputStr.charAt(i);
		if (isAlphaNum(c)) sOut += c;
	}
	return sOut;
}

function isValidPostalCode(inputStr) {
	var sIn = getAlphaNum(inputStr);

	var pc1 = sIn.substr(0,3);
	var pc2 = sIn.substr(3);
	if(pc1.length != 3 || pc2.length != 3) return false;

	pc1 = pc1.toUpperCase();
	pc2 = pc2.toUpperCase();

	if(pc1.charAt(0) < "A" || pc1.charAt(0) > "Z" ||
	  pc1.charAt(2) < "A" || pc1.charAt(2) > "Z" ||
	  pc2.charAt(1) < "A" || pc2.charAt(1) > "Z")
	  return false;

	if(pc1.charAt(1) < "0" || pc1.charAt(1) > "9" ||
	  pc2.charAt(0) < "0" || pc2.charAt(0) > "9" ||
	  pc2.charAt(2) < "0" || pc2.charAt(2) > "9")
	  return false;

	return true;
}

function isValidZipCode(inputStr) {
	var sIn = getNumbers(inputStr);
	if (trim(inputStr) != sIn) return false;
	if (sIn.length != 5) return false;
	return true;
}

function isValidPhone (area, npa, xxxx) { // area-npa-xxxx
   if (!isNumber(area) || !isNumber(npa) || !isNumber(xxxx)) return false;
   if (area.length != 3 || npa.length!=3 || xxxx.length!=4) return false;
   return true;
}

function showError(msg, obj) {
	alert(msg);
	if (obj!=null) obj.focus();
	return false;
}

function isValidPhoneNumber(area, num, ext, showMsg) {
	if (getNumbers(area).length != 3 || getNumbers(num).length != 7 || getNumbers(ext).length != ext.length)
        return showMsg ? showError("'" + formatPhoneNumber(area, num, ext) + "' is not a valid telephone number.") : false;
	else return true;
}

function formatPhoneNumber(sArea, sNumber, sExt) {
   sArea   = (!sArea)   ? "" : getNumbers(sArea); 
   sNumber = (!sNumber) ? "" : getNumbers(sNumber); 
   sExt    = (!sExt)    ? "" : getNumbers(sExt); 
   var sOut = "";
   if (sArea!="")   sOut += "("+sArea+") ";
   if (sNumber!="") sOut += (sNumber.length==7) ? sNumber.substring(0,3)+"-"+sNumber.substring(3) : sNumber;
   if (sExt!="")    sOut += " Ext."+sExt;
   return trim(sOut);
}


function parsePhone(phone, s) { //(xxx) xxx-xxxx ext.xxx
   if (s == "area") {
      return trim(getToken(getToken(phone, "(", 2), ")", 1));
   }
   if (s == "number") {
      return strReplaceAll(trim(getToken(getToken(phone.toLowerCase(), ")", 2), "ext.", 1)), "-", "");
   }
   if (s == "ext") {
      return trim(getToken(phone.toLowerCase(), "ext.", 2));
   }
}

function isEmailAddress( v, mandatory ) {
   if (!mandatory && v.length==0) return true;
   return !(v.length==0 || v.indexOf('@')==-1 || v.indexOf('@')==0 || v.indexOf('.')==-1 || v.indexOf(' ')!=-1 || v.indexOf('@.') !=-1 || v.indexOf('.')==v.length-1 || v.indexOf('.@') !=-1 || v.indexOf('@')==v.length-1);
}

function strReplaceAll(sStr, sFind, sRplc) {
   while (sStr.indexOf(sFind)!=-1) sStr = sStr.replace(sFind, sRplc);
   return sStr;
}

function getNumberOfTokens(str, delim) {
   if (!str || !delim) return 0;
   if (str=="" || delim=="") return 0;
   var iRes = 1;
   var iPos = str.indexOf(delim);
   while (iPos!=-1) {
      iRes++;
      str = str.substring(iPos+delim.length);
      iPos = str.indexOf(delim);
   }
   return iRes;
}

function getToken(str, delim, num) {
   if (!str || !delim) return "";
   if (str == "" || delim == "") return "";
   if (num == 0) return "";
   var iPos = str.indexOf(delim);
   if (num == 1) {
      if (iPos == -1)
           return str;
      else return str.substring(0,iPos);
   } else {
      if (iPos == -1)
           return "";
      else return getToken(str.substring(iPos+delim.length), delim, num-1);
   }
}

function isAToken(str, delim, token) {
   for (var i=1,iLen=getNumberOfTokens(str, delim); i<=iLen; i++)
      if (getToken(str, delim, i)==token) return true;
   return false;
}
