// i is an abbreviation for "invalid"
var iCanadaProvinceCode = "This field must be a valid two character Canadian province abbreviation (like AB for Alberta). Please reenter it now.";
var iCanadaPostalCode = "This field must be a six-character Canadian Postal Code (like A1B 3Z4). Please reenter it now.";
var CanadaProvinceCodeDelimiter = "|";
var CanadaProvinceCodes = "AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT";

var defaultEmptyOK = false;

function isCanadaProvinceCode(s) {
  if (isEmpty(s))
  {
    if (isCanadaProvinceCode.arguments.length == 1) {
      return defaultEmptyOK;
    }
    else
    {
      return (isCanadaProvinceCode.arguments[1] == true);
    }
  }

  return ( (CanadaProvinceCodes.indexOf(s) != -1) &&
           (s.indexOf(CanadaProvinceCodeDelimiter) == -1) )
}

function checkProvinceCode (theField, emptyOK)
{   
  if (checkProvinceCode.arguments.length == 1) {
    emptyOK = defaultEmptyOK;
  }
  
  if ((emptyOK == true) && (isEmpty(theField.value))) {
    return true;
  }
  else {
    theField.value = theField.value.toUpperCase();
    if (!isCanadaProvinceCode(theField.value, false)) {
      return warnInvalid (theField, iCanadaProvinceCode);
    }
    else {
      return true;
    }
  }
}




function isCanadianPostCode(entry) { 
  // CANADIAN CODES ONLY
  strlen = entry.length; 
  
  if (strlen != 6) {
    return false;
  }
  
  entry=entry.toUpperCase();        // in case of lowercase characters
  
  // Check for legal characters in string - note index starts at zero
  if ('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(entry.charAt(0)) < 0) {
    return false;
  }
  if ('0123456789'.indexOf(entry.charAt(1)) < 0) {
    return false;
  }
  if ('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(entry.charAt(2)) < 0) {
    return false;
  }
  if ('0123456789'.indexOf(entry.charAt(3)) < 0) {
    return false;
  }
  if ('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(entry.charAt(4)) < 0) {
    return false;
  }
  if ('0123456789'.indexOf(entry.charAt(5)) < 0) {
    return false;
  }
  
  return true;
}


function checkCanadianPostCode (theField, emptyOK)
{   
  if (checkCanadianPostCode.arguments.length == 1) {
    emptyOK = defaultEmptyOK;
  }
  
  if ((emptyOK == true) && (isEmpty(theField.value))) {
    return true;
  }
  else {
    theField.value = theField.value.toUpperCase();
    if (!isCanadianPostCode(stripWhitespace(theField.value), false)) {
      return warnInvalid (theField, iCanadaPostalCode);
    }
    else {
      return true;
    }
  }
}
