/*!
 * plum.Form v1.3: Styling web forms
 *
 * Copyright 2011 RoboCréatif, LLC
 * <http://robocreatif.com>
 *
 * Date: August 6, 2011
 */

var plum=plum||{};String.prototype.plum=Number.prototype.plum=jQuery.fn.plum=function(d,b){var c=d.split("."),a;d=c[0];if(c.length>1){a=b;b=c[1]}return typeof plum[d]==="function"?plum[d].call(this,b,a):this};(function(d,c){d.support.file=window.File&&window.FileList;d.support.filexhr=window.XMLHttpRequestUpload;d.expr[":"].plum=function(f){return !!d(f).data("plum")};d.expr[":"].invalid=function(f){return !!d(f).data("invalid")};if((!d.support.file||!d.support.filexhr)&&!d('iframe[name="plum-form"]').length){var b;d(function(){b=d('<iframe name="plum-form">').attr("src","about:blank").css({border:0,left:"-9999em",height:0,position:"absolute",top:"-9999em",width:0}).appendTo("body")})}function a(h,f){d.extend(true,this.options,f);var g=this,i=this.options.classes;this.form=h;h.action=this.options.action||h.action||window.location.href;h.plum.each(function(){if(d(this).data("plum")){return true}var n=d(this),l=n.attr("type")||this.type,m=this.nodeName.toLowerCase(),p=n.css("position"),k=n.parent(),o,j;if(!k.is("label")){k=d('label[for="'+this.id+'"]')}this.wrapper=n.css({overflow:"visible"}).wrap(d("<div>",{"class":"plum-form "+(i[l]||"")+" "+(i[m]||"")+" "+(this.disabled&&i.disabled||"")+" "+(this.multiple&&i.multiple||"")+" "+(this.selected&&i.selected||"")+" "+(this.checked&&i.checked||""),title:this.title,dir:this.dir,css:{cssFloat:n.css("float"),position:p==="static"?"relative":p,width:/^(?:button|checkbox|file|submit|reset|radio)$/.test(l)||(d.browser.msie&&parseInt(d.browser.version,10)===7)?"":n.css("width")}})).data("classes",i).data("plum",true).bind({focus:function(){this.wrapper.addClass(i.focus)},blur:function(){this.wrapper.removeClass(i.focus)}}).parent().bind("mousedown mouseup",function(q){j=q.type==="mousedown";d(this).toggleClass(i.active)}).bind({mouseleave:function(){d(this).removeClass(i.active)},mouseenter:function(q){if(j){d(this).addClass(i.active)}}}).css({verticalAlign:"top"});n.css({width:this.wrapper.css("width")});g[(typeof g[l]==="function"?l:typeof g[m]==="function"?m:"input")](n);if(k.length){g.inFieldLabels(n,k)}});this.checkAllBoxes();return d(h).unbind("submit",this.submitForm).bind("submit",{plum:this},this.submitForm)}a.prototype={form:null,queue:[],options:{action:null,ajax:false,complete:function(){},classes:{active:"active",arrow:"select-arrow",button:"button",checkbox:"checkbox",checked:"checked",closed:"closed",color:"color",container:"select-container",date:"date",datetime:"datetime",disabled:"disabled",file:"file",filelist:"filelist",focus:"focus",email:"email",error:"error",hover:"hover",info:"info",input:"input",label:"label",loading:"loading",mixed:"mixed",month:"month",multiple:"multiple",number:"number",open:"open",optgroup:"optgroup",option:"option",password:"password",progress:"progress",radio:"radio",range:"range",remove:"remove",reset:"reset",submit:"submit",text:"text",textarea:"textarea",select:"select",search:"search",selected:"selected",single:"single",success:"success",tel:"tel",url:"url",value:"select-value",waiting:"waiting",week:"week",wrapper:"select-wrapper"},file:{button:"Choose a file...",complete:function(){},errorsize:"Please choose a file smaller than {filesize}.",errortype:"This file type is not allowed.",files:0,html:'<span class="filename">{filename}</span><span class="remove">&times;</span><span class="filesize">{filesize}</span><div class="progress"><div></div></div>',progress:function(f){f.progressbar.children().stop(true,true).animate({width:f.percent+"%"},150)},size:0,start:function(){},types:[]},json:false,labels:false,reset:false,submit:function(){}},checkbox:function(h){var f=this,i=this.options.classes,g=this.form;h.bind("click",function(){var j,k=h.hasClass("check-all")&&h.attr("class").match(/group-([^\s]+)/)[1];if(!k){this.wrapper.toggleClass(i.checked);f.checkAllBoxes(this.name)}else{g.plum.filter(function(){return this.type==="checkbox"&&!this.disabled&&(this.name===k||d(this).hasClass("group-"+k))}).each(function(){if(h[0].checked||this.wrapper.hasClass(i.mixed)){this.checked=true;this.wrapper.removeClass(i.mixed).addClass(i.checked)}else{this.checked=false;this.wrapper.removeClass(i.checked+" "+i.mixed)}})}}).css({left:"50%",marginLeft:-h[0].offsetWidth/2,marginTop:-h[0].offsetHeight/2,opacity:0,position:"absolute",top:"50%"}).parent().css({verticalAlign:""})},file:function(h){var q=this,o=this.options.ajax,n=this.options.classes,k=this.options.file,i={size:function(f){f={B:f};f.K=f.B/1024;f.M=f.K/1024;f.G=f.M/1024;return f.G>1?Math.round(f.G)+" GB":f.M>1?Math.round(f.M)+" MB":f.K>1?Math.round(f.K)+" KB":f.B>0?f.B+" bytes":""},add:function(){var f=d("<li>",{"class":(this.error?n.error:n.waiting)+" plum-upload-"+(l-1),css:{display:"none"},html:k.html.replace(/\{filename\}/g,this.name).replace(/\{filesize\}/g,i.size(this.size)).replace(/\{filetype\}/g,this.type)+this.error+'<div style="clear:both"></div>'}).appendTo(j).fadeIn(300);d("."+n.remove,f).bind("click",function(){var s=f.attr("class").match(/(?:(?:.+\s+)?)?plum-upload-([\d]+)/)[1],r=d(":file.plum-upload-"+s);f.fadeOut(300,function(){f.remove()});if(typeof q.queue[s]!=="undefined"){q.queue.splice(s,1)}if(!d.support.file){r.remove()}});if(this.error||!d.support.filexhr){d("."+n.progress,f).remove()}else{d("."+n.progress,f).children().css({width:0})}},change:function(){var r=0,f,u=d(this),t,s={name:this.value,size:"",type:"",error:""};if(d.support.file){if(!o){q.queue=[];j.children().remove()}for(f=this.files.length;r<f;r++){if(k.files&&q.queue.length===k.files){break}t=this.files[r];s.name=t.name||t.fileName;s.size=t.size||t.fileSize;s.type=t.type||t.fileType;if(k.types.length&&d.inArray(s.type,k.types)<0){s.error="<div>"+k.errortype+"</div>"}else{if(k.size&&s.size>k.size){s.error="<div>"+k.errorsize+"</div>"}}if(!s.error){l++;q.queue.push(t)}i.add.call(s)}}else{if(k.files&&q.queue.length===k.files){return false}else{l++;q.queue.push(s.name);i.add.call(s);u=u.css({zIndex:-998}).unbind("change",i.change).after(u.clone().val("")).next().data("plum",true).removeClass("plum-upload-"+(l-1)).addClass("plum-upload-"+l).css({zIndex:998}).bind("mousedown mouseup",function(){d(this).parent().toggleClass(n.active)}).bind("change",i.change)}}}},l=0,p=i.size(k.size),j=d("<ul>",{"class":n.filelist}).insertAfter(h),m,g=h.attr("multiple",true).addClass("plum-upload-"+l).css({opacity:0,position:"absolute",width:50}).wrap(d("<div>",{"class":"plum-form "+n.input+" "+n.button,css:{overflow:"hidden",position:"relative"}}).bind({mouseover:function(){d(this).toggleClass(n.hover);if(m){d(this).addClass(n.active)}},mouseout:function(){d(this).toggleClass(n.hover).removeClass(n.active)},mousemove:function(s){var r=d(this),f=d(":file",this).eq(-1);f.css({left:-f.outerWidth(),marginLeft:s.pageX-r.offset().left+25,top:s.pageY-r.offset().top-10})}})).before('<button style="overflow:visible" type="button" tabindex="-1">'+k.button+"</button>").unbind("mousedown mouseup").bind({focus:function(){this.wrapper.removeClass(n.focus);d(this).parent().addClass(n.focus)},blur:function(){d(this).parent().removeClass(n.focus)}}).bind("mousedown mouseup",function(f){m=f.type==="mousedown";this.wrapper.toggleClass(n.active)}).bind("change",i.change)},input:function(f){var g=this.options.classes;switch(f[0].type){case"textarea":return f.css({resize:"none",verticalAlign:"bottom"});case"button":case"submit":return f.attr("formnovalidate",true);default:return f.css("verticalAlign","bottom").each(function(){this.wrapper.addClass(g.text)})}},radio:function(h){var i=this.options.classes,g=this.form,f=h.bind("click",function(){g.plum.filter(function(){return this.type==="radio"&&this.name===f}).each(function(){this.wrapper.removeClass(i.checked)});this.wrapper.addClass(i.checked)}).css({left:"50%",marginLeft:-h[0].offsetWidth/2,marginTop:-h[0].offsetHeight/2,opacity:0,position:"absolute",top:"50%"})[0].name;h[0].wrapper.css({verticalAlign:""})},reset:function(g){var f=this;g.bind("click",function(h){h.preventDefault();f.resetForm()})},select:function(C){var E=this.options.classes,l=0,B=0,k=C[0].wrapper,j=false,D=C[0].multiple,t=C[0].size||(D?5:10),r=!!D,h=!D,q,p="",m=false,u={click:function(i){B=A.index(this);if(i){i.preventDefault()}if(D){C.trigger("focus");u[i.shiftKey?"shift":i.ctrlKey?"ctrl":"one"](this)}else{u.one(this)}if((h||(D&&!i.shiftKey))&&l!==B){l=B;C.trigger("change")}},close:function(){if(!m&&l!==B){l=B;C.trigger("change")}else{u.click.call(A.eq(l))}h=true;r=false;m=false;C.trigger("close");return f.stop(true,true).slideUp(150,function(){k.css("zIndex","").addClass(E.closed).removeClass(E.open);f.css("marginTop",0)})},open:function(){r=true;h=false;C.trigger("focus").trigger("open");var i=d(document).height(),G=-y.outerHeight(true)-parseInt(C[0].wrapper.css("borderTopWidth"),10);if(k[0].offsetTop+s+50>i){G=i-(k[0].offsetTop+s)-50}if(G*-1>k[0].offsetTop+25){G=-k[0].offsetTop+25}k.css({zIndex:999}).addClass(E.open).removeClass(E.closed);f.stop(true,true).animate({marginTop:G},150).slideDown(150,function(){f.scrollTop(l*w/t)})},keydown:function(i){switch(i.which){case 8:i.preventDefault();p=!p?"":p.substring(0,p.length-1);u.search(i);break;case 9:p="";if(!D){u.close()}break;case 27:p="";if(!D){m=true;u.close()}break;case 38:case 40:i.ctrlKey=false;B=i.which===38?(B-1<0?0:B-1):(B+1>=A.length?A.length-1:B+1);u.click.call(A.eq(B)[0],i);break;default:break}},keypress:function(I){var H=0,G;if(!I.which){p="";return this}if(I.which===13){p="";if(!D){u[k.hasClass(E.open)?"close":"open"]()}return this}I.preventDefault();p+=String.fromCharCode(I.which);u.search(I)},ctrl:function(){z[B].selected=!z[B].selected;A.eq(B).toggleClass(E.selected)},search:function(H){var G=0,i=o.length;for(;G<i;G++){if(o[G].substring(0,p.length)===p){return u.click.call(A.eq(G)[0],H)}}},shift:function(){var i=l>B?B:l,G=l>B?l:B;z.each(function(){this.selected=false});A.removeClass(E.selected);for(;i<=G;){z[i].selected=true;A.eq(i++).addClass(E.selected)}},one:function(i){z.each(function(){this.selected=false})[B].selected=true;A.removeClass(E.selected).eq(B).addClass(E.selected);v.text(d(i).text());f.scrollTop(B*w/t)}},F=d("<div>",{"class":E.wrapper}).prependTo(k),y=D?d():d("<div>",{"class":E.value,css:{position:"relative"},html:'<div></div><div class="'+E.arrow+'"></div>'}).appendTo(F).css({verticalAlign:"bottom"}),v=y.children("div:first-child"),s=0,x=C[0].offsetWidth,w=0,f=d("<ul>",{"class":E.container,css:{overflowX:"hidden",overflowY:"scroll",position:"relative",whiteSpace:"nowrap",width:x}}).appendTo(F),z=null,A=null,o=[],n=function(){var i=this.nodeName.toLowerCase(),G=this.label||this.textContent||this.innerText;q+='<li class="'+E[i]+" "+(this.disabled&&E.disabled||"")+" "+(this.selected&&E.selected||"")+'">';if(i==="option"){q+=G;if(this.selected){v.text(G)}}else{q+="<label>"+G+"</label><ul>";d(this).children().each(n);q+="</ul>"}q+="</li>"},g=function(){q="";p="";o=[];j=C[0].disabled;C.children().each(n);f.show().html(q);w=d("li."+E.option+":eq(0)",f).outerHeight(true)*t;f.css({display:D?"block":"none",maxHeight:w});s=f.outerHeight(true);z=d("option:not(:disabled)",C);A=f.find("li."+E.option+":not(."+E.disabled+")").bind("click",u.click).each(function(){o.push(d(this).text().toLowerCase())});if(!D&&!v.text()){v.text(C.find("option[selected]").text()||C.find("option:eq(0)").text())}if(j){k.addClass(E.disabled)}else{k.removeClass(E.disabled)}k.css({width:f.outerWidth(true)});return true};C.css({opacity:0,position:"absolute",top:0,zIndex:-999}).bind({keydown:u.keydown,keypress:u.keypress,rebuild:g});k.addClass(D?E.multiple+" "+E.open:E.single+" "+E.closed).bind("mousedown",false);g();if(!j){A.each(function(i){if(d(this).hasClass(E.selected)){l=B;B=i;return false}})}if(!D){f.css({position:"absolute"});d(document).bind("click",function(i){i=d(i.target);if(i.closest("div.plum-form."+E.select)[0]!==k[0]){if(!D&&r){u.close()}return this}if(j||i.hasClass(E.disabled)||i.is("label")){return this}u[r?"close":"open"]()})}},checkAllBoxes:function(g){var h=this.options.classes,f=this.form;f.plum.filter(function(){return this.type==="checkbox"&&!this.disabled&&d(this).hasClass("check-all")&&(!g||d(this).hasClass("group-"+g))}).each(function(){var k=d(this),m=k.parent(),l=k.attr("class").match(/(?:(?:.+\s+)+)?group-([^\s]+)/)[1],i=f.plum.filter(function(){return this.type==="checkbox"&&!this.disabled&&this.name===l&&!d(this).hasClass("check-all")}),j=i.filter(function(){return this.checked});if(j.length===0){this.checked=false;m.removeClass(h.checked+" "+h.mixed)}else{this.checked=true;if(j.length===i.length){m.removeClass(h.mixed).addClass(h.checked)}else{m.addClass(h.checked+" "+h.mixed)}}})},inFieldLabels:function(i,h){var g=this.options,f;h.bind("mouseover mouseout",function(){i.parent().toggleClass(g.classes.hover)});if(!g.labels||/^(?:button|checkbox|file|select-one|select-multiple|submit|radio|reset)$/.test(i[0].type.toLowerCase())){return}f=d("<label>",{"class":g.classes.label,css:{display:"block",height:i[0].clientHeight,left:-parseInt(i.css("borderLeftWidth"),10)+parseInt(i.css("paddingLeft"),10),position:"absolute",top:-parseInt(i.css("borderTopWidth"),10),whiteSpace:"nowrap"},text:h.text()}).appendTo(i.parent()).bind("mousedown",function(){i.trigger("focus");return false});if(i.parent().parent().is("label")){i.parent().insertAfter(h)}h.remove();if(i[0].value){f.hide().css({opacity:0})}i.bind("focus blur",function(j){if(!this.value){f.show().stop().animate({opacity:j.type==="focus"?0.3:1},250)}else{f.hide().css({opacity:0})}}).bind("keypress",function(j){if(j.which){f.hide().css({opacity:0})}})},submitForm:function(k){var g=k.data.plum,f=g.options,j=d(this),i=d(":file:plum",this).parent().parent(),h=i.find("li"),l=f.classes;this.plum.trigger("blur");if(d(":input:plum:invalid",this).plum("form.shake").length||f.submit.call(this)===false){return false}if(!f.ajax){return this}d(":submit",this).attr("disabled",true);if(d.support.filexhr){k.preventDefault();g.uploadFile(h,function(){d.ajax(j[0].action,{type:j[0].method||"GET",data:j.serialize(),dataType:f.json?"json":"html",success:function(m){if(f.reset){g.resetForm()}d(":submit",j).attr("disabled",false);f.complete.call(j[0],m)}})});return this}this.target="plum-form";h.filter(function(){return !d(this).hasClass(l.error)}).toggleClass(l.waiting+" "+l.loading);b.unbind("load").bind("load",function(){if(f.reset){g.resetForm()}d(":submit",j).attr("disabled",false);f.complete.call(j[0],d(this).contents().find("body").html());i.each(function(){d(":file",this).slice(0,-1).remove();d("ul."+l.filelist+" li",this).fadeOut(300,function(){d(this).remove()})})});return this},resetForm:function(){var f=this,g=this.options.classes;this.form.reset();this.form.plum.each(function(){var j=d(this),h=j.parent(),i,k;switch(this.type){case"checkbox":case"radio":if(this.checked){h.addClass(g.checked)}else{h.removeClass(g.checked+" "+g.mixed)}break;case"file":f.queue=[];i=h.find(":file");i.each(function(l){if(l<i.length-1){d(this).remove()}});d("li",h.next()).each(function(){var l=d(this).fadeOut(300,function(){l.remove()})});break;case"reset":break;case"select-multiple":case"select-one":k=h.find("li."+g.option).removeClass(g.selected);d("option",this).each(function(n){var o=d(this),l=k.eq(n);if(this.selected){l.addClass(g.selected);if(j[0].type==="select-one"){o.closest("div.plum-form").find("div."+g.value+" div:first-child").text(o.text())}}});break;default:j.trigger("blur");break}h.children("div."+g.info).removeClass(g.error+" "+g.success)});this.checkAllBoxes()},uploadFile:function(h,l){if(!h.length){return l()}var j=this,n=this.options,i=n.classes,k=h.eq(0),f=this.queue.shift(),g=d("."+i.progress,k).slideDown(300),m=new XMLHttpRequest();m.upload.addEventListener("loadstart",function(o){k.toggleClass(i.waiting+" "+i.loading);n.file.start.call(k,d.extend(o,{progressbar:g,percent:o.loaded/o.total*100}))},false);m.upload.addEventListener("progress",function(o){n.file.progress.call(k,d.extend(o,{progressbar:g,percent:o.loaded/o.total*100}))},false);m.upload.addEventListener("load",function(o){n.file.complete.call(k,d.extend(o,{progressbar:g,percent:100}));k.fadeOut(300,function(){if(j.queue.length){j.uploadFile(h.slice(1),l)}else{l()}})},false);m.open("POST",this.form.action,true);m.setRequestHeader("Content-Type",f.type);m.setRequestHeader("X-File-Name",f.name);m.setRequestHeader("X-Requested-With","XMLHttpRequest");m.send(f)}};function e(g,h,f){if(typeof this[h]==="function"){this[h](g,f)}return g}e.prototype={methods:{email:/^(?:(?:"[^"]+")|(?:'[^']+')|(?:[\w!#$%&'*+\-\/=?\^_`{|}~]+))@(?:[\w](?:\-?[\w]+)?\.)*?[\w]+(?:\.[a-z]{2})?\.[a-z]{2,4}$/,tel:/^(?:(?:\+?1\s*(?:[\.\-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[\.\-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[\.\-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/,url:/^(?:https?:\/\/)?(?:[\w](?:\-?[\w]+)?\.)*?[\w]+(?:\.[a-z]{2})?\.[a-z]{2,4}(\/.+)?$/},shake:function(j,f){var h=j.closest("div.plum-form"),g=1;if(typeof h.data("shaking")!=="undefined"){h.css("left",h.data("shaking")).removeData("shaking")}h.data("shaking",h.css("left")).stop(true);for(;g<5;g++){h.animate({left:"-=15"},50).animate({left:"+=15"},50)}},verify:function(h,f){var g=this,j=h.data("classes"),i=d('<div class="'+j.info+'">').insertAfter(h);h.bind("blur",function(){var k=true;if("min" in f){k=k&&this.value.length>=f.min}if("max" in f){k=k&&this.value.length<=f.max}if("method" in f){k="min" in f&&!f.min&&!this.value?true:k&&g.methods[f.method].test(this.value)}if(typeof f==="function"){k=!!f.call(this)}else{if(typeof f==="string"){k=this.value===f}}if(!k){h.data("invalid",true);i.removeClass(j.success).addClass(j.error)}else{h.data("invalid",false);i.removeClass(j.error).addClass(j.success)}})}};c.form=function(g,h){if(typeof g==="string"){return this.each(function(){var i=d(this);if(i.is(":plum")){return new e(i,g,h)}return true})}var f=d();this.each(function(){var j,i=d(this);if(this.nodeName.toLowerCase()==="form"){j=this;if(!j.plum){j.plum=d()}j.plum=j.plum.add(d(":input:not(:hidden)",this))}else{j=(i.closest("form")||i.find("form"))[0];if(!j.plum){j.plum=d()}j.plum=j.plum.add(i)}f=f.add(j)});f.each(function(){return new a(this,g)});return this};c.Form=a;c.FormVerify=e}(jQuery,plum));
