<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/*!
 * jQuery Form Plugin
 * version: 3.51.0-2014.06.20
 * Requires jQuery v1.5 or later
 * Copyright (c) 2014 M. Alsup
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Project repository: https://github.com/malsup/form
 * Dual licensed under the MIT and GPL licenses.
 * https://github.com/malsup/form#copyright-and-license
 */
!function(e){"use strict";"function"==typeof define&amp;&amp;define.amd?define(["jquery"],e):e("undefined"!=typeof jQuery?jQuery:window.Zepto)}(function(e){"use strict";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is("[type=submit],[type=image]")){var n=a.closest("[type=submit]");if(0===n.length)return;r=n[0]}var i=this;if(i.clk=r,"image"==r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if("function"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&amp;&amp;window.console.log?window.console.log(t):window.opera&amp;&amp;window.opera.postError&amp;&amp;window.opera.postError(t)}}var n={};n.fileapi=void 0!==e("&lt;input type='file'/&gt;").get(0).files,n.formdata=void 0!==window.FormData;var i=!!e.fn.prop;e.fn.attr2=function(){if(!i)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&amp;&amp;e.jquery||"string"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t){function r(r){var a,n,i=e.param(r,t.traditional).split("&amp;"),o=i.length,s=[];for(a=0;o&gt;a;a++)i[a]=i[a].replace(/\+/g," "),n=i[a].split("="),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function o(a){for(var n=new FormData,i=0;i&lt;a.length;i++)n.append(a[i].name,a[i].value);if(t.extraData){var o=r(t.extraData);for(i=0;i&lt;o.length;i++)o[i]&amp;&amp;n.append(o[i][0],o[i][1])}t.data=null;var s=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:u||"POST"});t.uploadProgress&amp;&amp;(s.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&amp;&amp;r.upload.addEventListener("progress",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&amp;&amp;(r=Math.ceil(a/n*100)),t.uploadProgress(e,a,n,r)},!1),r}),s.data=null;var c=s.beforeSend;return s.beforeSend=function(e,r){r.data=t.formData?t.formData:n,c&amp;&amp;c.call(this,e,r)},e.ajax(s)}function s(r){function n(e){var t=null;try{e.contentWindow&amp;&amp;(t=e.contentWindow.document)}catch(r){a("cannot get iframe.contentWindow document: "+r)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a("cannot get iframe.contentDocument: "+r),t=e.document}return t}function o(){function t(){try{var e=n(g).readyState;a("state = "+e),e&amp;&amp;"uninitialized"==e.toLowerCase()&amp;&amp;setTimeout(t,50)}catch(r){a("Server abort: ",r," (",r.name,")"),s(k),j&amp;&amp;clearTimeout(j),j=void 0}}var r=f.attr2("target"),i=f.attr2("action"),o="multipart/form-data",c=f.attr("enctype")||f.attr("encoding")||o;w.setAttribute("target",p),(!u||/post/i.test(u))&amp;&amp;w.setAttribute("method","POST"),i!=m.url&amp;&amp;w.setAttribute("action",m.url),m.skipEncodingOverride||u&amp;&amp;!/post/i.test(u)||f.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),m.timeout&amp;&amp;(j=setTimeout(function(){T=!0,s(D)},m.timeout));var l=[];try{if(m.extraData)for(var d in m.extraData)m.extraData.hasOwnProperty(d)&amp;&amp;l.push(e.isPlainObject(m.extraData[d])&amp;&amp;m.extraData[d].hasOwnProperty("name")&amp;&amp;m.extraData[d].hasOwnProperty("value")?e('&lt;input type="hidden" name="'+m.extraData[d].name+'"&gt;').val(m.extraData[d].value).appendTo(w)[0]:e('&lt;input type="hidden" name="'+d+'"&gt;').val(m.extraData[d]).appendTo(w)[0]);m.iframeTarget||v.appendTo("body"),g.attachEvent?g.attachEvent("onload",s):g.addEventListener("load",s,!1),setTimeout(t,15);try{w.submit()}catch(h){var x=document.createElement("form").submit;x.apply(w)}}finally{w.setAttribute("action",i),w.setAttribute("enctype",c),r?w.setAttribute("target",r):f.removeAttr("target"),e(l).remove()}}function s(t){if(!x.aborted&amp;&amp;!F){if(M=n(g),M||(a("cannot access response document"),t=k),t===D&amp;&amp;x)return x.abort("timeout"),void S.reject(x,"timeout");if(t==k&amp;&amp;x)return x.abort("server abort"),void S.reject(x,"error","server abort");if(M&amp;&amp;M.location.href!=m.iframeSrc||T){g.detachEvent?g.detachEvent("onload",s):g.removeEventListener("load",s,!1);var r,i="success";try{if(T)throw"timeout";var o="xml"==m.dataType||M.XMLDocument||e.isXMLDoc(M);if(a("isXml="+o),!o&amp;&amp;window.opera&amp;&amp;(null===M.body||!M.body.innerHTML)&amp;&amp;--O)return a("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var u=M.body?M.body:M.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=M.XMLDocument?M.XMLDocument:M,o&amp;&amp;(m.dataType="xml"),x.getResponseHeader=function(e){var t={"content-type":m.dataType};return t[e.toLowerCase()]},u&amp;&amp;(x.status=Number(u.getAttribute("status"))||x.status,x.statusText=u.getAttribute("statusText")||x.statusText);var c=(m.dataType||"").toLowerCase(),l=/(json|script|text)/.test(c);if(l||m.textarea){var f=M.getElementsByTagName("textarea")[0];if(f)x.responseText=f.value,x.status=Number(f.getAttribute("status"))||x.status,x.statusText=f.getAttribute("statusText")||x.statusText;else if(l){var p=M.getElementsByTagName("pre")[0],h=M.getElementsByTagName("body")[0];p?x.responseText=p.textContent?p.textContent:p.innerText:h&amp;&amp;(x.responseText=h.textContent?h.textContent:h.innerText)}}else"xml"==c&amp;&amp;!x.responseXML&amp;&amp;x.responseText&amp;&amp;(x.responseXML=X(x.responseText));try{E=_(x,c,m)}catch(y){i="parsererror",x.error=r=y||i}}catch(y){a("error caught: ",y),i="error",x.error=r=y||i}x.aborted&amp;&amp;(a("upload aborted"),i=null),x.status&amp;&amp;(i=x.status&gt;=200&amp;&amp;x.status&lt;300||304===x.status?"success":"error"),"success"===i?(m.success&amp;&amp;m.success.call(m.context,E,"success",x),S.resolve(x.responseText,"success",x),d&amp;&amp;e.event.trigger("ajaxSuccess",[x,m])):i&amp;&amp;(void 0===r&amp;&amp;(r=x.statusText),m.error&amp;&amp;m.error.call(m.context,x,i,r),S.reject(x,"error",r),d&amp;&amp;e.event.trigger("ajaxError",[x,m,r])),d&amp;&amp;e.event.trigger("ajaxComplete",[x,m]),d&amp;&amp;!--e.active&amp;&amp;e.event.trigger("ajaxStop"),m.complete&amp;&amp;m.complete.call(m.context,x,i),F=!0,m.timeout&amp;&amp;clearTimeout(j),setTimeout(function(){m.iframeTarget?v.attr("src",m.iframeSrc):v.remove(),x.responseXML=null},100)}}}var c,l,m,d,p,v,g,x,y,b,T,j,w=f[0],S=e.Deferred();if(S.abort=function(e){x.abort(e)},r)for(l=0;l&lt;h.length;l++)c=e(h[l]),i?c.prop("disabled",!1):c.removeAttr("disabled");if(m=e.extend(!0,{},e.ajaxSettings,t),m.context=m.context||m,p="jqFormIO"+(new Date).getTime(),m.iframeTarget?(v=e(m.iframeTarget),b=v.attr2("name"),b?p=b:v.attr2("name",p)):(v=e('&lt;iframe name="'+p+'" src="'+m.iframeSrc+'" /&gt;'),v.css({position:"absolute",top:"-1000px",left:"-1000px"})),g=v[0],x={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(t){var r="timeout"===t?"timeout":"aborted";a("aborting upload... "+r),this.aborted=1;try{g.contentWindow.document.execCommand&amp;&amp;g.contentWindow.document.execCommand("Stop")}catch(n){}v.attr("src",m.iframeSrc),x.error=r,m.error&amp;&amp;m.error.call(m.context,x,r,t),d&amp;&amp;e.event.trigger("ajaxError",[x,m,r]),m.complete&amp;&amp;m.complete.call(m.context,x,r)}},d=m.global,d&amp;&amp;0===e.active++&amp;&amp;e.event.trigger("ajaxStart"),d&amp;&amp;e.event.trigger("ajaxSend",[x,m]),m.beforeSend&amp;&amp;m.beforeSend.call(m.context,x,m)===!1)return m.global&amp;&amp;e.active--,S.reject(),S;if(x.aborted)return S.reject(),S;y=w.clk,y&amp;&amp;(b=y.name,b&amp;&amp;!y.disabled&amp;&amp;(m.extraData=m.extraData||{},m.extraData[b]=y.value,"image"==y.type&amp;&amp;(m.extraData[b+".x"]=w.clk_x,m.extraData[b+".y"]=w.clk_y)));var D=1,k=2,A=e("meta[name=csrf-token]").attr("content"),L=e("meta[name=csrf-param]").attr("content");L&amp;&amp;A&amp;&amp;(m.extraData=m.extraData||{},m.extraData[L]=A),m.forceSync?o():setTimeout(o,10);var E,M,F,O=50,X=e.parseXML||function(e,t){return window.ActiveXObject?(t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e)):t=(new DOMParser).parseFromString(e,"text/xml"),t&amp;&amp;t.documentElement&amp;&amp;"parsererror"!=t.documentElement.nodeName?t:null},C=e.parseJSON||function(e){return window.eval("("+e+")")},_=function(t,r,a){var n=t.getResponseHeader("content-type")||"",i="xml"===r||!r&amp;&amp;n.indexOf("xml")&gt;=0,o=i?t.responseXML:t.responseText;return i&amp;&amp;"parsererror"===o.documentElement.nodeName&amp;&amp;e.error&amp;&amp;e.error("parsererror"),a&amp;&amp;a.dataFilter&amp;&amp;(o=a.dataFilter(o,r)),"string"==typeof o&amp;&amp;("json"===r||!r&amp;&amp;n.indexOf("json")&gt;=0?o=C(o):("script"===r||!r&amp;&amp;n.indexOf("javascript")&gt;=0)&amp;&amp;e.globalEval(o)),o};return S}if(!this.length)return a("ajaxSubmit: skipping submit process - no element selected"),this;var u,c,l,f=this;"function"==typeof t?t={success:t}:void 0===t&amp;&amp;(t={}),u=t.type||this.attr2("method"),c=t.url||this.attr2("action"),l="string"==typeof c?e.trim(c):"",l=l||window.location.href||"",l&amp;&amp;(l=(l.match(/^([^#]+)/)||[])[1]),t=e.extend(!0,{url:l,success:e.ajaxSettings.success,type:u||e.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},t);var m={};if(this.trigger("form-pre-serialize",[this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(t.beforeSerialize&amp;&amp;t.beforeSerialize(this,t)===!1)return a("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var d=t.traditional;void 0===d&amp;&amp;(d=e.ajaxSettings.traditional);var p,h=[],v=this.formToArray(t.semantic,h);if(t.data&amp;&amp;(t.extraData=t.data,p=e.param(t.data,d)),t.beforeSubmit&amp;&amp;t.beforeSubmit(v,this,t)===!1)return a("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[v,this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var g=e.param(v,d);p&amp;&amp;(g=g?g+"&amp;"+p:p),"GET"==t.type.toUpperCase()?(t.url+=(t.url.indexOf("?")&gt;=0?"&amp;":"?")+g,t.data=null):t.data=g;var x=[];if(t.resetForm&amp;&amp;x.push(function(){f.resetForm()}),t.clearForm&amp;&amp;x.push(function(){f.clearForm(t.includeHidden)}),!t.dataType&amp;&amp;t.target){var y=t.success||function(){};x.push(function(r){var a=t.replaceTarget?"replaceWith":"html";e(t.target)[a](r).each(y,arguments)})}else t.success&amp;&amp;x.push(t.success);if(t.success=function(e,r,a){for(var n=t.context||this,i=0,o=x.length;o&gt;i;i++)x[i].apply(n,[e,r,a||f,f])},t.error){var b=t.error;t.error=function(e,r,a){var n=t.context||this;b.apply(n,[e,r,a,f])}}if(t.complete){var T=t.complete;t.complete=function(e,r){var a=t.context||this;T.apply(a,[e,r,f])}}var j=e("input[type=file]:enabled",this).filter(function(){return""!==e(this).val()}),w=j.length&gt;0,S="multipart/form-data",D=f.attr("enctype")==S||f.attr("encoding")==S,k=n.fileapi&amp;&amp;n.formdata;a("fileAPI :"+k);var A,L=(w||D)&amp;&amp;!k;t.iframe!==!1&amp;&amp;(t.iframe||L)?t.closeKeepAlive?e.get(t.closeKeepAlive,function(){A=s(v)}):A=s(v):A=(w||D)&amp;&amp;k?o(v):e.ajax(t),f.removeData("jqxhr").data("jqxhr",A);for(var E=0;E&lt;h.length;E++)h[E]=null;return this.trigger("form-submit-notify",[this,t]),this},e.fn.ajaxForm=function(n){if(n=n||{},n.delegation=n.delegation&amp;&amp;e.isFunction(e.fn.on),!n.delegation&amp;&amp;0===this.length){var i={s:this.selector,c:this.context};return!e.isReady&amp;&amp;i.s?(a("DOM not ready, queuing ajaxForm"),e(function(){e(i.s,i.c).ajaxForm(n)}),this):(a("terminating; zero elements found by selector"+(e.isReady?"":" (DOM not ready)")),this)}return n.delegation?(e(document).off("submit.form-plugin",this.selector,t).off("click.form-plugin",this.selector,r).on("submit.form-plugin",this.selector,n,t).on("click.form-plugin",this.selector,n,r),this):this.ajaxFormUnbind().bind("submit.form-plugin",n,t).bind("click.form-plugin",n,r)},e.fn.ajaxFormUnbind=function(){return this.unbind("submit.form-plugin click.form-plugin")},e.fn.formToArray=function(t,r){var a=[];if(0===this.length)return a;var i,o=this[0],s=this.attr("id"),u=t?o.getElementsByTagName("*"):o.elements;if(u&amp;&amp;!/MSIE [678]/.test(navigator.userAgent)&amp;&amp;(u=e(u).get()),s&amp;&amp;(i=e(':input[form="'+s+'"]').get(),i.length&amp;&amp;(u=(u||[]).concat(i))),!u||!u.length)return a;var c,l,f,m,d,p,h;for(c=0,p=u.length;p&gt;c;c++)if(d=u[c],f=d.name,f&amp;&amp;!d.disabled)if(t&amp;&amp;o.clk&amp;&amp;"image"==d.type)o.clk==d&amp;&amp;(a.push({name:f,value:e(d).val(),type:d.type}),a.push({name:f+".x",value:o.clk_x},{name:f+".y",value:o.clk_y}));else if(m=e.fieldValue(d,!0),m&amp;&amp;m.constructor==Array)for(r&amp;&amp;r.push(d),l=0,h=m.length;h&gt;l;l++)a.push({name:f,value:m[l]});else if(n.fileapi&amp;&amp;"file"==d.type){r&amp;&amp;r.push(d);var v=d.files;if(v.length)for(l=0;l&lt;v.length;l++)a.push({name:f,value:v[l],type:d.type});else a.push({name:f,value:"",type:d.type})}else null!==m&amp;&amp;"undefined"!=typeof m&amp;&amp;(r&amp;&amp;r.push(d),a.push({name:f,value:m,type:d.type,required:d.required}));if(!t&amp;&amp;o.clk){var g=e(o.clk),x=g[0];f=x.name,f&amp;&amp;!x.disabled&amp;&amp;"image"==x.type&amp;&amp;(a.push({name:f,value:g.val()}),a.push({name:f+".x",value:o.clk_x},{name:f+".y",value:o.clk_y}))}return a},e.fn.formSerialize=function(t){return e.param(this.formToArray(t))},e.fn.fieldSerialize=function(t){var r=[];return this.each(function(){var a=this.name;if(a){var n=e.fieldValue(this,t);if(n&amp;&amp;n.constructor==Array)for(var i=0,o=n.length;o&gt;i;i++)r.push({name:a,value:n[i]});else null!==n&amp;&amp;"undefined"!=typeof n&amp;&amp;r.push({name:this.name,value:n})}}),e.param(r)},e.fn.fieldValue=function(t){for(var r=[],a=0,n=this.length;n&gt;a;a++){var i=this[a],o=e.fieldValue(i,t);null===o||"undefined"==typeof o||o.constructor==Array&amp;&amp;!o.length||(o.constructor==Array?e.merge(r,o):r.push(o))}return r},e.fieldValue=function(t,r){var a=t.name,n=t.type,i=t.tagName.toLowerCase();if(void 0===r&amp;&amp;(r=!0),r&amp;&amp;(!a||t.disabled||"reset"==n||"button"==n||("checkbox"==n||"radio"==n)&amp;&amp;!t.checked||("submit"==n||"image"==n)&amp;&amp;t.form&amp;&amp;t.form.clk!=t||"select"==i&amp;&amp;-1==t.selectedIndex))return null;if("select"==i){var o=t.selectedIndex;if(0&gt;o)return null;for(var s=[],u=t.options,c="select-one"==n,l=c?o+1:u.length,f=c?o:0;l&gt;f;f++){var m=u[f];if(m.selected){var d=m.value;if(d||(d=m.attributes&amp;&amp;m.attributes.value&amp;&amp;!m.attributes.value.specified?m.text:m.value),c)return d;s.push(d)}}return s}return e(t).val()},e.fn.clearForm=function(t){return this.each(function(){e("input,select,textarea",this).clearFields(t)})},e.fn.clearFields=e.fn.clearInputs=function(t){var r=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var a=this.type,n=this.tagName.toLowerCase();r.test(a)||"textarea"==n?this.value="":"checkbox"==a||"radio"==a?this.checked=!1:"select"==n?this.selectedIndex=-1:"file"==a?/MSIE/.test(navigator.userAgent)?e(this).replaceWith(e(this).clone(!0)):e(this).val(""):t&amp;&amp;(t===!0&amp;&amp;/hidden/.test(a)||"string"==typeof t&amp;&amp;e(this).is(t))&amp;&amp;(this.value="")})},e.fn.resetForm=function(){return this.each(function(){("function"==typeof this.reset||"object"==typeof this.reset&amp;&amp;!this.reset.nodeType)&amp;&amp;this.reset()})},e.fn.enable=function(e){return void 0===e&amp;&amp;(e=!0),this.each(function(){this.disabled=!e})},e.fn.selected=function(t){return void 0===t&amp;&amp;(t=!0),this.each(function(){var r=this.type;if("checkbox"==r||"radio"==r)this.checked=t;else if("option"==this.tagName.toLowerCase()){var a=e(this).parent("select");t&amp;&amp;a[0]&amp;&amp;"select-one"==a[0].type&amp;&amp;a.find("option").selected(!1),this.selected=t}})},e.fn.ajaxSubmit.debug=!1});

/*! jQuery Validation Plugin - v1.12.0 - 4/1/2014
 * http://jqueryvalidation.org/
 * Copyright (c) 2014 JÄ‚ÂƒÃ‚Å›rn Zaefferer; Licensed MIT */
!function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&amp;&amp;b.debug&amp;&amp;window.console&amp;&amp;console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&amp;&amp;(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&amp;&amp;(c.submitButton=b.target),a(b.target).hasClass("cancel")&amp;&amp;(c.cancelSubmit=!0),void 0!==a(b.target).attr("formnovalidate")&amp;&amp;(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d;return c.settings.submitHandler?(c.submitButton&amp;&amp;(d=a("&lt;input type='hidden'/&gt;").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&amp;&amp;d.remove(),!1):!0}return c.settings.debug&amp;&amp;b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c;return a(this[0]).is("form")?b=this.validate().form():(b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&amp;&amp;b})),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&amp;&amp;(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&amp;&amp;a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&amp;&amp;(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&amp;&amp;(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length&gt;2&amp;&amp;c.constructor!==Array&amp;&amp;(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&amp;&amp;(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&amp;&amp;!this.blockFocusCleanup&amp;&amp;(this.settings.unhighlight&amp;&amp;this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(a)).hide())},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&amp;&amp;this.optional(a)||this.element(a)},onkeyup:function(a,b){(9!==b.which||""!==this.elementValue(a))&amp;&amp;(a.name in this.submitted||a===this.lastElement)&amp;&amp;this.element(a)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&amp;&amp;this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},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.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&amp;&amp;!this.is(e.ignore)&amp;&amp;e[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&amp;&amp;this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&amp;&amp;(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",b).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",b),this.settings.invalidHandler&amp;&amp;a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),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(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&amp;&amp;a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue").removeAttr("aria-invalid")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&amp;&amp;this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&amp;&amp;1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&amp;&amp;b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&amp;&amp;b.settings.debug&amp;&amp;window.console&amp;&amp;console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=d.attr("type");return"radio"===e||"checkbox"===e?a("input[name='"+d.attr("name")+"']:checked").val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&amp;&amp;1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&amp;&amp;window.console&amp;&amp;console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j}}if(!h)return this.objectLength(f)&amp;&amp;this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c[0].toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&amp;&amp;(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a&lt;arguments.length;a++)if(void 0!==arguments[a])return arguments[a];return void 0},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),!this.settings.ignoreTitle&amp;&amp;b.title||void 0,a.validator.messages[c],"&lt;strong&gt;Warning: No message defined for "+b.name+"&lt;/strong&gt;")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&amp;&amp;(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&amp;&amp;(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&amp;&amp;this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&amp;&amp;(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,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 a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d=this.errorsFor(b);d.length?(d.removeClass(this.settings.validClass).addClass(this.settings.errorClass),d.html(c)):(d=a("&lt;"+this.settings.errorElement+"&gt;").attr("for",this.idOrName(b)).addClass(this.settings.errorClass).html(c||""),this.settings.wrapper&amp;&amp;(d=d.hide().show().wrap("&lt;"+this.settings.wrapper+"/&gt;").parent()),this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b))),!c&amp;&amp;this.settings.success&amp;&amp;(d.text(""),"string"==typeof this.settings.success?d.addClass(this.settings.success):this.settings.success(d,b)),this.toShow=this.toShow.add(d)},errorsFor:function(b){var c=this.idOrName(b);return this.errors().filter(function(){return a(this).attr("for")===c})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){return this.checkable(a)&amp;&amp;(a=this.findByName(a.name).not(this.settings.ignore)[0]),a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&amp;&amp;"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest&lt;0&amp;&amp;(this.pendingRequest=0),delete this.pending[b.name],c&amp;&amp;0===this.pendingRequest&amp;&amp;this.formSubmitted&amp;&amp;this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&amp;&amp;0===this.pendingRequest&amp;&amp;this.formSubmitted&amp;&amp;(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&amp;&amp;a.each(d.split(" "),function(){this in a.validator.classRuleSettings&amp;&amp;a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&amp;&amp;(d=!0),d=!!d):d=f.attr(c),/min|max/.test(c)&amp;&amp;(null===g||/number|range|text/.test(g))&amp;&amp;(d=Number(d)),d||0===d?e[c]=d:g===c&amp;&amp;"range"!==g&amp;&amp;(e[c]=!0);return e.maxlength&amp;&amp;/-1|2147483647|524288/.test(e.maxlength)&amp;&amp;delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b);for(c in a.validator.methods)d=f.data("rule"+c[0].toUpperCase()+c.substring(1).toLowerCase()),void 0!==d&amp;&amp;(e[c]=d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&amp;&amp;(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&amp;&amp;(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&amp;&amp;(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&amp;&amp;(c=b[this].split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&amp;&amp;(b.min&amp;&amp;b.max&amp;&amp;(b.range=[b.min,b.max],delete b.min,delete b.max),b.minlength&amp;&amp;b.maxlength&amp;&amp;(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length&lt;3&amp;&amp;a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&amp;&amp;e.length&gt;0}return this.checkable(c)?this.getLength(b,c)&gt;0:a.trim(b).length&gt;0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&amp;'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:)*@)?(((\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})|[!\$&amp;'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},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!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length&lt;13||a.length&gt;19)return!1;for(c=a.length-1;c&gt;=0;c--)d=a.charAt(c),f=parseInt(d,10),g&amp;&amp;(f*=2)&gt;9&amp;&amp;(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e&gt;=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||d&gt;=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e&gt;=d[0]&amp;&amp;e&lt;=d[1]},min:function(a,b,c){return this.optional(b)||a&gt;=c},max:function(a,b,c){return this.optional(b)||c&gt;=a},range:function(a,b,c){return this.optional(b)||a&gt;=c[0]&amp;&amp;a&lt;=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&amp;&amp;e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&amp;&amp;{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}}),a.format=function(){throw"$.format has been deprecated. Please use $.validator.format instead."}}(jQuery),function(a){var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&amp;&amp;(c[e]&amp;&amp;c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&amp;&amp;c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)})}(jQuery),function(a){a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);return e.is(b)?d.apply(e,arguments):void 0})}})}(jQuery);

// ADDITIONAL JQUERY VALIDATE METHODS
(function($) {
    // Validate a multifield birthday
    $.validator.addMethod("mc_birthday", function(date, element, grouping_class) {
        var isValid = false;
        var $fields = $('input:not(:hidden)' , $(element).closest(grouping_class));
        if ($fields.filter(':filled').length == 0 &amp;&amp; this.optional(element)) {
            isValid = true; // None have been filled out, so no error   
        } else {
            var dateArray = new Array();
            dateArray['month'] = $fields.filter("input[name*='[month]']").val();
            dateArray['day'] = $fields.filter("input[name*='[day]']").val();
              
            // correct month value
            dateArray['month'] = dateArray['month'] - 1;

            var testDate = new Date(1970, dateArray['month'], dateArray['day']);
            if (testDate.getDate()!=dateArray['day'] || testDate.getMonth()!=dateArray['month']) {
                isValid = false;
            } else {
                isValid = true;
            }
        }
        return isValid;
    }, "Please enter a valid month and day.");
    // Validate a multifield date
    $.validator.addMethod("mc_date", function(date, element, grouping_class) {
        var isValid = false;
        var $fields = $('input:not(:hidden)' , $(element).closest(grouping_class));
        if ($fields.filter(':filled').length == 0 &amp;&amp; this.optional(element)) {
            isValid = true; // None have been filled out, so no error   
        } else {
            var dateArray = new Array();
            dateArray['month'] = $fields.filter("input[name*='[month]']").val();
            dateArray['day'] = $fields.filter("input[name*='[day]']").val();
            dateArray['year'] = $fields.filter("input[name*='[year]']").val();
              
            // correct month value
            dateArray['month'] = dateArray['month'] - 1;

            // correct year value
            if (dateArray['year'].length &lt; 4) {
                dateArray['year'] = (parseInt(dateArray['year']) &lt; 50) ? 2000 + parseInt(dateArray['year']) : 1900 + parseInt(dateArray['year']);
            }

            var testDate = new Date(dateArray['year'], dateArray['month'], dateArray['day']);
            if (testDate.getDate()!=dateArray['day'] || testDate.getMonth()!=dateArray['month'] || testDate.getFullYear()!=dateArray['year']) {
                isValid = false;
            } else {
                isValid = true;
            }
        }
        return isValid;
    }, "Please enter a valid date");

    // Validate a multifield phone number
    $.validator.addMethod("mc_phone", function(phone_number, element, grouping_class) {
        var isValid = false;
        var $fields = $('input:filled:not(:hidden)' , $(element).closest(grouping_class));
        if ($fields.length == 0 &amp;&amp; this.optional(element)) {
            isValid = true; // None have been filled out, so no error   
        } else {
            phone_number = $fields.eq(0).val() + $fields.eq(1).val() + $fields.eq(2).val();
            isValid = phone_number.length == 10 &amp;&amp; phone_number.match(/[0-9]{9}/);
        }
        return isValid;
    }, "Please specify a valid phone number");

    $.validator.addMethod("skip_or_complete_group", function(value, element, grouping_class) {
        var $fields = $('input:not(:hidden)' , $(element).closest(grouping_class)),
            $fieldsFirst = $fields.eq(0),
            validator = $fieldsFirst.data("valid_skip") ? $fieldsFirst.data("valid_skip") : $.extend({}, this),
            numberFilled = $fields.filter(function() {
                return validator.elementValue(this);
            }).length,
            isValid = numberFilled === 0 || numberFilled === $fields.length;

        // Store the cloned validator for future validation
        $fieldsFirst.data("valid_skip", validator);

        // If element isn't being validated, run each field's validation rules
        if (!$(element).data("being_validated")) {
            $fields.data("being_validated", true);
            $fields.each(function() {
                validator.element(this);
            });
            $fields.data("being_validated", false);
        }
        return isValid;
    }, $.validator.format("Please supply missing fields."));

    $.validator.addMethod("skip_or_fill_minimum", function(value, element, options) {
        var $fields = $(options[1], element.form),
            $fieldsFirst = $fields.eq(0),
            validator = $fieldsFirst.data("valid_skip") ? $fieldsFirst.data("valid_skip") : $.extend({}, this),
            numberFilled = $fields.filter(function() {
                return validator.elementValue(this);
            }).length,
            isValid = numberFilled === 0 || numberFilled &gt;= options[0];
        console.log($fields.eq(0));
        // Store the cloned validator for future validation
        $fieldsFirst.data("valid_skip", validator);

        // If element isn't being validated, run each skip_or_fill_minimum field's validation rules
        if (!$(element).data("being_validated")) {
            $fields.data("being_validated", true);
            $fields.each(function() {
                validator.element(this);
            });
            $fields.data("being_validated", false);
        }
        return isValid;
    }, $.validator.format("Please either skip these fields or fill at least {0} of them."));

    $.validator.addMethod("zipcodeUS", function(value, element) {
        return this.optional(element) || /^\d{5}-\d{4}$|^\d{5}$/.test(value);
    }, "The specified US ZIP Code is invalid");

}(jQuery));

// MC
(function($) {

    // TODO: Do we actually allow custom error styles or is this legacy code?
    var err_style = '';
    try {
        err_style = mc_custom_error_style;
    } catch(e){
        err_style = '#mc_embed_signup input.mce_inline_error { border-color:#6B0505; } #mc_embed_signup div.mce_inline_error { margin: 0 0 1em 0; padding: 5px 10px; background-color:#6B0505; font-weight: bold; z-index: 1; color:#fff; }';
    }
    var head = document.getElementsByTagName('head')[0];
    var style = document.createElement('style');
    style.type = 'text/css';
    if (style.styleSheet) {
      style.styleSheet.cssText = err_style;
    } else {
      style.appendChild(document.createTextNode(err_style));
    }
    head.appendChild(style);

    // Expose extra mc form methods in global var
    window.mc = {

        /**
         *  Open the evil popup     
         */
        openPopup: function() {
            $('#mc_embed_signup a.mc_embed_close').show();
            setTimeout( function(){ $('#mc_embed_signup').fadeIn(); } , mc.delayPopup);
        },
        /**
         *  Close the evil popup
         */
        closePopup: function() {
            $('#mc_embed_signup').hide();
            var now = new Date();
            var expires_date = new Date( now.getTime() + 31536000000 );
            document.cookie = 'MCEvilPopupClosed=yes;expires=' + expires_date.toGMTString()+';path=/';
        },
        /**
         *  Figure out if we should show the evil popup (if they've closed it before, don't show it.)
         */
        evalPopup: function() {
            $('#mc_embed_signup').hide();
            cks = document.cookie.split(';');
            for(i=0; i&lt;cks.length; i++){
                parts = cks[i].split('=');
                if (parts[0].indexOf('MCEvilPopupClosed') != -1) mc.showPopup = false;
            }
            if (mc.showPopup) mc.openPopup();
        },
        /**
         *  Grab the list subscribe url from the form action and make it work for an ajax post.
         */
        getAjaxSubmitUrl: function() {
            var url = $("form#mc-embedded-subscribe-form").attr("action");
            url = url.replace("/post?u=", "/post-json?u=");
            url += "&amp;c=?";
            return url;
        },
        /**
         *  Classify text inputs in the same field group as group for validation purposes.
         *  All this does is tell jQueryValidation to create one error div for the group, rather
         *  than one for each input. Primary use case is birthday and date fields, where we want 
         *  to display errors about the inputs collectively, not individually.
         *
         *  NOTE: Grouping inputs will give you one error div, but you still need to specify where
         *  that div should be displayed. By default, it's inserted after the first input with a
         *  validation error, which can break up a set of inputs. Use the errorPlacement setting in
         *  the validator to control error div placement.
         */
        getGroups: function (){ 
            var groups = {};
            $(".mc-field-group").each(function(index) {
                var inputs = $(this).find("input:text:not(:hidden)");   // TODO: What about non-text inputs like number?
                if (inputs.length &gt; 1) {
                    var mergeName = inputs.first().attr("name");
                    var fieldNames = $.map(inputs, function(f) { return f.name; });
                    groups[mergeName.substring(0, mergeName.indexOf("["))] = fieldNames.join(" ");
                }
            });
            return groups;
        },
        /**
         *  Chick if a field is part of a multipart field
         *  (e.g., A date merge field is composed of individual inputs for month, day and year)
         *  Used in jQuery validation onkeyup method to ensure that we don't evaluate a field
         *  if a user hasn't reached the last input in a multipart field yet.
         */
        isMultiPartField: function(element) {
            return ($('input:not(:hidden)' , $(element).closest(".mc-field-group")).length &gt; 1);
        },
        /**
         *  Checks if the element is the last input in its fieldgroup. 
         *  If the field is not the last in a set of inputs we don't want to validate it on certain events (onfocusout, onblur)
         *  because the user might not be finished yet.
         */
        isTooEarly: function(element) {
            var fields = $('input:not(:hidden)' , $(element).closest(".mc-field-group"));
            return ($(fields).eq(-1).attr('id') != $(element).attr('id'));
        },
        /**
         *  Handle the error/success message after successful form submission.
         *  Success messages are appended to #mce-success-response
         *  Error messages are displayed with the invalid input when possible, or appended to #mce-error-response
         */
        mce_success_cb: function(resp){

            $('#mce-success-response').hide();
            $('#mce-error-response').hide();

            // On successful form submission, display a success message and reset the form
            if (resp.result == "success"){
                $('#mce-'+resp.result+'-response').show();
                $('#mce-'+resp.result+'-response').html(resp.msg);
                $('#mc-embedded-subscribe-form').each(function(){
                    this.reset();
                });

            // If the form has errors, display them, inline if possible, or appended to #mce-error-response
            } else {

                // Example errors - Note: You only get one back at a time even if you submit several that are bad. 
                // Error structure - number indicates the index of the merge field that was invalid, then details
                // Object {result: "error", msg: "6 - Please enter the date"} 
                // Object {result: "error", msg: "4 - Please enter a value"} 
                // Object {result: "error", msg: "9 - Please enter a complete address"} 

                // Try to parse the error into a field index and a message.
                // On failure, just put the dump thing into in the msg variable.
                var index = -1;
                var msg;
                try {
                    var parts = resp.msg.split(' - ',2);
                    if (parts[1]==undefined){
                        msg = resp.msg;
                    } else {
                        i = parseInt(parts[0]);
                        if (i.toString() == parts[0]){
                            index = parts[0];
                            msg = parts[1];
                        } else {
                            index = -1;
                            msg = resp.msg;
                        }
                    }
                } catch(e){
                    index = -1;
                    msg = resp.msg;
                }

                try {
                    // If index is -1 if means we don't have data on specifically which field was invalid.
                    // Just lump the error message into the generic response div.
                    if (index == -1){
                        $('#mce-'+resp.result+'-response').show();
                        $('#mce-'+resp.result+'-response').html(msg);      

                    } else {
                        var fieldName = $("input[name*='"+fnames[index]+"']").attr('name'); // Make sure this exists (they haven't deleted the fnames array lookup)
                        var data = {};
                        data[fieldName] = msg;
                        mc.mce_validator.showErrors(data);
                    }
                } catch(e){
                    $('#mce-'+resp.result+'-response').show();
                    $('#mce-'+resp.result+'-response').html(msg);
                }
            }
        }
    }

    window.mc.mce_validator = $("#mc-embedded-subscribe-form").validate({

        // Set error HTML: &lt;div class="mce_inline_error"&gt;&lt;/div&gt;
        errorClass: "mce_inline_error", 
        errorElement: "div", 
        
        // Validate fields on keyup, focusout and blur. 
        onkeyup: false,
        onfocusout: function(element) { 
            if (!mc.isTooEarly(element)) {
                $(element).valid();
            }
        },
        onblur: function(element) { 
            if (!mc.isTooEarly(element)) {
                $(element).valid();
            }
        },
        // Grouping fields makes jQuery Validation display one error for all the fields in the group
        // It doesn't have anything to do with how the fields are validated (together or separately), 
        // it's strictly for visual display of errors
        groups: mc.getGroups(),
        // Place a field's inline error HTML just before the div.mc-field-group closing tag 
        errorPlacement: function(error, element) {
            element.closest('.mc-field-group').append(error);
        },
        // Submit the form via ajax (see: jQuery Form plugin)
        submitHandler: function(form) {
            $(form).ajaxSubmit(mc.ajaxOptions);
        }
    });

    window.mc.ajaxOptions = { 
        url: mc.getAjaxSubmitUrl(), 
        type: 'GET', 
        dataType: 'json', 
        contentType: "application/json; charset=utf-8",
        success: mc.mce_success_cb
    };

    // Custom validation methods for fields with certain css classes
    $.validator.addClassRules("birthday", { digits: true, mc_birthday: ".datefield" });
    $.validator.addClassRules("datepart", { digits: true, mc_date: ".datefield" });
    $.validator.addClassRules("phonepart", { digits: true, mc_phone: ".phonefield" });

    // Evil Popup
    $('#mc_embed_signup a.mc_embed_close').click(function(){ 
        mc.closePopup(); 
    });
    $(document).keydown(function(e){
        keycode = (e == null) ? event.keyCode : e.which;
        if (keycode == 27 &amp;&amp; typeof mc.showPopup != 'undefined') mc.closePopup();
    });

}(jQuery));

(function($) {
    window.fnames = new Array();
    window.ftypes = new Array();
    fnames[0] = 'EMAIL';
    ftypes[0] = 'email';
    fnames[1] = 'FNAME';
    ftypes[1] = 'text';
    fnames[2] = 'LNAME';
    ftypes[2] = 'text';
}(jQuery));
//var $mcj = jQuery.noConflict(true);</pre></body></html>