var phoneNumberDelimiters = "()- ";
var ZIPCodeDelimiters = "- ";
var defaultEmptyOK = false;
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;
var reInteger = /^\d+$/;
var reChar = /^[A-Za-z]+$/;
var digitsInUSPhoneNumber = 10;
var digitsInCAPhoneNumber = 11;  //HJR012706

function checkUSPhone (theField, emptyOK)
{ 
  if (checkUSPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  
       var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (isUSPhoneNumber(normalizedPhone, false))
       {  
          theField.value = reformatUSPhone(normalizedPhone)     
       }
    }
    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 isUSPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isUSPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}


function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}

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 isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function checkZIPCode (theField, emptyOK)
{   
    if (checkZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters);  
      if (isZIPCode(normalizedZIP, false)) 
      {  
         theField.value = reformatZIPCode(normalizedZIP);         
      }
    }
    return true;
}


function checkCAZIPCode (theField, emptyOK)
{   if (checkCAZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, " ");
      if (isCAZIPCode(normalizedZIP, false)) 
      {  
         theField.value = normalizedZIP;         
      }
    }
    return true; 
}


function isZIPCode (s)
{    
   if (isEmpty(s)) if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
   else return (isZIPCode.arguments[1] == true);
   return (isInteger(s) && 
            ((s.length == digitsInZIPCode1) ||
             (s.length == digitsInZIPCode2)))
}


function isInteger (s)
{
   var i;
   if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    return reInteger.test(s);
}

//ZIP code format for US
function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}

//PIN code format for INDIA
//function reformatZIPCode (ZIPString)
//{   if (ZIPString.length == 6) return ZIPString;
//    else return false;
//}

function isCAZIPCode (s)
{ 
      
      if (isEmpty(s)) 
          if (isCAZIPCode.arguments.length == 1) return defaultEmptyOK;
      else return (isCAZIPCode.arguments[1] == true);      
	  return (isInteger(s.charAt(1)) && isInteger(s.charAt(3)) && isInteger(s.charAt(5)) && isChar(s.charAt(0))
   			   && isChar(s.charAt(2)) && isChar(s.charAt(4)))              
}


function isChar (s)
{
   var i;
   if (isEmpty(s)) 
       if (isChar.arguments.length == 1) return defaultEmptyOK;
       else return (isChar.arguments[1] == true);

    return reChar.test(s);
}

//HJR012706 +++
function checkCAPhone (theField, emptyOK)
{
	if (checkCAPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  
       var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (isCAPhoneNumber(normalizedPhone, false))
       {  
          theField.value = reformatCAPhone(normalizedPhone)     
       }
    }
    return true;
}

function isCAPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isCAPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isCAPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInCAPhoneNumber)
}

function reformatCAPhone (CAPhone)
{   return (reformat (CAPhone, "", 1, "-", 3, "-", 3, "-", 4))
}

//HJR012706 ---
