/*!
 * jquery.Cookie Plugin
 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
 jQuery.cookie=function(key,value,options){if(arguments.length>1&&(value===null||typeof value!=="object")){options=jQuery.extend({},options);if(value===null){options.expires=-1;}
 if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days);}
 return(document.cookie=[encodeURIComponent(key),'=',options.raw?String(value):encodeURIComponent(String(value)),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));}
 options=value||{};var result,decode=options.raw?function(s){return s;}:decodeURIComponent;return(result=new RegExp('(?:^|; )'+encodeURIComponent(key)+'=([^;]*)').exec(document.cookie))?decode(result[1]):null;};





/*!
 * jquery.Metadata Plugin 2.1
 * Copyright (c) 2006 - 2011 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php)
 * http://www.gnu.org/licenses/gpl.html
 */
(function($){$.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(_1,_2){this.defaults.type=_1;this.defaults.name=_2;},get:function(_3,_4){var _5=$.extend({},this.defaults,_4);if(!_5.single.length){_5.single="metadata";}var _6=$.data(_3,_5.single);if(_6){return _6;}_6="{}";var _7=function(_8){if(typeof _8!="string"){return _8;}if(_8.indexOf("{")<0){_8=eval("("+_8+")");}};var _9=function(_a){if(typeof _a!="string"){return _a;}_a=eval("("+_a+")");return _a;};if(_5.type=="html5"){var _b={};$(_3.attributes).each(function(){var _c=this.nodeName;if(_c.match(/^data-/)){_c=_c.replace(/^data-/,"");}else{return true;}_b[_c]=_9(this.nodeValue);});}else{if(_5.type=="class"){var m=_5.cre.exec(_3.className);if(m){_6=m[1];}}else{if(_5.type=="elem"){if(!_3.getElementsByTagName){return;}var e=_3.getElementsByTagName(_5.name);if(e.length){_6=$.trim(e[0].innerHTML);}}else{if(_3.getAttribute!=undefined){var _d=_3.getAttribute(_5.name);if(_d){_6=_d;}}}}_b=_9(_6.indexOf("{")<0?"{"+_6+"}":_6);}$.data(_3,_5.single,_b);return _b;}}});$.fn.metadata=function(_e){return $.metadata.get(this[0],_e);};})(jQuery);





/*!
 * jquery.FormatCurrency Plugin v1.4.0
 * License: GPL <http://www.gnu.org/licenses/>
 * http://code.google.com/p/jquery-formatcurrency/
 */
 (function($){$.formatCurrency={};$.formatCurrency.regions=[];$.formatCurrency.regions[""]={symbol:"$",positiveFormat:"%s%n",negativeFormat:"(%s%n)",decimalSymbol:".",digitGroupSymbol:",",groupDigits:true};
 $.fn.formatCurrency=function(destination,settings){if(arguments.length==1&&typeof destination!=="string"){settings=destination;destination=false
 }var defaults={name:"formatCurrency",colorize:false,region:"",global:true,roundToDecimalPlace:2,eventOnDecimalsEntered:false};defaults=$.extend(defaults,$.formatCurrency.regions[""]);
 settings=$.extend(defaults,settings);if(settings.region.length>0){settings=$.extend(settings,getRegionOrCulture(settings.region))}settings.regex=generateRegex(settings);
 return this.each(function(){$this=$(this);var num="0";num=$this[$this.is("input, select, textarea")?"val":"html"]();if(num.search("\\(")>=0){num="-"+num
 }if(num===""||(num==="-"&&settings.roundToDecimalPlace===-1)){return}if(isNaN(num)){num=num.replace(settings.regex,"");if(num===""||(num==="-"&&settings.roundToDecimalPlace===-1)){return
 }if(settings.decimalSymbol!="."){num=num.replace(settings.decimalSymbol,".")}if(isNaN(num)){num="0"}}var numParts=String(num).split(".");var isPositive=(num==Math.abs(num));
 var hasDecimals=(numParts.length>1);var decimals=(hasDecimals?numParts[1].toString():"0");var originalDecimals=decimals;num=Math.abs(numParts[0]);
 num=isNaN(num)?0:num;if(settings.roundToDecimalPlace>=0){decimals=parseFloat("1."+decimals);decimals=decimals.toFixed(settings.roundToDecimalPlace);
 if(decimals.substring(0,1)=="2"){num=Number(num)+1}decimals=decimals.substring(2)}num=String(num);if(settings.groupDigits){for(var i=0;i<Math.floor((num.length-(1+i))/3);
 i++){num=num.substring(0,num.length-(4*i+3))+settings.digitGroupSymbol+num.substring(num.length-(4*i+3))}}if((hasDecimals&&settings.roundToDecimalPlace==-1)||settings.roundToDecimalPlace>0){num+=settings.decimalSymbol+decimals
 }var format=isPositive?settings.positiveFormat:settings.negativeFormat;var money=format.replace(/%s/g,settings.symbol);money=money.replace(/%n/g,num);
 var $destination=$([]);if(!destination){$destination=$this}else{$destination=$(destination)}$destination[$destination.is("input, select, textarea")?"val":"html"](money);
 if(hasDecimals&&settings.eventOnDecimalsEntered&&originalDecimals.length>settings.roundToDecimalPlace){$destination.trigger("decimalsEntered",originalDecimals)
 }if(settings.colorize){$destination.css("color",isPositive?"black":"red")}})};$.fn.toNumber=function(settings){var defaults=$.extend({name:"toNumber",region:"",global:true},$.formatCurrency.regions[""]);
 settings=jQuery.extend(defaults,settings);if(settings.region.length>0){settings=$.extend(settings,getRegionOrCulture(settings.region))}settings.regex=generateRegex(settings);
 return this.each(function(){var method=$(this).is("input, select, textarea")?"val":"html";$(this)[method]($(this)[method]().replace("(","(-").replace(settings.regex,""))
 })};$.fn.asNumber=function(settings){var defaults=$.extend({name:"asNumber",region:"",parse:true,parseType:"Float",global:true},$.formatCurrency.regions[""]);
 settings=jQuery.extend(defaults,settings);if(settings.region.length>0){settings=$.extend(settings,getRegionOrCulture(settings.region))}settings.regex=generateRegex(settings);
 settings.parseType=validateParseType(settings.parseType);var method=$(this).is("input, select, textarea")?"val":"html";var num=$(this)[method]();
 num=num?num:"";num=num.replace("(","(-");num=num.replace(settings.regex,"");if(!settings.parse){return num}if(num.length==0){num="0"}if(settings.decimalSymbol!="."){num=num.replace(settings.decimalSymbol,".")
 }return window["parse"+settings.parseType](num)};function getRegionOrCulture(region){var regionInfo=$.formatCurrency.regions[region];if(regionInfo){return regionInfo
 }else{if(/(\w+)-(\w+)/g.test(region)){var culture=region.replace(/(\w+)-(\w+)/g,"$1");return $.formatCurrency.regions[culture]}}return null}function validateParseType(parseType){switch(parseType.toLowerCase()){case"int":return"Int";
 case"float":return"Float";default:throw"invalid parseType"}}function generateRegex(settings){if(settings.symbol===""){return new RegExp("[^\\d"+settings.decimalSymbol+"-]","g")
 }else{var symbol=settings.symbol.replace("$","\\$").replace(".","\\.");return new RegExp(symbol+"|[^\\d"+settings.decimalSymbol+"-]","g")}}})(jQuery);





