var mFieldPrevValue; var mSubmitButtonOrgValue; var mSubmitButtonOrgBackgroundColor; var mSubmitButtonOrgColor; function StrCase(mField, mFieldLbl, mConversionType){ /* ***** Case conversion function ***** mConverstionType: 0 - Proper, 1 - Upper, 2 - lower */ if (mConversionType == null || mConversionType == ""){return} mConversionType = mConversionType.toLowerCase(); if (mConversionType != "proper" && mConversionType != "upper" && mConversionType != "lower" && mConversionType != "0" && mConversionType != "1" && mConversionType != "2"){return;} if (mConversionType == "proper" || mConversionType == "upper" || mConversionType == "lower"){ switch (mConversionType) { case "proper": mConversionType = "0"; break; case "upper": mConversionType = "1"; break; case "lower": mConversionType = "2"; break; } } switch (mConversionType) { case "2": // ***** 2 - Convert to lower case mField.value = mField.value.toLowerCase(); break; case "1": // ***** 1 - Convert to upper case mField.value = mField.value.toUpperCase(); break; default: // ***** 0 - Convert to proper (default) var mFieldValue = ""; var mStrLen = mField.value.length; var mCtr; var mChar; var mCharCode; var mPrevChar; var mPrevCharCode; var mUpper = false; if (mStrLen == 0 || (mField.value.toUpperCase() == mFieldPrevValue)){return;} for (mCtr = 0; mCtr < mStrLen; mCtr++){ mUpper = false; mPrevChar = mChar; mPrevCharCode = mCharCode; mChar = mField.value.charAt(mCtr); mCharCode = mChar.charCodeAt(0); if (mCtr == 0){ mUpper = true; }else{ if (mChar.toUpperCase() == mPrevChar.toUpperCase() && (mCharCode == 67 || mCharCode == 99)){mUpper = true;} // ***** Two C's were processed, capitalizing second occurrence if (mPrevCharCode == 32 || mPrevCharCode == 45 || mPrevCharCode == 39){mUpper = true;} // ***** Space, single quote or dash preceding current character capitalizing next character if (mPrevCharCode == 67 || mPrevCharCode == 99){ // ***** Check for 'Mc' or 'Mac' being received. If so, capitalizing second occurrence if (mCtr - 3 >= 0){ // ***** Check for Mac if(mFieldValue.indexOf("Mac",mCtr - 3) == 0){mUpper = true;} // ***** Mac found //alert(mFieldValue.indexOf("Mac",mCtr - 3)); }else if(mCtr - 2 >= 0){ // ***** Check for Mc if(mFieldValue.indexOf("Mc",mCtr - 2) == 0){mUpper = true;} // ***** Mc found //alert(mFieldValue.indexOf("Mc",mCtr - 2)); } } //mMsg = "mChar.toUpperCase() = '" + mChar.toUpperCase() + "'\tmPrevChar.toUpperCase() = '" + mPrevChar.toUpperCase() + "'\nmCharCode = '" + mCharCode + "'\nmPrevCharCode = '" + mPrevCharCode + "'\nmUpper = " + mUpper; //alert(mMsg); } if (mUpper){ mFieldValue += mChar.toUpperCase(); }else{ mFieldValue += mChar.toLowerCase(); } } mField.value = mFieldValue; mFieldPrevValue = mFieldValue.toUpperCase(); //alert("mFieldPrevValue = '" + mFieldPrevValue + "'") } } function formSubmit(mSubmitButton, mValidation, mReset, mDisable, mButtonText, mButtonColor, mButtonBGcolor){ /* ************************************************************************************************* ************************************************************************************************* ***** formSubmit function: This function changes the submit button on the form and can re- ***** ***** store the value if submission fails. ***** ***** ***** ***** parameters ***** ***** ¯¯¯¯¯¯¯¯¯¯ ***** ***** mSubmitButton Holds the object reference to the passed submit button. ***** ***** ***** ***** mValidation Tells the module to call the validation module validateForm() ***** ***** This module calls validation function as validateForm(thisform). ***** ***** If you are using a different name, then do not use this method. ***** ***** Instead, use the mReset method. Should be null if not using. ***** ***** ***** ***** ***** ***** mReset If true, previously stored submit values will be restored. Use ***** ***** false to change button values. If not null, mValidation will be ***** ***** nullified. ***** ***** ***** ***** mDisable Disables the submit button - default is false (enabled) ***** ***** ***** ***** mButtonText The text that is displayed during validation and/or submission ***** ***** ***** ***** mButtonColor The color of the mButtonText ***** ***** ***** ***** mButtonBGcolor The button background color ***** ***** ***** ************************************************************************************************* ************************************************************************************************* */ if (mDisable == null){mDisable = false} if (mDisable){ // ***** Disable submit button if (document.all || document.getElementById){ mSubmitButton.disabled = true; } } if (mReset == null && mValidation == null){mValidation = true} if (mReset != null){mValidation = null} if (mValidation || !mReset){ mSubmitButtonOrgValue = mSubmitButton.value mSubmitButtonOrgBackgroundColor = mSubmitButton.style.backgroundColor mSubmitButtonOrgColor = mSubmitButton.style.color mSubmitButton.value = (mButtonText != null && mButtonText !== "")?mButtonText:"Sending..." mSubmitButton.style.color = (mButtonColor != null && mButtonColor !== "")?mButtonColor:"#FFFFFF" mSubmitButton.style.backgroundColor = (mButtonBGcolor != null && mButtonBGcolor !== "")?mButtonBGcolor:"#FF0000" } if (mValidation){ if (validateForm(document.survey)){ mSubmitButton.form.submit() return true }else {mReset = true;} } if(mReset){ mSubmitButton.value = mSubmitButtonOrgValue mSubmitButton.style.color = mSubmitButtonOrgColor mSubmitButton.style.backgroundColor = mSubmitButtonOrgBackgroundColor if (document.all || document.getElementById){ mSubmitButton.disabled = false; } return false } } function fmtPostCode(mForm, mField, mFieldLbl, mCountry, mCharIgnore, mShowMsg, mReformat, mReject2Fmt){ //mMsg = "mForm = " + mForm + "\nmField = " + mField + "\nmFieldLbl = " + mFieldLbl + "\nmCountry = " + mCountry + "\nmCharIgnore = " +mCharIgnore + "\nmShowMsg = " + mShowMsg + "\nmReformat = " + mReformat + "\nmReject2Fmt = " + mReject2Fmt; //alert(mMsg); /* ***** Postal Code format function ***** mCountry: the country corresponding to the postal code. ***** If omitted, US format is used. ***** ***** mCharIgnore: Allow the exclusion of the additional characters. ***** ***** mPostalFmts: A - indicates alpha characters only a thru z or A thru Z ***** * - an asterisk functions as a wildcard character indicating unlimited ***** characters of any type may follow. ***** # - a hash/pound sign functions as a numeric placeholde 0 thru 9 ***** X - indicates alpha-numeric characters is acceptable 0 thru 9, a thru z, or A thru Z ***** 1) Even though lower case characters are not listed within the "Acceptable Chars" list, ***** they are allowed ***** 2) Use the larger formats and formats with * (asterisks) last. ***** ***** ***** mShowMsg If mShowMsg is true, an alert box is displayed and a false is return. If not, just a false is returned. ***** ***** mReformat Controls the reformatting formatting of the postal field. If true the field is reformatted if ***** a match is not found within the "With Spacing" list but is with the "Without Spacing". ***** ***** mReject2Fmt Controls if a valid secondary format - "Without Spacing" returns a false if true. ***** ***** Regular Expressions:The characters used in the formats are translated to regular expression as follows: ***** ^ : Start of format (Do not use - the is automatically added by code ***** A ==> [a-zA-Z]{1} : One alpha-character ***** * ==> \\w* : Any additional alpha-numeric characters including an underscore ***** # ==> \\d{1} : A single digit ***** " "==> \x20 : A single space ***** X ==> [a-zA-Z0-9]{1} : A single alpha-numeric characters excluding all special characters. ***** $ : End of format (Do not use - the is automatically added by code ***** */ if (mForm.elements[mField].value == null || mForm.elements[mField].value == ""){return;} // ***** Field is empty or not set if (mCountry == null || mCountry == ""){mCountry = "USA";} // ***** Init mCountry if not supplied var mMsg = ""; var mPostalCharAllowed = ""; var mFieldLen = mForm.elements[mField].value.length; var mCtrX, mLenX; var mCtrY, mLenY; var mCountryRow; var mFmtMatched = false; var mMatchType; var mPostalFmts = new Array( new Array("-- Country --", "-- Acceptable Chars --", "-- Formats --"), // ***** Start single format new Array("~Faroe Islands~Lesotho~Madagascar~Oman~", "0123456789", "###"), new Array("~Argentina~Australia~Austria~Bangladesh~Belgium~Bolivia~Brunei~Bulgaria~Christmas Island~Cocos (Keeling) Islands~Cyprus~Denmark~", "0123456789", "####"), new Array("~Estonia~Gabon~Greenland~Guinea-Bissau~", "0123456789", "####"), new Array("~Hungary~Iceland~", "0123456789", "####"), new Array("~Laos~Latvia~Liberia~Liechtenstein~Lithuania~Luxembourg~Nepal~Netherlands Antilles~New Zealand~Norfolk Island~Norway~Philippines~Portugal~", "0123456789", "####"), new Array("~South Africa~Svalbard & Jon Mayor Islands~Switzerland~", "0123456789", "####"), new Array("~Tunisia~Uganda~Venezuela~", "0123456789", "####"), new Array("~Algeria~Cambodia~Chad~Croatia~Cuba~Egypt~El Salvador~Finland~France~French Guiana~French Polynesia~Germany~Guadeloupe~Guatemala~", "0123456789", "#####"), new Array("~Indonesia~Iran~Iraq~Israel~Italy~Kuwait~", "0123456789", "#####"), new Array("~Macedonia~Malaysia~Marshall Islands~Martinique~Mayotte~Micronesia~Monaco~Morocco~Myanmar~New Caledonia~Northern Mariana Islands~Pakistan~Palau~", "0123456789", "#####"), new Array("~Reunion~San Marino~Saudi Arabia~Slovenia~Spain~", "0123456789", "#####"), new Array("~Thailand~Turkey~Uruguay~Viet Nam~Yugoslavia~", "0123456789", "#####"), new Array("~Armenia~Azerbaijan~Belarus~China~Georgia~Kazakhstan~Moldova~Tajikistan~Turkmenistan~Ukraine~Uzbekistan~", "0123456789", "######"), new Array("~Chile~", "0123456789", "########"), // ***** Start Multiple and Complex formats new Array("~American Samoa~Puerto Rico~Samoa~Guam~USA~United States~", "0123456789-", "#####", "#####-####"), new Array("~Bahrain~", "0123456789", "###", "####"), new Array("~Bermuda~", "0123456789- ABCDEFGHIJKLMNOPQRSTUVWXYZ", "AA AA", "#-##"), new Array("~Brazil~", "0123456789-", "#####", "#####-###"), new Array("~Canada~", "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ", "A#A #A#", "A#A #A#*"), new Array("~Czech Republic~Greece~Slovakia~Sweden~", "0123456789 ", "### ##"), new Array("~India~Russia~", "0123456789 ", "### ###"), new Array("~Japan~", "0123456789-", "###-####"), new Array("~Maldives~", "0123456789- ", "## ##", "##-##", "####"), new Array("~Malta~", "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ", "AAA ##", "AAA ###"), new Array("~Mexico~", "0123456789- ABCDEFGHIJKLMNOPQRSTUVWXYZ", "#####", "####-AA####"), new Array("~Netherlands~", "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ", "#### AA"), new Array("~Poland~", "0123456789-", "##-###"), new Array("~Romania~Singapore~", "0123456789", "####", "#####"), new Array("Swaziland", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", "A###"), new Array("Taiwan", "0123456789", "###", "#####"), new Array("United Kingdom", "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ", "A# #AA", "AA# #AA", "A## #AA*", "AA## #AA*") ); var mRE_Alpha = "[a-zA-Z]{1}"; var mRE_Asterrisk = "\\w*"; var mRE_Hash = "\\d{1}"; var mRE_AlphaNumeric = "[a-zA-Z0-9]{1}"; var mRE_Start = "^"; var mRE_End = "$"; //var mRE_Space = "\x20"; var mRE_Space = " |-"; var mPostalFmtsRegExp = new Array( new Array(), new Array() ); mPostalFmtsRegExp[0][0] = "With Spacing"; // ***** The [0] element will hold the postal format in regular expression format mPostalFmtsRegExp[1][0] = "Without Spacing"; // ***** The [1] element will hold the postal format in regular expression format without separators // ***** Locate Country within mPostalFmts array mLenX = mPostalFmts.length; for (mCtrX = 0; mCtrX < mLenX; mCtrX++){ if (mPostalFmts[mCtrX][0].indexOf(("~"+mCountry+"~")) != -1){ // ***** Store Rows #, the # of Columns within row, and acceptable characters mCountryRow = mCtrX; mLenY = mPostalFmts[mCtrX].length; mPostalCharAllowed += mPostalFmts[mCtrX][1] + mCharIgnore; //mMsg = "mCountryRow = " + mCountryRow + "\nNumber of columns within row is '" + mLenY + "'"; //alert(mMsg); break; } } if (mCountryRow == null){ // ***** Country format not found: set to upper case and exit mForm.elements[mField].value = mForm.elements[mField].value.toUpperCase(); return true; } // ***** Check mField for character not allowed: //***** If mShowMsg display alert //***** if not mShowMsg return false mInvalidChars = ""; for (mCtrX = 0; mCtrX < mFieldLen; mCtrX++){ //mMsg = ""; //mMsg = "mPostalFmts[" + mCountryRow + "][1].indexOf(mForm.elements[mField].value.charAt(" + mCtrX +"))\nSearching for '" + mForm.elements[mField].value.charAt(mCtrX) +"'\nMatch is/is not: " + mPostalFmts[mCountryRow][1].indexOf(mForm.elements[mField].value.charAt(mCtrX)); //alert(mMsg); if (mPostalFmts[mCountryRow][1].indexOf(mForm.elements[mField].value.charAt(mCtrX).toUpperCase()) == -1 && mCharIgnore.indexOf(mForm.elements[mField].value.charAt(mCtrX)) == -1){ if (mInvalidChars.indexOf(mForm.elements[mField].value.charAt(mCtrX)) == -1 ){ mInvalidChars += ((mInvalidChars.length > 0)?", ":"") + ((mForm.elements[mField].value.charAt(mCtrX)==" ")?"Space":mForm.elements[mField].value.charAt(mCtrX)); } } } if (mInvalidChars != "" && mShowMsg){ mInvalidChars = "The following character" + ((mInvalidChars.length > 1)? "s are":" is") + " invalid for " + mCountry + " - " + mFieldLbl + " field:\n\n" + mInvalidChars; alert(mInvalidChars); delete mInvalidChars; return false; }else if (mInvalidChars != ""){ delete mInvalidChars; return false; } delete mInvalidChars; // ***** Build mPostalFmtsRegExp mPostalFmtsEleLen = 0; mSecondaryMatch = 0; Build_mPostalFmtsRegExp: for (mCtrY = 2; mCtrY < mLenY; mCtrY++){ mMatchType = 0 // ***** mCtrY is mPostalFmts[mCountryRow][mCtrY] mPostalFmtsEleLen = mPostalFmts[mCountryRow][mCtrY].length; //alert("Process '" + mPostalFmts[mCountryRow][mCtrY] + "' in '" + mPostalFmts[mCountryRow][0] + "'") mPostalFmtsRegExp[0][mCtrY-1] = mRE_Start; // ***** Start RegExpression Field mPostalFmtsRegExp[1][mCtrY-1] = mRE_Start; // ***** Start RegExpression Field // ***** loop and build regular expression for (mCtrX = 0; mCtrX < mPostalFmtsEleLen; mCtrX++){ mRE_Char = ""; if (mPostalFmts[mCountryRow][mCtrY].charAt(mCtrX).toUpperCase() == "A"){ mRE_Char = mRE_Alpha; }else if (mPostalFmts[mCountryRow][mCtrY].charAt(mCtrX).toUpperCase() == "#"){ mRE_Char = mRE_Hash; }else if (mPostalFmts[mCountryRow][mCtrY].charAt(mCtrX).toUpperCase() == "X"){ mRE_Char = mRE_AlphaNumeric; }else if (mPostalFmts[mCountryRow][mCtrY].charAt(mCtrX).toUpperCase() == " " || mPostalFmts[mCountryRow][mCtrY].charAt(mCtrX).toUpperCase() == "-"){ mRE_Char = mRE_Space; }else if (mPostalFmts[mCountryRow][mCtrY].charAt(mCtrX).toUpperCase() == "*"){ mRE_Char = mRE_Asterrisk; } mPostalFmtsRegExp[0][mCtrY-1] += mRE_Char; // ***** Add to RegExpression Field if (mRE_Char != mRE_Space){mPostalFmtsRegExp[1][mCtrY-1] += mRE_Char;} // ***** Add to RegExpression Field //mMsg = "mRE_Char = " + mRE_Char + "\n" + mPostalFmtsRegExp[0][0] + " = " + mPostalFmtsRegExp[0][mCtrY-1] + "\n" + mPostalFmtsRegExp[1][0] + " = " + mPostalFmtsRegExp[1][mCtrY-1]; //alert(mMsg); } // ***** Check against regular express and exit if match //alert("Before conversion stored expression for With and Without are:\n" + mPostalFmtsRegExp[0][mCtrY-1] + "\n" + mPostalFmtsRegExp[1][mCtrY-1]); mPostalFmtsRegExp[0][mCtrY-1] += mRE_End; // ***** End RegExpression Field mPostalFmtsRegExp[1][mCtrY-1] += mRE_End; // ***** End RegExpression Field mPostalFmtsRegExp[0][mCtrY-1] = new RegExp(mPostalFmtsRegExp[0][mCtrY-1]); // ***** Convert to RegExpression mPostalFmtsRegExp[1][mCtrY-1] = new RegExp(mPostalFmtsRegExp[1][mCtrY-1]); // ***** Convert to RegExpression //alert("After conversion stored expression for With and Without are:\n" + mPostalFmtsRegExp[0][mCtrY-1] + "\n" + mPostalFmtsRegExp[1][mCtrY-1]); //alert("mPostalFmtsRegExp[0][mCtrY-1].test(mForm.elements[mField].value) = " + mPostalFmtsRegExp[0][mCtrY-1].test(mForm.elements[mField].value) + "\n" + "mPostalFmtsRegExp[1][mCtrY-1].test(mForm.elements[mField].value) = " + mPostalFmtsRegExp[1][mCtrY-1].test(mForm.elements[mField].value)); // ***** mMatchType values {0 - no match, 1 - match to format w/spaces, 2 - match to format w/o spaces, 3 - match to both format with & without spaces} // Since a mMatchType of 3 means both a Primary and Secondary match was found, the Primary is given priority. mMatchType = ((mPostalFmtsRegExp[0][mCtrY-1].test(mForm.elements[mField].value))? 1: 0) + ((mPostalFmtsRegExp[1][mCtrY-1].test(mForm.elements[mField].value))? 2: 0); //alert("mMatchType == '" + mMatchType + "'"); if (mMatchType != 0){ if (mMatchType == 1 || mMatchType == 3){ // ***** Primary Match Found mSecondaryMatch = 0; mForm.elements[mField].value = mForm.elements[mField].value.toUpperCase(); return true; } if (mMatchType == 2){ // ***** Secondary Match Found if (mSecondaryMatch == 0){mSecondaryMatch = mCtrY-1;} } } } // ***** Stop if reject secondary format if (mSecondaryMatch != 0 && mReject2Fmt){ //alert("mSecondaryMatch != 0 && mReject2Fmt"); mForm.elements[mField].value = mForm.elements[mField].value.toUpperCase(); if (mShowMsg){ // ***** Rejection if no match and show alert mMsg = ""; mMsg += "'" + mForm.elements[mField].value + "' is not a recognized " + mFieldLbl + " format for '" + mCountry + "'"; alert(mMsg); return false; } } // ***** If Secondary format was found and reformat was specified, reformat mField. //alert("mSecondaryMatch != 0 && mReformat = \n" + mSecondaryMatch + " && " +mReformat); if (mSecondaryMatch != 0){ if (mReformat){ //alert("mSecondaryMatch != 0 && mReformat"); // ***** Determine if format needs to be applied // loop thru formats -> loop thru chars within formats --> compare fmt char to place within str: exit function if match mFmtMatched = true; mFieldNew = ""; mChar = ""; mFmtLen = mPostalFmts[mCountryRow][mSecondaryMatch + 1].length; //alert("Using '" + mPostalFmts[mCountryRow][mSecondaryMatch + 1] + "'"); for (mCtrX = 0; mCtrX < mFmtLen; mCtrX++){ mChar = mPostalFmts[mCountryRow][mSecondaryMatch + 1].charAt(mCtrX); //alert("mChar = '" + mChar + "'\n Is valid spacer = " + mRE_Space.indexOf(mChar)); if (mRE_Space.indexOf(mChar) != -1){ mFieldNew += mChar + mForm.elements[mField].value.charAt(mCtrX); }else{ mFieldNew += mForm.elements[mField].value.charAt(mCtrX); } } mForm.elements[mField].value = mFieldNew.toUpperCase(); return true; }else { //alert("mSecondaryMatch != 0 && Not mReformat"); return false; } } mMsg = ""; if (mShowMsg){ // ***** show alert mMsg += "'" + mForm.elements[mField].value + "' is not in a recognizable " + mFieldLbl + " format for '" + mCountry + "'"; alert(mMsg); delete mMsg; } return false; }