<!--
/******/

var msgErrorHeader = 'Your request could not be submitted.  Make the following modifications to continue:  \n\n';
var msgErrorFooter = '    ';
var msgFirstNameRequired = 'Please enter a First Name\n';
var msgLastNameRequired = 'Please enter a Last Name\n';
var msgAddressLineRequired = 'Please enter an Address\n';
var msgCityRequired = 'Please enter a City\n';
var msgStateRequired = 'Please select a State\n';
var msgZipCodeRequired = 'Please enter a Zip Code\n';
var msgPhoneRequired = 'Please enter a Phone number\n';
var msgDayPhoneRequired = 'Please enter a Home Phone number\n';
var msgEmailRequired = 'Please enter an E-mail address\n';
var msgEmailListRequired = 'Please enter at least one E-mail address\n';
var msgPasswordRequired = 'Please enter your Password\n';
var msgVerifyPasswordRequired = 'Please enter a Verification Password\n';
var msgSecQuestionRequired = 'Please select a Security Question\n';
var msgSecAnswerRequired = 'Please enter a Security Answer\n';
var msgCCNumberRequired = 'Please enter a valid Credit Card number\n';
var msgCCNameRequired = 'Please enter your Name\n';
var msgCCDateRequired = 'Please enter the Expiration Date\n';
var msgMaterialNumberRequired = 'Please enter a Material Number\n';
var msgFastFindNumberRequired = 'Please enter a Fast Find I.D.\n';
var msgFirstNameInvalid = 'Ensure that the First Name is no longer than 20 characters and only contains letters, spaces, and periods\n';
var msgLastNameInvalid = 'Ensure that the Last Name is no longer than 30 characters and only contains letters, spaces, and periods\n';
var msgAddressLineInvalid = 'Ensure that the Address Line(s) only contains numbers, letters, spaces, "." and "#". Note that "#" symbols must be followed by a number and consecutive punctuation is not allowed.\n';
var msgCityInvalid = 'Ensure that the City only contains numbers, letters, spaces, and periods\n';
var msgZipCodeInvalid = 'Ensure that the Zip Code format is valid (e.g., 00000)\n';
var msgPhoneInvalid = 'Ensure that the Phone Number format is valid (e.g., 1234567890)\n';
var msgDayPhoneInvalid = 'Ensure that the Phone Number format is valid (e.g., 1234567890)\n';
var msgEmailInvalid = 'Ensure that the E-mail address is valid (e.g., john.doe@smithandnoble.com)\n';
var msgEmailListInvalid = 'Ensure that each E-mail address is valid and that they are separated by commas\n';
var msgPasswordInvalid = 'Ensure that the Password is between 6 and 20 characters and only contains numbers, letters, and underscores\n';
var msgPasswordMismatch = 'Ensure that the two Passwords you entered match\n';
var msgSecAnswerInvalid = 'Ensure that the Security Answer only contains letters, numbers, spaces, and periods\n';
var msgCCNumberInvalid = 'Ensure that the Credit Card is valid and only contains numbers, spaces, or hyphens\n';
var msgCCNameInvalid = 'Ensure that the Name on the Credit Card is valid\n';
var msgCCDateInvalid = 'Ensure that the Credit Card has not expired\n';
var msgMaterialNumberInvalid = 'Please enter a valid color or material number\n';
var msgFastFindNumberInvalid = 'Please enter a valid FastFind I.D. number up to 6 digits in length\n';
var msgCCTypeRequired = 'Please select a Credit Card Type\n';
var msgSubjectRequired = 'Please enter a Subject\n';
var msgMessageRequired = 'Please enter a Message\n';
var msgWorkOrderInvalid = 'Ensure that the Work Order Number is 7 digits\n';
var msgInvalidGCNumber = 'Ensure that the Gift Certificate Number(s) is valid (e.g. 0000000-00).  Multiple Gift Certificates should be separated by commas\n';
var msgInvalidSwatchRebateNumber = 'Ensure that the Swatch Rebate Number(s) is valid (e.g. 0000000).  Multiple Swatch Rebate Numbers should be separated by commas\n';
var msgInvalidCatalogSourceCode = 'Ensure that the Catalog Key Code is exactly 8 digits\n';
var msgFullNameInvalid = 'Please ensure that your Name contains only letters, spaces and periods\n';
var msgInvalidWindowName = 'Ensure that the Product Name contains only letters, spaces, and periods\n';
var msgAskQuestionRequired = 'Please enter a Question\n';
var msgAskTopicRequired = 'Please select a Question Topic\n';
var msgCatalogRequired = 'Please select a catalog\n';
var msgCCTypeNumberMismatch = 'The number you have entered is not valid for the type of Credit Card [e.g. Visa, American Express] you have selected\n';
var msgSavedCCDateInvalid = 'The credit card saved in your account has expired.  Please use a current credit card.  Remember to update your account with a current card for future purchases.\n';
var msgNameRequired = 'Please enter your Name\n';
var msgNameInvalid = 'Ensure that your Name contains only letters, spaces, or periods\n';
var msgEmailNotModified = 'Ensure that the new E-mail address is different than the current one\n';
var msgEmailConfirmRequired = 'Please enter an e-mail address and retype for confirmation\n';
var msgEmailAndConfirmNotEqual = 'Please make sure your email address is entered correctly in both fields\n';
var msgEnterASwatch = 'Ensure that you have selected a swatch before you continue.\n';
var msgEnterReferralCode = 'Please select how you heard about us.\n';
var msgEnterCatalogCode = 'Please enter the catalog code.\n';


