var fillEvaluator=new Class.create();fillEvaluator.prototype={_queryID:false,_formName:false,_sourceAddress:"rpc/evaluator.php",_evaluatorPage:false,_objectName:"",_prefix:"",_emptyResult:"",_emptyCity:"",_areaInfo:"",call:function(){var a=this._url();if(a){this.requestAndFill(a)}},initialize:function(a,b){this._prefix=b;this._formName=a;this._emptyResult='<div class="infoBox"><p>'+this.tr.txtNoResults+"</p><p>"+this.tr.txtNoResultsInfo+"</p></div>";this._emptyCity='<div class="infoBox"><p>'+this.tr.txtNoCity+"</p></div>";this._areaInfo=this.tr.txtResultsInfo},requestAndFill:function(a){new Ajax.Request(a,{method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",onLoading:this._showSpinner(),onSuccess:this._updateMe.bind(this),onComplete:$("evaluatorOD").show()})},_url:function(){if(this._formName){if(this._validate()){return this._sourceAddress+"?"+this._buildQueryString()}else{return false}}return false},_validate:function(){var b;if($(this._prefix+"_CityName")!=undefined){b=$(this._prefix+"_CityName")}if($(this._prefix+"_City_ID")!=undefined){b=$(this._prefix+"_City_ID")}var c;if($(this._prefix+"_ObjectName")!=undefined){c=$(this._prefix+"_ObjectName")}var a=this._getOfferType();if(!c.value||!a||!a.value){$("evaluatorOD").innerHTML=this._emptyResult;return false}if(!b.value){$("evaluatorOD").innerHTML=this._emptyCity;return false}return true},_getOfferType:function(){if($(this._prefix+"_offerType")!=undefined){return $(this._prefix+"_offerType")}if($(this._prefix+"_OfferType")!=undefined){return $(this._prefix+"_OfferType")}var a=null;var c=document.getElementsByName(this._prefix+"_OfferType");for(var b in c){if(c[b].checked){a=c[b];break}}if(a){return a}return undefined},_buildQueryString:function(){formObj=document.forms[(this._formName)];prefix="formObj."+this._prefix;this._objectName=eval(prefix+"_ObjectName").value;var city;if($(this._prefix+"_CityName")!=undefined){city=$(this._prefix+"_CityName").value}if($(this._prefix+"_City_ID")!=undefined){city=$(this._prefix+"_City_ID").value}var quarter;if($(this._prefix+"_QuarterName")!=undefined){quarter=$(this._prefix+"_QuarterName").value}if($(this._prefix+"_Quarter_ID")!=undefined){quarter=$(this._prefix+"_Quarter_ID").value}var offerType=this._getOfferType().value;offerType=offerType!=undefined?offerType:"";var area;if($(this._prefix+"_Area")!=undefined){area=$(this._prefix+"_Area").value}else{if($(this._prefix+".AreaFrom")!=undefined&&$(this._prefix+".AreaTo")!=undefined){if($(this._prefix+".AreaFrom").value&&$(this._prefix+".AreaTo").value){areaFrom=$(this._prefix+".AreaFrom").value;areaTo=$(this._prefix+".AreaTo").value;area=areaTo>areaFrom?parseInt(areaFrom)+Math.abs(parseInt(areaTo)-parseInt(areaFrom))/2:areaFrom}else{if($(this._prefix+".AreaFrom").value){area=$(this._prefix+".AreaFrom").value}else{if($(this._prefix+".AreaTo").value){area=$(this._prefix+".AreaTo").value}}}}}if(area){area=parseInt(area)}var rooms;if(eval(prefix+"_RoomsNum")!=undefined){rooms=eval(prefix+"_RoomsNum").value}else{if($(this._prefix+".RoomsNum")!=undefined){rooms=$(this._prefix+".RoomsNum").value}}query="city="+city+"&object="+this._objectName+"&offer="+offerType+"&quarter="+quarter+"&area="+area+"&rooms="+rooms;try{if(formObj.evaluatorPage.value==1){this._evaluatorPage=true}}catch(e){}return query},_showSpinner:function(){$("evaluatorOD").innerHTML='<div class="visionBox"><fieldset><img src="images/2012012701/pl_PL/0/spinnerVisualBox.gif" alt="" class="loadVisionBox"></fieldset></div>'},_updateMe:function(transport,data){var data=eval("("+transport.responseText+")");var htmlTable="";var htmlChart="";var local=", <strong>"+this.tr.txtLocation+"</strong>: "+data.city;local+=data.quarter?", "+data.quarter:"";var area=this._isInt(data.area)?", <strong>"+this.tr.txtArea+"</strong>: "+data.area+" m<sup>2</sup>":"";var areaClass=area!=""?"<br />"+this._areaInfo+(data.areaFrom!=0?this.tr.txtFrom+" "+data.areaFrom:"")+" "+this.tr.txtTo+" "+data.areaTo:"";var rooms=data.rooms?", <strong>"+this.tr.txtNumberOfRooms+"</strong>: "+data.rooms:"";var primarNum=data.price.table.primary!=undefined?data.price.table.primary.count:0;var primarAvg=data.price.table.primary!=undefined?data.price.table.primary.avg:0;var secondNum=data.price.table.secondary!=undefined?data.price.table.secondary.count:0;var secondAvg=data.price.table.secondary!=undefined?data.price.table.secondary.avg:0;var pClass=primarNum?"":' style="display: none;"';var sClass=secondNum?"":' style="display: none;"';var allPrice=this._isInt(data.area)?"":' style="display: none;"';htmlTable='<div id="evaluatorTable"><h3>'+this.tr.txtAv30Days+(areaClass!=""?" *":"")+"</h3><p><strong>"+this.tr.txtType+"</strong>: "+data.object_name+local+area+rooms+areaClass+'</p><table class="insertListOD"><tr><th></th><th'+pClass+">"+this.tr.txtPrimaryMarket+"</th><th"+sClass+">"+this.tr.txtSecondaryMarket+"</th></tr><tr "+allPrice+"><td>"+this.tr.txtRealEstateAvPrice+"</td><td"+pClass+' id="primary_price">'+this._formatPrice(primarAvg*data.area)+" PLN</td><td"+sClass+' id="secondary_price">'+this._formatPrice(secondAvg*data.area)+' PLN</td></tr><tr class="darkBlue"><td>'+this.tr.txtSquareMeterAvPrice+"</td><td"+pClass+">"+this._formatPrice(primarAvg)+" PLN</td><td"+sClass+">"+this._formatPrice(secondAvg)+" PLN</td></tr><tr><td>"+this.tr.txtNoOfAds+"</td><td"+pClass+">"+primarNum+"</td><td"+sClass+">"+secondNum+"</td></tr></table></div>";var htmlTableDisplay=primarNum+secondNum;htmlChart='<div id="evaluatorChart"><h3>'+this.tr.txtAv6Months+'</h3><div id="chart"></div><div id="chartLabel"></div></div>';var htmlChartDisplay=(this._testChartData(data.price.chart.primary)||this._testChartData(data.price.chart.secondary))?true:false;var hideLink=this._evaluatorPage?' style="display: none;"':"";if(htmlTableDisplay||htmlChartDisplay){try{$("evaluatorOD").innerHTML='<div class="visionBox"><fieldset><a href="#" id="evaluatorClose" class="closeVisionBox">'+this.tr.txtClose+" x</a>"+htmlTable+""+htmlChart+'<p id="viewMore"'+hideLink+'><a href="/index.php?mod=tools&act=default">'+this.tr.txtSeeWithOtherParams+" »</a></p></fieldset></div>";if(!htmlTableDisplay){$("evaluatorTable").hide()}if(!htmlChartDisplay){$("evaluatorChart").hide()}Event.observe("evaluatorClose","click",function(){$("evaluatorOD").hide()})}catch(e){}var chart=new Array();if(this._testChartData(data.price.chart.primary)){if($("primary_price")!=null&&this._objectName!="Terrain"){chart.push({data:data.price.chart.primary,label:this.tr.txtPrimaryMarket,lines:{show:true,fill:false,lineWidth:4},points:{show:true,lineWidth:1,radius:4},color:"#6b98c5"})}}if(this._testChartData(data.price.chart.secondary)){if($("secondary_price")!=null){chart.push({data:data.price.chart.secondary,label:this.tr.txtSecondaryMarket,lines:{show:true,fill:false,lineWidth:4},points:{show:true,lineWidth:1,radius:4},color:"#b3d73f"})}}this._initChart(chart,data.price.chart.period)}else{$("evaluatorOD").innerHTML=this._emptyResult}},_testTableData:function(a){},_testChartData:function(b){if(!b.length){return false}for(var a=0;a<b.length;a++){if(b[a][1]==0){return false}}return true},_initChart:function(a,b){new Proto.Chart($("chart"),a,{legend:{show:true,container:"chartLabel",noColumns:2},grid:{color:"#c3e8ff",backgroundColor:"#fff",tickColor:"#c3e8ff",borderWidth:1,labelMargin:10},mouse:{track:true,fixedPosition:false,clsName:"mouseValHolder"},xaxis:{mode:"time",minTickSize:[1,"month"],min:b.min,max:b.max,monthNames:this.tr.arrMonths},yaxis:{tickFormatter:function(c){return c+" PLN"},minTickSize:1}})},_formatPrice:function(b){b+="";x=b.split(".");x1=x[0];x2=x.length>1?"."+x[1]:"";var a=/(\d+)(\d{3})/;while(a.test(x1)){x1=x1.replace(a,"$1 $2")}return x1+x2},_isInt:function(b){var a=parseInt(b);if(isNaN(a)){return false}return b==a&&b.toString()==a.toString()}};if(!window.CanvasRenderingContext2D){(function(){var q=Math;var r=q.round;var o=q.sin;var y=q.cos;var a=10;var k=a/2;var g={init:function(z){var A=z||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var m=this;A.attachEvent("onreadystatechange",function(){m.init_(A)})}},init_:function(B){if(B.readyState=="complete"){if(!B.namespaces.g_vml_){B.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var A=B.createStyleSheet();A.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";var z=B.getElementsByTagName("canvas");for(var m=0;m<z.length;m++){if(!z[m].getContext){this.initElement(z[m])}}}},fixElement_:function(A){var C=A.outerHTML;var B=A.ownerDocument.createElement(C);if(C.slice(-2)!="/>"){var m="/"+A.tagName;var z;while((z=A.nextSibling)&&z.tagName!=m){z.removeNode()}if(z){z.removeNode()}}A.parentNode.replaceChild(B,A);return B},initElement:function(z){z=this.fixElement_(z);z.getContext=function(){if(this.context_){return this.context_}return this.context_=new l(this)};z.attachEvent("onpropertychange",w);z.attachEvent("onresize",b);var m=z.attributes;if(m.width&&m.width.specified){z.style.width=m.width.nodeValue+"px"}else{z.width=z.clientWidth}if(m.height&&m.height.specified){z.style.height=m.height.nodeValue+"px"}else{z.height=z.clientHeight}return z}};function w(z){var m=z.srcElement;switch(z.propertyName){case"width":m.style.width=m.attributes.width.nodeValue+"px";m.getContext().clearRect();break;case"height":m.style.height=m.attributes.height.nodeValue+"px";m.getContext().clearRect();break}}function b(z){var m=z.srcElement;if(m.firstChild){m.firstChild.style.width=m.clientWidth+"px";m.firstChild.style.height=m.clientHeight+"px"}}g.init();var d=[];for(var u=0;u<16;u++){for(var t=0;t<16;t++){d[u*16+t]=u.toString(16)+t.toString(16)}}function n(){return[[1,0,0],[0,1,0],[0,0,1]]}function e(C,B){var A=n();for(var m=0;m<3;m++){for(var F=0;F<3;F++){var D=0;for(var E=0;E<3;E++){D+=C[m][E]*B[E][F]}A[m][F]=D}}return A}function s(z,m){m.fillStyle=z.fillStyle;m.lineCap=z.lineCap;m.lineJoin=z.lineJoin;m.lineWidth=z.lineWidth;m.miterLimit=z.miterLimit;m.shadowBlur=z.shadowBlur;m.shadowColor=z.shadowColor;m.shadowOffsetX=z.shadowOffsetX;m.shadowOffsetY=z.shadowOffsetY;m.strokeStyle=z.strokeStyle;m.arcScaleX_=z.arcScaleX_;m.arcScaleY_=z.arcScaleY_}function c(z){var C,B=1;z=String(z);if(z.substring(0,3)=="rgb"){var E=z.indexOf("(",3);var m=z.indexOf(")",E+1);var D=z.substring(E+1,m).split(",");C="#";for(var A=0;A<3;A++){C+=d[Number(D[A])]}if((D.length==4)&&(z.substr(3,1)=="a")){B=D[3]}}else{C=z}return[C,B]}function p(m){switch(m){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function l(z){this.m_=n();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=a*1;this.globalAlpha=1;this.canvas=z;var m=z.ownerDocument.createElement("div");m.style.width=z.clientWidth+"px";m.style.height=z.clientHeight+"px";m.style.overflow="hidden";m.style.position="absolute";z.appendChild(m);this.element_=m;this.arcScaleX_=1;this.arcScaleY_=1}var h=l.prototype;h.clearRect=function(){this.element_.innerHTML="";this.currentPath_=[]};h.beginPath=function(){this.currentPath_=[]};h.moveTo=function(z,m){this.currentPath_.push({type:"moveTo",x:z,y:m});this.currentX_=z;this.currentY_=m};h.lineTo=function(z,m){this.currentPath_.push({type:"lineTo",x:z,y:m});this.currentX_=z;this.currentY_=m};h.bezierCurveTo=function(A,m,D,C,B,z){this.currentPath_.push({type:"bezierCurveTo",cp1x:A,cp1y:m,cp2x:D,cp2y:C,x:B,y:z});this.currentX_=B;this.currentY_=z};h.quadraticCurveTo=function(F,E,D,C){var z=this.currentX_+2/3*(F-this.currentX_);var m=this.currentY_+2/3*(E-this.currentY_);var B=z+(D-this.currentX_)/3;var A=m+(C-this.currentY_)/3;this.bezierCurveTo(z,m,B,A,D,C)};h.arc=function(E,C,D,B,z,A){D*=a;var I=A?"at":"wa";var F=E+(y(B)*D)-k;var H=C+(o(B)*D)-k;var m=E+(y(z)*D)-k;var G=C+(o(z)*D)-k;if(F==m&&!A){F+=0.125}this.currentPath_.push({type:I,x:E,y:C,radius:D,xStart:F,yStart:H,xEnd:m,yEnd:G})};h.rect=function(A,z,m,B){this.moveTo(A,z);this.lineTo(A+m,z);this.lineTo(A+m,z+B);this.lineTo(A,z+B);this.closePath()};h.strokeRect=function(A,z,m,B){this.beginPath();this.moveTo(A,z);this.lineTo(A+m,z);this.lineTo(A+m,z+B);this.lineTo(A,z+B);this.closePath();this.stroke()};h.fillRect=function(A,z,m,B){this.beginPath();this.moveTo(A,z);this.lineTo(A+m,z);this.lineTo(A+m,z+B);this.lineTo(A,z+B);this.closePath();this.fill()};h.createLinearGradient=function(z,B,m,A){var C=new v("gradient");return C};h.createRadialGradient=function(B,D,A,z,C,m){var E=new v("gradientradial");E.radius1_=A;E.radius2_=m;E.focus_.x=B;E.focus_.y=D;return E};h.drawImage=function(O,A){var G,E,J,V,M,K,Q,Y;var I=O.runtimeStyle.width;var N=O.runtimeStyle.height;O.runtimeStyle.width="auto";O.runtimeStyle.height="auto";var F=O.width;var T=O.height;O.runtimeStyle.width=I;O.runtimeStyle.height=N;if(arguments.length==3){G=arguments[1];E=arguments[2];M=K=0;Q=J=F;Y=V=T}else{if(arguments.length==5){G=arguments[1];E=arguments[2];J=arguments[3];V=arguments[4];M=K=0;Q=F;Y=T}else{if(arguments.length==9){M=arguments[1];K=arguments[2];Q=arguments[3];Y=arguments[4];G=arguments[5];E=arguments[6];J=arguments[7];V=arguments[8]}else{throw"Invalid number of arguments"}}}var X=this.getCoords_(G,E);var B=Q/2;var z=Y/2;var U=[];var m=10;var D=10;U.push(" <g_vml_:group",' coordsize="',a*m,",",a*D,'"',' coordorigin="0,0"',' style="width:',m,";height:",D,";position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var C=[];C.push("M11='",this.m_[0][0],"',","M12='",this.m_[1][0],"',","M21='",this.m_[0][1],"',","M22='",this.m_[1][1],"',","Dx='",r(X.x/a),"',","Dy='",r(X.y/a),"'");var S=X;var R=this.getCoords_(G+J,E);var P=this.getCoords_(G,E+V);var L=this.getCoords_(G+J,E+V);S.x=Math.max(S.x,R.x,P.x,L.x);S.y=Math.max(S.y,R.y,P.y,L.y);U.push("padding:0 ",r(S.x/a),"px ",r(S.y/a),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",C.join(""),", sizingmethod='clip');")}else{U.push("top:",r(X.y/a),"px;left:",r(X.x/a),"px;")}U.push(' ">','<g_vml_:image src="',O.src,'"',' style="width:',a*J,";"," height:",a*V,';"',' cropleft="',M/F,'"',' croptop="',K/T,'"',' cropright="',(F-M-Q)/F,'"',' cropbottom="',(T-K-Y)/T,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",U.join(""))};h.stroke=function(Y){var E=[];var D=false;var ab=c(Y?this.fillStyle:this.strokeStyle);var T=ab[0];var A=ab[1]*this.globalAlpha;var z=10;var J=10;E.push("<g_vml_:shape",' fillcolor="',T,'"',' filled="',Boolean(Y),'"',' style="position:absolute;width:',z,";height:",J,';"',' coordorigin="0 0" coordsize="',a*z," ",a*J,'"',' stroked="',!Y,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',T,'"',' path="');var I=false;var S={x:null,y:null};var U={x:null,y:null};for(var V=0;V<this.currentPath_.length;V++){var O=this.currentPath_[V];if(O.type=="moveTo"){E.push(" m ");var aa=this.getCoords_(O.x,O.y);E.push(r(aa.x),",",r(aa.y))}else{if(O.type=="lineTo"){E.push(" l ");var aa=this.getCoords_(O.x,O.y);E.push(r(aa.x),",",r(aa.y))}else{if(O.type=="close"){E.push(" x ")}else{if(O.type=="bezierCurveTo"){E.push(" c ");var aa=this.getCoords_(O.x,O.y);var R=this.getCoords_(O.cp1x,O.cp1y);var P=this.getCoords_(O.cp2x,O.cp2y);E.push(r(R.x),",",r(R.y),",",r(P.x),",",r(P.y),",",r(aa.x),",",r(aa.y))}else{if(O.type=="at"||O.type=="wa"){E.push(" ",O.type," ");var aa=this.getCoords_(O.x,O.y);var K=this.getCoords_(O.xStart,O.yStart);var C=this.getCoords_(O.xEnd,O.yEnd);E.push(r(aa.x-this.arcScaleX_*O.radius),",",r(aa.y-this.arcScaleY_*O.radius)," ",r(aa.x+this.arcScaleX_*O.radius),",",r(aa.y+this.arcScaleY_*O.radius)," ",r(K.x),",",r(K.y)," ",r(C.x),",",r(C.y))}}}}}if(aa){if(S.x==null||aa.x<S.x){S.x=aa.x}if(U.x==null||aa.x>U.x){U.x=aa.x}if(S.y==null||aa.y<S.y){S.y=aa.y}if(U.y==null||aa.y>U.y){U.y=aa.y}}}E.push(' ">');if(typeof this.fillStyle=="object"){var N={x:"50%",y:"50%"};var Q=(U.x-S.x);var L=(U.y-S.y);var Z=(Q>L)?Q:L;N.x=r((this.fillStyle.focus_.x/Q)*100+50)+"%";N.y=r((this.fillStyle.focus_.y/L)*100+50)+"%";var G=[];if(this.fillStyle.type_=="gradientradial"){var X=(this.fillStyle.radius1_/Z*100);var M=(this.fillStyle.radius2_/Z*100)-X}else{var X=0;var M=100}var m={offset:null,color:null};var B={offset:null,color:null};this.fillStyle.colors_.sort(function(W,H){return W.offset-H.offset});for(var V=0;V<this.fillStyle.colors_.length;V++){var F=this.fillStyle.colors_[V];G.push((F.offset*M)+X,"% ",F.color,",");if(F.offset>m.offset||m.offset==null){m.offset=F.offset;m.color=F.color}if(F.offset<B.offset||B.offset==null){B.offset=F.offset;B.color=F.color}}G.pop();E.push("<g_vml_:fill",' color="',B.color,'"',' color2="',m.color,'"',' type="',this.fillStyle.type_,'"',' focusposition="',N.x,", ",N.y,'"',' colors="',G.join(""),'"',' opacity="',A,'" />')}else{if(Y){E.push('<g_vml_:fill color="',T,'" opacity="',A,'" />')}else{E.push("<g_vml_:stroke",' opacity="',A,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',p(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',T,'" />')}}E.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",E.join(""))};h.fill=function(){this.stroke(true)};h.closePath=function(){this.currentPath_.push({type:"close"})};h.getCoords_=function(z,m){return{x:a*(z*this.m_[0][0]+m*this.m_[1][0]+this.m_[2][0])-k,y:a*(z*this.m_[0][1]+m*this.m_[1][1]+this.m_[2][1])-k}};h.save=function(){var m={};s(this,m);this.aStack_.push(m);this.mStack_.push(this.m_);this.m_=e(n(),this.m_)};h.restore=function(){s(this.aStack_.pop(),this);this.m_=this.mStack_.pop()};h.translate=function(A,z){var m=[[1,0,0],[0,1,0],[A,z,1]];this.m_=e(m,this.m_)};h.rotate=function(z){var B=y(z);var A=o(z);var m=[[B,A,0],[-A,B,0],[0,0,1]];this.m_=e(m,this.m_)};h.scale=function(A,z){this.arcScaleX_*=A;this.arcScaleY_*=z;var m=[[A,0,0],[0,z,0],[0,0,1]];this.m_=e(m,this.m_)};h.clip=function(){};h.arcTo=function(){};h.createPattern=function(){return new f};function v(m){this.type_=m;this.radius1_=0;this.radius2_=0;this.colors_=[];this.focus_={x:0,y:0}}v.prototype.addColorStop=function(z,m){m=c(m);this.colors_.push({offset:1-z,color:m})};function f(){}G_vmlCanvasManager=g;CanvasRenderingContext2D=l;CanvasGradient=v;CanvasPattern=f})()}if(!Proto){var Proto={}}Proto.Chart=Class.create({initialize:function(b,c,a){a=a||{};this.graphData=[];this.options=this.merge(a,{colors:["#edc240","#00A8F0","#C0D800","#cb4b4b","#4da74d","#9440ed"],legend:{show:false,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{mode:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null},yaxis:{mode:null,min:null,max:null,ticks:null,tickFormatter:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,autoscaleMargin:0.02},points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff"},lines:{show:false,lineWidth:2,fill:false,fillColor:null},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,showShadow:false,fillOpacity:0.4,autoScale:true},pies:{show:false,radius:50,borderWidth:1,fill:true,fillColor:null,fillOpacity:0.9,labelWidth:30,fontSize:11,autoScale:true},grid:{color:"#545454",backgroundColor:null,tickColor:"#dddddd",labelMargin:3,borderWidth:1,clickable:null,coloredAreas:null,coloredAreasColor:"#f4f4f4",drawXAxis:true,drawYAxis:true},mouse:{track:false,position:"se",fixedPosition:true,clsName:"mouseValHolder",trackFormatter:this.defaultTrackFormatter,margin:3,color:"#ff3f19",trackDecimals:1,sensibility:2,radius:5,lineColor:"#cb4b4b"},selection:{mode:null,color:"#97CBFF"},allowDataClick:true,makeRandomColor:false,shadowSize:4});this.canvas=null;this.overlay=null;this.eventHolder=null;this.context=null;this.overlayContext=null;this.domObj=$(b);this.xaxis={};this.yaxis={};this.chartOffset={left:0,right:0,top:0,bottom:0};this.yLabelMaxWidth=0;this.yLabelMaxHeight=0;this.xLabelBoxWidth=0;this.canvasWidth=0;this.canvasHeight=0;this.chartWidth=0;this.chartHeight=0;this.hozScale=0;this.vertScale=0;this.workarounds={};this.domObj=$(b);this.barDataRange=[];this.lastMousePos={pageX:null,pageY:null};this.selection={first:{x:-1,y:-1},second:{x:-1,y:-1}};this.prevSelection=null;this.selectionInterval=null;this.ignoreClick=false;this.prevHit=null;if(this.options.makeRandomColor){this.options.color=this.makeRandomColor(this.options.colors)}this.setData(c);this.constructCanvas();this.setupGrid();this.draw()},merge:function(d,b){var a=b||{};for(var c in d){a[c]=(typeof(d[c])=="object"&&!(d[c].constructor==Array||d[c].constructor==RegExp))?this.merge(d[c],b[c]):a[c]=d[c]}return a},setData:function(a){this.graphData=this.parseData(a);this.setBarWidth();this.copyGraphDataOptions();this.processGraphData()},parseData:function(b){var a=[];b.each(function(f){var e;if(f.data){e={};for(var c in f){e[c]=f[c]}}else{e={data:f}}a.push(e)}.bind(this));return a},makeRandomColor:function(d){var b=Math.floor(Math.random()*d.length);var a=[];var c=[];a.push(b);while(a.length<d.length){var e=Math.floor(Math.random()*d.length);while(checkExisted(e,a)){e=Math.floor(Math.random()*d.length)}a.push(e)}a.each(function(f){c.push(d[f])}.bind(this));return c},checkExisted:function(c,b){var a=false;b.each(function(d){if(d==c){a=true;throw $break}}.bind(this));return a},setBarWidth:function(){if(this.options.bars.show&&this.options.bars.autoScale){this.options.bars.barWidth/this.graphData.length/1.2}},copyGraphDataOptions:function(){var g,m=this.graphData.length,a=[],e=[];this.graphData.each(function(c){var o=c.color;if(o){--m;if(Object.isNumber(o)){e.push(o)}else{a.push(this.parseColor(o))}}}.bind(this));e.each(function(c){m=Math.max(m,c+1)});var b=[];var f=0;g=0;while(b.length<m){var k;if(this.options.colors.length==g){k=new Proto.Color(100,100,100)}else{k=this.parseColor(this.options.colors[g])}var d=f%2==1?-1:1;var h=1+d*Math.ceil(f/2)*0.2;k.scale(h,h,h);b.push(k);++g;if(g>=this.options.colors.length){g=0;++f}}var l=0,n;this.graphData.each(function(c){if(c.color==null){c.color=b[l].toString();++l}else{if(Object.isNumber(c.color)){c.color=b[c.color].toString()}}c.lines=Object.extend(Object.clone(this.options.lines),c.lines);c.points=Object.extend(Object.clone(this.options.points),c.points);c.bars=Object.extend(Object.clone(this.options.bars),c.bars);c.mouse=Object.extend(Object.clone(this.options.mouse),c.mouse);if(c.shadowSize==null){c.shadowSize=this.options.shadowSize}}.bind(this))},processGraphData:function(){this.xaxis.datamin=this.yaxis.datamin=Number.MAX_VALUE;this.xaxis.datamax=this.yaxis.datamax=Number.MIN_VALUE;this.graphData.each(function(a){var b=a.data;b.each(function(e){if(e==null){return}var c=e[0],f=e[1];if(!c||!f||isNaN(c=+c)||isNaN(f=+f)){e=null;return}if(c<this.xaxis.datamin){this.xaxis.datamin=c}if(c>this.xaxis.datamax){this.xaxis.datamax=c}if(f<this.yaxis.datamin){this.yaxis.datamin=f}if(f>this.yaxis.datamax){this.yaxis.datamax=f}}.bind(this))}.bind(this));if(this.xaxis.datamin==Number.MAX_VALUE){this.xaxis.datamin=0}if(this.yaxis.datamin==Number.MAX_VALUE){this.yaxis.datamin=0}if(this.xaxis.datamax==Number.MIN_VALUE){this.xaxis.datamax=1}if(this.yaxis.datamax==Number.MIN_VALUE){this.yaxis.datamax=1}},constructCanvas:function(){this.canvasWidth=this.domObj.getWidth();this.canvasHeight=this.domObj.getHeight();this.domObj.update("");this.domObj.setStyle({position:"relative"});if(this.canvasWidth<=0){this.canvasWdith=400}if(this.canvasHeight<=0){this.canvasHeight=300}this.canvas=(Prototype.Browser.IE)?document.createElement("canvas"):new Element("CANVAS",{width:this.canvasWidth,height:this.canvasHeight});Element.extend(this.canvas);this.canvas.style.width=this.canvasWidth+"px";this.canvas.style.height=this.canvasHeight+"px";this.domObj.appendChild(this.canvas);if(Prototype.Browser.IE){this.canvas=$(window.G_vmlCanvasManager.initElement(this.canvas))}this.canvas=$(this.canvas);this.context=this.canvas.getContext("2d");this.overlay=(Prototype.Browser.IE)?document.createElement("canvas"):new Element("CANVAS",{width:this.canvasWidth,height:this.canvasHeight});Element.extend(this.overlay);this.overlay.style.width=this.canvasWidth+"px";this.overlay.style.height=this.canvasHeight+"px";this.overlay.style.position="absolute";this.overlay.style.left="0px";this.overlay.style.right="0px";this.overlay.setStyle({position:"absolute",left:"0px",right:"0px"});this.domObj.appendChild(this.overlay);if(Prototype.Browser.IE){this.overlay=$(window.G_vmlCanvasManager.initElement(this.overlay))}this.overlay=$(this.overlay);this.overlayContext=this.overlay.getContext("2d");if(this.options.selection.mode){this.overlay.observe("mousedown",this.onMouseDown.bind(this));this.overlay.observe("mousemove",this.onMouseMove.bind(this))}if(this.options.grid.clickable){this.overlay.observe("click",this.onClick.bind(this))}if(this.options.mouse.track){this.overlay.observe("mousemove",this.onMouseMove.bind(this))}},setupGrid:function(){if(this.options.bars.show){this.xaxis.max+=0.5;this.xaxis.min-=0.5}this.extendXRangeIfNeededByBar();this.setRange(this.xaxis,this.options.xaxis);this.prepareTickGeneration(this.xaxis,this.options.xaxis);this.setTicks(this.xaxis,this.options.xaxis);this.setRange(this.yaxis,this.options.yaxis);this.prepareTickGeneration(this.yaxis,this.options.yaxis);this.setTicks(this.yaxis,this.options.yaxis);this.setSpacing();if(!this.options.pies.show){this.insertLabels()}this.insertLegend()},setRange:function(d,f){var c=f.min!=null?f.min:d.datamin;var a=f.max!=null?f.max:d.datamax;if(a-c==0){var b;if(a==0){b=1}else{b=0.01}c-=b;a+=b}else{var e=f.autoscaleMargin;if(e!=null){if(f.min==null){c-=(a-c)*e;if(c<0&&d.datamin>=0){c=0}}if(f.max==null){a+=(a-c)*e;if(a>0&&d.datamax<=0){a=0}}}}d.min=c;d.max=a},prepareTickGeneration:function(c,k){var d;if(Object.isNumber(k.ticks)&&k.ticks>0){d=k.ticks}else{if(c==this.xaxis){d=this.canvasWidth/100}else{d=this.canvasHeight/60}}var s=(c.max-c.min)/d;var o,a,m,q,r,p,e;if(k.mode=="time"){function l(B,u,w){var v=function(D){D=""+D;return D.length==1?"0"+D:D};var A=[];var z=false;if(w==null){w=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}for(var y=0;y<u.length;++y){var C=u.charAt(y);if(z){switch(C){case"h":C=""+B.getHours();break;case"H":C=v(B.getHours());break;case"M":C=v(B.getMinutes());break;case"S":C=v(B.getSeconds());break;case"d":C=""+B.getDate();break;case"m":C=""+(B.getMonth()+1);break;case"y":C=""+B.getFullYear();break;case"b":C=""+w[B.getMonth()];break}A.push(C);z=false}else{if(C=="%"){z=true}else{A.push(C)}}}return A.join("")}var f={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var g=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var b=0;if(k.minTickSize!=null){if(typeof k.tickSize=="number"){b=k.tickSize}else{b=k.minTickSize[0]*f[k.minTickSize[1]]}}for(r=0;r<g.length-1;++r){if(s<(g[r][0]*f[g[r][1]]+g[r+1][0]*f[g[r+1][1]])/2&&g[r][0]*f[g[r][1]]>=b){break}}o=g[r][0];m=g[r][1];if(m=="year"){p=Math.pow(10,Math.floor(Math.log(s/f.year)/Math.LN10));e=(s/f.year)/p;if(e<1.5){o=1}else{if(e<3){o=2}else{if(e<7.5){o=5}else{o=10}}}o*=p}if(k.tickSize){o=k.tickSize[0];m=k.tickSize[1]}var h=this.floorInBase;a=function(y){var C=[],A=y.tickSize[0],D=y.tickSize[1],B=new Date(y.min);var w=A*f[D];if(D=="second"){B.setSeconds(h(B.getSeconds(),A))}if(D=="minute"){B.setMinutes(h(B.getMinutes(),A))}if(D=="hour"){B.setHours(h(B.getHours(),A))}if(D=="month"){B.setMonth(h(B.getMonth(),A))}if(D=="year"){B.setFullYear(h(B.getFullYear(),A))}B.setMilliseconds(0);if(w>=f.minute){B.setSeconds(0)}if(w>=f.hour){B.setMinutes(0)}if(w>=f.day){B.setHours(0)}if(w>=f.day*4){B.setDate(1)}if(w>=f.year){B.setMonth(0)}var F=0,E;do{E=B.getTime();C.push({v:E,label:y.tickFormatter(E,y)});if(D=="month"){if(A<1){B.setDate(1);var u=B.getTime();B.setMonth(B.getMonth()+1);var z=B.getTime();B.setTime(E+F*f.hour+(z-u)*A);F=B.getHours();B.setHours(0)}else{B.setMonth(B.getMonth()+A)}}else{if(D=="year"){B.setFullYear(B.getFullYear()+A)}else{B.setTime(E+w)}}}while(E<y.max);return C};q=function(u,z){var A=new Date(u);if(k.timeformat!=null){return l(A,k.timeformat,k.monthNames)}var w=z.tickSize[0]*f[z.tickSize[1]];var y=z.max-z.min;if(w<f.minute){fmt="%h:%M:%S"}else{if(w<f.day){if(y<2*f.day){fmt="%h:%M"}else{fmt="%b %d %h:%M"}}else{if(w<f.month){fmt="%b %d"}else{if(w<f.year){if(y<f.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return l(A,fmt,k.monthNames)}}else{var t=k.tickDecimals;var n=-Math.floor(Math.log(s)/Math.LN10);if(t!=null&&n>t){n=t}p=Math.pow(10,-n);e=s/p;if(e<1.5){o=1}else{if(e<3){o=2;if(e>2.25&&(t==null||n+1<=t)){o=2.5;++n}}else{if(e<7.5){o=5}else{o=10}}}o*=p;if(k.minTickSize!=null&&o<k.minTickSize){o=k.minTickSize}if(k.tickSize!=null){o=k.tickSize}c.tickDecimals=Math.max(0,(t!=null)?t:n);var h=this.floorInBase;a=function(y){var z=[];var A=h(y.min,y.tickSize);var w=0,u;do{u=A+w*y.tickSize;z.push({v:u,label:y.tickFormatter(u,y)});++w}while(u<y.max);return z};q=function(u,w){if(u){return u.toFixed(w.tickDecimals)}return 0}}c.tickSize=m?[o,m]:o;c.tickGenerator=a;if(Object.isFunction(k.tickFormatter)){c.tickFormatter=function(u,w){return""+k.tickFormatter(u,w)}}else{c.tickFormatter=q}},extendXRangeIfNeededByBar:function(){if(this.options.xaxis.max==null){var a=this.xaxis.max;this.graphData.each(function(b){if(b.bars.show&&b.bars.barWidth+this.xaxis.datamax>a){a=this.xaxis.datamax+b.bars.barWidth}}.bind(this));this.xaxis.nax=a}},setTicks:function(a,c){a.ticks=[];if(c.ticks==null){a.ticks=a.tickGenerator(a)}else{if(typeof c.ticks=="number"){if(c.ticks>0){a.ticks=a.tickGenerator(a)}}else{if(c.ticks){var b=c.ticks;if(Object.isFunction(b)){b=b({min:a.min,max:a.max})}b.each(function(g,f){var d=null;var e=null;if(typeof g=="object"){d=g[0];if(g.length>1){e=g[1]}}else{d=g}if(!e){e=a.tickFormatter(d,a)}a.ticks[f]={v:d,label:e}}.bind(this))}}}if(c.autoscaleMargin!=null&&a.ticks.length>0){if(c.min==null){a.min=Math.min(a.min,a.ticks[0].v)}if(c.max==null&&a.ticks.length>1){a.max=Math.min(a.max,a.ticks[a.ticks.length-1].v)}}},setSpacing:function(){var c,f=[],b;for(c=0;c<this.yaxis.ticks.length;++c){b=this.yaxis.ticks[c].label;if(b){f.push('<div class="tickLabel">'+b+"</div>")}}if(f.length>0){var a=new Element("div",{style:"position:absolute;top:-10000px;font-size:smaller"});a.update(f.join(""));this.domObj.insert(a);this.yLabelMaxWidth=a.getWidth();this.yLabelMaxHeight=a.select("div")[0].getHeight();a.remove()}var e=this.options.grid.borderWidth;if(this.options.points.show){e=Math.max(e,this.options.points.radius+this.options.points.lineWidth/2)}for(c=0;c<this.graphData.length;++c){if(this.graphData[c].points.show){e=Math.max(e,this.graphData[c].points.radius+this.graphData[c].points.lineWidth/2)}}this.chartOffset.left=this.chartOffset.right=this.chartOffset.top=this.chartOffset.bottom=e;this.chartOffset.left+=this.yLabelMaxWidth+this.options.grid.labelMargin;this.chartWidth=this.canvasWidth-this.chartOffset.left-this.chartOffset.right;this.xLabelBoxWidth=this.chartWidth/6;f=[];for(c=0;c<this.xaxis.ticks.length;++c){b=this.xaxis.ticks[c].label;if(b){f.push('<span class="tickLabel" width="'+this.xLabelBoxWidth+'">'+b+"</span>")}}var d=0;if(f.length>0){var a=new Element("div",{style:"position:absolute;top:-10000px;font-size:smaller"});a.update(f.join(""));this.domObj.appendChild(a);d=a.getHeight();a.remove()}this.chartOffset.bottom+=d+this.options.grid.labelMargin;this.chartHeight=this.canvasHeight-this.chartOffset.bottom-this.chartOffset.top;this.hozScale=this.chartWidth/(this.xaxis.max-this.xaxis.min);this.vertScale=this.chartHeight/(this.yaxis.max-this.yaxis.min)},draw:function(){if(this.options.bars.show){this.extendXRangeIfNeededByBar();this.setSpacing();this.drawGrid();this.drawBarGraph(this.graphData,this.barDataRange)}else{if(this.options.pies.show){this.preparePieData(this.graphData);this.drawPieGraph(this.graphData)}else{this.drawGrid();for(var a=0;a<this.graphData.length;a++){this.drawGraph(this.graphData[a])}}}},translateHoz:function(a){return(a-this.xaxis.min)*this.hozScale},translateVert:function(a){return this.chartHeight-(a-this.yaxis.min)*this.vertScale},drawGrid:function(){var c;this.context.save();this.context.clearRect(0,0,this.canvasWidth,this.canvasHeight);this.context.translate(this.chartOffset.left,this.chartOffset.top);if(this.options.grid.backgroundColor!=null){this.context.fillStyle=this.options.grid.backgroundColor;this.context.fillRect(0,0,this.chartWidth,this.chartHeight)}if(this.options.grid.coloredAreas){var b=this.options.grid.coloredAreas;if(Object.isFunction(b)){b=b({xmin:this.xaxis.min,xmax:this.xaxis.max,ymin:this.yaxis.min,ymax:this.yaxis.max})}b.each(function(d){if(d.x1==null||d.x1<this.xaxis.min){d.x1=this.xaxis.min}if(d.x2==null||d.x2>this.xaxis.max){d.x2=this.xaxis.max}if(d.y1==null||d.y1<this.yaxis.min){d.y1=this.yaxis.min}if(d.y2==null||d.y2>this.yaxis.max){d.y2=this.yaxis.max}var e;if(d.x1>d.x2){e=d.x1;d.x1=d.x2;d.x2=e}if(d.y1>d.y2){e=d.y1;d.y1=d.y2;d.y2=e}if(d.x1>=this.xaxis.max||d.x2<=this.xaxis.min||d.x1==d.x2||d.y1>=this.yaxis.max||d.y2<=this.yaxis.min||d.y1==d.y2){return}this.context.fillStyle=d.color||this.options.grid.coloredAreasColor;this.context.fillRect(Math.floor(this.translateHoz(d.x1)),Math.floor(this.translateVert(d.y2)),Math.floor(this.translateHoz(d.x2)-this.translateHoz(d.x1)),Math.floor(this.translateVert(d.y1)-this.translateVert(d.y2)))}.bind(this))}this.context.lineWidth=1;this.context.strokeStyle=this.options.grid.tickColor;this.context.beginPath();var a;if(this.options.grid.drawXAxis){this.xaxis.ticks.each(function(d){a=d.v;if(a<=this.xaxis.min||a>=this.xaxis.max){return}this.context.moveTo(Math.floor(this.translateHoz(a))+this.context.lineWidth/2,0);this.context.lineTo(Math.floor(this.translateHoz(a))+this.context.lineWidth/2,this.chartHeight)}.bind(this))}if(this.options.grid.drawYAxis){this.yaxis.ticks.each(function(d){a=d.v;if(a<=this.yaxis.min||a>=this.yaxis.max){return}this.context.moveTo(0,Math.floor(this.translateVert(a))+this.context.lineWidth/2);this.context.lineTo(this.chartWidth,Math.floor(this.translateVert(a))+this.context.lineWidth/2)}.bind(this))}this.context.stroke();if(this.options.grid.borderWidth){this.context.lineWidth=this.options.grid.borderWidth;this.context.strokeStyle=this.options.grid.color;this.context.lineJoin="round";this.context.strokeRect(0,0,this.chartWidth,this.chartHeight);this.context.restore()}},insertLabels:function(){this.domObj.select(".tickLabels").invoke("remove");var c,b;var a='<div class="tickLabels" style="font-size:smaller;color:'+this.options.grid.color+'">';this.xaxis.ticks.each(function(d){if(!d.label||d.v<this.xaxis.min||d.v>this.xaxis.max){return}a+='<div style="position:absolute;top:'+(this.chartOffset.top+this.chartHeight+this.options.grid.labelMargin)+"px;left:"+(this.chartOffset.left+this.translateHoz(d.v)-this.xLabelBoxWidth/2)+"px;width:"+this.xLabelBoxWidth+'px;text-align:center" class="tickLabel">'+d.label+"</div>"}.bind(this));this.yaxis.ticks.each(function(d){if(!d.label||d.v<this.yaxis.min||d.v>this.yaxis.max){return}a+='<div id="ylabels" style="position:absolute;top:'+(this.chartOffset.top+this.translateVert(d.v)-this.yLabelMaxHeight/2)+"px;left:0;width:"+this.yLabelMaxWidth+'px;text-align:right" class="tickLabel">'+d.label+"</div>"}.bind(this));a+="</div>";this.domObj.insert(a)},drawGraph:function(a){if(a.lines.show||(!a.bars.show&&!a.points.show)){this.drawGraphLines(a)}if(a.bars.show){this.drawGraphBar(a)}if(a.points.show){this.drawGraphPoints(a)}},plotLine:function(f,e){var d,l=null,a=null,m=null;this.context.beginPath();for(var g=0;g<f.length;++g){d=l;l=f[g];if(d==null||l==null){continue}var c=d[0],k=d[1],b=l[0],h=l[1];if(k<=h&&k<this.yaxis.min){if(h<this.yaxis.min){continue}c=(this.yaxis.min-k)/(h-k)*(b-c)+c;k=this.yaxis.min}else{if(h<=k&&h<this.yaxis.min){if(k<this.yaxis.min){continue}b=(this.yaxis.min-k)/(h-k)*(b-c)+c;h=this.yaxis.min}}if(k>=h&&k>this.yaxis.max){if(h>this.yaxis.max){continue}c=(this.yaxis.max-k)/(h-k)*(b-c)+c;k=this.yaxis.max}else{if(h>=k&&h>this.yaxis.max){if(k>this.yaxis.max){continue}b=(this.yaxis.max-k)/(h-k)*(b-c)+c;h=this.yaxis.max}}if(c<=b&&c<this.xaxis.min){if(b<this.xaxis.min){continue}k=(this.xaxis.min-c)/(b-c)*(h-k)+k;c=this.xaxis.min}else{if(b<=c&&b<this.xaxis.min){if(c<this.xaxis.min){continue}h=(this.xaxis.min-c)/(b-c)*(h-k)+k;b=this.xaxis.min}}if(c>=b&&c>this.xaxis.max){if(b>this.xaxis.max){continue}k=(this.xaxis.max-c)/(b-c)*(h-k)+k;c=this.xaxis.max}else{if(b>=c&&b>this.xaxis.max){if(c>this.xaxis.max){continue}h=(this.xaxis.max-c)/(b-c)*(h-k)+k;b=this.xaxis.max}}if(a!=this.translateHoz(c)||m!=this.translateVert(k)+e){this.context.moveTo(this.translateHoz(c),this.translateVert(k)+e)}a=this.translateHoz(b);m=this.translateVert(h)+e;this.context.lineTo(a,m)}this.context.stroke()},plotLineArea:function(f){var e,o=null;var a=Math.min(Math.max(0,this.yaxis.min),this.yaxis.max);var l,d=0;var n=false;for(var g=0;g<f.length;++g){e=o;o=f[g];if(n&&e!=null&&o==null){this.context.lineTo(this.translateHoz(d),this.translateVert(a));this.context.fill();n=false;continue}if(e==null||o==null){continue}var c=e[0],m=e[1],b=o[0],k=o[1];if(c<=b&&c<this.xaxis.min){if(b<this.xaxis.min){continue}m=(this.xaxis.min-c)/(b-c)*(k-m)+m;c=this.xaxis.min}else{if(b<=c&&b<this.xaxis.min){if(c<this.xaxis.min){continue}k=(this.xaxis.min-c)/(b-c)*(k-m)+m;b=this.xaxis.min}}if(c>=b&&c>this.xaxis.max){if(b>this.xaxis.max){continue}m=(this.xaxis.max-c)/(b-c)*(k-m)+m;c=this.xaxis.max}else{if(b>=c&&b>this.xaxis.max){if(c>this.xaxis.max){continue}k=(this.xaxis.max-c)/(b-c)*(k-m)+m;b=this.xaxis.max}}if(!n){this.context.beginPath();this.context.moveTo(this.translateHoz(c),this.translateVert(a));n=true}if(m>=this.yaxis.max&&k>=this.yaxis.max){this.context.lineTo(this.translateHoz(c),this.translateVert(this.yaxis.max));this.context.lineTo(this.translateHoz(b),this.translateVert(this.yaxis.max));continue}else{if(m<=this.yaxis.min&&k<=this.yaxis.min){this.context.lineTo(this.translateHoz(c),this.translateVert(this.yaxis.min));this.context.lineTo(this.translateHoz(b),this.translateVert(this.yaxis.min));continue}}var p=c,h=b;if(m<=k&&m<this.yaxis.min&&k>=this.yaxis.min){c=(this.yaxis.min-m)/(k-m)*(b-c)+c;m=this.yaxis.min}else{if(k<=m&&k<this.yaxis.min&&m>=this.yaxis.min){b=(this.yaxis.min-m)/(k-m)*(b-c)+c;k=this.yaxis.min}}if(m>=k&&m>this.yaxis.max&&k<=this.yaxis.max){c=(this.yaxis.max-m)/(k-m)*(b-c)+c;m=this.yaxis.max}else{if(k>=m&&k>this.yaxis.max&&m<=this.yaxis.max){b=(this.yaxis.max-m)/(k-m)*(b-c)+c;k=this.yaxis.max}}if(c!=p){if(m<=this.yaxis.min){l=this.yaxis.min}else{l=this.yaxis.max}this.context.lineTo(this.translateHoz(p),this.translateVert(l));this.context.lineTo(this.translateHoz(c),this.translateVert(l))}this.context.lineTo(this.translateHoz(c),this.translateVert(m));this.context.lineTo(this.translateHoz(b),this.translateVert(k));if(b!=h){if(k<=this.yaxis.min){l=this.yaxis.min}else{l=this.yaxis.max}this.context.lineTo(this.translateHoz(h),this.translateVert(l));this.context.lineTo(this.translateHoz(b),this.translateVert(l))}d=Math.max(b,h)}if(n){this.context.lineTo(this.translateHoz(d),this.translateVert(a));this.context.fill()}},drawGraphLines:function(c){this.context.save();this.context.translate(this.chartOffset.left,this.chartOffset.top);this.context.lineJoin="round";var b=c.lines.lineWidth;var a=c.shadowSize;if(a>0){this.context.lineWidth=a/2;this.context.strokeStyle="rgba(0,0,0,0.1)";this.plotLine(c.data,b/2+a/2+this.context.lineWidth/2);this.context.lineWidth=a/2;this.context.strokeStyle="rgba(0,0,0,0.2)";this.plotLine(c.data,b/2+this.context.lineWidth/2)}this.context.lineWidth=b;this.context.strokeStyle=c.color;if(c.lines.fill){this.context.fillStyle=c.lines.fillColor!=null?c.lines.fillColor:this.parseColor(c.color).scale(null,null,null,0.4).toString();this.plotLineArea(c.data,0)}this.plotLine(c.data,0);this.context.restore()},plotPoints:function(d,b,e){for(var c=0;c<d.length;++c){if(d[c]==null){continue}var a=d[c][0],f=d[c][1];if(a<this.xaxis.min||a>this.xaxis.max||f<this.yaxis.min||f>this.yaxis.max){continue}this.context.beginPath();this.context.arc(this.translateHoz(a),this.translateVert(f),b,0,2*Math.PI,true);if(e){this.context.fill()}this.context.stroke()}},plotPointShadows:function(d,e,b){for(var c=0;c<d.length;++c){if(d[c]==null){continue}var a=d[c][0],f=d[c][1];if(a<this.xaxis.min||a>this.xaxis.max||f<this.yaxis.min||f>this.yaxis.max){continue}this.context.beginPath();this.context.arc(this.translateHoz(a),this.translateVert(f)+e,b,0,Math.PI,false);this.context.stroke()}},drawGraphPoints:function(c){this.context.save();this.context.translate(this.chartOffset.left,this.chartOffset.top);var b=c.lines.lineWidth;var a=c.shadowSize;if(a>0){this.context.lineWidth=a/2;this.context.strokeStyle="rgba(0,0,0,0.1)";this.plotPointShadows(c.data,a/2+this.context.lineWidth/2,c.points.radius);this.context.lineWidth=a/2;this.context.strokeStyle="rgba(0,0,0,0.2)";this.plotPointShadows(c.data,this.context.lineWidth/2,c.points.radius)}this.context.lineWidth=c.points.lineWidth;this.context.strokeStyle=c.color;this.context.fillStyle=c.points.fillColor!=null?c.points.fillColor:c.color;this.plotPoints(c.data,c.points.radius,c.points.fill);this.context.restore()},preparePieData:function(b){for(i=0;i<b.length;i++){var a=0;for(j=0;j<b[i].data.length;j++){a+=parseInt(b[i].data[j][1])}b[i].data=a}},drawPieShadow:function(b,c,a){this.context.beginPath();this.context.moveTo(b,c);this.context.fillStyle="rgba(0,0,0,"+0.1+")";startAngle=0;endAngle=(Math.PI/180)*360;this.context.arc(b+2,c+2,a+(this.options.shadowSize/2),startAngle,endAngle,false);this.context.fill();this.context.closePath()},drawPieGraph:function(k){var h=0;var e=0;var d=this.chartWidth/2;var c=this.chartHeight/2;var f=0;var a=0;var l=this.options.pies.fontSize;var g=this.options.pies.labelWidth;if(!this.options.pies.autoScale){e=this.options.pies.radius}else{e=(this.chartHeight*0.85)/2}var b=e*1.05;for(i=0;i<k.length;i++){h+=k[i].data}totalPct=0;this.drawPieShadow(d,c,e,0,0);k.each(function(z,r){var A=z.data/h;f=a;a+=A*(2*Math.PI);var y=(a-f)/2+f;var v=d+Math.cos(y)*b;var u=c+Math.sin(y)*b;var q=d;var n=c;var m=null;var p=null;var o=0;var w=0;this.context.beginPath();this.context.moveTo(q,n);this.context.arc(q,n,e,f,a,false);this.context.closePath();this.context.fillStyle=this.parseColor(z.color).scale(null,null,null,this.options.pies.fillOpacity).toString();if(this.options.pies.fill){this.context.fill()}if(y<=0.25*(2*Math.PI)){m="left";p="top";o=v;w=u+l}else{if(y>0.25*(2*Math.PI)&&y<=0.5*(2*Math.PI)){m="left";p="bottom";o=v-g;w=u}else{if(y>0.5*(2*Math.PI)&&y<=0.75*(2*Math.PI)){m="right";p="bottom";o=v-g;w=u-l}else{m="right";p="bottom";o=v;w=u-l}}}o=o+"px";w=w+"px";var t=Math.round(A*100);if(r==k.length-1){if(t+totalPct<100){t=t+1}else{if(t+totalPct>100){t=t-1}}}var s='<div style="position: absolute;zindex:11; width:'+g+"px;fontSize:"+l+"px;overflow:hidden;top:"+w+";left:"+o+";textAlign:"+m+";verticalAlign:"+p+'">'+t+"%</div>";this.domObj.insert(s);totalPct=totalPct+t}.bind(this))},drawBarGraph:function(a,b){a.each(function(d,c){this.drawGraphBars(d,c,a.size(),b)}.bind(this))},drawGraphBar:function(a){this.drawGraphBars(a,0,this.graphData.length,this.barDataRange)},plotBars:function(k,g,m,f,l,a,h,e){var d=0;if(h%2==0){d=(1+((a-h/2)-1))*m}else{var c=0.5;if(a==(h/2-c)){d=-m*c}else{d=(c+(a-Math.round(h/2)))*m}}var b=[];g.each(function(r){if(!r){return}var v=r[0],u=r[1];var w=true,q=true,s=true;var p=v+d,z=v+m+d,n=0,t=u;var o={};o.left=p;o.right=z;o.value=t;b.push(o);if(z<this.xaxis.min||p>this.xaxis.max||t<this.yaxis.min||n>this.yaxis.max){return}if(p<this.xaxis.min){p=this.xaxis.min;w=false}if(z>this.xaxis.max){z=this.xaxis.max;s=false}if(n<this.yaxis.min){n=this.yaxis.min}if(t>this.yaxis.max){t=this.yaxis.max;q=false}if(k.bars.showShadow&&k.shadowSize>0){this.plotShadowOutline(k,this.context.strokeStyle,p,n,t,z,w,s,q)}if(l){this.context.beginPath();this.context.moveTo(this.translateHoz(p),this.translateVert(n)+f);this.context.lineTo(this.translateHoz(p),this.translateVert(t)+f);this.context.lineTo(this.translateHoz(z),this.translateVert(t)+f);this.context.lineTo(this.translateHoz(z),this.translateVert(n)+f);this.context.fill()}if(w||s||q){this.context.beginPath();this.context.moveTo(this.translateHoz(p),this.translateVert(n)+f);if(w){this.context.lineTo(this.translateHoz(p),this.translateVert(t)+f)}else{this.context.moveTo(this.translateHoz(p),this.translateVert(t)+f)}if(q){this.context.lineTo(this.translateHoz(z),this.translateVert(t)+f)}else{this.context.moveTo(this.translateHoz(z),this.translateVert(t)+f)}if(s){this.context.lineTo(this.translateHoz(z),this.translateVert(n)+f)}else{this.context.moveTo(this.translateHoz(z),this.translateVert(n)+f)}this.context.stroke()}}.bind(this));e.push(b)},plotShadowOutline:function(h,o,c,a,g,l,k,f,e){var m=0.3;for(var b=1;b<=this.options.shadowSize/2;b++){var d=m*b;this.context.beginPath();this.context.strokeStyle="rgba(0,0,0,"+d+")";this.context.moveTo(this.translateHoz(c)+b,this.translateVert(a));if(k){this.context.lineTo(this.translateHoz(c)+b,this.translateVert(g)-b)}else{this.context.moveTo(this.translateHoz(c)+b,this.translateVert(g)-b)}if(e){this.context.lineTo(this.translateHoz(l)+b,this.translateVert(g)-b)}else{this.context.moveTo(this.translateHoz(l)+b,this.translateVert(g)-b)}if(f){this.context.lineTo(this.translateHoz(l)+b,this.translateVert(a))}else{this.context.lineTo(this.translateHoz(l)+b,this.translateVert(a))}this.context.stroke();this.context.closePath()}this.context.strokeStyle=o},drawGraphBars:function(d,a,b,f){this.context.save();this.context.translate(this.chartOffset.left,this.chartOffset.top);this.context.lineJoin="round";var e=d.bars.barWidth;var c=Math.min(d.bars.lineWidth,e);this.context.lineWidth=c;this.context.strokeStyle=d.color;if(d.bars.fill){this.context.fillStyle=d.bars.fillColor!=null?d.bars.fillColor:this.parseColor(d.color).scale(null,null,null,this.options.bars.fillOpacity).toString()}this.plotBars(d,d.data,e,0,d.bars.fill,a,b,f);this.context.restore()},insertLegend:function(){this.domObj.select(".legend").invoke("remove");if(!this.options.legend.show){return}var h=[];var f=false;this.graphData.each(function(n,m){if(!n.label){return}if(m%this.options.legend.noColumns==0){if(f){h.push("</tr>")}h.push("<tr>");f=true}var c=n.label;if(this.options.legend.labelFormatter!=null){c=this.options.legend.labelFormatter(c)}h.push('<td class="legendColorBox"><div style="border:1px solid '+this.options.legend.labelBoxBorderColor+';padding:1px"><div style="width:14px;height:10px;background-color:'+n.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+c+"</td>")}.bind(this));if(f){h.push("</tr>")}if(h.length>0){var l='<table style="font-size:smaller;color:'+this.options.grid.color+'">'+h.join("")+"</table>";if($(this.options.legend.container)!=null){$(this.options.legend.container).insert(l)}else{var k="";var b=this.options.legend.position,d=this.options.legend.margin;if(b.charAt(0)=="n"){k+="top:"+(d+this.chartOffset.top)+"px;"}else{if(b.charAt(0)=="s"){k+="bottom:"+(d+this.chartOffset.bottom)+"px;"}}if(b.charAt(1)=="e"){k+="right:"+(d+this.chartOffset.right)+"px;"}else{if(b.charAt(1)=="w"){k+="left:"+(d+this.chartOffset.bottom)+"px;"}}var a=this.domObj.insert('<div class="ProtoChart-legend" style="border: 1px solid '+this.options.legend.borderColor+"; position:absolute;z-index:2;"+k+'">'+l+"</div>").getElementsBySelector("div.ProtoChart-legend").first();if(this.options.legend.backgroundOpacity!=0){var g=this.options.legend.backgroundColor;if(g==null){var e=(this.options.grid.backgroundColor!=null)?this.options.grid.backgroundColor:this.extractColor(a);g=this.parseColor(e).adjust(null,null,null,1).toString()}this.domObj.insert('<div class="ProtoChart-legend-bg" style="position:absolute;width:'+a.getWidth()+"px;height:"+a.getHeight()+"px;"+k+"background-color:"+g+';"> </div>').select("div.ProtoChart-legend-bg").first().setStyle({opacity:this.options.legend.backgroundOpacity})}}}},onMouseMove:function(c){var d=c||window.event;if(d.pageX==null&&d.clientX!=null){var h=document.documentElement,a=$(document.body);this.lastMousePos.pageX=d.clientX+(h&&h.scrollLeft||a.scrollLeft||0);this.lastMousePos.pageY=d.clientY+(h&&h.scrollTop||a.scrollTop||0)}else{this.lastMousePos.pageX=d.pageX;this.lastMousePos.pageY=d.pageY}var f=this.overlay.cumulativeOffset();var g={x:this.xaxis.min+(d.pageX-f.left-this.chartOffset.left)/this.hozScale,y:this.yaxis.max-(d.pageY-f.top-this.chartOffset.top)/this.vertScale};if(this.options.mouse.track&&this.selectionInterval==null){this.hit(c,g)}this.domObj.fire("ProtoChart:mousemove",[g])},onMouseDown:function(a){if(a.which!=1){return}document.body.focus();if(document.onselectstart!==undefined&&this.workarounds.onselectstart==null){this.workarounds.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!==undefined&&this.workarounds.ondrag==null){this.workarounds.ondrag=document.ondrag;document.ondrag=function(){return false}}this.setSelectionPos(this.selection.first,a);if(this.selectionInterval!=null){clearInterval(this.selectionInterval)}this.lastMousePos.pageX=null;this.selectionInterval=setInterval(this.updateSelectionOnMouseMove.bind(this),200);this.overlay.observe("mouseup",this.onSelectionMouseUp.bind(this))},onClick:function(b){if(this.ignoreClick){this.ignoreClick=false;return}var c=this.overlay.cumulativeOffset();var d={x:this.xaxis.min+(b.pageX-c.left-this.chartOffset.left)/this.hozScale,y:this.yaxis.max-(b.pageY-c.top-this.chartOffset.top)/this.vertScale};this.domObj.fire("ProtoChart:plotclick",[d]);if(this.options.allowDataClick){var a={};if(this.options.points.show){a=this.getDataClickPoint(d,this.options);this.domObj.fire("ProtoChart:dataclick",[a])}else{if(this.options.lines.show&&this.options.points.show){a=this.getDataClickPoint(d,this.options);this.domObj.fire("ProtoChart:dataclick",[a])}else{if(this.options.bars.show){if(this.barDataRange.length>0){a=this.getDataClickPoint(d,this.options,this.barDataRange);this.domObj.fire("ProtoChart:dataclick",[a])}}}}}},getDataClickPoint:function(e,c,d){e.x=parseInt(e.x);e.y=parseInt(e.y);var b=e.y.toFixed(0);var a={};a.position=e;a.value="";if(c.points.show){this.graphData.each(function(h){var f=h.data;var g=parseInt(e.x.toFixed(0));if(g<0){g=0}if(f[g]&&b>=f[g][1]-(this.options.points.radius*10)&&b<=f[g][1]+(this.options.points.radius*10)){a.value=f[g][1];throw $break}}.bind(this))}else{if(c.bars.show){xClick=e.x;this.barDataRange.each(function(f){f.each(function(h){var g=h;if(xClick>g.left&&xClick<g.right){a.value=g.value;throw $break}}.bind(this))}.bind(this))}}return a},triggerSelectedEvent:function(){var b,a,d,c;if(this.selection.first.x<=this.selection.second.x){b=this.selection.first.x;a=this.selection.second.x}else{b=this.selection.second.x;a=this.selection.first.x}if(this.selection.first.y>=this.selection.second.y){d=this.selection.first.y;c=this.selection.second.y}else{d=this.selection.second.y;c=this.selection.first.y}b=this.xaxis.min+b/this.hozScale;a=this.xaxis.min+a/this.hozScale;d=this.yaxis.max-d/this.vertScale;c=this.yaxis.max-c/this.vertScale;this.domObj.fire("ProtoChart:selected",[{x1:b,y1:d,x2:a,y2:c}])},onSelectionMouseUp:function(a){if(document.onselectstart!==undefined){document.onselectstart=this.workarounds.onselectstart}if(document.ondrag!==undefined){document.ondrag=this.workarounds.ondrag}if(this.selectionInterval!=null){clearInterval(this.selectionInterval);this.selectionInterval=null}this.setSelectionPos(this.selection.second,a);this.clearSelection();if(!this.selectionIsSane()||a.which!=1){return false}this.drawSelection();this.triggerSelectedEvent();this.ignoreClick=true;return false},setSelectionPos:function(c,a){var b=$(this.overlay).cumulativeOffset();if(this.options.selection.mode=="y"){if(c==this.selection.first){c.x=0}else{c.x=this.chartWidth}}else{c.x=a.pageX-b.left-this.chartOffset.left;c.x=Math.min(Math.max(0,c.x),this.chartWidth)}if(this.options.selection.mode=="x"){if(c==this.selection.first){c.y=0}else{c.y=this.chartHeight}}else{c.y=a.pageY-b.top-this.chartOffset.top;c.y=Math.min(Math.max(0,c.y),this.chartHeight)}},updateSelectionOnMouseMove:function(){if(this.lastMousePos.pageX==null){return}this.setSelectionPos(this.selection.second,this.lastMousePos);this.clearSelection();if(this.selectionIsSane()){this.drawSelection()}},clearSelection:function(){if(this.prevSelection==null){return}var a=Math.min(this.prevSelection.first.x,this.prevSelection.second.x),d=Math.min(this.prevSelection.first.y,this.prevSelection.second.y),b=Math.abs(this.prevSelection.second.x-this.prevSelection.first.x),c=Math.abs(this.prevSelection.second.y-this.prevSelection.first.y);this.overlayContext.clearRect(a+this.chartOffset.left-this.overlayContext.lineWidth,d+this.chartOffset.top-this.overlayContext.lineWidth,b+this.overlayContext.lineWidth*2,c+this.overlayContext.lineWidth*2);this.prevSelection=null},setSelection:function(a){this.clearSelection();if(this.options.selection.mode=="x"){this.selection.first.y=0;this.selection.second.y=this.chartHeight}else{this.selection.first.y=(this.yaxis.max-a.y1)*this.vertScale;this.selection.second.y=(this.yaxis.max-a.y2)*this.vertScale}if(this.options.selection.mode=="y"){this.selection.first.x=0;this.selection.second.x=this.chartWidth}else{this.selection.first.x=(a.x1-this.xaxis.min)*this.hozScale;this.selection.second.x=(a.x2-this.xaxis.min)*this.hozScale}this.drawSelection();this.triggerSelectedEvent()},drawSelection:function(){if(this.prevSelection!=null&&this.selection.first.x==this.prevSelection.first.x&&this.selection.first.y==this.prevSelection.first.y&&this.selection.second.x==this.prevSelection.second.x&&this.selection.second.y==this.prevSelection.second.y){return}this.overlayContext.strokeStyle=this.parseColor(this.options.selection.color).scale(null,null,null,0.8).toString();this.overlayContext.lineWidth=1;this.context.lineJoin="round";this.overlayContext.fillStyle=this.parseColor(this.options.selection.color).scale(null,null,null,0.4).toString();this.prevSelection={first:{x:this.selection.first.x,y:this.selection.first.y},second:{x:this.selection.second.x,y:this.selection.second.y}};var a=Math.min(this.selection.first.x,this.selection.second.x),d=Math.min(this.selection.first.y,this.selection.second.y),b=Math.abs(this.selection.second.x-this.selection.first.x),c=Math.abs(this.selection.second.y-this.selection.first.y);this.overlayContext.fillRect(a+this.chartOffset.left,d+this.chartOffset.top,b,c);this.overlayContext.strokeRect(a+this.chartOffset.left,d+this.chartOffset.top,b,c)},selectionIsSane:function(){var a=5;return Math.abs(this.selection.second.x-this.selection.first.x)>=a&&Math.abs(this.selection.second.y-this.selection.first.y)>=a},defaultTrackFormatter:function(a){return"["+a.x+", "+a.y+"]"},clearHit:function(){if(this.prevHit){this.overlayContext.clearRect(this.translateHoz(this.prevHit.x)+this.chartOffset.left-this.options.mouse.radius*2,this.translateVert(this.prevHit.y)+this.chartOffset.top-this.options.mouse.radius*2,this.options.mouse.radius*3+this.options.points.lineWidth*3,this.options.mouse.radius*3+this.options.points.lineWidth*3);this.prevHit=null}},hit:function(a,r){var f={dist:Number.MAX_VALUE,x:null,y:null,mouse:null};for(var q=0,o,h,d;q<this.graphData.length;q++){if(!this.graphData[q].mouse.track){continue}o=this.graphData[q].data;h=(this.hozScale*this.graphData[q].mouse.sensibility);d=(this.vertScale*this.graphData[q].mouse.sensibility);for(var k=0,s,l;k<o.length;k++){s=this.hozScale*Math.abs(o[k][0]-r.x);l=this.vertScale*Math.abs(o[k][1]-r.y);if(s<h&&l<d&&(s+l)<f.dist){f.dist=(s+l);f.x=o[k][0];f.y=o[k][1];f.mouse=this.graphData[q].mouse}}}if(f.mouse&&f.mouse.track&&!this.prevHit||(this.prevHit&&f.x!=this.prevHit.x&&f.y!=this.prevHit.y)){var c=this.domObj.select("."+this.options.mouse.clsName).first();if(!c){var t="",b=this.options.mouse.position,g=this.options.mouse.margin;if(b.charAt(0)=="n"){t+="top:"+(g+this.chartOffset.top)+"px;"}else{if(b.charAt(0)=="s"){t+="bottom:"+(g+this.chartOffset.bottom)+"px;"}}if(b.charAt(1)=="e"){t+="right:"+(g+this.chartOffset.right)+"px;"}else{if(b.charAt(1)=="w"){t+="left:"+(g+this.chartOffset.bottom)+"px;"}}this.domObj.insert('<div class="'+this.options.mouse.clsName+'" style="display:none;position:absolute;'+t+'"></div>');return}if(f.x!==null&&f.y!==null){c.setStyle({display:"block"});this.clearHit();if(f.mouse.lineColor!=null){this.overlayContext.save();this.overlayContext.translate(this.chartOffset.left,this.chartOffset.top);this.overlayContext.lineWidth=this.options.points.lineWidth;this.overlayContext.strokeStyle=f.mouse.lineColor;this.overlayContext.fillStyle="#ffffff";this.overlayContext.beginPath();this.overlayContext.arc(this.translateHoz(f.x),this.translateVert(f.y),this.options.mouse.radius,0,2*Math.PI,true);this.overlayContext.fill();this.overlayContext.stroke();this.overlayContext.restore()}this.prevHit=f;var e=f.mouse.trackDecimals;if(e==null||e<0){e=0}if(!this.options.mouse.fixedPosition){c.setStyle({left:(this.translateHoz(f.x)+this.options.mouse.radius+10)+"px",top:(this.translateVert(f.y)+this.options.mouse.radius+10)+"px"})}c.innerHTML=f.mouse.trackFormatter({x:f.x.toFixed(e),y:f.y.toFixed(e)});this.domObj.fire("ProtoChart:hit",[f])}else{if(this.options.prevHit){c.setStyle({display:"none"});this.clearHit()}}}},floorInBase:function(b,a){return a*Math.floor(b/a)},extractColor:function(b){var a;do{a=$(b).getStyle("background-color").toLowerCase();if(a!=""&&a!="transparent"){break}b=b.up(0)}while(b.nodeName.toLowerCase()!="body");if(a=="rgba(0, 0, 0, 0)"){return"transparent"}return a},parseColor:function(c){var a;if((a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))){return new Proto.Color(parseInt(a[1]),parseInt(a[2]),parseInt(a[3]))}if((a=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c))){return new Proto.Color(parseInt(a[1]),parseInt(a[2]),parseInt(a[3]),parseFloat(a[4]))}if((a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))){return new Proto.Color(parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55)}if((a=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c))){return new Proto.Color(parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55,parseFloat(a[4]))}if((a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))){return new Proto.Color(parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16))}if((a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))){return new Proto.Color(parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16))}var b=c.strip().toLowerCase();if(b=="transparent"){return new Proto.Color(255,255,255,0)}return new Proto.Color(100,100,100,1)}});if(!Proto){var Proto={}}Proto.Color=Class.create({initialize:function(h,f,d,e){this.rgba=["r","g","b","a"];var c=4;while(-1<--c){this[this.rgba[c]]=arguments[c]||((c==3)?1:0)}},toString:function(){if(this.a>=1){return"rgb("+[this.r,this.g,this.b].join(",")+")"}else{return"rgba("+[this.r,this.g,this.b,this.a].join(",")+")"}},scale:function(c,b,d,a){x=4;while(-1<--x){if(arguments[x]!=null){this[this.rgba[x]]*=arguments[x]}}return this.normalize()},adjust:function(c,b,d,a){x=4;while(-1<--x){if(arguments[x]!=null){this[this.rgba[x]]+=arguments[x]}}return this.normalize()},clone:function(){return new Proto.Color(this.r,this.b,this.g,this.a)},limit:function(b,a,c){return Math.max(Math.min(b,c),a)},normalize:function(){this.r=this.limit(parseInt(this.r),0,255);this.g=this.limit(parseInt(this.g),0,255);this.b=this.limit(parseInt(this.b),0,255);this.a=this.limit(this.a,0,1);return this}});
