/*  Spinners 1.3.0
 *  (c) 2010-2011 Nick Stakenburg - http://www.nickstakenburg.com
 *
 *  Spinners is freely distributable under the terms of an MIT-style license.
 *
 *  Works with your framework of choice using BridgeJS:
 *  http://www.github.com/staaky/bridgejs
 *
 *  Requires ExplorerCanvas to work in Internet Explorer:
 *  http://code.google.com/p/explorercanvas
 *
 *  GitHub: https://github.com/staaky/spinners
 */

var Spinners={Version:"1.3.0"};(function(g){function c(d,f){d=g.$(d);!d||(this.element=d.source,Spinners.remove(d),Spinners.removeDetached(),this.options=g.Object.extend({radii:[5,10],color:"#000",dashWidth:1.8,dashes:12,opacity:1,padding:3,speed:0.7,build:!0},f),this._position=0,this._state="stopped",this.options.build&&this.build(),Spinners.add(this))}function e(d){return d*Math.PI/180}g.Object.extend(Spinners,{spinners:[],enabled:!1,Required:{Bridge:"1.1.0"},support:{canvas:function(){var d=document.createElement("canvas");return!!d.getContext&&!!d.getContext("2d")}()},insertScript:function(d){try{document.write("<script type='text/javascript' src='"+d+"'><\/script>")}catch(f){(document.head||Bridge.$$("head").source[0].source).appendChild(new Bridge.Element("script",{src:d,type:"text/javascript"}))}},require:function(d,f){(typeof window[d]=="undefined"||this.convertVersionString(window[d].Version)<this.convertVersionString(this.Required[d]))&&alert("Spinners requires "+(f||d)+" >= "+this.Required[d])},convertVersionString:function(d){var f=d.replace(/_.*|\./g,"");f=parseInt(f+Bridge.String.times("0",4-f.length));return d.indexOf("_")>-1?f-1:f},start:function(){this.require("Bridge");if(!this.support.canvas&&!window.G_vmlCanvasManager){if(!window.attachEvent||navigator.userAgent.indexOf("Opera")!==-1){return}alert("Spinners requires ExplorerCanvas (excanvas.js)")}this.enabled=!0},get:function(d){if(d=g.$(d).source){var f=null;g._each(this.spinners,function(h){h.element==d&&(f=h)});return f}},add:function(d){this.spinners.push(d)},remove:function(d){(d=this.get(d))&&(d.remove(),this.spinners=g.Array.without(this.spinners,d))},removeDetached:function(){return function(){g.each(this.spinners,function(d){if(d.element){var f;for(f=d.element;f&&f.parentNode;){f=f.parentNode}(!f||!f.body)&&this.remove(d.element)}},this)}}()});var b={drawRoundedRectangle:function(f,m){var n=g.Object.extend({top:0,left:0,width:0,height:0,radius:0},m||{}),d=n.left,h=n.top,k=n.width,l=n.height;n=n.radius;f.beginPath();f.moveTo(d+n,h);f.arc(d+k-n,h+n,n,e(-90),e(0),!1);f.arc(d+k-n,h+l-n,n,e(0),e(90),!1);f.arc(d+n,h+l-n,n,e(90),e(180),!1);f.arc(d+n,h+n,n,e(-180),e(-90),!1);f.closePath();f.fill()}},a=function(){function d(i){var j=[];i.indexOf("#")==0&&(i=i.substring(1));i=i.toLowerCase();if(i.replace(f,"")!=""){return null}i.length==3?(j[0]=i.charAt(0)+i.charAt(0),j[1]=i.charAt(1)+i.charAt(1),j[2]=i.charAt(2)+i.charAt(2)):(j[0]=i.substring(0,2),j[1]=i.substring(2,4),j[2]=i.substring(4));for(i=0;i<j.length;i++){j[i]=parseInt(j[i],16)}j.red=j[0];j.green=j[1];j.blue=j[2];return j}var f=RegExp("[0123456789abcdef]","g"),h=function(){function i(j,k,l){j=j.toString(l||10);return g.String.times("0",k-j.length)+j}return function(j,l,k){return"#"+i(j,2,16)+i(l,2,16)+i(k,2,16)}}();return{hex2rgb:d,hex2fill:function(i,k){g.Object.isUndefined(k)&&(k=1);var l=k,j=d(i);j[3]=l;j.opacity=l;return"rgba("+j.join()+")"},rgb2hex:h}}();g.Object.extend(c.prototype,function(){function d(){var f=this.options.speed*1000/this.options.dashes;this.nextPosition();this._playTimer=window.setTimeout(g.Function.bind(d,this),f)}return{remove:function(){!this.canvas||(this.stop(),this.canvas.remove(),this.canvas=null,this.ctx=null)},build:function(){this.remove();var f=this.getLayout().workspace.radius,h=f*2;g.$(this.element).insert(this.canvas=(new g.Element("canvas",{height:h,width:h})).setStyle({zoom:1}));window.G_vmlCanvasManager&&G_vmlCanvasManager.initElement(this.canvas.source);this.ctx=this.canvas.source.getContext("2d");this.ctx.globalAlpha=this.options.opacity;this.ctx.translate(f,f);this.drawPosition(0);return this},getLayout:function(){if(this._layout){return this._layout}var s=this.options,q=s.dashes,r=s.radii,p=s.dashWidth,l=Math.min(r[0],r[1]);r=Math.max(r[0],r[1]);var n=Math.ceil(Math.max(Math.max(p,r),Math.sqrt(r*r+p/2*(p/2))));n+=s.padding;s=n;for(var o=1/q,m=[],j=0;j<q;j++){m.push((j+1)*o)}return this._layout=q={workspace:{radius:s,opacities:m},dash:{position:{top:n-r,left:n-p/2},dimensions:{width:p,height:r-l}}}},_nextPosition:d,nextPosition:function(){this._position==this.options.dashes-1&&(this._position=-1);this._position++;this.drawPosition(this._position)},drawPosition:function(h){var l=this.getLayout().workspace,f=l.radius*2,k=-1*l.radius,j=this.options.dashes;this.ctx.clearRect(k,k,f,f);f=e(360/j);l=l.opacities;h*=-1;h?(k=l.slice(0,h),h=l.slice(h,l.length).concat(k)):h=l;for(l=0;l<j;l++){this.drawDash(h[l],this.options.color),this.ctx.rotate(f)}},drawDash:function(i,l){this.ctx.fillStyle=a.hex2fill(l,i);var h=this.getLayout(),k=h.workspace.radius,j=h.dash.position;h=h.dash.dimensions;b.drawRoundedRectangle(this.ctx,{top:j.top-k,left:j.left-k,width:h.width,height:h.height,radius:Math.min(h.height,h.width)/2})},play:function(){if(this._state!="playing"){this._state="playing";var f=this.options.speed*1000/this.options.dashes;this._playTimer=window.setTimeout(g.Function.bind(d,this),f);return this}},pause:function(){if(this._state!="paused"){return this._pause(),this._state="paused",this}},_pause:function(){!this._playTimer||(window.clearTimeout(this._playTimer),this._playTimer=null)},stop:function(){if(this._state!="stopped"){return this._pause(),this._position=0,this.drawPosition(0),this._state="stopped",this}},toggle:function(){this[this._state=="playing"?"pause":"play"]();return this}}}());window.Spinner=c;Spinners.start();Spinners.enabled||(g.each(g.Object.keys(c.prototype),function(d){c.prototype[d]=g.K}),c=g.K,g.each("get add remove removeDetached".split(" "),function(d){Spinners[d]=g.K}))})(Bridge);