function isFilled(elm) {
    if (elm.value == "" || elm.value == null)
    return false;
    else return true;
}
/******/
function isChecked(elm) {
    if (elm.checked) {
        return true;
    } else {
        return false;
    }
}
/******/
function isNumeric(elm) {
    var regexp1 = /^(\d+)$/;
    var regexp2 = /[1-9]/; // has at least one non-zero value
    if (regexp1.test(elm.value) && regexp2.test(elm.value))
    {
        // strip leading zeros
        elm.value=elm.value.replace(/^0+/g,"");
        return true;
    }
    else
        return false;
}
/******/
function isNumericWithLeadingZero(elm) {
    var regexp1 = /^(\d+)$/;
    var regexp2 = /[0-9]/; // has at least one numeric value including zero
    if (regexp1.test(elm.value) && regexp2.test(elm.value))
    {
        // strip leading zeros
//        elm.value=elm.value.replace(/^0+/g,"");
        return true;
    }
    else
        return false;
}
/******/
function isFloat(elm) {
    var regexp1 = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
    var regexp2 = /[1-9]/;  // has at least one non-zero value
    if (regexp1.test(elm.value) && regexp2.test(elm.value)) {
        // strip leading zeros
        elm.value = elm.value.replace(/^0+/g,"");
        return true;
    }
    else
        return false;
}
/******/
// Updated to set the element value to ddddd-dddd if 9 digits.
// rschramm - 2/6/01.
function isZipValid(elm) {
    var regexp = /^(\d{5}|\d{9}|\d{5}-\d{4})$/;
    var val;
    if ( regexp.test(elm.value) )
    {
       val=elm.value.replace(/[^\d]/,'');
       if (val.length == 5)
          return true;
       else
       {
          regexp2 = /(\d{5})(\d{4})/;
          var parsed = regexp2.exec(val);
          elm.value = parsed[1]+"-"+parsed[2];
          return true;
       }
    }
    else
        return false;
}
/******/
function isPhoneValid(elm) {
    // takes parentheses, spaces, hyphens, and dots as separators of digits
    // match 10 digits, or (ddd) ddd-dddd or 3 digits 3 digits and 4 digits each
    // group seperated by 0 or 1 spaces, dots, or dashes.
    // modified by rschramm 2/5/2001
    var regexp = /^(\d{10}|\(\d{3}\)\s*\d{3}-\d{4}|\d{3}[\-\.\s]?\d{3}[\-\.\s]?\d{4})$/;
    if (regexp.test(elm.value))
    {
     //  var modVal = elm.value.replace(/[^\d]/g,"");
     // var valChop = /(\d{3})(\d{3})(\d{4})/;
     // result = valChop.exec(modVal);
     //elm.value = result[1]+"-"+result[2]+"-"+result[3];
      return true;
    }
    else
      return false;
}
/******/
function checkMenus(elm){
    if ((elm.value == "noselection") || (elm.value == null))
    return false;
    else return true;
}
/******/
function verifyNewPassword(p1, p2) {
    if (p1.value != p2.value)
        return false;
    else
        return true;
}
/******/
function isPasswordValidLength(elm) {
    if ((elm.value.length < 6) || (elm.value.length > 20))
        return false;
    else
        return true;
}
/******/
function isAlphanumeric(elm) {
    var regexp = /^\w+$/;
    if (regexp.test(elm.value))
        return true;
    else
        return false;
}
/******/
function isAlphabetic(elm) {
    var regexp = /^[a-zA-Z]+$/;
    if (regexp.test(elm.value))
        return true;
    else
        return false;
}
/******/
function isAlphabeticPlusSpacesAndPeriods(elm) {
    // spaces should only be in between words and periods should begin a word
    elm.value = elm.value.replace(/^\s+|\s+$/g,"");
    var regexp = /^[a-zA-Z\s\.\-]+$/;
    if (regexp.test(elm.value)) {
        // invalid combination of characters
        regexp = /\B\.|\b\.\b|\B\-|\-\B/g;
        if (!regexp.test(elm.value))
            return true;
    }
    // if we got here, the string failed the test.
    return false;
}
/******/
function isAlphanumericPlusSpaces(elm) {
    // spaces should only be between words
    elm.value = elm.value.replace(/^\s+|\s+$/g,"");
    var regexp = /^[\w\s]+$/;
    if (regexp.test(elm.value))
        return true;
    else
        return false;
}
/******/
function isAlphanumericPlusSpacesAndPeriods(elm) {
    // spaces should only be in between words and periods should begin a word
    elm.value = elm.value.replace(/^\s+|\s+$/g,"");
    var regexp = /^[\/\w\s\.]+$/;
    if (regexp.test(elm.value)) {
        // invalid combination of characters
        regexp = /\B\.|\b\.\b|\B\/|\/\B/g;
        if (!regexp.test(elm.value))
            return true;
    }
    return false;
}
/******/
function isAlphanumericPlusSpacesAndPeriodsAndPound(elm) {
    // remove leading or trailing spaces
    elm.value = elm.value.replace(/^\s+|\s+$/g,"");
    // v2.9
    // Modify 'A.B' type of instances so they will pass the \b\.\b test
    // but don't push these changes to the form value.
    // This is so P.O., N.E and similar are accepted, but not modified.
    var tempStr = elm.value.replace(/\b([a-zA-Z])\.([a-zA-Z])\b/g,"$1$2");
    var regexp = /^[0-9A-Za-z\/\s\.#\-]+$/;
    // Are there any valid characters?
    if (regexp.test(tempStr)) {
        // Are there any invalid combination of characters?
        regexp = /\B\.|\b\.\b|\B\/|\/\B|#\B|\b#\b|\-\B|\B\-/g;
        if (!regexp.test(tempStr))
            return true;
    }
    return false;
}
/******/
function isCreditCardTypeNumberValid(ccType, ccNum) {
// 	if (ccType.value != "Smith Noble")
    	st = ccNum.value.replace(/[^\d]/g,"");
// 	else
// 		st = ccNum.value;
	
    var prefix;
    if (st.length > 16)
        return (false);
    // Mastercard length should be 16 & prefix should start with 51-55
    if (ccType.value == "MasterCard") {
        if (st.length != 16)
            return (false);
        else {
            prefix = st.substring(0, 2);
            if ((prefix < 51) || (prefix >  55))
                return (false);
        }
     }
     // Visa length should be either 13 or 16 and prefix should be 4
    if (ccType.value == "Visa") {
        if ((st.length !=13) && (st.length !=16))
            return (false);
        else {
            prefix = st.substring(0, 1);
            if (prefix != 4)
                return (false);
        }
     }
     // American express length should be 15 & prefix should be either 34 or 37
     if (ccType.value == "American Express") {
        if (st.length != 15)
            return (false);
        else {
            prefix = st.substring(0, 2);
            if ((prefix != 34) && (prefix !=  37))
                return (false);
        }
     }
     // Discover length should be 16 & prefix should be 6011
     if (ccType.value == "Discover") {
        if (st.length != 16)
            return (false);
        else {
            prefix = st.substring(0, 4);
            if (prefix != 6011)
                return (false);
        }
     }
     // Smith Noble length should be min 14 and max 16
     if (ccType.value == "Smith Noble") {
        if (st.length != 16)
            return (false);
     }     
     return(true);
}
/******/
function isCreditCard(elm) {
    st = elm.value.replace(/[^\d]/g,"");
    // Encoding only works on cards with less than 19 digits
    if (st.length > 19)
        return (false);
    sum = 0; mul = 1; l = st.length;
    for (i = 0; i < l; i++) {
        digit = st.substring(l-i-1,l-i);
        tproduct = parseInt(digit ,10)*mul;
        if (tproduct >= 10)
            sum += (tproduct % 10) + 1;
        else
            sum += tproduct;
        if (mul == 1)
            mul++;
           else
            mul--;
    }
    if ((sum % 10) == 0) {
        elm.value = st;
        return (true);
    }
    else {
        return (false);
    }
}
/******/
function submitForm_General(formname, elementname, message) {
    if (IE) {
        frmName = eval('document.all.' + formname);
        frmElement = eval('document.all.' + formname + '.' + elementname);
    }
    else {
        frmName = eval('document.' + formname);
        frmElement = eval('document.' + formname + '.' + elementname + '.options[document.' + formname + '.' +  elementname + '.selectedIndex]');
    }
    if (checkMenus(frmElement))
        frmName.submit();
    else
        alert(message);
}
/******/
function checkSwatchNumber(swatchNumber) {
    for (var i = 0; i < swatchNumber.length; i++) {
        var oneChar = swatchNumber.substring(i, i + 1);
        if (oneChar < "0" || oneChar > "9")
            return (false);
    }
    return(true);
}
/******/
function checkAmount(certAmount) {
    var giftLoot = certAmount
    var amount = parseInt(giftLoot);
    if (amount <= 24)
        return (false);
}
/******/
// Validates a single email address
// Moved logic to seperate function validateEmailAddress
function isEmailValid(elm) {
    var emailStr = elm.value;
    return validateEmailAddress(emailStr);
}
/******/
// Validates a list of email addresses.
// rschramm 2/6/2001
function isEmailListValid(elm) {
	var list = elm.value.replace(/\s+/g,"");
	var listArray = new Array;
	listArray = list.split(/;/);
	for (i=0; i < listArray.length; i++) {
		retval = validateEmailAddress(listArray[i]);
		if (!retval) return false;
	}
	return true;
}
/******/
// This is now an internal function that is called by isEmailValid and
// isEmailListValid - rschramm 2/6/01
// It takes a string now, and not a form element.
// <!-- This script and many more are available free online at -->
// <!-- The JavaScript Source!! http://javascript.internet.com -->
function validateEmailAddress(emailStr) {
    var emailPat=/^(.+)@(.+)$/ ;
    var specialChars="\\(\\)<>@!#$%^~`&*?/{,;}+=|:\\\\\\\"\'\\.\\[\\]";
    var validChars="\[^\\s" + specialChars + "\]";
    var quotedUser="(\"[^\"]*\")";
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/ ;
    var atom=validChars + '+';
    var word="(" + atom + "|" + quotedUser + ")";
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
    var matchArray=emailStr.match(emailPat);
    if (matchArray==null)
        return false;
    var user=matchArray[1];
    var domain=matchArray[2];
    // See if "user" is valid
    if (user.match(userPat)==null)
        return false;
    var IPArray=domain.match(ipDomainPat);
    if (IPArray!=null) {
        // this is an IP address
        for (var i=1;i<=4;i++) {
            if (IPArray[i]>255)
                return false;
        }
        return true;
    }
    // Domain is symbolic name
    var domainArray=domain.match(domainPat)
    if (domainArray==null)
        return false;
    var atomPat=new RegExp(atom,"g");
    var domArr=domain.match(atomPat);
    var len=domArr.length;
   if (domArr[domArr.length-1].length<2 ||
        domArr[domArr.length-1].length>4)
       return false;
    if (len<2)
       return false;
    return true;
}
/******/
function isDateExpired(monElm,yrElm) {
   var now = new Date();
   var nowMon = now.getMonth() + 1;
   var nowYr = now.getFullYear();
   var mon = monElm.value;
   var yr = yrElm.value;
   if (yr > nowYr) {
       // It is next year or greater, so it is not expired.
       return false;
   }
   if (yr == nowYr && mon >= nowMon) {
       // It is this year, but it is this month or greater, so OK.
       return false;
   }
   else {
       // The above are the only two valid conditions so return true, indicating the date is expired.
       return true;
   }
}
/******/
function isGCListValid(elm)
{
   var list = elm.value.replace(/\s+/g,"");
   var listArray = new Array;
   listArray = list.split(/,/);
   for (i=0; i < listArray.length; i++) {
      retval = validateGiftCertificateNumber(listArray[i]);
      if (!retval)
        return false;
   }
   return true;
}
/******/
function isSRListValid(elm) {
   var list = elm.value.replace(/\s+/g,"");
   var listArray = new Array;
   listArray = list.split(/,/);
   for (i=0; i < listArray.length; i++) {
      retval = validateSwatchRebateNumber(listArray[i]);
      if (!retval)
        return false;
   }
   return true;
}
/******/
function isWorkOrderNumValid(elm) {
    var regexp = /^(\d{7})$/;
    elm.value.replace(/\s+/g,"");
    return regexp.test(elm.value);
}
/******/
function isCatalogSourceCode(elm){
    var regexp = /^(\d{8,9})$/;
    elm.value.replace(/\s+/g,"");
    return regexp.test(elm.value);
}
/******/
function validateGiftCertificateNumber(gcnum) {
  var GCcheck = /^(\d){7}-(\d){2}$/;
  return GCcheck.test(gcnum);
}
/******/
function validateSwatchRebateNumber(swnum) {
  var SRcheck = /^(\d){7}$/;
  return SRcheck.test(swnum);
}
/******/
function setFocusOnError(elm, elmfocus, showmsg) {
    if (showmsg != true)
        return elm;
    else
        return elmfocus;
}
//-->