function validateZip(){
var provinces = " AB,BC,MB,NB,NF,NS,NT,ON,PE,QC,SK,YT";
if(this.state != null && typeof(this.state) == "string"){
this.state = this.getSibling(this.state);
this.state.registerEvent("thisObj.validateSibling('" + this.name + "')", "change");
}

var isCanadian;
var postalCodeStr = parsePostalCode(this.get());
var zipCodeStr = parseZipCode(postalCodeStr);
if(this.state != null && this.state.get() > ""){
isCanadian = provinces.indexOf(this.state.get().toUpperCase()) > 0;
}else{
isCanadian = postalCodeStr.length > zipCodeStr.length;
}
if(isCanadian){
this.set(formatPostalCode(postalCodeStr));
if(this.canadian == false) return this.setMessage("Canadian postal codes are not allowed");
return this.setMessage(checkPostalCode(postalCodeStr));
}
this.set(formatZipCode(zipCodeStr));
if(this.canadian == true) return this.setMessage("U.S. zip codes are not allowed");
return this.setMessage(checkZipCode(zipCodeStr));
}
function parsePostalCode(value){
return extract(value.toUpperCase(), NUMERIC + UPPERALPHA);
}
function checkPostalCode(cleanStr){
if(cleanStr.length != 6) return "Canadian postal codes are 6 characters long";
for(var i = 0; i < 6; i++)
if(((i % 2 == 0) ? UPPERALPHA : NUMERIC).indexOf(cleanStr.charAt(i)) == -1)
return "Canadian postal codes are in the format Letter/Number/Letter (space) Number/Letter/Number.";
var notInFirst = "WZ", notInPostalCode = "DFIOQU";
if(notInFirst.indexOf(cleanStr.charAt(0)) != -1) return "Canadian postal codes may not begin with W or Z.";
for(var i = 0; i < 6; i += 2)
if(notInPostalCode.indexOf(cleanStr.charAt(i)) != -1) return "Canadian postal codes may not contain D, F, I, O, Q or U.";
return "";
}
function formatPostalCode(value){
return (value.length > 3) ? value.substring(0, 3) + " " + value.substring(3) : value;
}
function parseZipCode(value){
return extract(value, NUMERIC);
}
function checkZipCode(cleanStr, fiveDigit){
if(fiveDigit == true && cleanStr.length != 5)
return "Zip codes must be exactly 5 digits long.";
else if(fiveDigit == false && cleanStr.length != 9)
return "Zip codes must be exactly 9 digits long.";
else if(cleanStr.length != 5 && cleanStr.length != 9)
return "Zip codes must be exactly 5 or 9 digits long.";
return "";
}
function formatZipCode(value){
return (value.length > 5) ? value.substring(0, 5) + '-' + value.substring(5) :  value;
}

function validateTaxId(){
var cleanStr = extract(this.get(), NUMERIC);
if(cleanStr.length == 9){
var isEIN = (this.ein == true);
if(this.ssn == true && isEIN){
var withHyphens = extract(this.get(), NUMERIC + "-");
isEIN = withHyphens.length == cleanStr.length + 1 && withHyphens.indexOf("-") == 2;
}
if(isEIN)
this.set(cleanStr.substring(0, 2) + '-' +
cleanStr.substring(2));
else {
var ssn = cleanStr.substring(0, 3) + '-' +
cleanStr.substring(3, 5) + '-' +
cleanStr.substring(5, 9)
this.set(ssn);
if (cleanStr.substring(0, 3) == "000")
return this.setMessage("A social security number cannot begin with 000.")
else if (cleanStr == "111111111" || cleanStr == "333333333" || cleanStr == "999999999" || cleanStr == "123456789")
return this.setMessage(ssn + " is not a valid social security number.")
}
return true;
}
var mssg;
if(this.ein == true)
mssg = (this.ssn == true) ? "Tax identification numbers (SSN or EIN)" : "Employer identification numbers";
else
mssg = "Social security numbers";
return this.setMessage(mssg + " must have exactly 9 digits");
}

