// https://fgnass.github.com/spin.js
(function(a,b){function L(a){E(arguments,function(c,d){a[c]===b&&(a[c]=d)});return a}function K(a){E(arguments,function(b,c){a[l][J(a,b)||b]=c});return a}function J(a,c){var e=a[l];if(e[c]!==b)return c;c=c.charAt(0).toUpperCase()+c.slice(1);for(var f=0;f<B[d];f++){var g=B[f]+c;if(e[g]!==b)return g}}function I(a,b){var c=[i,b,~~(a*100)].join("-");if(!C[c]){var e=H(),f="{"+i+":"+a+"}",g;for(g=0;g<B[d];g++)try{e.insertRule("@"+(B[g]&&"-"+B[g].toLowerCase()+"-"||"")+"keyframes "+c+"{0%{"+i+":1}"+b+"%"+f+"to"+f+"}",e.cssRules[d])}catch(h){}C[c]=1}return c}function H(){var b=a.styleSheets;b[d]||G(a.documentElement[r],F(l));return b[0]}function G(a,b,c){c&&!c[s]&&G(a,c),a.insertBefore(b,c||null);return a}function F(b){var c=a.createElement(b||"div");E(arguments,function(a,b){c[a]=b});return c}function E(a,b){var c=~~((a[d]-1)/2);for(var e=1;e<=c;e++)b(a[e*2-1],a[e*2])}var c="width",d="length",e="radius",f="lines",g="trail",h="color",i="opacity",j="speed",k="shadow",l="style",m="height",n="left",o="top",p="px",q="childNodes",r="firstChild",s="parentNode",t="position",u="relative",v="absolute",w="animation",x="transform",y="Origin",z="coord",A="#000",B="webkit0Moz0ms0O".split(0),C={},D,M=function(a){this.el=this[f](this.opts=L(a||{},f,12,g,100,d,7,c,5,e,10,h,A,i,.25,j,1))},N=M.prototype={spin:function(a){var b=this,c=b.el;a&&G(a,K(c,n,~~(a.offsetWidth/2)+p,o,~~(a.offsetHeight/2)+p),a[r]),b.on=1;if(!D){var d=b.opts,e=0,h=20/d[j],k=(1-d[i])/(h*d[g]/100),l=h/d[f];(function m(){e++;for(var a=d[f];a;a--){var g=Math.max(1-(e+a*l)%h*k,d[i]);b[i](c,d[f]-a,g,d)}b.on&&setTimeout(m,50)})()}return b},stop:function(){var a=this,b=a.el;a.on=0,b[s]&&b[s].removeChild(b);return a}};N[f]=function(a){function r(b,g){return K(F(),t,v,c,a[d]+a[c]+p,m,a[c]+p,"background",b,"boxShadow",g,x+y,n,x,"rotate("+~~(360/a[f]*q)+"deg) translate("+a[e]+p+",0)","borderRadius","100em")}var b=K(F(),t,u),l=I(a[i],a[g]),q=0;for(;q<a[f];q++){var s=K(F(),t,v,o,1+~(a[c]/2)+p,x,"translate3d(0,0,0)",w,l+" "+1/a[j]+"s linear infinite "+(1/a[f]/a[j]*q-1/a[j])+"s");a[k]&&G(s,K(r(A,"0 0 4px "+A),o,2+p)),G(b,G(s,r(a[h],"0 0 1px rgba(0,0,0,.1)")))}return b},N[i]=function(a,b,c){a[q][b][l][i]=c};var O="behavior",P="url(#default#VML)",Q="group0roundrect0fill0stroke".split(0);(function(){var a=K(F(Q[0]),O,P);if(!J(a,x)&&a.adj){var b=H(),g;for(g=0;g<Q[d];g++)b.addRule(Q[g],O+":"+P);N[f]=function(){function s(d,g,k){G(l,G(K(j(),"rotation",360/a[f]*d+"deg",n,~~g),G(K(F(Q[1],"arcsize",1),c,b,m,a[c],n,a[e],o,-a[c]/2,"filter",k),F(Q[2],h,a[h],i,a[i]),F(Q[3],i,0))))}function j(){return K(F(Q[0],z+"size",g+" "+g,z+y,-b+" "+ -b),c,g,m,g)}var a=this.opts,b=a[d]+a[c],g=2*b,l=j(),q=~(a[d]+a[e]+a[c])+p,r;if(a[k])for(r=1;r<=a[f];r++)s(r,-2,"progid:DXImage"+x+".Microsoft.Blur(pixel"+e+"=2,make"+k+"=1,"+k+i+"=.3)");for(r=1;r<=a[f];r++)s(r);return G(K(F(),"margin",q+" 0 0 "+q,t,u),l)},N[i]=function(a,b,c,d){d=d[k]&&d[f]||0,a[r][q][b+d][r][r][i]=c}}else D=J(a,w)})(),window.Spinner=M})(document)

$.fn.spin = function(opts) {
  this.each(function() {
    var spinner = $(this).data('spinner');
    if (spinner) spinner.stop();
    if (opts !== false) {
      $(this).data('spinner', new Spinner(opts).spin(this));
    }
  });
  return this;
}
