function formatPhoneNumber(formObj,target){ myValue = (target.value).replace(/[^0-9]/g, ''); if(myValue.length>10){ myValue = myValue.substr(1); } target.value = "("+myValue.substr(0,3)+") "+myValue.substr(3,3)+"-"+myValue.substr(6,4); if((target.value.substr(0,1))=="(" && (target.value.substr(4,1))==")" && (target.value.length==14 || target.value.length==13)){ return ""; }else{ return "Please retype your "+target.name+". Do not use any special characters.\n"; } } function validateCheckout(form,paymentExceptions){ // Validate step 2 err = "The following error[s] occurred:\n\n"; if(form.userFullName){ if(form.userFullName.value == ""){ err += "You must enter a billing name.\n"; } } if(form.userBillingAddress1){ if(form.userBillingAddress1.value == ""){ err += "You must enter a billing address.\n"; } } if(form.userBillingCity){ if(form.userBillingCity.value == ""){ err += "You must enter a billing city.\n"; } } if(form.userBillingCountry){ var countryCode = form.userBillingCountry.value; var count = statesArray.length; var needsState = false; for(i=0;i1 &&form.userBillingZipCode.value == ""){ err += "You must enter a billing zip code.\n"; } } if(form.userDayPhone && form.userBillingCountry.value=='US'){ err += formatPhoneNumber(form,form.userDayPhone); } if(form.shippingHomePhone && form.shippingCountry.value=='US'){ err += formatPhoneNumber(form,form.shippingHomePhone); } if(form.payment_method){ // paymentExceptions is a string of payment types // with no need to validate. if(paymentExceptions.search(form.payment_method.value)<0){ err += CheckCardNumber(form); if(form.cc_owner.value == ""){ err += "You must enter a credit card holder.\n"; } if(form.orderCVV2code){ if(form.orderCVV2code.value==""){ err += "You must enter a CVV2 security code.\n"; } } }else if(form.orderPurchaseOrderNumber){ //Purchase Order is required for net30 if(form.orderPurchaseOrderNumber.value==""){ err += "You must enter a purchase order number for Net30 accounts.\n"; } } } if(form.shippingFullName){ if(form.shippingFullName.value == ""){ err += "You must enter a shipping name.\n"; } } if(form.shippingAddress1){ if(form.shippingAddress1.value == ""){ err += "You must enter a shipping address.\n"; } } if(form.shippingCity){ if(form.shippingCity.value == ""){ err += "You must enter a shipping city.\n"; } } if(form.shippingCountry){ var countryCode = form.shippingCountry.value; var count = statesArray.length; var needsState = false; for(i=0;i1 && form.shippingZipCode.value == ""){ err += "You must enter a shipping zip code.\n"; } } /* if(document.getElementById("residentialY")){ if(!document.getElementById("residentialY").checked && !document.getElementById("residentialN").checked){ err += "You must select whether your shipping address is residental or not.\n"; } }*/ if(form.taxExempt){ if(form.taxExempt[0].checked && form.fedTaxIdNumber.value=="" && form.shippingStateOrProvince.value=="MI"){ err += "Please enter your Federal Tax ID Number."; } } // Check email address if(form.userEmail){ //if(form.checkOutType.value != "fast_checkout"){ //validate email if not fast checkout if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(form.userEmail.value)){ }else{err += "You must enter a email address.\n";} //} } if(err!="The following error[s] occurred:\n\n"){ alert(String(err)); return false; }else{ return true; } } /*/ *************************************** * Begin Validate credit card *************************************** /*/ // Setup card types var Cards = new makeArray(8); Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16"); var Mastercard = Cards[0]; Cards[1] = new CardType("Visa", "4","13,16"); var Visa = Cards[1]; Cards[2] = new CardType("Amex", "34,37", "15"); var AMEX = Cards[2]; Cards[3] = new CardType("DinersClubCard", "30,36,38", "14"); var DinersClubCard = Cards[3]; Cards[4] = new CardType("Discover", "6011", "16"); var Discover = Cards[4]; Cards[5] = new CardType("enRouteCard", "2014,2149", "15"); var enRouteCard = Cards[5]; Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16"); var JCBCard = Cards[6]; var LuhnCheckSum = Cards[7] = new CardType(); /*************************************************************************\ CheckCardNumber(form) function called when users click the "check" button. \*************************************************************************/ function CheckCardNumber(form) { var tmpyear; if (form.cc_number.value.length == 0) { err="You must enter a Card Number.\n"; form.cc_number.focus(); return err; } if (form.cc_expiration_year.value.length == 0) { err = "Please enter the Expiration Year.\n"; form.cc_expiration_year.focus(); return err; } if(form.cc_expiration_year.value.length!=4){ if (form.cc_expiration_year.value > 96) tmpyear = "19" + form.cc_expiration_year.value; else if (form.cc_expiration_year.value < 21) tmpyear = "20" + form.cc_expiration_year.value; else { err = "The Expiration Year is not valid.\n"; return err; } }else{ tmpyear = form.cc_expiration_year.value; } tmpmonth = form.cc_expiration_month.options[form.cc_expiration_month.selectedIndex].value; // The following line doesn't work in IE3, you need to change it // to something like "(new CardType())...". // if (!CardType().isExpiryDate(tmpyear, tmpmonth)) { if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) { err = "This card has already expired.\n"; return err; } card = form.payment_method.options[form.payment_method.selectedIndex].value; var retval = eval(card + ".checkCardNumber(\"" + form.cc_number.value + "\", " + tmpyear + ", " + tmpmonth + ");"); cardname = ""; if (retval) // comment this out if used on an order form return ""; else { // The cardnumber has the valid luhn checksum, but we want to know which // cardtype it belongs to. for (var n = 0; n < Cards.size; n++) { if (Cards[n].checkCardNumber(form.cc_number.value, tmpyear, tmpmonth)) { cardname = Cards[n].getCardType(); break; } } if (cardname.length > 0) { err = "This looks like a " + cardname + " number, not a " + card + " number.\n"; return err; }else { err = "This card number is not valid.\n"; return err; } } } /*************************************************************************\ Object CardType([String cardtype, String rules, String len, int year, int month]) cardtype : type of card, eg: MasterCard, Visa, etc. rules : rules of the cardnumber, eg: "4", "6011", "34,37". len : valid length of cardnumber, eg: "16,19", "13,16". year : year of expiry date. month : month of expiry date. eg: var VisaCard = new CardType("Visa", "4", "16"); var AmExCard = new CardType("AmEx", "34,37", "15"); \*************************************************************************/ function CardType() { var n; var argv = CardType.arguments; var argc = CardType.arguments.length; this.objname = "object CardType"; var tmpcardtype = (argc > 0) ? argv[0] : "CardObject"; var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9"; var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19"; this.setCardNumber = setCardNumber; // set CardNumber method. this.setCardType = setCardType; // setCardType method. this.setLen = setLen; // setLen method. this.setRules = setRules; // setRules method. this.setExpiryDate = setExpiryDate; // setExpiryDate method. this.setCardType(tmpcardtype); this.setLen(tmplen); this.setRules(tmprules); if (argc > 4) this.setExpiryDate(argv[3], argv[4]); this.checkCardNumber = checkCardNumber; // checkCardNumber method. this.getExpiryDate = getExpiryDate; // getExpiryDate method. this.getCardType = getCardType; // getCardType method. this.isCardNumber = isCardNumber; // isCardNumber method. this.isExpiryDate = isExpiryDate; // isExpiryDate method. this.luhnCheck = luhnCheck;// luhnCheck method. return this; } /*************************************************************************\ boolean checkCardNumber([String cardnumber, int year, int month]) return true if cardnumber pass the luhncheck and the expiry date is valid, else return false. \*************************************************************************/ function checkCardNumber() { var argv = checkCardNumber.arguments; var argc = checkCardNumber.arguments.length; var cardnumber = (argc > 0) ? argv[0] : this.cardnumber; var year = (argc > 1) ? argv[1] : this.year; var month = (argc > 2) ? argv[2] : this.month; this.setCardNumber(cardnumber); this.setExpiryDate(year, month); if (!this.isCardNumber()) return false; if (!this.isExpiryDate()) return false; return true; } /*************************************************************************\ String getCardType() return the cardtype. \*************************************************************************/ function getCardType() { return this.cardtype; } /*************************************************************************\ String getExpiryDate() return the expiry date. \*************************************************************************/ function getExpiryDate() { return this.month + "/" + this.year; } /*************************************************************************\ boolean isCardNumber([String cardnumber]) return true if cardnumber pass the luhncheck and the rules, else return false. \*************************************************************************/ function isCardNumber() { var argv = isCardNumber.arguments; var argc = isCardNumber.arguments.length; var cardnumber = (argc > 0) ? argv[0] : this.cardnumber; if (!this.luhnCheck()) return false; for (var n = 0; n < this.len.size; n++) if (cardnumber.toString().length == this.len[n]) { for (var m = 0; m < this.rules.size; m++) { var headdigit = cardnumber.substring(0, this.rules[m].toString().length); if (headdigit == this.rules[m]) return true; } return false; } return false; } /*************************************************************************\ boolean isExpiryDate([int year, int month]) return true if the date is a valid expiry date, else return false. \*************************************************************************/ function isExpiryDate() { var argv = isExpiryDate.arguments; var argc = isExpiryDate.arguments.length; year = argc > 0 ? argv[0] : this.year; month = argc > 1 ? argv[1] : this.month; if (!isNum(year+"")) return false; if (!isNum(month+"")) return false; today = new Date(); expiry = new Date(year, month); if (today.getTime() > expiry.getTime()) return false; else return true; } /*************************************************************************\ boolean isNum(String argvalue) return true if argvalue contains only numeric characters, else return false. \*************************************************************************/ function isNum(argvalue) { argvalue = argvalue.toString(); if (argvalue.length == 0) return false; for (var n = 0; n < argvalue.length; n++) if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9") return false; return true; } /*************************************************************************\ boolean luhnCheck([String CardNumber]) return true if CardNumber pass the luhn check else return false. Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl \*************************************************************************/ function luhnCheck() { var argv = luhnCheck.arguments; var argc = luhnCheck.arguments.length; var CardNumber = argc > 0 ? argv[0] : this.cardnumber; if (! isNum(CardNumber)) { return false; } var no_digit = CardNumber.length; var oddoeven = no_digit & 1; var sum = 0; for (var count = 0; count < no_digit; count++) { var digit = parseInt(CardNumber.charAt(count)); if (!((count & 1) ^ oddoeven)) { digit *= 2; if (digit > 9) digit -= 9; } sum += digit; } if (sum % 10 == 0) return true; else return false; } /*************************************************************************\ ArrayObject makeArray(int size) return the array object in the size specified. \*************************************************************************/ function makeArray(size) { this.size = size; return this; } /*************************************************************************\ CardType setCardNumber(cardnumber) return the CardType object. \*************************************************************************/ function setCardNumber(cardnumber) { this.cardnumber = cardnumber; return this; } /*************************************************************************\ CardType setCardType(cardtype) return the CardType object. \*************************************************************************/ function setCardType(cardtype) { this.cardtype = cardtype; return this; } /*************************************************************************\ CardType setExpiryDate(year, month) return the CardType object. \*************************************************************************/ function setExpiryDate(year, month) { this.year = year; this.month = month; return this; } /*************************************************************************\ CardType setLen(len) return the CardType object. \*************************************************************************/ function setLen(len) { // Create the len array. if (len.length == 0 || len == null) len = "13,14,15,16,19"; var tmplen = len; n = 1; while (tmplen.indexOf(",") != -1) { tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length); n++; } this.len = new makeArray(n); n = 0; while (len.indexOf(",") != -1) { var tmpstr = len.substring(0, len.indexOf(",")); this.len[n] = tmpstr; len = len.substring(len.indexOf(",") + 1, len.length); n++; } this.len[n] = len; return this; } /*************************************************************************\ CardType setRules() return the CardType object. \*************************************************************************/ function setRules(rules) { // Create the rules array. if (rules.length == 0 || rules == null) rules = "0,1,2,3,4,5,6,7,8,9"; var tmprules = rules; n = 1; while (tmprules.indexOf(",") != -1) { tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length); n++; } this.rules = new makeArray(n); n = 0; while (rules.indexOf(",") != -1) { var tmpstr = rules.substring(0, rules.indexOf(",")); this.rules[n] = tmpstr; rules = rules.substring(rules.indexOf(",") + 1, rules.length); n++; } this.rules[n] = rules; return this; } // End -->// JavaScript Document /* ############## END ################# */ /* ############ checkPass ############ # This function checks that pass # # and confirm pass match # # throw an error alert box # ################################### */ function validateForm(){ // Get elements in form err = ""; c = document.newCustomer.elements.length; for(i=0;i(Number(totalCost)+Number(shipCost)+Number(taxCost))){ var remaining = Number(discount)-(Number(totalCost)+Number(shipCost)+Number(taxCost)); }else{ var remaining = 0; } if(Number(discount)>Number(totalCost)+Number(shipCost)+Number(taxCost)) discount = Number(totalCost)+Number(shipCost)+Number(taxCost); document.getElementById('discountText').innerHTML = formatCurrency(Number(discount)); document.getElementById('discount').value = document.getElementById('discountText').innerHTML; document.getElementById('remaining').innerHTML = formatCurrency(remaining); if((Number(totalCost)+Number(shipCost)+Number(taxCost))-Number(discount)>0 && (paymentMethod=="Prepaid" || (paymentMethod=="Gift Certificate" && giftCertificate!=""))){ if(document.getElementById('processText')){ document.getElementById('processText').innerHTML = "Please adjust your cart total to be less than or equal to your giftcard amount or choose a second payment method by clicking here."; document.getElementById('processText').style.color = "#FF0000"; } if(document.getElementById('process')) document.getElementById('process').disabled = true; }else{ if(document.getElementById('processText')){ document.getElementById('processText').innerHTML = ""; document.getElementById('processText').style.color = "#000000"; } if(document.getElementById('process')) document.getElementById('process').disabled = false; } } document.getElementById('total').value = (Number(totalCost)+Number(shipCost)+Number(taxCost))-Number(discount); document.getElementById('total_text').innerHTML = formatCurrency((Number(totalCost)+Number(shipCost)+Number(taxCost))-Number(discount)); } function formatCurrency(num) { num = num.toString().replace(/\$|\,/g,''); if(isNaN(num)) num = "0"; sign = (num == (num = Math.abs(num))); num = Math.floor(num*100+0.50000000001); cents = num%100; num = Math.floor(num/100).toString(); if(cents<10) cents = "0" + cents; for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3)); return (((sign)?'':'-') + num + '.' + cents); } /* ######### prevAddresses ########## # This function gets the prevous # # shipping addresses used for the # # user account # ################################### */ // Function for previous addresses // Function for previous addresses function previousAdderess(){ // get the selected value sel = document.getElementById("prevShippingAddresses").selectedIndex; //alert(sel); if(sel!=0){ // Selection is a previous address // Make "remove" visible document.getElementById("remove_address").style.visibility = "visible"; var mystring = "" var prevArr = mystring.split("~"); var c = prevArr.length; for(a=0;a= 65 && myKeyCode <= 90 ) && !myShiftKey ) { putErrorBubbleMsg("Your Caps Lock key is currently set to on. Remember your password is case sensitive. If you have a problem logging in, please turn your Caps Lock key off."); document.getElementById(layer).style.display = 'inline'; document.getElementById(layer).style.top = findPosY(document.getElementById(referer.id),layer,document.getElementById(layer).clientHeight+2)+"px"; document.getElementById(layer).style.left = findPosX(document.getElementById(referer.id),layer,document.getElementById(layer).clientWidth*.75)+"px"; // Lower case letters are seen while depressing the Shift key, therefore Caps Lock is on } else if ( ( myKeyCode >= 97 && myKeyCode <= 122 ) && myShiftKey ) { putErrorBubbleMsg("Your Caps Lock key is currently set to on. Remember your passwordis case sensitive. If you have aproblem logging in please turn your Caps Lock key off."); document.getElementById(layer).style.display = 'inline'; document.getElementById(layer).style.top = findPosY(document.getElementById(referer.id),layer,document.getElementById(layer).clientHeight+2)+"px"; document.getElementById(layer).style.left = findPosX(document.getElementById(referer.id),layer,document.getElementById(layer).clientWidth*.75)+"px"; }else{ document.getElementById(layer).style.display = 'none'; } // hides bubble after 5 seconds myTimer = setTimeout("hideBubble('"+layer+"')",5000); timerRunning = true; } /*/ *************************************** * Begin Net 30 (credit acount) * Verification *************************************** /*/ function setTableDisplay(items,displayValue,type){ if(!type){type = 'table-row';} displayType = (displayValue)?(navigator.appName == "Netscape")?type:'inline':'none'; itemArray = items.split(","); for(i=0;i