function validateMedicare() {
var cleanStr = extract(this.get(), ALPHANUMERIC);
this.set(cleanStr);
if (cleanStr.length > 12) {
return this.setMessage("A medicare number cannot contain more than 12 character.");
}
var alphas = 0;
while (alphas < cleanStr.length && ALPHA.indexOf(cleanStr.charAt(alphas)) != -1) {
alphas++;
}
if (alphas != 0) {
if (alphas > 3) {
return this.setMessage("A medicare number may begin with a maximum of 3 alphabetic characters.");
}
var after = cleanStr.substring(alphas);
if (after.length != 6 && after.length != 9 || extract(after, NUMERIC) != after) {
return this.setMessage("A medicare number beginning with an alphabetic character must have exactly 6 or exactly 9 digits.");
}
} else if (extract(cleanStr.substring(0, 9), NUMERIC).length != 9) {
return this.setMessage("A medicare number beginning with a numeric character must start with at least 9 digits.");
}
return true;
}

function validateMedicaid() {
var cleanStr = extract(this.get(), ALPHANUMERIC);
this.set(cleanStr);
if (cleanStr.length > 14) {
return this.setMessage("A medicaid number cannot contain more than 14 character.");
}
return true;
}

function validateICD9CM() {
var cleanStr = extract(this.get(), ALPHANUMERIC + ".").toUpperCase();
this.set(cleanStr);
if (extract(cleanStr.substring(1), NUMERIC + ".") != cleanStr.substring(1)) {
return this.setMessage("An ICD-9 code cannot have alphabetic characters except as the first character.");
}
var pos = cleanStr.indexOf(".");
if (pos == -1) {
pos = cleanStr.length;
cleanStr += ".";
this.set(cleanStr);
} else if (pos == 0) {
return this.setMessage("An ICD-9 code cannot begin with a period.");
} else if (cleanStr.indexOf(".", pos + 1) != -1) {
return this.setMessage("An ICD-9 code must have exactly one period.");
} else if (cleanStr.length > pos + 3) {
return this.setMessage("An ICD-9 code cannot have more than 2 digits after the period.");
}
var c = cleanStr.charAt(0);
if (c != "E" && c != "V" && (c < "0" || c > "9")) {
return this.setMessage("An ICD-9 code should begin with an E, V or digit.");
}
if (pos != (c == "E" ? 4 : 3)) {
return this.setMessage("There should be " + (c == "V" ? 2 : 3) + " digits before the period.");
}
return true;
}

