/*

 * Copyright (C) 2008 Ignition Commerce.
 * All Rights Reserved.  No use, copying or distribution of this
 * work may be made except in accordance with a valid license
 * agreement from IgnitionCommerce.  This notice must be
 * included on all copies, modifications and derivatives of this
 * work.
 *
 * @Author Mike Sewell
 * @Version 1.0
 * @Since 1.0
 */
if(top.location!=location){top.location.href=document.location.href;}function info(){if(window.console&&window.console.log&&logInfo){window.console.log(arguments);}}function debug(){if(window.console&&window.console.log&&logDebug){window.console.log(arguments);}}function error(){if(window.console&&window.console.error&&logError){window.console.error(arguments[0]);}}function toJSON(toJsonify){if(Object.toJSON&&Object.toJSON(true)=="true"){return Object.toJSON(toJsonify);}else{return getJSONFor(toJsonify);}}function getJSONFor(object){if(!object){return"";}var jsonStr="";if(typeof object=="string"||typeof object=="number"){jsonStr='"'+object+'"';}else{if(isArray(object)){jsonStr+="[";for(var i=0;i<object.length;i++){jsonStr+=toJSON(object[i]);jsonStr+=", ";}if(jsonStr.indexOf(",")>-1){jsonStr=jsonStr.substring(0,jsonStr.length-2);}jsonStr+="]";}else{jsonStr+="{";for(prop in object){var value;try{eval("value = object."+prop);}catch(err){value="NOT DEFINED";}if(isHtml(value)||!isArray(value)){jsonStr+='"'+prop+'": "'+value+'"';}else{jsonStr+=getJSONFor(value);}jsonStr+=", ";}if(jsonStr.indexOf(",")>-1){jsonStr=jsonStr.substring(0,jsonStr.length-2);}jsonStr+="}";}}return jsonStr;}function isArray(object){return object&&typeof object.length=="number"&&typeof object=="object";}function isHtml(object){return object&&typeof object=="object"&&object.localName;}function setMaxLengthToTextAreas(){jq.each(jq("textarea[maxLength]"),function(i){jq(this).bind("keypress keydown keyup",function(e){return setMaxLengthToTextArea(e,this,jq(this).attr("maxLength"));});var ta=jq(this);var maxLength=ta.attr("maxLength");var numChars=ta.attr("value")==null?0:ta.attr("value").length;ta.parent().children("p#mlNotice").remove();ta.after(jq('<p id="mlNotice">'+(maxLength-numChars)+deliveryCharactersLeft));});}function setMaxLengthToTextArea(event,object,length){var key=event.which;if(key>=48||key==13||key==32){if(jq(object).val().length>=length){cancelEvent(event);}}var ta=jq(object);var maxLength=ta.attr("maxLength");var numChars=ta.attr("value")==null?0:ta.attr("value").length;ta.parent().children("p#mlNotice").remove();ta.after(jq('<p id="mlNotice">'+(maxLength-numChars)+deliveryCharactersLeft));}function addEvent(obj,evType,fn){if(obj==null){return;}if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true;}else{if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else{return false;}}}function removeEvent(obj,evType,fn){if(obj==null){return;}if(obj.removeEventListener){obj.removeEventListener(evType,fn,false);return true;}else{if(obj.detachEvent){var r=obj.detachEvent("on"+evType,fn);return r;}else{return false;}}}function cancelEvent(e){if(e&&e.preventDefault){e.preventDefault();}if(e){e.returnValue=false;}return false;}function getLuhnSum(cardNumber){var alt=false;var sum=0;var digit;for(var i=1;i<=cardNumber.length;i++){digit=cardNumber.charAt(cardNumber.length-i);if(alt){digit*=2;if(digit>9){digit-=9;}}sum+=Number(digit);alt=!alt;}return sum;}function passesLuhn(cardNumber){var sum=getLuhnSum(cardNumber);return sum%10==0;}function validateVerificationNumber(number,type){var isValid=false;var ccCheckRegExp=new RegExp("[^\\d -]");isValid=!ccCheckRegExp.test(number);if(type&&type=="storeCard"){return true;}if(type&&type=="amex"){isValid=isValid&&number.length==4;}else{isValid=isValid&&number.length==3;}return isValid;}function validateCCNumber(ccNum){var isValid=false;var ccCheckRegExp=new RegExp("[^\\d -]");isValid=!ccCheckRegExp.test(ccNum);if(isValid){isValid=false;var cardNumbersOnly=ccNum.replace(/\s+/g,"");cardNumbersOnly=cardNumbersOnly.replace(/-+/g,"");var cardNumberLength=cardNumbersOnly.length;if(cardNumberLength>=13&&cardNumberLength<=20){isValid=true;}if(isValid){isValid=passesLuhn(cardNumbersOnly);}}return isValid;}function validateMultipleEmails(emailListStr){var emails=emailListStr.split(";");if(emails.length>1){for(i=0;i<emails.length;i++){if(validateEMail(jq.trim(emails[i]))==false){return false;}}return true;}else{return(validateEMail(jq.trim(emailListStr)));}}function validateIssueNumber(){if(jq("#creditCard\\.creditCardType").val()=="maestro"){if(jq("#creditCard\\.extraVerification").val()==""){return false;}}return true;}function validateStartDate(){var today=new Date();var cardType=jq("#cardType").val();if(!cardType){cardType=jq("#creditCard\\.creditCardType").val();}if(cardType=="maestro"){var year=jq("#startYear").val();if(!year){year=parseInt(jq("#creditCard\\.startYear").val());}var month=jq("#startMonth").val();if(!month){month=(parseInt(jq("#creditCard\\.startMonth").val()));}if(month=="MM"&&year=="YY"){return true;}var day=today.getDate();var startDate=new Date();startDate.setFullYear(parseInt(year),parseInt(month)-1,day);return(startDate<=today);}return true;}function validateExpirationDate(){var today=new Date();var year=parseInt(jq("#expYear").val());if(!year){year=parseInt(jq("#creditCard\\.expirationYear").val());}var month=(parseInt(jq("#expMonth").val()));if(!month){month=(parseInt(jq("#creditCard\\.expirationMonth").val()));}var day=today.getDate();var expirationDate=new Date();expirationDate.setFullYear(year,month,day);return(expirationDate>=today);}function newsletterValidateEmail(f){var emailStr=f.EMAIL_ADDRESS_;if(validateEmail(emailStr.value)==false){emailStr.value=invalidEmailAddressError;emailStr.style.color="red";return false;}return true;}function validateEMail(emailStr){if(jq.trim(emailStr)==""){validationErrorStrings["profile.email"]=invalidEmailAddressError;validationErrorStrings.email=invalidEmailAddressError;}if(!validationErrorStrings.email||emailStr.length>100){validationErrorStrings["profile.email"]=invalidEmailAddressError;validationErrorStrings.email=invalidEmailAddressError;}if(!emailStr||emailStr.length==0){return false;}var pattern=new RegExp("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$");if(pattern.test(emailStr)==false){validationErrorStrings.email1=invalidEmailAddressError;validationErrorStrings.email2=invalidEmailAddressError;return false;}return true;}function validateEmail(emailStr){return validateEMail(emailStr);}function validatePassword(password){if(password==""){return false;}else{if(password.length<7){validationErrorStrings.password=invalidPasswordShortError;validationErrorStrings.newPassword=invalidPasswordShortError;return false;}else{if(!validateIsPasswordAlphanumeric(password)){validationErrorStrings.password=invalidPasswordLettersError;validationErrorStrings.newPassword=invalidPasswordLettersError;return false;}else{if((jq("#verifyPassword").val()!=null)&&(jq("#verifyPassword").val().length>0)&&(password!=jq("#verifyPassword").val())){validationErrorStrings.password=invalidPasswordConfirmError;validationErrorStrings.newPassword=invalidPasswordConfirmError;return false;}else{return true;}}}}}function validateIsPasswordAlphanumeric(password){var re=/(?=.*\d)(?=.*[a-zA-Z])/;return re.test(password);}function validateDate(dateStr){if(dateStr=="-1/-1/-1"||dateStr.length==0){return true;}var pattern=new RegExp("(0[1-9]|[1-9]|1[012])[- /.](0[1-9]|[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d");if(pattern.test(dateStr)){var dArr=dateStr.split("/");var newDate=new Date(dateStr);return newDate.getMonth()+1==dArr[0]&&newDate.getDate()==dArr[1]&&newDate.getFullYear()==dArr[2];}else{return false;}}function validatePhone(phoneStr){if(phoneStr.length==0){return false;}var newPhoneStr=phoneStr.replace(/[^0-9]/g,"");return newPhoneStr.length==10;}function validatePostal(postalStr){if(postalStr.length==0){return false;}var objRegExp=/^[a-zA-Z]\d[a-zA-Z][-\s]?\d[a-zA-Z][a-zA-Z]$|^[a-zA-Z]\d[a-zA-Z][-\s]?\d[a-zA-Z]\d$|^\d{5}$|^\d{5}-\d{4}$/;return objRegExp.test(postalStr);}function validatePostalCode(postalCode,country){if(!country){country_element=document.getElementById("address.country");postal_element=document.getElementById("address.postalCode");if(country_element){country=country_element.value;}if(postal_element){postal=postal_element.value;}}if(postalCode.length==0&&country!="GB"&&country!="US"&&country!="99"){return true;}var success=false;switch(country){case"AU":if(!success){success=/^[0-9]{4}$/i.test(postalCode);}break;case"AT":if(!success){success=/^(A-|AT-)?[0-9]{4}$/i.test(postalCode);}break;case"BE":if(!success){success=/^(B-|BE-)?[0-9]{4}$/i.test(postalCode);}break;case"BG":if(!success){success=/^(BG-)?[0-9]{4}$/i.test(postalCode);}break;case"99":if(!success){success=/^BFPO *[0-9]{1,4}$/i.test(postalCode);}break;case"CA":if(!success){success=/^[A-Z][0-9][A-Z] *[0-9][A-Z][0-9]$/i.test(postalCode);}break;case"CH":if(!success){success=/^(CH-)?[0-9]{4}$/i.test(postalCode);}break;case"CY":if(!success){success=/^(CY-)?[0-9]{4}$/i.test(postalCode);}break;case"CZ":if(!success){success=/^(CZ-)?[0-9]{3} *[0-9]{2}$/i.test(postalCode);}break;case"DE":if(!success){success=/^(D-|DE-)?[0-9]{5}$/i.test(postalCode);}break;case"DK":if(!success){success=/^(DK-)?[0-9]{4}$/i.test(postalCode);}break;case"EE":if(!success){success=/^(EE-)?[0-9]{5}$/i.test(postalCode);}break;case"ES":if(!success){success=/^(E-|ES-)?[0-9]{5}$/i.test(postalCode);}break;case"FI":if(!success){success=/^(FI-)?[0-9]{5}$/i.test(postalCode);}break;case"FR":if(!success){success=/^(F-|FR-)?[0-9]{5}$/i.test(postalCode);}break;case"GB":if(!success){success=/^GIR *0AA|^[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW]) *[0-9][ABD-HJLNP-UW-Z]{2}$/i.test(postalCode);}if(!success){success=/^BFPO *[0-9]{1,4}$/i.test(postalCode);}break;case"GG":if(!success){success=/^GY[0-9]{1,2} *[0-9][A-Z]{2}$/i.test(postalCode);}break;case"GI":if(!success&&postal!=""){success=false;}else{success=true;}break;case"GR":if(!success){success=/^(GR-)?[0-9]{5}$/i.test(postalCode);}break;case"HU":if(!success){success=/^(H-|HU-)?[0-9]{4}$/i.test(postalCode);}break;case"IE":if(!success){success=/^[0-9]{1,2}[0-9A-Z]?$/i.test(postalCode);}break;case"IM":if(!success){success=/^IM[0-9]{1,2} *[0-9][A-Z]{2}$/i.test(postalCode);}break;case"IT":if(!success){success=/^[0-9]{5}$/i.test(postalCode);}break;case"JE":if(!success){success=/^JE[0-9]{1,2} *[0-9][A-Z]{2}$/i.test(postalCode);}break;case"LT":if(!success){success=/^(LT-)?[0-9]{5}$/i.test(postalCode);}break;case"LU":if(!success){success=/^(L-|LU-)?[0-9]{4}$/i.test(postalCode);}break;case"LV":if(!success){success=/^(LV-)?[0-9]{4}$/i.test(postalCode);}break;case"MT":if(!success){success=/^([A-Z]{3}) ?([0-9]{2,4})$/i.test(postalCode);}break;case"NL":if(!success){success=/^(NL-)?[0-9]{4} *[A-Z]{2}$/i.test(postalCode);}break;case"NO":if(!success){success=/^(NO-)?[0-9]{4}$/i.test(postalCode);}break;case"NZ":if(!success){success=/^[0-9]{4}$/i.test(postalCode);}break;case"PL":if(!success){success=/^(PL-)?[0-9]{2}-[0-9]{3}$/i.test(postalCode);}break;case"PT":if(!success){success=/^(PT-)?[0-9]{4}(-[0-9]{3})?$/i.test(postalCode);}break;case"SE":if(!success){success=/^(SE-)?[0-9]{3} *[0-9]{2}$/i.test(postalCode);}break;case"SI":if(!success){success=/^(SI-)?[0-9]{4}$/i.test(postalCode);}break;case"SK":if(!success){success=/^(SK-)?[0-9]{3} *[0-9]{2}$/i.test(postalCode);}break;case"US":if(!success){success=/^[0-9]{5}(-[0-9]{4})?$/i.test(postalCode);}break;case"ZA":if(!success){success=/^[0-9]{4}$/i.test(postalCode);}break;default:success=true;break;}return success;}function createMouseEvent(event,object){var delta=0;if(!event){event=window.event;}if(event.wheelDelta){delta=event.wheelDelta/120;if(window.opera){delta=-delta;}}else{if(event.detail){delta=-event.detail/3;}}if(delta<0&&delta>-1){delta=-1;}else{if(delta>0&&delta<1){delta=1;}else{delta=Math.round(delta);}}x=event.screenX;y=event.screenY;if(object.createMouseEvent){object.createMouseEvent(x,y,delta);return cancelEvent(event);}return true;}function insertFlexComponent(id,location,width,height,attributes,flashvars,params){if(!attributes){attributes={};}attributes.id=id;attributes.name=id;if(!params){params={};}params.wmode="transparent";try{if(swfobject.hasFlashPlayerVersion("9")){swfobject.embedSWF(location+".swf",id,width,height,"9","/images/playerProductInstall.swf",flashvars,params,attributes);}}catch(e){}}var gup=function(name){var results=(new RegExp("[\\?&]"+name+"=([^?&#]*)")).exec(window.location.href);if(results==null){return"";}else{return results[1];}};function sortSelectObj(selectObj,values){var sizeOrder=values;if(values){sizeOrder=values.split(",");}if(selectObj==null){return;}var sizeOrder=values.split(",");var selectedValue="";if(selectObj.selectedIndex>-1){selectedValue=selectObj.options[selectObj.selectedIndex].text;}var newArray=new Array();var newArrayIdx=0;if(selectObj!=null&&selectObj.options!=undefined){for(var i=0;i<sizeOrder.length;i++){for(var y=0;y<selectObj.options.length;y++){if(sizeOrder[i]==selectObj.options[y].text){newArray[newArrayIdx++]=sizeOrder[i];break;}}}newArrayIdx=0;if(newArray.length<selectObj.options.length-1){var newArray2=new Array();for(var i=0;i<selectObj.options.length;i++){var found=false;for(var y=0;y<newArray.length;y++){if(selectObj.options[i].value==newArray[y]){found=true;break;}}if(found==false&&selectObj.options[i].value!="-1"){newArray2[newArrayIdx++]=selectObj.options[i].value;}}for(var y=0;y<newArrayIdx;y++){newArray[newArray.length]=newArray2[y];}}}emptySelectObj(selectObj);for(var i=0;i<newArray.length;i++){selectObj.options[selectObj.options.length]=new Option(newArray[i],newArray[i]);}if(selectedValue!=""){for(var i=0;i<selectObj.options.length;i++){if(selectedValue==selectObj.options[i].text){selectObj.selectedIndex=i;}}}}function checkKeyPress(evt,elementid){if(evt.keyCode==13){document.getElementById(elementid).click();return false;}}function sortSelectObjByValue(selectObj,values){var sizeOrder=values;if(values){sizeOrder=values.split(",");}if(selectObj==null){return;}var sizeOrder=values.split(",");var selectedValue="";if(selectObj.selectedIndex>-1){selectedValue=selectObj.options[selectObj.selectedIndex].value;}var newArray=new Array();var newArrayIdx=0;if(selectObj!=null&&selectObj.options!=null){for(var i=0;i<sizeOrder.length;i++){for(var y=0;y<selectObj.options.length;y++){if(sizeOrder[i]==selectObj.options[y].value){newArray[newArrayIdx++]=selectObj.options[y].text;break;}}}newArrayIdx=0;if(newArray.length<selectObj.options.length-1){var newArray2=new Array();for(var i=0;i<selectObj.options.length;i++){var found=false;for(var y=0;y<newArray.length;y++){if(selectObj.options[i].value==newArray[y]){found=true;break;}}if(found==false&&selectObj.options[i].value!="-1"){newArray2[newArrayIdx++]=selectObj.options[i].text;}}for(var y=0;y<newArrayIdx;y++){newArray[newArray.length]=newArray2[y];}}emptySelectObj(selectObj);for(var i=0;i<newArray.length;i++){selectObj.options[selectObj.options.length]=new Option(newArray[i],newArray[i]);}if(selectedValue!=""){for(var i=0;i<selectObj.options.length;i++){if(selectedValue==selectObj.options[i].value){selectObj.selectedIndex=i;}}}}}function emptySelectObj(selectObj){if(selectObj==null||selectObj.options==undefined){return;}for(var i=0;i<selectObj.options.length;i++){if(selectObj.options[i].value!="-1"){selectObj.remove(i);i--;}}}function getOptions(options,valueKey,labelKey,valueLabelMap){debug(getOptions,options,valueKey,labelKey,valueLabelMap);var object;var optionHtml="";var value;var label;function genOption(option){if((!valueKey||!labelKey)&&!valueLabelMap){value=option;label=option;}else{if(valueLabelMap!=undefined){value=option;label=valueLabelMap[value];}else{value=option[valueKey];label=option[labelKey];}}optionHtml+='<option value="'+value+'">'+label+"</option>";}if(isArray(options)){for(var i=0;i<options.length;i++){option=options[i];genOption(option);}}else{valueKey="code";labelKey="name";for(key in options){option={};option[valueKey]=key;option[labelKey]=options[key];genOption(option);}}return optionHtml;}var validationErrorStrings={nickName:"Nick Name is required",firstName:"First Name is required",lastName:"Last Name is required",address1:"Address is required",city:"City is required",state:"State is required",country:"Country is required",postal:"Postal Code is required",phone:"Phone Number is required",password:"Password must match",verifyPassword:"Verify Password is required",cardNumber:"Credit Card Number is invalid"};var validationTextInput={nickName:true,firstName:true,lastName:true,address1:true,city:true,password:true,verifyPassword:true,cardNumber:true};var validationSelectField={state:true,country:true};var validationFunctions={postal:validatePostal,phone:validatePhone,password:validatePassword,newEmail:validateEMail,newPassword:validatePassword,cardNumber:validateCCNumber,email:validateEMail,dateOfBirth:validateDate};function _getErrorString(element_id,errorString){var docElem=null;if(element_id!=null){docElem=document.getElementById(element_id);}if(docElem!=null){var isError=false;if(validationFunctions[element_id]!=null){isError=!eval(validationFunctions[element_id](docElem.value));}else{if(validationTextInput[element_id]==true&&jq.trim(docElem.value)==""){isError=true;}else{if(validationSelectField[element_id]==true&&(!docElem.value||docElem.value==-1||docElem.value=="-"||docElem.value.toLowerCase()=="select")){isError=true;}}}if(isError==true){if(errorString==null){errorString=validationErrorStrings[element_id];}}else{errorString=null;}}return errorString;}function _getAdvancedErrorString(source1,source2,errorString){var docElem1=null;var docElem2=null;if(source1&&source2){docElem1=document.getElementById(source1);docElem2=document.getElementById(source2);}if(docElem1&&docElem2){var isError=false;var element_id=source1+","+source2;if(validationFunctions[element_id]!=null){isError=!eval(validationFunctions[element_id](docElem1.value,docElem2.value));}if(isError==true){if(errorString==null){errorString=validationErrorStrings[source1+","+source2];}}else{errorString=null;}}return errorString;}var doValidate=true;function startValidateForm(e){if(doValidate){return validateAllItems(e);}else{doValidate=true;return true;}}function validateAllItems(event){for(var element_id in validationErrorStrings){validateForm(event,element_id);}var success=true;for(var element_id in validationErrorStrings){success=success&&validateForm(event,element_id);}return success;}function validateUntilErrorFound(event){for(var element_id in validationErrorStrings){success=validateForm(event,element_id);if(success==false){return false;}}return true;}function validateForm(event,source){var docElem=null;var docId=null;var errorString=null;if(source==null){return validateAllItems(event);}if(typeof source=="string"){if(source.indexOf(",")>=0){var sources=source.split(",");return validateAdvancedForm(event,sources[0],sources[1]);}docId=source;docElem=document.getElementById(source);}else{docElem=source;}if(docElem==null||docId==null){return true;}errorString=_getErrorString(docId,null);if(errorString&&errorString.length>0){jq(docElem).parent().children(".error").remove();jq(docElem).parent().append('<strong class="error">'+errorString+"</strong>");jQuery(":animated").stop({clearQueue:true});jq().scrollTo(docElem,"slow",{offset:-50});return cancelEvent(event);}else{jq(docElem).parent().children(".error").remove();return true;}}function validateAdvancedForm(event,source1,source2){var errorString=_getAdvancedErrorString(source1,source2,null);docId=source1;docElem=document.getElementById(source1);if(errorString&&errorString.length>0){jq(docElem).parent().children(".error").remove();jq(docElem).parent().append('<strong class="error">'+errorString+"</strong>");jQuery(":animated").stop({clearQueue:true});jq().scrollTo(docElem,"slow",{offset:-50,clearQueue:true});return cancelEvent(event);}else{jq(docElem).parent().children(".error").remove();return true;}}function clearAllErrors(){jq(".error").remove();}function disableButton(signup){document.getElementById(signup).disabled=true;}
