/* ****************************************************************************************** *
 * Das Script kann frei verwendet werden, dieser Kommentar sowie die Nennung des Nicks
 * und der URL müssen jedoch erhalten bleiben.
 *
 *                                                           (c) Quaese (www.quaese.de), 2009
 * ****************************************************************************************** */

Object.prototype.extendOpts=function(objOpts){for(strEntry in objOpts)
this[strEntry]=objOpts[strEntry];}
function qpCanvas(objOpts){this.id='canvas_id';this.width=300;this.height=300;this.bgFull='#fff';this.bgMid='#fff';this.bgFullShow=false;this.bgMidShow=false;this.segments=30;this.lineWidth=0.0;this.segspace=0.15;this.classname=null;this.center=false;this.onStart=null;this.onComplete=null;this.onAfterStep=null;this.extendOpts(objOpts);this.canvas=null;this.context=null;this.hTimer=null;this.checkOpts();this.borderColor=this.bgFull;this.composites=false;this.radius={x:Math.round(this.width/2),y:Math.round(this.height/2)};this.init();}
qpCanvas.prototype.init=function(){this.canvas=document.getElementById(this.id);this.canvas.width=this.width;this.canvas.height=this.height;this.canvas.style.width=this.width+"px";this.canvas.style.height=this.height+"px";if(this.canvas.getContext){this.context=this.canvas.getContext("2d");this.composites=(typeof this.context.globalCompositeOperation!='undefined')?true:false;if(this.classname!=null)
this.canvas.className=this.classname;if(this.center)
this.setStyle();}else{}}
qpCanvas.prototype.checkOpts=function(){this.width=(isNaN(this.width))?300:((this.width<0)?(-1)*this.width:this.width);this.height=(isNaN(this.height))?300:((this.height<0)?(-1)*this.height:this.height);this.bgFull=(this.setRGBA(this.bgFull,1.0))?this.setRGBA(this.bgFull,1.0):'#fff';this.bgMid=(this.setRGBA(this.bgMid,1.0))?this.setRGBA(this.bgMid,1.0):'#fff';this.lineWidth=(isNaN(this.lineWidth)||(this.lineWidth<=0))?0:this.lineWidth;this.segments=(isNaN(this.segments)||(this.segments<=0))?30:this.segments;this.segspace=(isNaN(this.segspace)||(this.segspace<0)||(this.segspace>1))?0.15:this.segspace;this.onStart=(typeof this.onStart=='function')?this.onStart:null;this.onComplete=(typeof this.onComplete=='function')?this.onComplete:null;this.onAfterStep=(typeof this.onAfterStep=='function')?this.onAfterStep:null;}
qpCanvas.prototype.setStyle=function(){this.canvas.style.position="absolute";this.canvas.style.top="50%";this.canvas.style.left="50%";this.canvas.style.zIndex=9999;this.canvas.style.marginTop=-Math.round(this.height/2)+"px";this.canvas.style.marginLeft=-Math.round(this.width/2)+"px";}
qpCanvas.prototype.show=function(){this.canvas.style.display="block";}
qpCanvas.prototype.hide=function(){this.canvas.style.display="none";}
qpCanvas.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height);}
qpCanvas.prototype.drawCircleByTimeAndSteps=function(intSec,intSteps,intOuterR,intInnerR){if(intOuterR<intInnerR){var intHelp=intOuterR;intOuterR=intInnerR;intInnerR=intHelp;}
intSec*=1000;var intStepTime=Math.floor(intSec/intSteps);var intProzDelta=Math.round(100/intSteps);if(typeof this.onStart=='function')
this.onStart();this.startPeriodicalFx(0,intProzDelta,intStepTime,intOuterR,intInnerR);}
qpCanvas.prototype.drawCircleByPercent=function(intStartProz,intProzDelta,intStepTime,intOuterR,intInnerR){if(intOuterR<intInnerR){var intHelp=intOuterR;intOuterR=intInnerR;intInnerR=intHelp;}
if(typeof this.onStart=='function')
this.onStart();this.startPeriodicalFx(intStartProz,intProzDelta,intStepTime,intOuterR,intInnerR);}
qpCanvas.prototype.startPeriodicalFx=function(intProz,intProzDelta,intStepTime,r1,r2){var _this=this;this.drawSegmentCircle(intProz,r1,r2);if(intProz<100){if(typeof this.onAfterStep=='function')
this.onAfterStep(intProz);this.hTimer=window.setTimeout(function(){_this.startPeriodicalFx(intProz+intProzDelta,intProzDelta,intStepTime,r1,r2);},intStepTime);}else{if(typeof this.onComplete=='function')
this.onComplete();}}
qpCanvas.prototype.drawSegmentCircle=function(intPercent,intOuterRadius,intInnerRadius){if(intOuterRadius<intInnerRadius){var intHelp=intOuterRadius;intOuterRadius=intInnerRadius;intInnerRadius=intHelp;}
this.delta=2*Math.PI/this.segments;this.delta2=this.delta-this.segspace*this.delta;var intAnzSegs=Math.floor(this.segments*intPercent/100);this.context.clearRect(0,0,this.width,this.height);this.context.strokeStyle=this.borderColor;this.context.lineWidth=this.lineWidth;this.context.globalCompositeOperation='source-over';if(this.bgFullShow){this.drawCircle(this.radius.x,this.radius.y,intOuterRadius+1,this.bgFull);}
for(var i=0;i<intAnzSegs;i++){this.drawSegment(i,intOuterRadius);}
if(this.composites&&!this.bgMidShow)
this.context.globalCompositeOperation='destination-out';this.drawCircle(this.radius.x,this.radius.y,intInnerRadius,this.bgMid);}
qpCanvas.prototype.drawCircle=function(intX,intY,intRadius,strFillColor){this.context.beginPath();this.context.moveTo(intX,intY);this.context.arc(intX,intY,intRadius,0,2*Math.PI,false);this.context.closePath();this.context.fillStyle=strFillColor;this.context.fill();}
qpCanvas.prototype.drawSegment=function(intSeg,intOuterRadius){this.context.beginPath();this.context.moveTo(this.radius.x,this.radius.y);this.context.fillStyle="rgba(0, "+(255-intSeg*Math.round(120/this.segments))+", 0, 1.0)";this.context.arc(this.radius.x,this.radius.y,intOuterRadius,-2*Math.PI/4+intSeg*(this.delta),-2*Math.PI/4+(intSeg)*(this.delta)+this.delta2,false);this.context.closePath();this.context.fill();this.context.stroke();}
qpCanvas.prototype.setRGBA=function(strHex,dblOpac){var arrHex=new Array();arrHex["0"]=0;arrHex["1"]=1;arrHex["2"]=2;arrHex["3"]=3;arrHex["4"]=4;arrHex["5"]=5;arrHex["6"]=6;arrHex["7"]=7;arrHex["8"]=8;arrHex["9"]=9;arrHex["a"]=10;arrHex["b"]=11;arrHex["c"]=12;arrHex["d"]=13;arrHex["e"]=14;arrHex["f"]=15;arrHex["A"]=10;arrHex["B"]=11;arrHex["C"]=12;arrHex["D"]=13;arrHex["E"]=14;arrHex["F"]=15;var strHelp="";var strTest=/^[a-fA-F0-9]{6,6}$/;var arrHelp=new Array(3);if(strHex.indexOf("#")!=-1){strHex=strHex.replace(/#/,"");}
if(strHex.length==3){strHex=strHex.charAt(0)+strHex.charAt(0)+strHex.charAt(1)+strHex.charAt(1)+strHex.charAt(2)+strHex.charAt(2);}
if(!strTest.test(strHex)){return false;}
for(var i=0;i<3;i++){strHelp=strHex.substr((i*2),2);arrHelp[i]=arrHex[strHelp.charAt(0)]*16+arrHex[strHelp.charAt(1)];}
return"rgba("+arrHelp[0]+","+arrHelp[1]+","+arrHelp[2]+","+dblOpac+")";}
