/*!
 * jQuery.buttonCaptcha - plugin that protects your site from robots using jQuery.
 * http://www.gobwas.com/bcaptcha
 * Version: 1.1
 *
 * Copyright 2011, Sergey Kamardin.
 * Licensed under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Date: Mon Jun 7 17:15:07 2011 +0300.
 * Location: Moscow, Russia.
 * Contact: gobwas[a]gobwas.com
 */

(function(a){a.fn.buttonCaptcha=function(x){var c={codeWord:"gbws",codeZone:"com",hideButton:true,hideCaptcha:true,lockButton:true,scrollToButton:false,verifyInput:true,verifyName:"gbws_captcha_input",captchaHeader:"Are you a robot?",captchaTip:'Drag letters from left to right, to get word "%code_word%". Thanks!',captchaUnlocked:"Unlocked!"};a.extend(c,x);c.captchaTip=c.captchaTip.replace("%code_word%","<b>"+c.codeWord+"</b>");c.letters=c.codeWord.length;var v=["a","b","c","d","e","f","g","h","i",
"j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],d={structure:{outer:{top:a("<div/>").attr("class","captcha_top"),lock:a("<div/>").attr("class","captcha_lock"),captcha:a("<div/>").attr("class","captcha_gbws")},inner:{left:a("<div/>").attr("class","captcha_left"),blue:a("<div/>").attr("class","captcha_blue").html('<div class="captcha_delshadow"></div>'),white:a("<div/>").attr("class","captcha_white"),right:a("<div/>").attr("class","captcha_right"),end:a("<div/>").css("clear","both")},
buttons:{retake:a("<div/>").attr("class","captcha_retake"),showtip:a("<div/>").attr("class","captcha_showtip").html(c.captchaHeader)},contains:{tip:a("<div/>").attr("class","captcha_tip").html(c.captchaTip),end:a("<div/>").css("clear","both"),zone:a("<div/>").attr("class","captcha_zone")}},lettersDivs:[],lettersSprite:{}};d.lettersSprite=function(){var i={},f;for(f in v)i[v[f]]=f*-18;return i}();d.lettersDivs=function(){if(c.codeWord.match(/[a-zA-Z0-9]+/)!=null){for(var i=c.codeWord,f=[],m=0;m<i.length;m++){findLetter=
i.charAt(m).toLowerCase();var q=d.lettersSprite[findLetter];q=a("<div/>").attr("class","letter").css("background-position",q+"px 0");f.push(q)}return f}}();(function(){if(c.codeZone.match(/[a-zA-Z0-9]{2,4}/)!=null){var i=c.codeZone;a("<div/>").attr("class","zone_dot").appendTo(d.structure.contains.zone);for(var f=0;f<i.length;f++){findLetter=i.charAt(f).toLowerCase();var m=d.lettersSprite[findLetter];a("<div/>").attr("class","zone_letter").css("background-position",m+"px 0").appendTo(d.structure.contains.zone)}}})();
for(var r=0;r<this.length;r++)(function(i){function f(j,g){for(var h=a("<div/>").attr("id","letters_"+b.captchas).attr("class","letters"),e=[];e.length<d.lettersDivs.length;){var l=Math.floor(Math.random()*(d.lettersDivs.length-1-0+1))+0;if(a.inArray(l,e)==-1){a(d.lettersDivs[l]).clone().attr("id","letter_"+l+"_"+b.captchas).appendTo(h).draggable({revert:true,revertDuration:300,cursor:"pointer",cursorAt:{top:12,left:9},containment:"#"+g,scroll:false,snap:".basket",snapMode:"inner"});e.push(l)}}a(h).appendTo(j)}
function m(j){var g=a("<div/>").attr("id","baskets_"+b.captchas).attr("class","baskets"),h;for(h in d.lettersDivs){var e=a("<div/>").attr("id","basket_"+h+"_"+b.captchas).attr("class","basket");Number(h)!=d.lettersDivs.length-1&&e.css("border-right","none");a(e).droppable({hoverClass:"basket-hover",drop:function(l,p){if(!a(this).droppable("option","disabled")){var o=a(p.draggable).clone().css({left:0,top:0});a(p.draggable).draggable({revert:false}).css({left:0,top:0}).animate({width:0,opacity:0},
600);a(this).droppable({disabled:true}).attr("class","basket_closed").append(o);var n=a(p.draggable).attr("id");n=n.split("_");var k=a(this).attr("id");k=k.split("_");if(n[1]==k[1]&&n[2]==k[2]){a(this).fadeOut(100,function(){a(this).fadeIn(500)});a(o).attr("class","letter_blue");b.goodLetters++}else{a(this).effect("pulsate",100);a(o).attr("class","letter_red")}if(c.verifyInput===true){b.stepsLength++;b.steps[k[1]]=n[1];b.stepsLength==c.letters&&q()}b.goodLetters==c.letters&&y()}}}).appendTo(g)}c.codeZone!=
false&&a(d.structure.contains.zone).clone().appendTo(g);h=a(d.structure.contains.end).clone().appendTo(g);a(g).appendTo(j).css("width",d.lettersDivs.length*18+d.lettersDivs.length*2+h.css("width")+"px")}function q(){for(var j in b.steps)a(b.verify).val(a(b.verify).val()+c.codeWord.charAt(b.steps[j]))}function y(){c.lockButton===true&&a(b.button).removeAttr("disabled");if(c.hideCaptcha===true)a(b.captcha).fadeOut(1E3,function(){c.hideButton===true&&a(b.button).fadeIn(600,function(){c.scrollToButton===
true&&a.scrollTo(b.button,500)})});else{a("<div/>").attr("class","captcha_human").append(b.lock).appendTo(b.blue);b.lock.attr("class","captcha_unlock");b.top.html(c.captchaUnlocked);b.retake.remove();c.hideButton===true&&a(b.button).fadeIn(300,function(){c.scrollToButton===true&&a.scrollTo(b.button,500)})}}var b={captchas:r,button:i,captcha:null,verify:null,steps:[],stepsLength:0,goodLetters:0,blue:null,white:null,captcha:null,lock:null,top:null,showTip:null,retake:null};(function(j){var g=a("<div/>").attr("class",
"captcha_gbws_wrap").attr("id","captcha_gbws_wrap_"+b.captchas),h=d.structure.outer.captcha.clone().attr("id","captcha_gbws_"+b.captchas),e=d.structure.buttons.showtip.clone().attr("id","captcha_gbws_top_showtip_"+b.captchas).bind("click",function(){l.toggle("blind",300)}),l=d.structure.contains.tip.clone().attr("id","captcha_gbws_top_tip_"+b.captchas),p=d.structure.outer.lock.clone(),o=d.structure.outer.top.clone().attr("id","captcha_gbws_top_"+b.captchas).append(p).append(e).append(d.structure.contains.end.clone()).append(l),
n=d.structure.buttons.retake.clone().bind("click",function(){for(var s=a(b.captcha).find(".letter, .letter_blue, .letter_red, .basket, .basket_closed"),t=0,u=0;u<s.length;u++){t+=150;(function(z,w){setTimeout(function(){a(s[w]).stop().hide("shake",150,function(){a(s[w]).remove()})},z)})(t,u)}setTimeout(function(){a("#"+a(b.blue).attr("id")+" .letters").remove();a("#"+a(b.white).attr("id")+" .baskets").remove();m(b.white);f(b.blue);b.steps=[];b.stepsLength=0;b.goodLetters=0},t+150)});b.top=o;b.lock=
p;b.showTip=e;b.retake=n;for(var k in d.structure.inner){e=a(d.structure.inner[k]).clone().attr("id","captcha_"+k+"_"+b.captchas).appendTo(h);if(k=="blue"){b.blue=e;f(e,"captcha_gbws_"+b.captchas)}else if(k=="white"){b.white=e;e.append(n);m(e)}}o.appendTo(g);h.appendTo(g);d.structure.contains.end.clone().appendTo(g);g.insertBefore(j);l.toggle("blind",1);o.css("width",h.width());g.find(" > *").disableSelection();b.captcha=g;if(c.verifyInput===true)if(a(b.button).parents("form:first").length>0){j=a("<input/>",
{type:"hidden",name:c.verifyName,id:"input_gbws_"+b.captchas}).attr("class","input_gbws");a(b.button).parents("form:first").append(j);b.verify=j}})(b.button);c.hideButton===true&&a(b.button).fadeOut(300);c.lockButton===true&&a(b.button).attr("disabled","true")})(this[r]);return this}})(jQuery);
