(function(a){a.fn.jqPuzzle=function(b,p){var K={rows:srows,cols:scols,hole:shole,shuffle:true,numbers:numshow,language:"en",control:{shufflePieces:true,confirmShuffle:true,toggleOriginal:true,toggleNumbers:true,counter:true,timer:true,uscore:true,pauseTimer:false},success:{fadeOriginal:true,callback:undefined,callbackTimeout:300},animation:{shuffleRounds:3,shuffleSpeed:800,slidingSpeed:200,fadeOriginalSpeed:600},style:{gridSize:2,overlap:true,backgroundOpacity:0.1}},ca={en:{shuffleLabel:"Shuffle",
toggleOriginalLabel:"Original",toggleNumbersLabel:"Numbers",confirmShuffleMessage:"Do you really want to shuffle?",movesLabel:"moves",secondsLabel:"seconds",secoresLabel:"Current score"},fr:{shuffleLabel:"M\u00e9langer",toggleOriginalLabel:"Original",toggleNumbersLabel:"Nombres",confirmShuffleMessage:"Veux-tu vraiment m\u00e9langer?",movesLabel:"mouvements",secondsLabel:"secondes"},de:{shuffleLabel:"Mischen",toggleOriginalLabel:"Original",toggleNumbersLabel:"Nummern",confirmShuffleMessage:"Willst du wirklich mischen?",
movesLabel:"Z\u00fcge",secondsLabel:"Sekunden"},pt:{shuffleLabel:"Embaralhar",toggleOriginalLabel:"Original",toggleNumbersLabel:"Numeros",confirmShuffleMessage:"Tem certeza que deseja reembralhar?",movesLabel:"movimentos",secondsLabel:"segundos"}};if(b&&!b.hole&&(b.rows||b.cols))b.hole=(b.rows||K.rows)*(b.cols||K.cols);b=a.extend(true,{},K,b);p=a.extend(ca[b.language]||ca[K.language],p);var m=b.rows,h=b.cols,r=b.hole,q=b.control,R=b.success,n=b.animation,w=b.style;if(m<3||m>9)m=K.rows;if(h<3||h>9)h=
K.rows;if(r>m*h||r<1)r=m*h;r--;if(n.slidingSpeed<1)n.slidingSpeed=1;if(n.shuffleSpeed<1)n.shuffleSpeed=1;if(n.fadeOriginalSpeed<1)n.fadeOriginalSpeed=1;if(n.shuffleRounds<1)n.shuffleRounds=1;var ka=function(g){for(var e=0;e<g.length;e++){var c=e<r?e:e+1;if(g.eq(e).attr("current")!=c)return false}return true},la=function(g){for(var e=1,c=1;c<=m*h-1;c++)for(var f=c+1;f<=m*h;f++)e*=(g[c-1]-g[f-1])/(c-f);return Math.round(e)==1},ma=function(g,e){return parseInt(g)*h+parseInt(e)},W=function(g){return{row:Math.floor(g/
h),col:g%h}},X=function(g){var e=g.css("border-left-width");if(g.css("border-left-style")!="none")switch(e){case "thin":return 2;case "medium":return 4;case "thick":return 6;default:return parseInt(e)||0}return 0},na=function(g,e){var c,f,x=0,C,j=function(){F((new Date).getTime());C=setTimeout(j,g)},F=function(G){e(G-x-c)};this.start=function(){if(c)return false;c=(new Date).getTime();j()};this.stop=function(){if(!c)return false;clearTimeout(C);var G=(new Date).getTime();if(f)x+=G-f;F(G);c=f=undefined;
x=0};this.pause=function(){if(!c||f)return false;clearTimeout(C);f=(new Date).getTime()};this.resume=function(){if(!f)return false;x+=(new Date).getTime()-f;f=undefined;j()}};return this.filter("img").each(function(){var g=a(this),e=false,c=0,f=0,x,C=b.shuffle,j,F=r,G=a("<div/>").addClass("jqp-piece"),Y=a("<div/>").addClass("jqp-wrapper").append(G),y=a("<div/>").attr("class",g.attr("class")||"").addClass("jqPuzzle").append(Y);g.replaceWith(y);y.attr("id",g.attr("id")||"");var d={gui:{border:X(y),
padding:{left:parseInt(y.css("padding-left"))||0,right:parseInt(y.css("padding-right"))||0,top:parseInt(y.css("padding-top"))||0,bottom:parseInt(y.css("padding-bottom"))||0}},wrapper:{border:X(Y),padding:parseInt(Y.css("padding-left"))||0},piece:{border:X(G)}};y.removeAttr("id");y.replaceWith(g);g.one("load",function(){var Z=w.gridSize===0&&w.overlap,u=h*2*d.piece.border+(h-1)*w.gridSize,H=m*2*d.piece.border+(m-1)*w.gridSize;if(Z){u-=(h-1)*d.piece.border;H-=(m-1)*d.piece.border}g.css({width:"auto",
height:"auto",visibility:"visible"});var L=Math.floor((g.width()-u)/h),s=Math.floor((g.height()-H)/m);if(L<30||s<30)return false;u=h*L+u;H=m*s+H;var z=g.attr("src"),da=L+2*d.piece.border+w.gridSize,ea=s+2*d.piece.border+w.gridSize,M={piece:a.boxModel?0:2*d.piece.border,wrapper:a.boxModel?0:2*(d.wrapper.border+d.wrapper.padding),gui:{width:a.boxModel?0:2*d.gui.border+d.gui.padding.left+d.gui.padding.right,height:a.boxModel?0:2*d.gui.border+d.gui.padding.top+d.gui.padding.bottom}},$=function(t,A){var o=
{left:d.wrapper.padding+A*da,top:d.wrapper.padding+t*ea};if(Z){o.left-=A*d.piece.border;o.top-=t*d.piece.border}return o},fa=function(t,A){if(A){if(S.is(".jqp-disabled"))return false;if(e)return false;if(q.confirmShuffle&&c>0&&!window.confirm(p.confirmShuffleMessage))return false;e=true;if(x){B.removeClass("jqp-solved");P.fadeTo(n.fadeOriginalSpeed,w.backgroundOpacity,function(){P.remove().prependTo(I);T.removeClass("jqp-disabled")})}}j&&j.stop();x=false;C=true;f=c=0;Q&&Q.removeClass("jqp-disabled");
U&&U.val(c);V&&V.val(f);for(var o=[],i=0;i<t;){for(var k=[],l=0;l<m*h;l++)k[l]=l;k.splice(r,1);o[i]=[];for(l=0;l<m*h;l++)if(l==r)o[i][l]=r;else{var v=Math.floor(Math.random()*k.length);o[i][l]=k[v];k.splice(v,1)}if(i+1<t||la(o[i]))i++}var aa=0;for(i=0;i<t;i++){k=i+1==t;for(l=0;l<o[i].length;l++)if(l==r){if(k)F=r}else{v=o[i][l];if(v>r)v-=1;v=D.eq(v);var J=W(l);J=$(J.row,J.col);k&&v.attr("current",l.toString());A===undefined?v.css({left:J.left,top:J.top}):v.animate({left:J.left,top:J.top},A,null,function(){aa++;
if(aa==n.shuffleRounds*(m*h-1)){e=false;aa=0}})}}},I=a("<div/>").addClass("jqp-wrapper").css({width:u+M.wrapper,height:H+M.wrapper,borderWidth:d.wrapper.border,padding:d.wrapper.padding,margin:0,position:"relative",overflow:"hidden",display:"block",visibility:"inherit"});L=a("<div/>").addClass("jqp-piece").css({width:L+M.piece,height:s+M.piece,backgroundImage:"url("+z+")",borderWidth:d.piece.border,margin:0,padding:0,position:"absolute",overflow:"hidden",display:"block",visibility:"inherit",cursor:"default"}).append(a("<span/>"));
var D=a([]);for(s=0;s<m;s++)for(var N=0;N<h;N++){var ba=ma(s,N);if(ba!=r){var ga=$(s,N),ha=-1*(N*da+d.piece.border),ia=-1*(s*ea+d.piece.border);if(Z){ha+=N*d.piece.border;ia+=s*d.piece.border}D=D.add(L.clone().css({left:ga.left,top:ga.top,backgroundPosition:ha+"px "+ia+"px"}).attr("current",String(ba)).appendTo(I).children().text(ba+1).end())}}b.shuffle&&fa(1);var P=a("<div/>").css({width:u,height:H,left:d.wrapper.padding,top:d.wrapper.padding,backgroundImage:"url("+z+")",borderWidth:0,margin:0,padding:0,
position:"absolute",opacity:w.backgroundOpacity}).prependTo(I);z=a("<div/>").addClass("jqp-controls").css({visibility:"inherit",display:"block",position:"static"});var S,O,E;a("<a/>").css("cursor","default");var T=z.children(),Q,U,V;if(q.counter||q.timer){a("<input/>").val(0).css({width:"5ex",cursor:"default"}).attr("readonly","readonly");b.shuffle||Q.addClass("jqp-disabled")}z=a("<div/>").css({width:u+2*(d.wrapper.padding+d.wrapper.border),position:"absolute",display:"block",visibility:"inherit",
margin:"0px",padding:"0px",backgroundColor:"transparent"}).append("").append(z);var B=a("<div/>").attr("class",g.attr("class")||"").addClass("jqPuzzle").css({width:u+2*(d.wrapper.padding+d.wrapper.border)+M.gui.width,height:H+2*(d.wrapper.padding+d.wrapper.border)+M.gui.height,textAlign:"left",overflow:"hidden",display:"block"}).append(I).append(z);g.replaceWith(B);(u=g.attr("id"))&&B.attr("id",u);b.numbers||D.children().hide();Q&&Q.children("input").val(0);B.height();z.height();B.height(B.height()+
z.height());if(a.browser.msie)B[0].onselectstart=function(){return false};else B.mousedown(function(){return false});T.mousedown(function(){a(this).is(".jqp-disabled")||a(this).addClass("jqp-down")});T.mouseout(function(){a(this).removeClass("jqp-down")});T.mouseup(function(){a(this).removeClass("jqp-down")});D.click(function(){if(e)return false;if(x)return false;e=true;var t=a(this),A=t.attr("current"),o=W(A),i=W(F);if(Math.abs(o.row-i.row)+Math.abs(o.col-i.col)!=1)return e=false;o=$(i.row,i.col);
t.attr("current",String(F));F=A;C&&c++;U&&U.val(c);if(c==1){j||(j=new na(333,function(k){f=Math.floor(k/1E3);V&&V.val(f);a("#usermoves").text(c);a("#userseconds").text(f);if(c>500)c=500;if(f>2400){f=2400;e=true;j.stop()}k=(500-c)*(2400-f);a("#maxscore").text(k)}));j.start()}t.animate({left:o.left,top:o.top},n.slidingSpeed,null,function(){if(C)if(x=ka(D)){j&&j.stop();C=false;B.addClass("jqp-solved");if(c>500)c=500;if(f>2400)f=2400;var k=(500-c)*(2400-f);a("#userscore").text(k);a("#maxscore").text(k);
a("#usermoves").text(c);a("#userseconds").text(f);a("#umoves").attr("value",c);a("#useconds").attr("value",f);a("#basicModalContent").modal({maxHeight:300,maxWidth:300});window.setTimeout(oa,100)}else{if(c>500)c=500;if(f>2400){f=2400;e=true;j.stop()}k=(500-c)*(2400-f);a("#usermoves").text(c);a("#userseconds").text(f);a("#maxscore").text(k);e=false}else e=false})});q.shufflePieces&&S.click(function(){fa(n.shuffleRounds,n.shuffleSpeed)});q.toggleOriginal&&O.click(function(){if(O.is(".jqp-disabled"))return false;
if(e)return false;e=true;if(O.is(".jqp-toggle")){q.shufflePieces&&S.removeClass("jqp-disabled");q.toggleNumbers&&E.removeClass("jqp-disabled");O.removeClass("jqp-toggle");P.fadeTo(n.fadeOriginalSpeed,w.backgroundOpacity,function(){a(this).prependTo(I);q.pauseTimer&&j&&j.resume();e=false})}else{q.shufflePieces&&S.addClass("jqp-disabled");q.toggleNumbers&&E.addClass("jqp-disabled");O.addClass("jqp-toggle");q.pauseTimer&&j&&j.pause();P.appendTo(I).fadeTo(n.fadeOriginalSpeed,1,function(){e=false})}return false});
q.toggleNumbers&&E.click(function(){if(E.is(".jqp-disabled"))return false;if(E.is(".jqp-toggle")){E.removeClass("jqp-toggle");D.children().hide()}else{E.addClass("jqp-toggle");D.children().show()}});var oa=function(){if(R.fadeOriginal){q.toggleOriginal&&O.addClass("jqp-disabled");q.toggleNumbers&&E.addClass("jqp-disabled");P.appendTo(I).fadeTo(n.fadeOriginalSpeed,1,function(){e=false;ja()})}else{e=false;ja()}},ja=function(){a.isFunction(R.callback)&&setTimeout(function(){R.callback({moves:c,seconds:f})},
R.callbackTimeout)}});var pa=setInterval(function(){if(g[0].complete){clearInterval(pa);g.trigger("load")}},333)}).end()};a(document).ready(function(){a("img.jqPuzzle").each(function(){var b=/\bjqp(-[a-z]{2})?-r(\d)-c(\d)(-h(\d+))?(-s(\d+))?(-[A-Z]+)?\b/.exec(this.className),p;if(b){p={rows:parseInt(b[2]),cols:parseInt(b[3]),hole:parseInt(b[5])||null,shuffle:b[8]&&b[8].indexOf("S")!=-1,numbers:b[8]?b[8].indexOf("N")==-1:true,language:b[1]&&b[1].substring(1)};if(b[7]){p.animation={};p.animation.shuffleRounds=
parseInt(b[7])}if(b[8]&&b[8].search(/[ABCDE]/)!=-1){p.control={};p.control.shufflePieces=b[8].indexOf("A")==-1;p.control.toggleOriginal=b[8].indexOf("B")==-1;p.control.toggleNumbers=b[8].indexOf("C")==-1;p.control.counter=b[8].indexOf("D")==-1;p.control.timer=b[8].indexOf("E")==-1}}a(this).jqPuzzle(p)})})})(jQuery);