/**
 * A jQuery plugin to style form elements
 *
 * @package      Plum
 * @version      1.2.3
 * @author       RoboCréatif, LLC
 * @copyright    2011
 * @date         July 12, 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(e){e.support.file=window.File&&window.FileList;e.support.xhr=window.XMLHttpRequest&&window.XMLHttpRequestUpload;e.expr[":"].plum=function(g){return e(g).parent().hasClass("plum-form")};var f={ajax:false,action:null,json:false,labels:false,button:"Choose a file...",fileTypes:[],fileItem:'<span class="filename">{filename}</span><span class="remove">&times;</span><span class="filesize">{filesize}</span><div class="progress"><div></div></div>',filestart:function(g){},fileprogress:function(g){g.progressbar.children().css("width",g.percent+"%")},filecomplete:function(g){},maxFiles:5,maxSize:5242880,messages:{size:"Please choose a file smaller than {filesize}.",type:"This file type is not allowed."},submit:function(){},complete:function(g){},classes:{arrow:"select-arrow",button:"button",checkbox:"checkbox",checked:"checked",closed:"closed",container:"select-container",disabled:"disabled",file:"file",filelist:"filelist",focus:"focus",error:"error",hover:"hover",info:"info",input:"input",label:"label",loading:"loading",mixed:"mixed",multiple:"multiple",open:"open",optgroup:"optgroup",option:"option",password:"password",progress:"progress",radio:"radio",remove:"remove",reset:"reset",submit:"submit",text:"text",textarea:"textarea",select:"select",selected:"selected",single:"single",success:"success",value:"select-value",verify:"verify",waiting:"waiting",wrapper:"select-wrapper"}},c=e('<iframe name="plum-frame"/>').css({border:0,left:"-9999em",height:0,position:"absolute",top:"-9999em",width:0}),d={phone:/^(?:(?:\+?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+))?$/,email:/^[\w._%+-]+@[\w][\w.-]*[\w]\.[a-z]{2,4}$/},b={add:function(g){var h=this,i=this.opt.classes;this.file=g;e("<li>",{"class":(g.error?i.error:i.waiting)+" plum-upload-"+(this.index-1),css:{display:"none"},html:this.opt.fileItem.replace(/{filename}/g,g.name).replace(/{filesize}/g,g.size).replace(/{filetype}/g,g.type)+g.error}).appendTo(this.filelist).fadeIn(300).find("."+i.remove).bind("click",function(){var j=e(this).closest("li").fadeOut(300,function(){j.remove()}),k=j.attr("class").match(/\s*plum-upload-(\d+)/)[1];typeof h.queue[k]!=="undefined"&&h.queue.splice(k,1);!e.support.file&&e(":file.plum-upload-"+k).remove()})},complete:function(h){var g=this.e[0].opt;typeof g.complete==="function"&&g.complete.call(this,h)},create:function(g){var h=e(this).closest("form")[0],i;if(!h){return false}if(!h.ready){e(h).bind("submit",b.submit);h.e=e();h.ready=true;g.ajax&&(!e.support.file||!e.support.xhr)&&(h.target="plum-frame");h.action=g.action||h.action||window.location.href}h.e=h.e.add(this);this.opt=g;this.tag=this.tagName.toLowerCase();var j=g.classes,i=e(this).bind("blur focus",function(k){k.type==="blur"?e(this).parent().removeClass(j.focus).find("li").removeClass(j.focus):!this.disabled&&e(this).parent().addClass(j.focus)});i.wrap(b.wrap.call(this)).parent().bind({mouseenter:function(){e(this).addClass(j.hover)},mouseleave:function(){e(this).removeClass(j.hover)}});(typeof a[this.type]==="function"?a[this.type]:(typeof a[this.tag]==="function"?a[this.tag]:a.input)).call(this);if(!e.browser.msie||e.browser.version>7){i.css("width","100%")}return h},css:function(g){g.style.width="";return{left:"50%",marginLeft:-g.offsetWidth/2,marginTop:-g.offsetHeight/2,opacity:0,position:"absolute",top:"50%"}},group:function(h,i){var g=this;g.e.filter(function(){return this.type==="checkbox"&&!this.disabled&&e(this).hasClass("check-all")&&(!h||h===e(this).attr("class").match(/\s*group-([^\s]+)/)[1])}).each(function(){var m=h?h:e(this).attr("class").match(/\s*group-([^\s]+)/)[1],j=g.e.filter(function(){return this.type==="checkbox"&&!this.disabled&&this.name===m&&!e(this).hasClass("check-all")}),k=j.filter(function(){return this.checked});if(k.length===0){this.checked=false;e(this).parent().removeClass(i.checked+" "+i.mixed)}else{var l=e(this).parent();this.checked=true;k.length===j.length?l.removeClass(i.mixed).addClass(i.checked):l.addClass(i.checked+" "+i.mixed)}})},label:function(h,g){e("label:not(."+g.label+")",this).each(function(){var i=this.htmlFor?e("#"+this.htmlFor):e(":input:plum",this),k=i.parent();e(this).bind("mouseenter mouseleave",function(l){if(i){if(l.type==="mouseenter"){k.addClass(g.hover)}else{k.removeClass(g.hover)}}});if(!h){return}switch(i[0].type){case"text":case"password":case"textarea":var j=e("<label/>",{"class":g.label,text:this.innerHTML.replace(/<.+>(.+<\/.+>)?/g,"")}).appendTo(k).addClass(g.label).css({display:"block",height:"100%",left:parseInt(i.css("paddingLeft"))/2,position:"absolute",top:0,width:"100%"}).bind("click",function(){i.trigger("focus")});e(this).after(k).remove();if(i[0].value){j.hide().css("opacity",0)}i.bind({focus:function(){if(!this.value){j.show().stop().animate({opacity:0.3},250)}},blur:function(){if(!this.value){j.show().stop().animate({opacity:1},250)}else{j.hide().css("opacity",0)}},keypress:function(l){l.which&&j.hide().css("opacity",0)}});break;default:break}})},shake:function(){this.each(function(){var h=e(this).closest("div.plum-form").stop(true,true);for(var g=1;g<5;g++){h.animate({marginLeft:"-=15"},50).animate({marginLeft:"+=15"},50)}h.animate({marginLeft:0},50)})},size:function(g){g={B:g};g.K=g.B/1024;g.M=g.K/1024;g.G=g.M/1024;return g.G>1?Math.round(g.G)+" GB":(g.M>1?Math.round(g.M)+" MB":(g.K>1?Math.round(g.K)+" KB":g.B+" bytes"))},submit:function(m){var h=this.e[0].opt,n=h.classes;this.e.trigger("blur");var l=e("."+n.verify,this);if(l.length){b.shake.call(l);return false}if(typeof h.submit==="function"){var g=h.submit.call(this);if(g===false){return false}}if(h.ajax){var k=this,j=e(":file:plum",this);if(e.support.file&&e.support.xhr){m.preventDefault();j.val("");var i=e(this).serialize();if(i){e.ajax(this.action,{type:this.method||"GET",data:i,dataType:h.json?"json":"html",success:function(o){j.length?b.upload.call(j[0],j,o):b.complete.call(k,o)}})}else{j.length?b.upload.call(j[0],j):b.complete.call(k)}}else{j.parent().parent().find("ul."+n.filelist+" li:not(."+n.error+")").addClass(n.loading);c.unbind("load").bind("load",function(){var o=e(this).contents().find("body").html();typeof k.complete==="function"&&k.complete(h.json?e.parseJSON(o):o);j.val("").each(function(){var q=e(this).parent().parent(),p=e("ul."+n.filelist+" li",q);p.each(function(){e(this).fadeOut(300,function(){e(this).remove()})});e(":file:eq(0)",q).css("zIndex",999).removeAttr("tabindex");e(":file:gt(0)",q).remove()})})}}},upload:function(i,k){var n=this.opt.classes,h=this.queue[0],g=this;if(!h){i=i.slice(1);return i.length?b.upload.call(i[0],i,k):b.complete.call(e(g).closest("form")[0],k)}var m=new XMLHttpRequest(),j=e(this).parent().next().children("li:not(."+n.error+")").eq(0),l=e("."+n.progress,j).slideDown(300);m.upload.addEventListener("loadstart",function(o){j.removeClass(n.waiting).addClass(n.loading);typeof g.opt.filestart==="function"&&g.opt.filestart(e.extend({list:j,progressbar:l,percent:o.loaded/o.total*100},o))},false);m.upload.addEventListener("progress",function(o){typeof g.opt.fileprogress==="function"&&g.opt.fileprogress(e.extend({list:j,progressbar:l,percent:o.loaded/o.total*100},o))},false);m.upload.addEventListener("load",function(o){typeof g.opt.filecomplete==="function"&&g.opt.filecomplete(e.extend({list:j,progressbar:l,percent:o.loaded/o.total*100},o));j.fadeOut(300,function(){j.remove();g.queue=g.queue.slice(1);if(g.queue.length){b.upload.call(g,i)}else{i=i.slice(1);i.length?b.upload.call(i[0],i,k):b.complete.call(e(g).closest("form")[0],k)}})},false);m.open("POST",e(this).closest("form")[0].action,true);m.setRequestHeader("Content-Type",this.file.type);m.setRequestHeader("X-File-Name",this.file.name);m.setRequestHeader("X-Requested-With","XMLHttpRequest");m.send(h)},verify:function(g){if(!this.length){return this}var h=this[0].opt.classes;return this.bind("blur",function(){var j=true;if(typeof d[g]!=="undefined"){j=this.value.match(d[g])}else{if(typeof g==="object"){var i=this.tagName.toLowerCase()==="select"?e(":selected",this).length:this.value.length;if("min" in g){j=j&&i>=g.min}if("max" in g){j=j&&i<=g.max}}else{if(typeof g==="function"){j=g.call(this)}}}j?e(this).removeClass(h.verify).next().removeClass(h.error).addClass(h.info+" "+h.success):e(this).addClass(h.verify).next().removeClass(h.success).addClass(h.info+" "+h.error)}).after('<div class="'+h.info+'"/>')},wrap:function(){var i=e(this).css("position"),h=this.opt.classes,g=this.type in {button:"",submit:"",reset:"",file:"",checkbox:"",radio:""}||e.browser.msie&&parseInt(e.browser.version)===7;return'<div title="'+this.title+'" dir="'+this.dir+'" style="float:'+e(this).css("float")+";position:"+(i==="static"?"relative":i)+(g?"":";width:"+e(this).width()+"px")+'" class="plum-form '+h[this.tag]+(h[this.type]&&h[this.type]!==h[this.tag]?" "+h[this.type]:"")+(this.checked?" "+h.checked:"")+(this.disabled?" "+h.disabled:"")+(this.multiple?" "+h.multiple:"")+(this.selected?" "+h.selected:"")+'"/>'}},a={checkbox:function(){var g=this.opt.classes;e(this).css(b.css(this)).bind("click",function(){var i=e(this),j=i.closest("form")[0],l=i.parent(),h=this.name,k=i.hasClass("check-all")?i.attr("class").match(/\s*group-([^\s]+)/)[1]:false;if(!k){l.toggleClass(g.checked);b.group.call(j,k||h,g)}else{h=j.e.filter(function(){return this.type==="checkbox"&&!this.disabled&&(this.name===k||e(this).hasClass("check-all group-"+k))});if(this.checked||l.hasClass(g.mixed)){h.each(function(){this.checked=true;e(this).parent().removeClass(g.mixed).addClass(g.checked)})}else{h.each(function(){this.checked=false;e(this).parent().removeClass(g.checked+" "+g.mixed)})}}})},file:function(){var m=this.opt.classes,i=this.offsetWidth,k=-i+(e.browser.opera&&130||e.browser.safari&&180||e.browser.msie&&138||25),h=e(this),l=h.parent(),j=0,g={change:function(q){if(this.opt.maxFiles&&this.queue.length>=this.opt.maxFiles){return false}var p=e(this),o=this.opt,n=o.messages,r={name:this.value,size:"",type:"",error:""};if(e.support.file){if(!o.ajax){this.queue=[];p.closest("div.plum-form").next().children().remove()}e.each(this.files,function(t,s){r={name:s.name||s.fileName,size:s.size||s.fileSize,type:s.type||s.fileType};r.error=o.fileTypes.length&&e.inArray(r.type,o.fileTypes)<0?"<div>"+n.type+"</div>":"";r.error=!r.error&&o.maxSize&&r.size>o.maxSize?"<div>"+n.size.replace(/{filesize}/g,h.maxSize)+"</div>":r.error;r.size=b.size(r.size);!r.error&&p[0].queue.push(this)&&p[0].index++;b.add.call(p[0],r);return p[0].queue.length!==o.maxFiles});o.ajax&&(this.value="")}else{this.queue.push(r.name);this.index++;p.css("zIndex",-998).unbind("change",g.change);p.after(p.clone().val(""));p=p.next().removeClass("plum-upload-"+(this.index-1)).addClass("plum-upload-"+this.index).css("zIndex",998).bind("change",g.change)[0];p.opt=o;p.filelist=this.filelist;p.index=this.index;p.maxSize=this.maxSize;p.queue=this.queue;b.add.call(this,r)}},mousemove:function(n){e(":file",this).eq(-1).css({left:k+n.pageX-e(this).offset().left,top:n.pageY-e(this).offset().top-10})},focus:function(){this.wrap.addClass(m.focus)},blur:function(){this.wrap.removeClass(m.focus)},hover:function(){e(this).toggleClass(m.hover)}};this.queue=[];this.maxSize=b.size(this.opt.maxSize);this.index=0;this.wrap=h.wrap('<div class="plum-form '+m.input+" "+m.button+'"/>').parent().css({overflow:"hidden",position:"relative"}).bind({mouseenter:g.hover,mouseleave:g.hover,mousemove:g.mousemove});this.button=e("<input>",{css:{verticalAlign:"top"},tabindex:-1,type:"button",value:this.opt.button}).prependTo(this.wrap);this.filelist=e("<ul/>",{"class":m.filelist}).appendTo(l);h.attr("multiple",true).css({left:k,opacity:0,position:"absolute",top:0,width:10,zIndex:998}).addClass("plum-upload-"+this.index).unbind("focus blur").bind({change:g.change,focus:g.focus,blur:g.blur})},input:function(){if(this.type==="textarea"){e(this).css({resize:"none",verticalAlign:"bottom"})}},radio:function(){var i=this.opt.classes,g=this.name,h=e(this);h.css(b.css(this)).bind("click",function(){h.closest("form")[0].e.filter(function(){return this.type==="radio"&&this.name===g}).parent().removeClass(i.checked);h.parent().addClass(i.checked)})},reset:function(){var h=this.opt.classes,g=e(this);g.bind("click",function(j){j.preventDefault();var i=g.closest("form")[0];i.reset();i.e.each(function(){switch(this.type){case"text":case"password":case"textarea":e(this).trigger("blur");break;case"checkbox":case"radio":if(this.checked){e(this).parent().addClass(h.checked)}else{e(this).parent().removeClass(h.checked+" "+h.mixed)}break;case"file":this.queue=[];var l=this.filelist.prev().find(":file").val("");l.each(function(n){n<l.length-1&&e(this).remove()});e("li",this.filelist).each(function(){e(this).fadeOut(300,function(){e(this).remove()})});break;case"select-multiple":case"select-one":var k=this.type,m=e(this).parent().find("li."+h.option);e("option",this).each(function(n){if(this.selected){k==="select-one"&&e(this).closest("div.plum-form").find("div."+h.value+" div:first-child").text(e(this).text());m.eq(n).addClass(h.selected)}else{m.eq(n).removeClass(h.selected)}});break;default:break}e(this).removeClass(h.verify).parent().children("div."+h.info).removeClass(h.error+" "+h.success)});b.group.call(i,null,h)})},select:function(){var B=this.opt.classes,o={f:e(this).css("float"),w:this.offsetWidth},v={keydown:function(F){switch(F.which){case 9:case 27:!A&&h.trigger("blur")&&v.close();u=null;break;case 38:case 40:A&&F.shiftKey&&n===false&&(n=m);m=F.which===38?(m-1<0?0:m-1):(m+1>=D-1?D-1:m+1);v.click(F,q.eq(m)[0]);break;default:break}},keypress:function(F){if(!F.which||F.which===13){return this}F.preventDefault();if(F.which===8){u=u===null?u:u.substring(0,u.length-1)}var G=String.fromCharCode(F.which);u=u===null?G:u+G;m=v.search(u)||m;v.click(F,q.eq(m)[0])},search:function(G){for(var F in C){if(C[F].substr(0,G.length)===G){return F}}},click:function(H,F){var G=F||this;w=q.index(G);n=n!==false?n:w;p.hasClass(B.focus)||h.trigger("focus");q.removeClass(B.focus).eq(w).addClass(B.focus);if(A&&H.shiftKey){var J,I;if(w<n){J=w;I=n+1}else{J=n;I=w+1}q.removeClass(B.selected);g.removeAttr("selected");e("li."+B.option+":not(."+B.disabled+")",p).slice(J,I).addClass(B.selected);e("option:not(:disabled)",h).slice(J,I).each(function(){this.selected=true})}else{if(A&&H.ctrlKey){n=w;e(G).toggleClass(B.selected);if(e(G).hasClass(B.selected)){g.eq(w)[0].selected=true}else{g.eq(w)[0].selected=false}}else{if(F){n=w=m}else{u=null;n=m=w}q.removeClass(B.selected).eq(w).addClass(B.selected);g.each(function(){this.selected=false}).eq(w)[0].selected=true;!A&&i.text(q.eq(w).text())}}},open:function(H){if(j||e(H.target).hasClass(B.disabled)){return this}if(!e(H.target).closest("div.plum-form."+B.select).length||e(H.target).closest("div.plum-form."+B.select,l[0]).length){v.close();return this}l.toggleClass(B.closed+" "+B.open);if(l.hasClass(B.open)){l.css("zIndex",999);E.fadeOut(100);var G=e(document).height(),F=k+t+28>G?G-(k+t)-28:x;F=F*-1>k+20?-k+20:F;p.animate({marginTop:F,marginBottom:25},150).slideDown(150,function(){e(this).css({overflowX:"hidden",overflowY:"scroll"})})}else{v.close()}},close:function(){E.fadeIn(200);p.slideUp(150,function(){l.css("zIndex","");p.css("marginTop",0)})}},h=e(this).css({opacity:0,position:"absolute",top:0,zIndex:-999}).bind({keydown:v.keydown,keypress:v.keypress}),j=this.disabled,A=this.multiple,l=h.parent().bind("mousedown",function(F){F.preventDefault()}).addClass(A?B.open:B.single+" "+B.closed),z="",s=this.size||(A?5:10),x=-parseInt(l.css("borderTopWidth")),k=l.offset().top,t=0,u=null,C=[],w=false,n=false,r=function(){var G=this.tagName.toLowerCase(),F=this.label||this.textContent||this.innerText,H=this.disabled||j?" "+B.disabled:"",I=this.selected?" "+B.selected:"";z+='<li class="'+B[G]+H+I+'">';if(G==="option"){z+=F;I&&i.text(F)}else{z+="<label>"+F+"</label><ul>";e(this).children().each(r);z+="</ul>"}z+="</li>"},y=e("<div>",{"class":B.wrapper}).prependTo(l.css("float","left")),E=A?e():e("<div>",{"class":B.value,css:{position:"relative"},html:'<div></div><div class="'+B.arrow+'"></div>'}).appendTo(y),i=e("div:first-child",E),p=e("<ul>",{"class":B.container,css:{"white-space":"pre"},html:h.children().each(r)&&z}).appendTo(y),q=p.find("li."+B.option+":not(."+B.disabled+")").bind("click",v.click).each(function(){var F=this.textContent||this.innerText;C.push(F.toLowerCase())}),m=q.index(q.filter(function(){return e(this).hasClass(B.selected)})[0]),g=h.find("option:not(:disabled)"),D=g.length;p.css({maxHeight:e("li."+B.option,p).outerHeight()*s,minWidth:o.w,overflowX:"hidden",overflowY:"scroll",width:p.outerWidth()+e("div."+B.arrow,E).outerWidth()+16});l.css({"float":o.f,width:p.outerWidth()});t=p.outerHeight();!this.disabled&&!A&&e(document).bind("click",v.open);if(A){return}p.hide();!i.text()&&i.text(e("li."+B.option+":eq(0)",p).text());l.css({height:E.outerHeight()})}};plum.form=function(g,h){if(h){return b.verify.call(this,h)}(!e.support.file||!e.support.xhr)&&!e('iframe[name="plum-form"]').length&&c.appendTo("body");g=e.extend({},f,g);g.classes=e.extend({},f.classes,g.classes);g.messages=e.extend({},f.messages,g.messages);return this.each(function(){var i;if(e(this).is(":input")){!e(this).is(":plum,:hidden")&&(i=b.create.call(this,g))}else{e(":input:not(:plum,:hidden)",this).each(function(j){i=b.create.call(this,g)})}if(i){b.group.call(i,null,g.classes);b.label.call(i,g.labels,g.classes)}})}})(jQuery);