/*!
 * jquery.Validation Plugin 1.8
 * Copyright (c) 2006 - 20011 JÃ¶rn Zaefferer
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php)
 * http://www.opensource.org/licenses/gpl-license.php)
 */
(function(c){c.extend(c.fn,{validate:function(a){if(this.length){var b=c.data(this[0],"validator");if(b)return b;b=new c.validator(a,this[0]);c.data(this[0],"validator",b);if(b.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){b.cancelSubmit=true});b.settings.submitHandler&&this.find("input, button").filter(":submit").click(function(){b.submitButton=this});this.submit(function(d){function e(){if(b.settings.submitHandler){if(b.submitButton)var f=c("<input type='hidden'/>").attr("name",
b.submitButton.name).val(b.submitButton.value).appendTo(b.currentForm);b.settings.submitHandler.call(b,b.currentForm);b.submitButton&&f.remove();return false}return true}b.settings.debug&&d.preventDefault();if(b.cancelSubmit){b.cancelSubmit=false;return e()}if(b.form()){if(b.pendingRequest){b.formSubmitted=true;return false}return e()}else{b.focusInvalid();return false}})}return b}else a&&a.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing")},valid:function(){if(c(this[0]).is("form"))return this.validate().form();
else{var a=true,b=c(this[0].form).validate();this.each(function(){a&=b.element(this)});return a}},removeAttrs:function(a){var b={},d=this;c.each(a.split(/\s/),function(e,f){b[f]=d.attr(f);d.removeAttr(f)});return b},rules:function(a,b){var d=this[0];if(a){var e=c.data(d.form,"validator").settings,f=e.rules,g=c.validator.staticRules(d);switch(a){case "add":c.extend(g,c.validator.normalizeRule(b));f[d.name]=g;if(b.messages)e.messages[d.name]=c.extend(e.messages[d.name],b.messages);break;case "remove":if(!b){delete f[d.name];
return g}var h={};c.each(b.split(/\s/),function(j,i){h[i]=g[i];delete g[i]});return h}}d=c.validator.normalizeRules(c.extend({},c.validator.metadataRules(d),c.validator.classRules(d),c.validator.attributeRules(d),c.validator.staticRules(d)),d);if(d.required){e=d.required;delete d.required;d=c.extend({required:e},d)}return d}});c.extend(c.expr[":"],{blank:function(a){return!c.trim(""+a.value)},filled:function(a){return!!c.trim(""+a.value)},unchecked:function(a){return!a.checked}});c.validator=function(a,
b){this.settings=c.extend(true,{},c.validator.defaults,a);this.currentForm=b;this.init()};c.validator.format=function(a,b){if(arguments.length==1)return function(){var d=c.makeArray(arguments);d.unshift(a);return c.validator.format.apply(this,d)};if(arguments.length>2&&b.constructor!=Array)b=c.makeArray(arguments).slice(1);if(b.constructor!=Array)b=[b];c.each(b,function(d,e){a=a.replace(RegExp("\\{"+d+"\\}","g"),e)});return a};c.extend(c.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",
validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:c([]),errorLabelContainer:c([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(a){this.lastActive=a;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass);this.addWrapper(this.errorsFor(a)).hide()}},onfocusout:function(a){if(!this.checkable(a)&&(a.name in this.submitted||!this.optional(a)))this.element(a)},
onkeyup:function(a){if(a.name in this.submitted||a==this.lastElement)this.element(a)},onclick:function(a){if(a.name in this.submitted)this.element(a);else a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(a,b,d){c(a).addClass(b).removeClass(d)},unhighlight:function(a,b,d){c(a).removeClass(b).addClass(d)}},setDefaults:function(a){c.extend(c.validator.defaults,a)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",
url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:c.validator.format("Please enter no more than {0} characters."),minlength:c.validator.format("Please enter at least {0} characters."),rangelength:c.validator.format("Please enter a value between {0} and {1} characters long."),
range:c.validator.format("Please enter a value between {0} and {1}."),max:c.validator.format("Please enter a value less than or equal to {0}."),min:c.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){function a(e){var f=c.data(this[0].form,"validator");e="on"+e.type.replace(/^validate/,"");f.settings[e]&&f.settings[e].call(f,this[0])}this.labelContainer=c(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&
this.labelContainer||c(this.currentForm);this.containers=c(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var b=this.groups={};c.each(this.settings.groups,function(e,f){c.each(f.split(/\s/),function(g,h){b[h]=e})});var d=this.settings.rules;c.each(d,function(e,f){d[e]=c.validator.normalizeRule(f)});c(this.currentForm).validateDelegate(":text, :password, :file, select, textarea",
"focusin focusout keyup",a).validateDelegate(":radio, :checkbox, select, option","click",a);this.settings.invalidHandler&&c(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){this.checkForm();c.extend(this.submitted,this.errorMap);this.invalid=c.extend({},this.errorMap);this.valid()||c(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);
return this.valid()},element:function(a){this.lastElement=a=this.clean(a);this.prepareElement(a);this.currentElements=c(a);var b=this.check(a);if(b)delete this.invalid[a.name];else this.invalid[a.name]=true;if(!this.numberOfInvalids())this.toHide=this.toHide.add(this.containers);this.showErrors();return b},showErrors:function(a){if(a){c.extend(this.errorMap,a);this.errorList=[];for(var b in a)this.errorList.push({message:a[b],element:this.findByName(b)[0]});this.successList=c.grep(this.successList,
function(d){return!(d.name in a)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){c.fn.resetForm&&c(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0,d;for(d in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},
valid:function(){return this.size()==0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{c(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(a){}},findLastActive:function(){var a=this.lastActive;return a&&c.grep(this.errorList,function(b){return b.element.name==a.name}).length==1&&a},elements:function(){var a=this,b={};return c([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&
a.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in b||!a.objectLength(c(this).rules()))return false;return b[this.name]=true})},clean:function(a){return c(a)[0]},errors:function(){return c(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext)},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=c([]);this.toHide=c([]);this.currentElements=c([])},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers)},
prepareElement:function(a){this.reset();this.toHide=this.errorsFor(a)},check:function(a){a=this.clean(a);if(this.checkable(a))a=this.findByName(a.name).not(this.settings.ignore)[0];var b=c(a).rules(),d=false,e;for(e in b){var f={method:e,parameters:b[e]};try{var g=c.validator.methods[e].call(this,a.value.replace(/\r/g,""),a,f.parameters);if(g=="dependency-mismatch")d=true;else{d=false;if(g=="pending"){this.toHide=this.toHide.not(this.errorsFor(a));return}if(!g){this.formatAndAdd(a,f);return false}}}catch(h){this.settings.debug&&
window.console&&console.log("exception occured when checking element "+a.id+", check the '"+f.method+"' method",h);throw h;}}if(!d){this.objectLength(b)&&this.successList.push(a);return true}},customMetaMessage:function(a,b){if(c.metadata){var d=this.settings.meta?c(a).metadata()[this.settings.meta]:c(a).metadata();return d&&d.messages&&d.messages[b]}},customMessage:function(a,b){var d=this.settings.messages[a];return d&&(d.constructor==String?d:d[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==
undefined)return arguments[a]},defaultMessage:function(a,b){return this.findDefined(this.customMessage(a.name,b),this.customMetaMessage(a,b),!this.settings.ignoreTitle&&a.title||undefined,c.validator.messages[b],"<strong>Warning: No message defined for "+a.name+"</strong>")},formatAndAdd:function(a,b){var d=this.defaultMessage(a,b.method),e=/\$?\{(\d+)\}/g;if(typeof d=="function")d=d.call(this,b.parameters,a);else if(e.test(d))d=jQuery.format(d.replace(e,"{$1}"),b.parameters);this.errorList.push({message:d,
element:a});this.errorMap[a.name]=d;this.submitted[a.name]=d},addWrapper:function(a){if(this.settings.wrapper)a=a.add(a.parent(this.settings.wrapper));return a},defaultShowErrors:function(){for(var a=0;this.errorList[a];a++){var b=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,b.element,this.settings.errorClass,this.settings.validClass);this.showLabel(b.element,b.message)}if(this.errorList.length)this.toShow=this.toShow.add(this.containers);if(this.settings.success)for(a=
0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight){a=0;for(b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass)}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return c(this.errorList).map(function(){return this.element})},showLabel:function(a,
b){var d=this.errorsFor(a);if(d.length){d.removeClass().addClass(this.settings.errorClass);d.attr("generated")&&d.html(b)}else{d=c("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(a),generated:true}).addClass(this.settings.errorClass).html(b||"");if(this.settings.wrapper)d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,c(a)):d.insertAfter(a))}if(!b&&this.settings.success){d.text("");
typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d)}this.toShow=this.toShow.add(d)},errorsFor:function(a){var b=this.idOrName(a);return this.errors().filter(function(){return c(this).attr("for")==b})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(a){var b=this.currentForm;return c(document.getElementsByName(a)).map(function(d,e){return e.form==
b&&e.name==a&&e||null})},getLength:function(a,b){switch(b.nodeName.toLowerCase()){case "select":return c("option:selected",b).length;case "input":if(this.checkable(b))return this.findByName(b.name).filter(":checked").length}return a.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):true},dependTypes:{"boolean":function(a){return a},string:function(a,b){return!!c(a,b.form).length},"function":function(a,b){return a(b)}},optional:function(a){return!c.validator.methods.required.call(this,
c.trim(a.value),a)&&"dependency-mismatch"},startRequest:function(a){if(!this.pending[a.name]){this.pendingRequest++;this.pending[a.name]=true}},stopRequest:function(a,b){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[a.name];if(b&&this.pendingRequest==0&&this.formSubmitted&&this.form()){c(this.currentForm).submit();this.formSubmitted=false}else if(!b&&this.pendingRequest==0&&this.formSubmitted){c(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=
false}},previousValue:function(a){return c.data(a,"previousValue")||c.data(a,"previousValue",{old:null,valid:true,message:this.defaultMessage(a,"remote")})}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(a,b){a.constructor==String?this.classRuleSettings[a]=b:c.extend(this.classRuleSettings,
a)},classRules:function(a){var b={};(a=c(a).attr("class"))&&c.each(a.split(" "),function(){this in c.validator.classRuleSettings&&c.extend(b,c.validator.classRuleSettings[this])});return b},attributeRules:function(a){var b={};a=c(a);for(var d in c.validator.methods){var e=a.attr(d);if(e)b[d]=e}b.maxlength&&/-1|2147483647|524288/.test(b.maxlength)&&delete b.maxlength;return b},metadataRules:function(a){if(!c.metadata)return{};var b=c.data(a.form,"validator").settings.meta;return b?c(a).metadata()[b]:
c(a).metadata()},staticRules:function(a){var b={},d=c.data(a.form,"validator");if(d.settings.rules)b=c.validator.normalizeRule(d.settings.rules[a.name])||{};return b},normalizeRules:function(a,b){c.each(a,function(d,e){if(e===false)delete a[d];else if(e.param||e.depends){var f=true;switch(typeof e.depends){case "string":f=!!c(e.depends,b.form).length;break;case "function":f=e.depends.call(b,b)}if(f)a[d]=e.param!==undefined?e.param:true;else delete a[d]}});c.each(a,function(d,e){a[d]=c.isFunction(e)?
e(b):e});c.each(["minlength","maxlength","min","max"],function(){if(a[this])a[this]=Number(a[this])});c.each(["rangelength","range"],function(){if(a[this])a[this]=[Number(a[this][0]),Number(a[this][1])]});if(c.validator.autoCreateRanges){if(a.min&&a.max){a.range=[a.min,a.max];delete a.min;delete a.max}if(a.minlength&&a.maxlength){a.rangelength=[a.minlength,a.maxlength];delete a.minlength;delete a.maxlength}}a.messages&&delete a.messages;return a},normalizeRule:function(a){if(typeof a=="string"){var b=
{};c.each(a.split(/\s/),function(){b[this]=true});a=b}return a},addMethod:function(a,b,d){c.validator.methods[a]=b;c.validator.messages[a]=d!=undefined?d:c.validator.messages[a];b.length<3&&c.validator.addClassRules(a,c.validator.normalizeRule(a))},methods:{required:function(a,b,d){if(!this.depend(d,b))return"dependency-mismatch";switch(b.nodeName.toLowerCase()){case "select":return(a=c(b).val())&&a.length>0;case "input":if(this.checkable(b))return this.getLength(a,b)>0;default:return c.trim(a).length>
0}},remote:function(a,b,d){if(this.optional(b))return"dependency-mismatch";var e=this.previousValue(b);this.settings.messages[b.name]||(this.settings.messages[b.name]={});e.originalMessage=this.settings.messages[b.name].remote;this.settings.messages[b.name].remote=e.message;d=typeof d=="string"&&{url:d}||d;if(this.pending[b.name])return"pending";if(e.old===a)return e.valid;e.old=a;var f=this;this.startRequest(b);var g={};g[b.name]=a;c.ajax(c.extend(true,{url:d,mode:"abort",port:"validate"+b.name,
dataType:"json",data:g,success:function(h){f.settings.messages[b.name].remote=e.originalMessage;var j=h===true;if(j){var i=f.formSubmitted;f.prepareElement(b);f.formSubmitted=i;f.successList.push(b);f.showErrors()}else{i={};h=h||f.defaultMessage(b,"remote");i[b.name]=e.message=c.isFunction(h)?h(a):h;f.showErrors(i)}e.valid=j;f.stopRequest(b,j)}},d));return"pending"},minlength:function(a,b,d){return this.optional(b)||this.getLength(c.trim(a),b)>=d},maxlength:function(a,b,d){return this.optional(b)||
this.getLength(c.trim(a),b)<=d},rangelength:function(a,b,d){a=this.getLength(c.trim(a),b);return this.optional(b)||a>=d[0]&&a<=d[1]},min:function(a,b,d){return this.optional(b)||a>=d},max:function(a,b,d){return this.optional(b)||a<=d},range:function(a,b,d){return this.optional(b)||a>=d[0]&&a<=d[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)},
url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},
date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9-]+/.test(a))return false;var d=0,e=0,f=false;a=a.replace(/\D/g,"");for(var g=a.length-1;g>=
0;g--){e=a.charAt(g);e=parseInt(e,10);if(f)if((e*=2)>9)e-=9;d+=e;f=!f}return d%10==0},accept:function(a,b,d){d=typeof d=="string"?d.replace(/,/g,"|"):"png|jpe?g|gif";return this.optional(b)||a.match(RegExp(".("+d+")$","i"))},equalTo:function(a,b,d){d=c(d).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){c(b).valid()});return a==d.val()}}});c.format=c.validator.format})(jQuery);
(function(c){var a={};if(c.ajaxPrefilter)c.ajaxPrefilter(function(d,e,f){e=d.port;if(d.mode=="abort"){a[e]&&a[e].abort();a[e]=f}});else{var b=c.ajax;c.ajax=function(d){var e=("port"in d?d:c.ajaxSettings).port;if(("mode"in d?d:c.ajaxSettings).mode=="abort"){a[e]&&a[e].abort();return a[e]=b.apply(this,arguments)}return b.apply(this,arguments)}}})(jQuery);
(function(c){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.handle.call(this,e)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)},handler:function(e){arguments[0]=c.event.fix(e);arguments[0].type=b;return c.event.handle.apply(this,arguments)}}});c.extend(c.fn,{validateDelegate:function(a,
b,d){return this.bind(b,function(e){var f=c(e.target);if(f.is(a))return d.apply(f,arguments)})}})})(jQuery);