function validate16Digit(){
var cleanStr = extract(this.get(), NUMERIC);
for(var i = 12; i >= 4; i -= 4)
if(cleanStr.length >= i) cleanStr = cleanStr.substring(0, i) + '-' + cleanStr.substring(i);
this.set(cleanStr);
if(cleanStr.length == 19) return true;
return this.setMessage("16-digit MemberBenefit ID's must have exactly 16 digits.");
}
function validatePhone(){
var cleanStr = cleanPhone(this.get());
if(this.allowExtension == false)
cleanStr = cleanStr.substring(0, 10);
this.set(formatPhone(cleanStr));
if(cleanStr.length < 10) return this.setMessage("Phone numbers must contain at least 10 digits (including area code).");
if(cleanStr.length >= 6 && badAreaAndPrefix(cleanStr)) return this.setMessage("Area codes and prefixes cannot begin with 0 or 1");
return true;
}
var PHONE_PAD = "QZ |   |ABC|DEF|GHI|JKL|MNO|PRS|TUV|WXY";
function cleanPhone(strPhone){
var i, c, out = "", cleanStr = extract(strPhone, NUMERIC + ALPHA).toUpperCase();
if(cleanStr.charAt(0) == '1' && cleanStr.length > 10) cleanStr = cleanStr.substring(1);
for(i = 0; i < cleanStr.length; i++){
c = cleanStr.charAt(i);
if(NUMERIC.indexOf(c) != -1)
out += c;
else if(i < 10)
out += PHONE_PAD.indexOf(c) >> 2;
}
return out;
}
function badAreaAndPrefix(phoneNum){
var c0 = phoneNum.charAt(0), c3 = phoneNum.charAt(3);
return c0 == '0' || c0 == '1' || c3 == '0' || c3 == '1';
}
function formatPhone(phoneNum){
var len = phoneNum.length, out = "";
if(len > 0) out += "(" + phoneNum.substring(0, 3);
if(len > 3) out += ") " + phoneNum.substring(3, 6);
if(len > 6) out += "-" + phoneNum.substring(6, 10);
if(len > 10) out += "x" + phoneNum.substring(10);
return out;
}
function validateMeasurement(getFn){
if(getFn){ this.converter = getInches; return compareConvertedFEW; }
var inches = getInches(this.get());
if(inches == null) return this.setMessage("This is a required field");
this.set(formatMeasure(inches, this.alpha));
var overMax = this.compareNullable(this.maximum, ">");
if(this.compareNullable(this.minimum, "<"))
return this.setMessage("Measurement must not be shorter than " + formatMeasure(getValueFor(this.minimum, getInches), this.alpha) + ".");
if(overMax)
return this.setMessage("Measurement must not be larger than " + formatMeasure(getValueFor(this.maximum, getInches), this.alpha) + ".");
return true;
}
function getInches(str){
var val = extract(str.toLowerCase(), NUMERIC + "i\"f'");
if(val == "") return null;
val += "i\"f'";
var ft_1 = val.indexOf("'"), ft_2 = val.indexOf("f");
var in_1 = val.indexOf('"'), in_2 = val.indexOf("i");
var ftEnd = (ft_1 < ft_2) ? ft_1 : ft_2;
var inEnd = (in_1 < in_2) ? in_1 : in_2;
var ftStart = (ftEnd < inEnd) ? 0 : inEnd;
var inStart = (ftEnd < inEnd) ? ftEnd : 0;
var ftMeasure = parseInt("0" + extract(val.substring(ftStart, ftEnd), NUMERIC), 10);
var inMeasure = parseInt("0" + extract(val.substring(inStart, inEnd), NUMERIC), 10);
return ftMeasure * 12 + inMeasure;
}
function formatMeasure(inches, alpha){
ftMeasure = parseInt(inches / 12);
inMeasure = inches % 12;
return ftMeasure + (alpha ? "ft " : "'") + inMeasure + (alpha ? "in" : '"');
}

var colors = buildColorList("black000000","maroon840000","green008200","navy000084","silverC6C3C6","redFF0000","lime00FF00","blue0000FF",
"gray848284","purple840084","olive848200","teal008284","whiteFFFFFF","fuchsiaFF00FF","yellowFFFF00","aqua00FFFF");
function buildColorList(){
var i, args = buildColorList.arguments, numArgs = args.length, out = new Array(), arg, len;
for (var i = 0; i < numArgs; i++){
arg = args[i];
len = arg.length - 6;
out[arg.substring(0, len).toUpperCase()] = arg.substring(len);
}
return out;
}
function validateColor(){
var colorVal = this.get().toUpperCase();
if(colors[colorVal] != null){
this.set("#" + colors[colorVal]);
return true;
}

var hexVal = extract(colorVal, NUMERIC + "ABCDEF#");
if(hexVal.length == 7 && hexVal.charAt(0) == "#" && hexVal.indexOf("#", 1) == -1){
this.set(hexVal);
return true;
}
if(hexVal.length == 6 && hexVal.indexOf("#") == -1){
this.set("#" + hexVal);
return true;
}
return this.setMessage("The color value should be in the form #RRGGBB where RR, GG, and BB are the hexidecimal values of the red, green, and blue parts of the color.");
}

var hexDigits = "0123456789ABCDEF";
function toHex(val){
return (val < 16) ? hexDigits.charAt(val) : (toHex(val >> 4) + hexDigits.charAt(val & 15));
}
var _SR_;
if(_SR_ != null) _SR_.notify("validateformattednumeric.js");