/*'*/


/* np.global.js
 *
 * Copyright (c) 2011 NaturalPoint
 */
$(function () {
	var oldOptionSet;
	var newOptionSet;


	// Site Wide: Extract values from variables in URL
	$.extend({
		getUrlVars: function(){
			var vars = [], hash;
			var formatURL = unescape(window.location.href);
			var hashes = formatURL.slice(formatURL.indexOf('?') + 1).split('&');
			for(var i = 0; i < hashes.length; i++) {
				var cleanHash = hashes[i].replace(/\+/g, ' ');
				hash = cleanHash.split('=');
				vars.push(hash[0]);
				vars[hash[0]] = hash[1]; }
			return vars; },
		getUrlVar: function(name){
			return $.getUrlVars()[name]; } });


	// Site Wide: Form validation setup
	jQuery.extend(jQuery.validator.messages, {
		required: "Required field",
		remote: "Fix this field",
		email: "Invalid address",
		url: "Invalid URL",
		date: "Invalid date",
		dateISO: "Invalid ISO date",
		number: "Decimal needed",
		digits: "Digits only",
		creditcard: "Invalid number",
		equalTo: "Value not the same",
		accept: "Invalid extension",
		maxlength: $.validator.format("{0} character limit"),
		minlength: $.validator.format("{0} character minimum"),
		rangelength: $.validator.format("Must be between {0} and {1} characters long"),
		range: $.validator.format("Must be between {0} and {1}"),
		max: $.validator.format("Must be less than or equal to {0}"),
		min: $.validator.format("Must be greater than or equal to {0}") });


	// Cart: Add editable product options where applicable	
	function compileOptionSet(elem) {
		var optionSet = '';

		// AddCartCompileOptions
		$(elem).find('input.optionset:checked').each(function () {
			var groupID = $(this).attr('name');
			var groupValue = $(this).val();
			var groupIDNum = groupID.substring((groupID.indexOf('_G',1) + 2), groupID.length); // find first digit of group and extract digits until end of string
			// update the option set string with option group ID and selected option group value
			optionSet = optionSet + '.G' + groupIDNum + '-' + groupValue; });
		return optionSet; }

	function addEditOptions (elem) {
		var referUrl = '/';
		var shopUrl = '/'; // Used as a fallback since shopurl gets modified to match "Continue Shopping" href
		var cartItem = $(elem).closest('.moniker').siblings('form.remove').find('input[name$=itemref]').val();

		if ( $(elem).next('.options').children('form.add').length > 0 ) {
			$('.more > .icon').hide();
			$(elem).closest('.item').addClass('edit');
			$(elem).next('.options').slideDown();
			oldOptionSet = compileOptionSet( $('.edit.item form.add') ); }
		else {
			$(elem).next('.options').load('/cart/store/change_options_popup_2009.cgi?cartItem=' + cartItem + '&referurl=' + referUrl + '&shopurl=' + shopUrl, function () {
				$(this).each(function () {
					$(this).find('.group').each(function () {
						$(this).find('.option').each(function () {
							// TODO: Change option prices from being relative to base price (only Add labels displayed), to being relative to each other (Add and Subtract labels displayed)
							var optionPrice = $(this).metadata().price;
							if ( optionPrice > 0 ) {
								$(this).next('label').append('(add $' + optionPrice + ')'); } }); }); });
				if (typeof Cufon !== 'undefined') {
					Cufon.refresh(); }
				$('.more > .icon').hide();
				$(this).closest('.item').addClass('edit');
				$(this).slideDown();
				$('.edit.item form.update input[name$=quant]').attr('disabled','disabled');
				oldOptionSet = compileOptionSet( $('.edit.item form.add') ); }); } }

	function editComplete(elem) {
		var optionsText = '';
		newOptionSet = compileOptionSet(elem);

		$(elem).find('input:checked').each(function (index) {
			if ( index > 0 ) {
				optionsText += ', '; }
			optionsText += $(this).attr('title'); });

		$('.edit.item h4.options').text(optionsText);

		$(elem).parent('.options').slideUp(function () {
			if (oldOptionSet === newOptionSet) {
				$('.edit.item form.update input[name$=quant]').removeAttr('disabled');
				$('.more > .icon').show();
				$('.edit.item').removeClass('edit');
				return false; }
			else {
				$.post( '/cart/store/adjustcart.cgi', $(elem).serialize(), function () {
					var d = new Date(); // To avoid IE super-caching ensure unique URL everyime
					$('#itemsTarget').load('/cart/store/editcart.cgi?_=' + d.getTime() + ' .items', function (response, status, xhr) {
						if (status == 'error') {
							var msg = 'Sorry but there was an error: ';
							alert(msg + xhr.status + ' ' + xhr.statusText); }
						$('input[name$="shopurl"]').val( $('#continueShopping').attr('href') );
						return false; }); }); } }); }

	$('.more > .icon').live('click', function () {
		addEditOptions(this); });

	$('#cart .edit.item .more .option').live('change', function () {
		var basePrice = parseFloat( $('.edit.item input[name$=baseprice]').val() );
		var prevPrice = $('.edit.item .price').asNumber();
		var optionsCost = 0;
		var newItemPrice;
		var itemQty = $('.edit.item input[name$=quant]').val();
		var lineTotal = $('.edit.item .line.total').asNumber();
		var newLineTotal;
		var newSubtotal = 0;
		var discount = Math.abs( $('.discount .amount').asNumber() );
		var newOrderTotal = 0;

		$(this).closest('.edit.item').find('.option:checked').each(function () {
			optionsCost += parseFloat( $(this).metadata().price ); });

		newItemPrice = basePrice + optionsCost;
		newLineTotal = newItemPrice * itemQty;

		if (newItemPrice !== prevPrice) {
			$('.edit.item .price').fadeOut(100, function () {
				$(this).html(newItemPrice).formatCurrency({'roundToDecimalPlace' : 0 }).fadeIn(100);
				$('.edit.item .line.total').fadeOut(100, function () {
					$(this).html(newLineTotal).formatCurrency({'roundToDecimalPlace' : 0 }).fadeIn(100);

					$('.line.total').each(function () {
						newSubtotal += $(this).asNumber(); });

					newOrderTotal = newSubtotal - discount;

					$('.subtotal .amount').fadeOut(100, function () {
						$(this).html(newSubtotal).formatCurrency().fadeIn(100);
						$('.order .amount').fadeOut(100, function () {
							$('.utilities .cart .total').html(newOrderTotal).formatCurrency({'roundToDecimalPlace' : 0 });
							$(this).html(newOrderTotal).formatCurrency().fadeIn(100); }); }); }); }); } });


	// Site Wide (currently only OptiTrack): Hijack the onsubmit event for Add to Cart/Change Options forms
	$('form.add').live('submit', function () {

		$(this).find('input[name$="optionset"]').val( compileOptionSet(this) );

		// Cart product options
		if ( $(this).closest('.item').hasClass('edit') ) {
			editComplete(this);
			return false; } });


	// Checkout: Copy promo code into form field
	if ($('input#couponhash').length > 0) {
		var couponHash = $.getUrlVar('couponhash');
		$('#couponhash').val(couponHash); }


	// Checkout: Add PO label to form field
	function labelPO (elem) {
		var poValue = $(elem).val();

		if ( poValue === '' ) {
			$(elem).val('PO '); }
		if ( poValue === 'PO ' || poValue === 'PO' || poValue === 'P.O. ' || poValue === 'P.O.') {
			$(elem).val(''); } }
	
	$('input.po').focus(function () {
		labelPO(this); });

	$('input.po').blur(function () {
		labelPO(this); });


	// Checkout: Copy shipping address fields if "Same as shipping" is checked
	$('form #copyAddress').click(function () {
		$('#billing_first_name').val($.getUrlVar('first_name'));
		$('#billing_last_name').val($.getUrlVar('last_name'));
		$('#billing_company_name').val($.getUrlVar('company_name'));
		$('#billing_address1').val($.getUrlVar('address1'));
		$('#billing_address2').val($.getUrlVar('address2'));
		$('#billing_address3').val($.getUrlVar('address3'));
		$('#billing_city').val($.getUrlVar('city'));
		$('#billing_stateprov').val($.getUrlVar('stateprov'));
		$('#billing_zip_code').val($.getUrlVar('zip_code'));
		$('#billing_country').val( $.getUrlVar('country') );
		$('#billing_email').val($.getUrlVar('email'));
		$('#billing_phone_number').val($.getUrlVar('phone_number'));
		$('#billing_po_number').val($.getUrlVar('shipping_po_number')); });


	// Checkout: Get values form URI string for order summary output
	if ($('#checkoutStep4').length > 0) {
		var shipDetailsLeft = '';
		var shipDetailsRight = '';
		var billDetailsLeft = '';
		var billDetailsRight = '';

		// Shipping address
		shipDetailsLeft = $.getUrlVar('first_name') + ' ' + $.getUrlVar('last_name');
		if ( $.getUrlVar('company_name').length > 0 ) {
			shipDetailsLeft += '<br/>' + $.getUrlVar('company_name'); }
		shipDetailsLeft += '<br/>' + $.getUrlVar('address1');
		if ( $.getUrlVar('address2').length > 1 ) {
			shipDetailsLeft += '<br/>' + $.getUrlVar('address2'); }
		if ( $.getUrlVar('address3').length > 0 ) {
			shipDetailsLeft += '<br/>' + $.getUrlVar('address3'); }
		shipDetailsLeft += '<br/>' + $.getUrlVar('city') + ', ' + $.getUrlVar('stateprov') + ' ' + $.getUrlVar('zip_code') + '<br/>' + $.getUrlVar('country_full_name');
		shipDetailsLeft += '<br/><br/><a href="mailto:' + $.getUrlVar('email') + '">' + $.getUrlVar('email') + '</a><br/>' + $.getUrlVar('phone_number');
		$('.ship.details .left p').append(shipDetailsLeft);

		// Shipping method and P.O. number
		if ( $.getUrlVar('shipping_po_number').length > 0 ) {
			shipDetailsRight = $.getUrlVar('shipping_po_number') + '<br/>'; }
		$('.ship.details .right p').append(shipDetailsRight + 'Ship using <strong>' + $.getUrlVar('shipping_comment') + '</strong>');

		// Billing address
		billDetailsLeft = $.getUrlVar('billing_first_name') + ' ' + $.getUrlVar('billing_last_name');
		if ( $.getUrlVar('billing_company_name').length > 0 ) {
			billDetailsLeft += '<br/>' + $.getUrlVar('billing_company_name'); }
		billDetailsLeft += '<br/>' + $.getUrlVar('billing_address1');
		if ( $.getUrlVar('billing_address2').length > 1 ) {
			billDetailsLeft += '<br/>' + $.getUrlVar('billing_address2'); }
		if ( $.getUrlVar('billing_address3').length > 0 ) {
			billDetailsLeft += '<br/>' + $.getUrlVar('billing_address3'); }
		billDetailsLeft += '<br/>' + $.getUrlVar('billing_city') + ', ' + $.getUrlVar('billing_stateprov') + ' ' + $.getUrlVar('billing_zip_code') + '<br/>' + $.getUrlVar('billing_country_full_name');
		billDetailsLeft += '<br/><br/><a href="mailto:' + $.getUrlVar('billing_email') + '">' + $.getUrlVar('billing_email') + '</a><br/>' + $.getUrlVar('billing_phone_number');
		$('.bill.details .left p').append(billDetailsLeft);

		// Billing credit card number and P.O. number
		if ( $.getUrlVar('shipping_po_number').length > 0 ) {
			billDetailsRight += $.getUrlVar('billing_po_number') + '<br/>'; }
		$('.bill.details .right p').append(billDetailsRight + 'Charge card ending in <strong>' + $.getUrlVar('ccnum').substring(12) + '</strong>'); }


	// Checkout: Get values from URI string and stuff into hidden fields for order submission
	function createFormField(name) {
		var nameVal = $.getUrlVar(name);
		
		if ( typeof nameVal === 'undefined' ) {
			nameVal = ' '; }

		$('form[name$="npstore"]').prepend('<input type=hidden name="' + name + '" value="' + nameVal + '">'); }

	if ($('#bulkOptions form[name=npstore]').length > 0) { var npsalesStep = '1'; }
	if ($('#checkoutStep1').length > 0) { var checkoutStep = '1'; }
	if ($('#checkoutStep2').length > 0) { var checkoutStep = '2'; }
	if ($('#checkoutStep3').length > 0) { var checkoutStep = '3'; }
	if ($('#checkoutStep4').length > 0) { var checkoutStep = '4'; }

	if (npsalesStep >= 1) {
		createFormField('cartid');
		createFormField('sessionID');
		createFormField('coupondiscount');
		createFormField('couponhash'); }

	if (checkoutStep >= 1) {
		createFormField('cartid');
		createFormField('sessionID');
		createFormField('coupondiscount');
		createFormField('order_type');
		createFormField('order_channel');
		createFormField('shippingsurcharge');
		createFormField('surchargetype');
		createFormField('shipping_is_dropship');
		createFormField('storename');
		createFormField('priority');
		createFormField('order_comment');
		createFormField('order_comment_category');	
		createFormField('rep_id');
		createFormField('partner_id');
		createFormField('origin_code');
		createFormField('shipping_account');
		createFormField('shipping_tax_id_number');
		createFormField('shipping_reference_number'); }

	if (checkoutStep >= 2) {
		createFormField('couponhash');
		createFormField('company_name');
		createFormField('attention');
		createFormField('shipping_po_number');
		createFormField('first_name');
		createFormField('last_name');
		createFormField('address1');
		createFormField('address2');
		createFormField('address3');
		createFormField('city');
		createFormField('stateprov');
		createFormField('zip_code');
		createFormField('country');
		createFormField('country_full_name');
		createFormField('email');
		createFormField('phone_number'); }

	if (checkoutStep >= 3) {
		createFormField('shipping_type');
		createFormField('shipping_comment');
		createFormField('shipping_cost'); }

	if (checkoutStep >= 4) {
		createFormField('billing_first_name');
		createFormField('billing_last_name');
		createFormField('billing_company_name');
		createFormField('billing_attention');
		createFormField('billing_po_number');
		createFormField('billing_address1');
		createFormField('billing_address2');
		createFormField('billing_address3');
		createFormField('billing_city');
		createFormField('billing_stateprov');
		createFormField('billing_zip_code');
		createFormField('billing_country');
		createFormField('billing_email');
		createFormField('billing_phone_number');
		createFormField('ccnum');
		createFormField('cctype');
		createFormField('ccxmonth');
		createFormField('ccxyear');
		createFormField('ccv'); }


	// Restrict zip code to 5 characters if country is USA
	function retrictZip() {
		if ($('#country').val() === 'USA') {
			$('#zip_code').attr('maxlength','5'); }
		else {
			$('#zip_code').attr('maxlength','10'); }

		if ($('#billing_country').val() === 'USA') {
			$('#billing_zip_code').attr('maxlength','5'); }
		else {
			$('#billing_zip_code').attr('maxlength','10'); } }


	function CleanSpecialCharA(orderField) {
		var strClean = orderField.value;
		strClean = strClean.replace(/Ä/g,"A");
		strClean = strClean.replace(/ä/g,"a");
		orderField.value = strClean; }


	function CleanSpecialCharAmp(orderField) {
		var strClean = orderField.value;
		strClean = strClean.replace(/\&/g," and ");
		orderField.value = strClean; }


	function CleanForeignChars(orderField) {
		var strClean = orderField.value;
		// strips out extended characters from non-ascii (english, 0-128) range
		strClean = strClean.replace(/[^\x00-\x80]+/g,"");

		orderField.value = strClean; }


	function TrimWhitespace(str) {
		// trim leading and trailing white space
		return str.replace(/^\s+|\s+$/g, ''); }


	// Hide cart link during checkout
	if ( $('.checkout').length > 0 ) {
		$('.utilities .section.cart').hide(); }


	// On window load
	$(window).load(function () {

		// Allow zip code restriciton on external site only
		if ($('#checkoutStep1, #checkoutStep3').length === 1) {
			retrictZip();
			$('#country, #billing_country').change(function () {
				retrictZip(); }); }


		// TODO: Optimize/consoidlate additional checkout form behavior
		// TODO: Restore ability to copy stateprov into billing field for 'International'
		// Change Country to 'Choose one...' if International selected as state
		$('#checkoutStep1 #stateprov').change(function () {
			var stateVal = $('#stateprov option:selected').val();
			var countryVal = $('#country option:selected').val();

			if ( (countryVal === 'USA' || countryVal === 'CA') && stateVal === 'International' ) {
				$('#country').val(''); }
			else if ( (countryVal != 'USA' && stateVal != 'International') && (countryVal != 'CA' && stateVal != 'International') ) {
				$('#country').val(''); } });
		// Change state/prov to 'International' if Country not USA or Canada
		$('#checkoutStep1 #country').change(function () {
			var stateVal = $('#stateprov option:selected').val();
			var countryVal = $('#country option:selected').val();

			if (countryVal != 'USA' && countryVal != 'CA' && stateVal != 'International') {
				$('#stateprov').val('International'); }
			else if ( (countryVal === 'USA' || countryVal === 'CA') && stateVal === 'International' ) {
				$('#stateprov').val(''); } });
		// Change Country to 'Choose one...' if International selected as state
		$('#checkoutStep3 #billing_stateprov').change(function () {
			var stateVal = $('#billing_stateprov option:selected').val();
			var countryVal = $('#billing_country option:selected').val();

			if ( (countryVal === 'USA' || countryVal === 'CA') && stateVal === 'International' ) {
				$('#billing_country').val(''); }
			else if ( (countryVal != 'USA' && stateVal != 'International') && (countryVal != 'CA' && stateVal != 'International') ) {
				$('#billing_country').val(''); } });
		// Change state/prov to 'International' if Country not USA or Canada
		$('#checkoutStep3 #billing_country').change(function () {
			var stateVal = $('#billing_stateprov option:selected').val();
			var countryVal = $('#billing_country option:selected').val();

			if (countryVal != 'USA' && countryVal != 'CA' && stateVal != 'International') {
				$('#billing_stateprov').val('International'); }
			else if ( (countryVal === 'USA' || countryVal === 'CA') && stateVal === 'International' ) {
				$('#billing_stateprov').val(''); } });


		// Activate form validation for Ship To fields
		$('form#checkoutStep1').validate({
			rules: {
				stateprov: {
					required: true },
				zip_code: {
					rangelength: [2, 10] } },
			messages: {
				zip_code: {
					rangelength: '2 to 10 Characters' } },
			submitHandler: function(form) {
				$('#country_full_name').val( $('#country option:selected').text() );

				if ( $('#stateprov').val() === 'International' ) { $('#stateprov').val(''); }

				if (document.npstore.address2.value == '') { document.npstore.address2.value=' '; }

				if ( (document.npstore.order_channel.value == '') || (document.npstore.order_channel.value == '0') || (document.npstore.order_channel.value == '+') || (document.npstore.order_channel.value == ' ')) {
						document.npstore.order_channel.value = 'webstore'; }

				// clean up ampersands for URI string happiness
				CleanSpecialCharAmp(document.npstore.company_name);
				CleanSpecialCharAmp(document.npstore.address1);
				CleanSpecialCharAmp(document.npstore.address2);
				CleanSpecialCharAmp(document.npstore.address3);

				CleanSpecialCharA(document.npstore.address1);
				CleanSpecialCharA(document.npstore.address2);
				CleanSpecialCharA(document.npstore.address3);
				CleanSpecialCharA(document.npstore.company_name);
				CleanSpecialCharA(document.npstore.first_name);
				CleanSpecialCharA(document.npstore.last_name);
				CleanSpecialCharA(document.npstore.city);

				// remove remaining special characters
				CleanForeignChars(document.npstore.address1);
				CleanForeignChars(document.npstore.address2);
				CleanForeignChars(document.npstore.address3);
				CleanForeignChars(document.npstore.company_name);
				CleanForeignChars(document.npstore.first_name);
				CleanForeignChars(document.npstore.last_name);
				CleanForeignChars(document.npstore.city);

				form.submit(); } });


        // Reveal holiday shipping schedule
        if ( $('#holidayShipping').length === 1 ) {
            // Lazy 'blink' code to avoid using larger effects library
            $('#holidayShipping').fadeOut(function () {
                $(this).fadeIn(function () {
                    $(this).fadeOut(function () {
                        $(this).fadeIn();
                    });
                });
            });
        }


		// Disable shipping method form if no options are available
		if ( $('form#checkoutStep2').length === 1 && $('input[name=shipping_type]').length === 0 ) {
			$('form#checkoutStep2 button.continue').attr('disabled','disabled'); }


		// Activate form validation for Shipping Method
		$('form#checkoutStep2').validate({
			rules: {
				shipping_type: {
					required: true } },
			submitHandler: function(form) {
				$('#shipping_comment').val( $('input[name="shipping_type"]:checked').siblings('label:not(.error)').attr('title') );
				$('#shipping_cost').val( $('input[name="shipping_type"]:checked').siblings('label:not(.error)').find('.cost, .costdiscounted').attr('title') );

				form.submit(); } });


		// Activate form validation for Billing fields
		$('form#checkoutStep3').validate({
			rules: {
				credit_card: {
					required: true,
					digits: true,
					minlength: 15 },
				billing_stateprov: {
					required: {
						depends: function(element) {
						if ( $('#billing_country').val() === 'USA' || $('#billing_country').val() === 'CA' || $('#billing_stateprov option:selected').text() === 'Choose one...' ) {
						 	return true } } } },
				billing_zip_code: {
					rangelength: [2, 10] } },
			messages: {
				billing_zip_code: {
					rangelength: '2 to 10 Characters' } },
			submitHandler: function(form) {
				$('#billing_country_full_name').val( $('#billing_country option:selected').text() );
				
				if ( $('#billing_stateprov').val() === 'International' ) { $('#billing_stateprov').val(''); }

				if (document.npstore.billing_address2.value == '') { document.npstore.billing_address2.value=' '; }

				if ( (document.npstore.order_channel.value == '') || (document.npstore.order_channel.value == '0') || (document.npstore.order_channel.value == '+') || (document.npstore.order_channel.value == ' ')) {
						document.npstore.order_channel.value = 'webstore'; }

				// clean up ampersands for URI string happiness
				CleanSpecialCharAmp(document.npstore.billing_company_name);
				CleanSpecialCharAmp(document.npstore.billing_address1);
				CleanSpecialCharAmp(document.npstore.billing_address2);
				CleanSpecialCharAmp(document.npstore.billing_address3);

				CleanSpecialCharA(document.npstore.billing_address1);
				CleanSpecialCharA(document.npstore.billing_address2);
				CleanSpecialCharA(document.npstore.billing_address3);
				CleanSpecialCharA(document.npstore.billing_company_name);
				CleanSpecialCharA(document.npstore.billing_first_name);
				CleanSpecialCharA(document.npstore.billing_last_name);
				CleanSpecialCharA(document.npstore.billing_city);

				// remove remaining special characters
				CleanForeignChars(document.npstore.billing_address1);
				CleanForeignChars(document.npstore.billing_address2);
				CleanForeignChars(document.npstore.billing_address3);
				CleanForeignChars(document.npstore.billing_company_name);
				CleanForeignChars(document.npstore.billing_first_name);
				CleanForeignChars(document.npstore.billing_last_name);
				CleanForeignChars(document.npstore.billing_city);

				// trim leading and trailing whitespace from fields
				document.npstore.billing_first_name.value = TrimWhitespace(document.npstore.billing_first_name.value);
				document.npstore.billing_last_name.value  = TrimWhitespace(document.npstore.billing_last_name.value);
				document.npstore.billing_zip_code.value   = TrimWhitespace(document.npstore.billing_zip_code.value);
				document.npstore.billing_city.value       = TrimWhitespace(document.npstore.billing_city.value);

				// Quick fix for form validation funkyness caused by 'ccnum' name
				$('#ccnum').val( $('#credit_card').val() );

				form.submit(); } });


		// Force re-validation on change for some drop downs still showing error after inital validation
		$('#checkoutStep1 #stateprov, #checkoutStep1 #country').change(function () {
			$('form#checkoutStep1').validate().element('#stateprov'); });

		$('#checkoutStep2 input[name=shipping_type]').change(function () {
			$('form#checkoutStep2').validate().element('input[name=shipping_type]'); });

		$('#checkoutStep3 #billing_stateprov, #checkoutStep3 #billing_country').change(function () {
			$('form#checkoutStep3').validate().element('#billing_stateprov'); });


		// Launch survey on order success/receipt page
		if ( $('#checkoutSuccess').length > 0 ) {
			var orderNum = $.getUrlVar('orderNumber');
			var storeID = $.getUrlVar('npstoreid');
			var surveyURL;

			if (storeID === 'smartnav') {
				surveyURL = 'http://webservices.naturalpoint.com/services/survey/survey.php?sid=35&referral=NPWebstore&ordernum=' + orderNum; }
			else if (storeID === 'gaming') {
				surveyURL = 'http://webservices.naturalpoint.com/services/survey/survey.php?sid=30&referral=NPWebstore&ordernum=' + orderNum; }
			else if (storeID === 'optitrack') {
				surveyURL = 'http://webservices.naturalpoint.com/services/survey/survey.php?sid=32&referral=NPWebstore&ordernum=' + orderNum; }

			$('.receipt > h1').after('<div id="survey"><p>We want to hear from you. <a class="go" href="' + surveyURL + '" target="blank">Please take our survey.</a></p><div>'); }
	});
});
