1.0 1.0
authorDmitry Baranovskiy <dbaranovskiy@Fresh-Air.sydney.atlassian.com>
Tue, 6 Oct 2009 23:33:03 +0000 (10:33 +1100)
committerDmitry Baranovskiy <dbaranovskiy@Fresh-Air.sydney.atlassian.com>
Tue, 6 Oct 2009 23:33:03 +0000 (10:33 +1100)
raphael-min.js
raphael.js

index 462a3da..b4895df 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * Raphael 1.0 RC2 - JavaScript Vector Library
+ * Raphael 1.0 - JavaScript Vector Library
  *
  * Copyright (c) 2008 - 2009 Dmitry Baranovskiy (http://raphaeljs.com)
  * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
  */
-window.Raphael=(function(){var X=/[, ]+/,g=document,K=window,O={was:"Raphael" in window,is:window.Raphael},f=function(){if(f.is(arguments[0],"array")){var aa=[],e=arguments[0],R=l.apply(f,e.splice(0,3+f.is(e[0],"number")));for(var Z=0,ab=e.length;Z<ab;Z++){var Y=e[Z]||{};Y.type in {circle:1,rect:1,path:1,ellipse:1,text:1,image:1}&&aa.push(R[Y.type]().attr(Y));}return aa;}return l.apply(f,arguments);},b={},p={"clip-rect":"0 0 10e9 10e9",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},t={"clip-rect":"csv",cx:"number",cy:"number",fill:"colour","fill-opacity":"number","font-size":"number",height:"number",opacity:"number",path:"path",r:"number",rotation:"csv",rx:"number",ry:"number",scale:"csv",stroke:"colour","stroke-opacity":"number","stroke-width":"number",translation:"csv",width:"number",x:"number",y:"number"},u=["click","dblclick","mousedown","mousemove","mouseout","mouseover","mouseup"];f.version="1.0 RC2";f.type=(window.SVGAngle||document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML");f.svg=!(f.vml=f.type=="VML");f.idGenerator=0;f.fn={};f.is=function(i,e){e=(e+"").toLowerCase();if((e=="object"||e=="undefined")&&typeof i==e){return true;}if(i==null&&e=="null"){return true;}return Object.prototype.toString.call(i).replace(/^\[object\s+|\]$/gi,"").toLowerCase()==e;};f.setWindow=function(e){K=e;g=K.document;};f.hsb2rgb=W(function(ae,ac,ai){if(f.is(ae,"object")&&"h" in ae&&"s" in ae&&"b" in ae){ai=ae.b;ac=ae.s;ae=ae.h;}var Z,aa,aj;if(ai==0){return{r:0,g:0,b:0,hex:"#000"};}if(ae>1||ac>1||ai>1){ae/=255;ac/=255;ai/=255;}var ab=Math.floor(ae*6),af=(ae*6)-ab,Y=ai*(1-ac),R=ai*(1-(ac*af)),ak=ai*(1-(ac*(1-af)));Z=[ai,R,Y,Y,ak,ai,ai][ab];aa=[ak,ai,ai,R,Y,Y,ak][ab];aj=[Y,Y,ak,ai,ai,R,Y][ab];Z*=255;aa*=255;aj*=255;var ag={r:Z,g:aa,b:aj},e=Math.round(Z).toString(16),ad=Math.round(aa).toString(16),ah=Math.round(aj).toString(16);if(e.length==1){e="0"+e;}if(ad.length==1){ad="0"+ad;}if(ah.length==1){ah="0"+ah;}ag.hex="#"+e+ad+ah;return ag;},f);f.rgb2hsb=W(function(e,i,ac){if(f.is(e,"object")&&"r" in e&&"g" in e&&"b" in e){ac=e.b;i=e.g;e=e.r;}if(f.is(e,"string")){var ae=f.getRGB(e);e=ae.r;i=ae.g;ac=ae.b;}if(e>1||i>1||ac>1){e/=255;i/=255;ac/=255;}var ab=Math.max(e,i,ac),R=Math.min(e,i,ac),Z,Y,aa=ab;if(R==ab){return{h:0,s:0,b:ab};}else{var ad=(ab-R);Y=ad/ab;if(e==ab){Z=(i-ac)/ad;}else{if(i==ab){Z=2+((ac-e)/ad);}else{Z=4+((e-i)/ad);}}Z/=6;if(Z<0){Z+=1;}if(Z>1){Z-=1;}}return{h:Z,s:Y,b:aa};},f);f._path2string=function(){var Y="",ab;for(var R=0,Z=this.length;R<Z;R++){for(var e=0,aa=this[R].length;e<aa;e++){Y+=this[R][e];e&&e!=aa-1&&(Y+=",");}R!=Z-1&&(Y+="\n");}return Y.replace(/,(?=-)/g,"");};function W(Y,i,e){function R(){var Z=Array.prototype.splice.call(arguments,0,arguments.length),aa=Z.join("\u25ba");R.cache=R.cache||{};R.count=R.count||[];if(aa in R.cache){return e?e(R.cache[aa]):R.cache[aa];}if(R.count.length>1000){delete R.cache[R.count.unshift()];}R.count.push(aa);R.cache[aa]=Y.apply(i,Z);return e?e(R.cache[aa]):R.cache[aa];}return R;}f.getRGB=W(function(e){var ae={aliceblue:"#f0f8ff",amethyst:"#96c",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"},aa;if((e+"").toLowerCase() in ae){e=ae[(e+"").toLowerCase()];}if(!e){return{r:0,g:0,b:0,hex:"#000"};}if(e=="none"){return{r:-1,g:-1,b:-1,hex:"none"};}var R,Y,ad,ab=(e+"").match(/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i);if(ab){if(ab[2]){ad=parseInt(ab[2].substring(5),16);Y=parseInt(ab[2].substring(3,5),16);R=parseInt(ab[2].substring(1,3),16);}if(ab[3]){ad=parseInt(ab[3].substring(3)+ab[3].substring(3),16);Y=parseInt(ab[3].substring(2,3)+ab[3].substring(2,3),16);R=parseInt(ab[3].substring(1,2)+ab[3].substring(1,2),16);}if(ab[4]){ab=ab[4].split(/\s*,\s*/);R=parseFloat(ab[0]);Y=parseFloat(ab[1]);ad=parseFloat(ab[2]);}if(ab[5]){ab=ab[5].split(/\s*,\s*/);R=parseFloat(ab[0])*2.55;Y=parseFloat(ab[1])*2.55;ad=parseFloat(ab[2])*2.55;}if(ab[6]){ab=ab[6].split(/\s*,\s*/);R=parseFloat(ab[0]);Y=parseFloat(ab[1]);ad=parseFloat(ab[2]);return f.hsb2rgb(R,Y,ad);}if(ab[7]){ab=ab[7].split(/\s*,\s*/);R=parseFloat(ab[0])*2.55;Y=parseFloat(ab[1])*2.55;ad=parseFloat(ab[2])*2.55;return f.hsb2rgb(R,Y,ad);}ab={r:R,g:Y,b:ad};var i=Math.round(R).toString(16),Z=Math.round(Y).toString(16),ac=Math.round(ad).toString(16);(i.length==1)&&(i="0"+i);(Z.length==1)&&(Z="0"+Z);(ac.length==1)&&(ac="0"+ac);ab.hex="#"+i+Z+ac;aa=ab;}else{aa={r:-1,g:-1,b:-1,hex:"none",error:1};}return aa;},f);f.getColor=function(i){var R=this.getColor.start=this.getColor.start||{h:0,s:1,b:i||0.75},e=this.hsb2rgb(R.h,R.s,R.b);R.h+=0.075;if(R.h>1){R.h=0;R.s-=0.2;if(R.s<=0){this.getColor.start={h:0,s:1,b:R.b};}}return e.hex;};f.getColor.reset=function(){delete this.start;};f.parsePathString=W(function(e){if(!e){return null;}var R={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=[];if(f.is(e,"array")&&f.is(e[0],"array")){i=s(e);}if(!i.length){(e+"").replace(/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,function(Z,Y,ac){var ab=[],aa=Y.toLowerCase();ac.replace(/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,function(ae,ad){ad&&ab.push(+ad);});while(ab.length>=R[aa]){i.push([Y].concat(ab.splice(0,R[aa])));if(!R[aa]){break;}}});}i.toString=f._path2string;return i;});var B=W(function(ag){if(!ag){return{x:0,y:0,width:0,height:0};}ag=N(ag);var ad=0,ac=0,Z=[],R=[];for(var aa=0,af=ag.length;aa<af;aa++){if(ag[aa][0]=="M"){ad=ag[aa][1];ac=ag[aa][2];Z.push(ad);R.push(ac);}else{var ab=I(ad,ac,ag[aa][1],ag[aa][2],ag[aa][3],ag[aa][4],ag[aa][5],ag[aa][6]);Z=Z.concat(ab.min.x,ab.max.x);R=R.concat(ab.min.y,ab.max.y);}}var e=Math.min.apply(0,Z),ae=Math.min.apply(0,R);return{x:e,y:ae,width:Math.max.apply(0,Z)-e,height:Math.max.apply(0,R)-ae};}),s=function(ab){var Y=[];if(!f.is(ab,"array")||!f.is(ab&&ab[0],"array")){ab=f.parsePathString(ab);}for(var R=0,Z=ab.length;R<Z;R++){Y[R]=[];for(var e=0,aa=ab[R].length;e<aa;e++){Y[R][e]=ab[R][e];}}Y.toString=f._path2string;return Y;},c=W(function(Z){if(!f.is(Z,"array")||!f.is(Z&&Z[0],"array")){Z=f.parsePathString(Z);}var af=[],ah=0,ag=0,ak=0,aj=0,Y=0;if(Z[0][0]=="M"){ah=Z[0][1];ag=Z[0][2];ak=ah;aj=ag;Y++;af.push(["M",ah,ag]);}for(var ac=Y,al=Z.length;ac<al;ac++){var e=af[ac]=[],ai=Z[ac];if(ai[0]!=ai[0].toLowerCase()){e[0]=ai[0].toLowerCase();switch(e[0]){case"a":e[1]=ai[1];e[2]=ai[2];e[3]=ai[3];e[4]=ai[4];e[5]=ai[5];e[6]=+(ai[6]-ah).toFixed(3);e[7]=+(ai[7]-ag).toFixed(3);break;case"v":e[1]=+(ai[1]-ag).toFixed(3);break;case"m":ak=ai[1];aj=ai[2];default:for(var ab=1,ad=ai.length;ab<ad;ab++){e[ab]=+(ai[ab]-((ab%2)?ah:ag)).toFixed(3);}}}else{e=af[ac]=[];if(ai[0]=="m"){ak=ai[1]+ah;aj=ai[2]+ag;}for(var aa=0,R=ai.length;aa<R;aa++){af[ac][aa]=ai[aa];}}var ae=af[ac].length;switch(af[ac][0]){case"z":ah=ak;ag=aj;break;case"h":ah+=+af[ac][ae-1];break;case"v":ag+=+af[ac][ae-1];break;default:ah+=+af[ac][ae-2];ag+=+af[ac][ae-1];}}af.toString=f._path2string;return af;},0,s),v=W(function(Z){if(!f.is(Z,"array")||!f.is(Z&&Z[0],"array")){Z=f.parsePathString(Z);}var ae=[],ag=0,af=0,aj=0,ai=0,Y=0;if(Z[0][0]=="M"){ag=+Z[0][1];af=+Z[0][2];aj=ag;ai=af;Y++;ae[0]=["M",ag,af];}for(var ac=Y,ak=Z.length;ac<ak;ac++){var e=ae[ac]=[],ah=Z[ac];if(ah[0]!=(ah[0]+"").toUpperCase()){e[0]=(ah[0]+"").toUpperCase();switch(e[0]){case"A":e[1]=ah[1];e[2]=ah[2];e[3]=ah[3];e[4]=ah[4];e[5]=ah[5];e[6]=+(ah[6]+ag);e[7]=+(ah[7]+af);break;case"V":e[1]=+ah[1]+af;break;case"H":e[1]=+ah[1]+ag;break;case"M":aj=+ah[1]+ag;ai=+ah[2]+af;default:for(var ab=1,ad=ah.length;ab<ad;ab++){e[ab]=+ah[ab]+((ab%2)?ag:af);}}}else{for(var aa=0,R=ah.length;aa<R;aa++){ae[ac][aa]=ah[aa];}}switch(e[0]){case"Z":ag=aj;af=ai;break;case"H":ag=e[1];break;case"V":af=e[1];break;default:ag=ae[ac][ae[ac].length-2];af=ae[ac][ae[ac].length-1];}}ae.toString=f._path2string;return ae;},null,s),d=function(i,Y,e,R){return[i,Y,e,R,e,R];},w=function(i,Y,ab,Z,e,R){var aa=1/3,ac=2/3;return[aa*i+ac*ab,aa*Y+ac*Z,aa*e+ac*ab,aa*R+ac*Z,e,R];},q=function(aj,aO,at,aq,ak,ae,Z,ai,aN,al){var ap=Math.PI*120/180,e=Math.PI/180*(+ak||0),ax=[],au,aK=W(function(aP,aS,i){var aR=aP*Math.cos(i)-aS*Math.sin(i),aQ=aP*Math.sin(i)+aS*Math.cos(i);return{x:aR,y:aQ};});if(!al){au=aK(aj,aO,-e);aj=au.x;aO=au.y;au=aK(ai,aN,-e);ai=au.x;aN=au.y;var R=Math.cos(Math.PI/180*ak),ag=Math.sin(Math.PI/180*ak),az=(aj-ai)/2,ay=(aO-aN)/2;at=Math.max(at,Math.abs(az));aq=Math.max(aq,Math.abs(ay));var Y=at*at,aC=aq*aq,aE=(ae==Z?-1:1)*Math.sqrt(Math.abs((Y*aC-Y*ay*ay-aC*az*az)/(Y*ay*ay+aC*az*az))),an=aE*at*ay/aq+(aj+ai)/2,am=aE*-aq*az/at+(aO+aN)/2,ad=Math.asin((aO-am)/aq),ac=Math.asin((aN-am)/aq);ad=aj<an?Math.PI-ad:ad;ac=ai<an?Math.PI-ac:ac;ad<0&&(ad=Math.PI*2+ad);ac<0&&(ac=Math.PI*2+ac);if(Z&&ad>ac){ad=ad-Math.PI*2;}if(!Z&&ac>ad){ac=ac-Math.PI*2;}}else{ad=al[0];ac=al[1];an=al[2];am=al[3];}var ah=ac-ad;if(Math.abs(ah)>ap){var ao=ac,ar=ai,af=aN;ac=ad+ap*(Z&&ac>ad?1:-1);ai=an+at*Math.cos(ac);aN=am+aq*Math.sin(ac);ax=q(ai,aN,at,aq,ak,0,Z,ar,af,[ac,ao,an,am]);}ah=ac-ad;var ab=Math.cos(ad),aM=Math.sin(ad),aa=Math.cos(ac),aL=Math.sin(ac),aA=Math.tan(ah/4),aD=4/3*at*aA,aB=4/3*aq*aA,aJ=[aj,aO],aI=[aj+aD*aM,aO-aB*ab],aH=[ai+aD*aL,aN-aB*aa],aF=[ai,aN];aI[0]=2*aJ[0]-aI[0];aI[1]=2*aJ[1]-aI[1];if(al){return[aI,aH,aF].concat(ax);}else{ax=[aI,aH,aF].concat(ax).join(",").split(",");var av=[];for(var aG=0,aw=ax.length;aG<aw;aG++){av[aG]=aG%2?aK(ax[aG-1],ax[aG],e).y:aK(ax[aG],ax[aG+1],e).x;}return av;}},z=W(function(i,e,an,al,aa,Z,ac,ab,ah){var af=Math.pow(1-ah,3)*i+Math.pow(1-ah,2)*3*ah*an+(1-ah)*3*ah*ah*aa+Math.pow(ah,3)*ac,ad=Math.pow(1-ah,3)*e+Math.pow(1-ah,2)*3*ah*al+(1-ah)*3*ah*ah*Z+Math.pow(ah,3)*ab,aj=i+2*ah*(an-i)+ah*ah*(aa-2*an+i),ai=e+2*ah*(al-e)+ah*ah*(Z-2*al+e),am=an+2*ah*(aa-an)+ah*ah*(ac-2*aa+an),ak=al+2*ah*(Z-al)+ah*ah*(ab-2*Z+al),ag=(1-ah)*i+ah*an,ae=(1-ah)*e+ah*al,Y=(1-ah)*aa+ah*ac,R=(1-ah)*Z+ah*ab;return{x:af,y:ad,m:{x:aj,y:ai},n:{x:am,y:ak},start:{x:ag,y:ae},end:{x:Y,y:R}};}),I=W(function(i,e,Y,R,al,ak,ah,ae){var aj=(al-2*Y+i)-(ah-2*al+Y),ag=2*(Y-i)-2*(al-Y),ad=i-Y,ab=(-ag+Math.sqrt(ag*ag-4*aj*ad))/2/aj,Z=(-ag-Math.sqrt(ag*ag-4*aj*ad))/2/aj,af=[e,ae],ai=[i,ah],ac=z(i,e,Y,R,al,ak,ah,ae,ab>0&&ab<1?ab:0),aa=z(i,e,Y,R,al,ak,ah,ae,Z>0&&Z<1?Z:0);ai=ai.concat(ac.x,aa.x);af=af.concat(ac.y,aa.y);aj=(ak-2*R+e)-(ae-2*ak+R);ag=2*(R-e)-2*(ak-R);ad=e-R;ab=(-ag+Math.sqrt(ag*ag-4*aj*ad))/2/aj;Z=(-ag-Math.sqrt(ag*ag-4*aj*ad))/2/aj;ac=z(i,e,Y,R,al,ak,ah,ae,ab>0&&ab<1?ab:0);aa=z(i,e,Y,R,al,ak,ah,ae,Z>0&&Z<1?Z:0);ai=ai.concat(ac.x,aa.x);af=af.concat(ac.y,aa.y);return{min:{x:Math.min.apply(Math,ai),y:Math.min.apply(Math,af)},max:{x:Math.max.apply(Math,ai),y:Math.max.apply(Math,af)}};}),N=W(function(ak,af){var Z=v(ak),ag=af&&v(af),ah={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},ab=function(al,am){var i,an;if(!al){return["C",am.x,am.y,am.x,am.y,am.x,am.y];}!(al[0] in {T:1,Q:1})&&(am.qx=am.qy=null);switch(al[0]){case"M":am.X=al[1];am.Y=al[2];break;case"A":al=["C"].concat(q.apply(0,[am.x,am.y].concat(al.slice(1))));break;case"S":i=am.x+(am.x-(am.bx||am.x));an=am.y+(am.y-(am.by||am.y));al=["C",i,an].concat(al.slice(1));break;case"T":am.qx=am.x+(am.x-(am.qx||am.x));am.qy=am.y+(am.y-(am.qy||am.y));al=["C"].concat(w(am.x,am.y,am.qx,am.qy,al[1],al[2]));break;case"Q":am.qx=al[1];am.qy=al[2];al=["C"].concat(w(am.x,am.y,al[1],al[2],al[3],al[4]));break;case"L":al=["C"].concat(d(am.x,am.y,al[1],al[2]));break;case"H":al=["C"].concat(d(am.x,am.y,al[1],am.y));break;case"V":al=["C"].concat(d(am.x,am.y,am.x,al[1]));break;case"Z":al=["C"].concat(d(am.x,am.y,am.X,am.Y));break;}return al;},R=function(al,am){if(al[am].length>7){al[am].shift();var an=al[am];while(an.length){al.splice(am++,0,["C"].concat(an.splice(0,6)));}al.splice(am,1);ai=Math.max(Z.length,ag&&ag.length||0);}},Y=function(ap,ao,am,al,an){if(ap&&ao&&ap[an][0]=="M"&&ao[an][0]!="M"){ao.splice(an,0,["M",al.x,al.y]);am.bx=0;am.by=0;am.x=ap[an][1];am.y=ap[an][2];ai=Math.max(Z.length,ag&&ag.length||0);}};for(var ad=0,ai=Math.max(Z.length,ag&&ag.length||0);ad<ai;ad++){Z[ad]=ab(Z[ad],ah);R(Z,ad);ag&&(ag[ad]=ab(ag[ad],e));ag&&R(ag,ad);Y(Z,ag,ah,e,ad);Y(ag,Z,e,ah,ad);var ac=Z[ad],aj=ag&&ag[ad],aa=ac.length,ae=ag&&aj.length;ah.x=ac[aa-2];ah.y=ac[aa-1];ah.bx=parseFloat(ac[aa-4])||ah.x;ah.by=parseFloat(ac[aa-3])||ah.y;e.bx=ag&&(parseFloat(aj[ae-4])||e.x);e.by=ag&&(parseFloat(aj[ae-3])||e.y);e.x=ag&&aj[ae-2];e.y=ag&&aj[ae-1];}return ag?[Z,ag]:Z;},null,s),n=W(function(ae){var ad=[];for(var aa=0,af=ae.length;aa<af;aa++){var e={},ac=ae[aa].match(/^([^:]*):?([\d\.]*)/);e.color=f.getRGB(ac[1]);if(e.color.error){return null;}e.color=e.color.hex;ac[2]&&(e.offset=ac[2]+"%");ad.push(e);}for(var aa=1,af=ad.length-1;aa<af;aa++){if(!ad[aa].offset){var R=parseFloat(ad[aa-1].offset||0),Y=false;for(var Z=aa+1;Z<af;Z++){if(ad[Z].offset){Y=ad[Z].offset;break;}}if(!Y){Y=100;Z=af;}Y=parseFloat(Y);var ab=(Y-R)/(Z-aa+1);for(;aa<Z;aa++){R+=ab;ad[aa].offset=R+"%";}}}return ad;}),F=function(){var R,i,Z,Y,e;if(f.is(arguments[0],"string")||f.is(arguments[0],"object")){if(f.is(arguments[0],"string")){R=g.getElementById(arguments[0]);}else{R=arguments[0];}if(R.tagName){if(arguments[1]==null){return{container:R,width:R.style.pixelWidth||R.offsetWidth,height:R.style.pixelHeight||R.offsetHeight};}else{return{container:R,width:arguments[1],height:arguments[2]};}}}else{if(f.is(arguments[0],"number")&&arguments.length>3){return{container:1,x:arguments[0],y:arguments[1],width:arguments[2],height:arguments[3]};}}},a=function(e,R){var i=this;for(var Y in R){if(R.hasOwnProperty(Y)&&!(Y in e)){switch(typeof R[Y]){case"function":(function(Z){e[Y]=e===i?Z:function(){return Z.apply(i,arguments);};})(R[Y]);break;case"object":e[Y]=e[Y]||{};a.call(this,e[Y],R[Y]);break;default:e[Y]=R[Y];break;}}}};if(f.svg){b.svgns="http://www.w3.org/2000/svg";b.xlink="http://www.w3.org/1999/xlink";var M=function(e){return +e+(Math.floor(e)==e)*0.5;};var y=function(aa){for(var R=0,Y=aa.length;R<Y;R++){if(aa[R][0].toLowerCase()!="a"){for(var e=1,Z=aa[R].length;e<Z;e++){aa[R][e]=M(aa[R][e]);}}else{aa[R][6]=M(aa[R][6]);aa[R][7]=M(aa[R][7]);}}return aa;};var A=function(R,e){if(e){for(var i in e){if(e.hasOwnProperty(i)){R.setAttribute(i,e[i]);}}}else{return g.createElementNS(b.svgns,R);}};f.toString=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version;};var V=function(e,Y){var i=A("path");Y.canvas&&Y.canvas.appendChild(i);var R=new m(i,Y);R.type="path";E(R,{fill:"none",stroke:"#000",path:e});return R;};var L=function(Y,ai,e){var af="linear",ac=0.5,aa=0.5,ak=Y.style;ai=(ai+"").replace(/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,function(al,i,am){af="radial";if(i&&am){ac=parseFloat(i);aa=parseFloat(am);if(Math.pow(ac-0.5,2)+Math.pow(aa-0.5,2)>0.25){aa=Math.sqrt(0.25-Math.pow(ac-0.5,2))+0.5;}}return"";});ai=ai.split(/\s*\-\s*/);if(af=="linear"){var ab=ai.shift();ab=-parseFloat(ab);if(isNaN(ab)){return null;}var Z=[0,0,Math.cos(ab*Math.PI/180),Math.sin(ab*Math.PI/180)],ah=1/(Math.max(Math.abs(Z[2]),Math.abs(Z[3]))||1);Z[2]*=ah;Z[3]*=ah;if(Z[2]<0){Z[0]=-Z[2];Z[2]=0;}if(Z[3]<0){Z[1]=-Z[3];Z[3]=0;}}var ae=n(ai);if(!ae){return null;}var R=A(af+"Gradient");R.id="r"+(f.idGenerator++).toString(36);af=="radial"?A(R,{fx:ac,fy:aa}):A(R,{x1:Z[0],y1:Z[1],x2:Z[2],y2:Z[3]});e.defs.appendChild(R);for(var ad=0,aj=ae.length;ad<aj;ad++){var ag=A("stop");A(ag,{offset:ae[ad].offset?ae[ad].offset:!ad?"0%":"100%","stop-color":ae[ad].color||"#fff"});R.appendChild(ag);}A(Y,{fill:"url(#"+R.id+")",opacity:1,"fill-opacity":1});ak.fill="";ak.opacity=1;ak.fillOpacity=1;return 1;};var r=function(i){var e=i.getBBox();A(i.pattern,{patternTransform:f.format("translate({0},{1})",e.x,e.y)});};var E=function(ag,ap){var aj={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},al=ag.node,ah=ag.attrs,ad=ag.attr("rotation"),aa=function(ax,aw){aw=aj[(aw+"").toLowerCase()];if(aw){var au=ax.attrs["stroke-width"]||"1",ar={round:au,square:au,butt:0}[ax.attrs["stroke-linecap"]||ap["stroke-linecap"]]||0,av=[];var at=aw.length;while(at--){av[at]=aw[at]*au+((at%2)?1:-1)*ar;}A(al,{"stroke-dasharray":av.join(",")});}};parseFloat(ad)&&ag.rotate(0,true);for(var ak in ap){if(ap.hasOwnProperty(ak)){if(!(ak in p)){continue;}var ai=ap[ak];ah[ak]=ai;switch(ak){case"href":case"title":case"target":var an=al.parentNode;if(an.tagName.toLowerCase()!="a"){var Y=A("a");an.insertBefore(Y,al);Y.appendChild(al);an=Y;}an.setAttributeNS(ag.paper.xlink,ak,ai);break;case"clip-rect":var i=(ai+"").split(X);if(i.length==4){ag.clip&&ag.clip.parentNode.parentNode.removeChild(ag.clip.parentNode);var R=A("clipPath"),am=A("rect");R.id="r"+(f.idGenerator++).toString(36);A(am,{x:i[0],y:i[1],width:i[2],height:i[3]});R.appendChild(am);ag.paper.defs.appendChild(R);A(al,{"clip-path":"url(#"+R.id+")"});ag.clip=am;}if(!ai){var ao=g.getElementById(al.getAttribute("clip-path").replace(/(^url\(#|\)$)/g,""));ao&&ao.parentNode.removeChild(ao);A(al,{"clip-path":""});delete ag.clip;}break;case"path":if(ai&&ag.type=="path"){ah.path=y(v(ai));A(al,{d:ah.path});}break;case"width":al.setAttribute(ak,ai);if(ah.fx){ak="x";ai=ah.x;}else{break;}case"x":if(ah.fx){ai=-ah.x-(ah.width||0);}case"rx":if(ak=="rx"&&ag.type=="rect"){break;}case"cx":al.setAttribute(ak,ai);ag.pattern&&r(ag);break;case"height":al.setAttribute(ak,ai);if(ah.fy){ak="y";ai=ah.y;}else{break;}case"y":if(ah.fy){ai=-ah.y-(ah.height||0);}case"ry":if(ak=="ry"&&ag.type=="rect"){break;}case"cy":al.setAttribute(ak,ai);ag.pattern&&r(ag);break;case"r":if(ag.type=="rect"){A(al,{rx:ai,ry:ai});}else{al.setAttribute(ak,ai);}break;case"src":if(ag.type=="image"){al.setAttributeNS(ag.paper.xlink,"href",ai);}break;case"stroke-width":al.style.strokeWidth=ai;al.setAttribute(ak,ai);if(ah["stroke-dasharray"]){aa(ag,ah["stroke-dasharray"]);}break;case"stroke-dasharray":aa(ag,ai);break;case"rotation":ad=ai;ag.rotate(ai,true);break;case"translation":var ab=(ai+"").split(X);ag.translate((+ab[0]+1||2)-1,(+ab[1]+1||2)-1);break;case"scale":var ab=(ai+"").split(X);ag.scale(+ab[0]||1,+ab[1]||+ab[0]||1,+ab[2]||null,+ab[3]||null);break;case"fill":var Z=(ai+"").match(/^url\(['"]?([^\)]+)['"]?\)$/i);if(Z){var R=A("pattern"),af=A("image");R.id="r"+(f.idGenerator++).toString(36);A(R,{x:0,y:0,patternUnits:"userSpaceOnUse"});A(af,{x:0,y:0});af.setAttributeNS(ag.paper.xlink,"href",Z[1]);R.appendChild(af);var aq=g.createElement("img");aq.style.cssText="position:absolute;left:-9999em;top-9999em";aq.onload=function(){A(R,{width:this.offsetWidth,height:this.offsetHeight});A(af,{width:this.offsetWidth,height:this.offsetHeight});g.body.removeChild(this);b.safari();};g.body.appendChild(aq);aq.src=Z[1];ag.paper.defs.appendChild(R);al.style.fill="url(#"+R.id+")";A(al,{fill:"url(#"+R.id+")"});ag.pattern=R;ag.pattern&&r(ag);break;}if(!f.getRGB(ai).error){delete ap.gradient;delete ah.gradient;if(!f.is(ah.opacity,"undefined")&&f.is(ap.opacity,"undefined")){al.style.opacity=ah.opacity;A(al,{opacity:ah.opacity});}if(!f.is(ah["fill-opacity"],"undefined")&&f.is(ap["fill-opacity"],"undefined")){al.style.fillOpacity=ah["fill-opacity"];A(al,{"fill-opacity":ah["fill-opacity"]});}}else{if((ag.type in {circle:1,ellipse:1}||(ai+"").charAt(0)!="r")&&L(al,ai,ag.paper)){ah.gradient=ai;ah.fill="none";break;}}case"stroke":al.style[ak]=f.getRGB(ai).hex;al.setAttribute(ak,f.getRGB(ai).hex);break;case"gradient":(ag.type in {circle:1,ellipse:1}||(ai+"").charAt(0)!="r")&&L(al,ai,ag.paper);break;case"opacity":case"fill-opacity":if(ah.gradient){var e=g.getElementById(al.getAttribute("fill").replace(/^url\(#|\)$/g,""));if(e){var ac=e.getElementsByTagName("stop");ac[ac.length-1].setAttribute("stop-opacity",ai);}break;}default:ak=="font-size"&&(ai=parseInt(ai,10)+"px");var ae=ak.replace(/(\-.)/g,function(ar){return ar.substring(1).toUpperCase();});al.style[ae]=ai;al.setAttribute(ak,ai);break;}}}S(ag,ap);parseInt(ad,10)&&ag.rotate(ad,true);};var J=1.2;var S=function(e,Z){if(e.type!="text"||!("text" in Z||"font" in Z||"font-size" in Z||"x" in Z||"y" in Z)){return;}var ae=e.attrs,R=e.node,ag=R.firstChild?parseInt(g.defaultView.getComputedStyle(R.firstChild,"").getPropertyValue("font-size"),10):10;if("text" in Z){while(R.firstChild){R.removeChild(R.firstChild);}var Y=(Z.text+"").split("\n");for(var aa=0,af=Y.length;aa<af;aa++){var ac=A("tspan");aa&&A(ac,{dy:ag*J,x:ae.x});ac.appendChild(g.createTextNode(Y[aa]));R.appendChild(ac);}}else{var Y=R.getElementsByTagName("tspan");for(var aa=0,af=Y.length;aa<af;aa++){aa&&A(Y[aa],{dy:ag*J,x:ae.x});}}A(R,{y:ae.y});var ab=e.getBBox(),ad=ae.y-(ab.y+ab.height/2);ad&&A(R,{y:ae.y+ad});};var m=function(i,e){var Z=0,R=0;this[0]=i;this.node=i;i.raphael=this;this.paper=e;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};};m.prototype.rotate=function(i,e,Y){if(i==null){if(this._.rt.cx){return[this._.rt.deg,this._.rt.cx,this._.rt.cy].join(" ");}return this._.rt.deg;}var R=this.getBBox();i=(i+"").split(X);if(i.length-1){e=parseFloat(i[1]);Y=parseFloat(i[2]);}i=parseFloat(i[0]);if(e!=null){this._.rt.deg=i;}else{this._.rt.deg+=i;}(Y==null)&&(e=null);this._.rt.cx=e;this._.rt.cy=Y;e=e==null?R.x+R.width/2:e;Y=Y==null?R.y+R.height/2:Y;if(this._.rt.deg){this.transformations[0]=f.format("rotate({0} {1} {2})",this._.rt.deg,e,Y);this.clip&&A(this.clip,{transform:f.format("rotate({0} {1} {2})",-this._.rt.deg,e,Y)});}else{this.transformations[0]="";this.clip&&A(this.clip,{transform:""});}A(this.node,{transform:this.transformations.join(" ")});return this;};m.prototype.hide=function(){this.node.style.display="none";return this;};m.prototype.show=function(){this.node.style.display="block";return this;};m.prototype.remove=function(){this.node.parentNode.removeChild(this.node);};m.prototype.getBBox=function(){if(this.type=="path"){return B(this.attrs.path);}if(this.node.style.display=="none"){this.show();var Y=true;}var ac={};try{ac=this.node.getBBox();}catch(aa){}finally{ac=ac||{};}if(this.type=="text"){ac={x:ac.x,y:Infinity,width:ac.width,height:0};for(var R=0,Z=this.node.getNumberOfChars();R<Z;R++){var ab=this.node.getExtentOfChar(R);(ab.y<ac.y)&&(ac.y=ab.y);(ab.y+ab.height-ac.y>ac.height)&&(ac.height=ab.y+ab.height-ac.y);}}Y&&this.hide();return ac;};m.prototype.attr=function(){if(arguments.length==1&&f.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(arguments.length==1&&f.is(arguments[0],"array")){var e={};for(var i in arguments[0]){if(arguments[0].hasOwnProperty(i)){e[arguments[0][i]]=this.attrs[arguments[0][i]];}}return e;}if(arguments.length==2){var R={};R[arguments[0]]=arguments[1];E(this,R);}else{if(arguments.length==1&&f.is(arguments[0],"object")){E(this,arguments[0]);}}return this;};m.prototype.toFront=function(){this.node.parentNode.appendChild(this.node);return this;};m.prototype.toBack=function(){if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);}return this;};m.prototype.insertAfter=function(e){if(e.node.nextSibling){e.node.parentNode.insertBefore(this.node,e.node.nextSibling);}else{e.node.parentNode.appendChild(this.node);}return this;};m.prototype.insertBefore=function(e){var i=e.node;i.parentNode.insertBefore(this.node,i);return this;};var C=function(i,e,aa,Z){e=M(e);aa=M(aa);var Y=A("circle");i.canvas&&i.canvas.appendChild(Y);var R=new m(Y,i);R.attrs={cx:e,cy:aa,r:Z,fill:"none",stroke:"#000"};R.type="circle";A(Y,R.attrs);return R;};var H=function(R,e,ac,i,aa,ab){e=M(e);ac=M(ac);var Z=A("rect");R.canvas&&R.canvas.appendChild(Z);var Y=new m(Z,R);Y.attrs={x:e,y:ac,width:i,height:aa,r:ab||0,rx:ab||0,ry:ab||0,fill:"none",stroke:"#000"};Y.type="rect";A(Z,Y.attrs);return Y;};var h=function(i,e,ab,aa,Z){e=M(e);ab=M(ab);var Y=A("ellipse");i.canvas&&i.canvas.appendChild(Y);var R=new m(Y,i);R.attrs={cx:e,cy:ab,rx:aa,ry:Z,fill:"none",stroke:"#000"};R.type="ellipse";A(Y,R.attrs);return R;};var o=function(R,ab,e,ac,i,aa){var Z=A("image");A(Z,{x:e,y:ac,width:i,height:aa,preserveAspectRatio:"none"});Z.setAttributeNS(R.xlink,"href",ab);R.canvas&&R.canvas.appendChild(Z);var Y=new m(Z,R);Y.attrs={x:e,y:ac,width:i,height:aa,src:ab};Y.type="image";return Y;};var G=function(i,e,aa,Z){var Y=A("text");A(Y,{x:e,y:aa,"text-anchor":"middle"});i.canvas&&i.canvas.appendChild(Y);var R=new m(Y,i);R.attrs={x:e,y:aa,"text-anchor":"middle",text:Z,font:p.font,stroke:"none",fill:"#000"};R.type="text";E(R,R.attrs);return R;};var D=function(i,e){this.width=i||this.width;this.height=e||this.height;this.canvas.setAttribute("width",this.width);this.canvas.setAttribute("height",this.height);return this;};var l=function(){var Z=F.apply(null,arguments),R=Z&&Z.container,ab=Z.x,aa=Z.y,Y=Z.width,ac=Z.height;if(!R){throw new Error("SVG container not found.");}b.canvas=A("svg");var e=b.canvas,ad=e.style;e.setAttribute("width",Y||512);b.width=Y||512;e.setAttribute("height",ac||342);b.height=ac||342;if(R==1){g.body.appendChild(e);ad.position="absolute";ad.left=ab+"px";ad.top=aa+"px";}else{if(R.firstChild){R.insertBefore(e,R.firstChild);}else{R.appendChild(e);}}R={canvas:e,clear:function(){while(this.canvas.firstChild){this.canvas.removeChild(this.canvas.firstChild);}this.desc=A("desc");this.defs=A("defs");this.desc.appendChild(g.createTextNode("Created with Rapha\u00ebl"));this.canvas.appendChild(this.desc);this.canvas.appendChild(this.defs);}};for(var i in b){if(b.hasOwnProperty(i)){if(i!="create"){R[i]=b[i];}}}a.call(R,R,f.fn);R.clear();R.raphael=f;return R;};b.remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);};}if(f.vml){var x=function(ab){var Z=N(ab);for(var R=0,Y=Z.length;R<Y;R++){Z[R][0]=(Z[R][0]+"").toLowerCase();Z[R][0]=="z"&&(Z[R][0]="x");for(var e=1,aa=Z[R].length;e<aa;e++){Z[R][e]=Math.round(Z[R][e]);}}return(Z+"");};f.toString=function(){return"Your browser doesn\u2019t support SVG. Assuming it is Internet Explorer and falling down to VML.\nYou are running Rapha\u00ebl "+this.version;};var V=function(e,aa){var Y=U("group"),ab=Y.style;ab.position="absolute";ab.left=0;ab.top=0;ab.width=aa.width+"px";ab.height=aa.height+"px";Y.coordsize=aa.coordsize;Y.coordorigin=aa.coordorigin;var R=U("shape"),i=R.style;i.width=aa.width+"px";i.height=aa.height+"px";R.path="";R.coordsize=this.coordsize;R.coordorigin=this.coordorigin;Y.appendChild(R);var Z=new m(R,Y,aa);Z.isAbsolute=true;Z.type="path";Z.path=[];Z.Path="";if(e){Z.attrs.path=f.parsePathString(e);Z.node.path=x(Z.attrs.path);}E(Z,{fill:"none",stroke:"#000"});Z.setBox();aa.canvas.appendChild(Y);return Z;};var E=function(ae,ai){ae.attrs=ae.attrs||{};var ag=ae.node,aj=ae.attrs,ab=ag.style,Y,an=ae;for(var ac in ai){if(ai.hasOwnProperty(ac)){aj[ac]=ai[ac];}}ai.href&&(ag.href=ai.href);ai.title&&(ag.title=ai.title);ai.target&&(ag.target=ai.target);if(ai.path&&ae.type=="path"){aj.path=f.parsePathString(ai.path);ag.path=x(aj.path);}if(ai.rotation!=null){ae.rotate(ai.rotation,true);}if(ai.translation){Y=(ai.translation+"").split(X);ae.translate(Y[0],Y[1]);}if(ai.scale){Y=(ai.scale+"").split(X);ae.scale(+Y[0]||1,+Y[1]||+Y[0]||1,+Y[2]||null,+Y[3]||null);}if("clip-rect" in ai){var e=(ai["clip-rect"]+"").split(X);if(e.length==4){e[2]=+e[2]+(+e[0]);e[3]=+e[3]+(+e[1]);var ad=ag.clipRect||g.createElement("div"),am=ad.style,aa=ag.parentNode;am.clip=f.format("rect({1}px {2}px {3}px {0}px)",e);if(!ag.clipRect){am.position="absolute";am.top=0;am.left=0;am.width=ae.paper.width+"px";am.height=ae.paper.height+"px";aa.parentNode.insertBefore(ad,aa);ad.appendChild(aa);ag.clipRect=ad;}}if(!ai["clip-rect"]){ag.clipRect&&(ag.clipRect.style.clip="");}}if(ae.type=="image"&&ai.src){ag.src=ai.src;}if(ae.type=="image"&&ai.opacity){ag.filterOpacity=" progid:DXImageTransform.Microsoft.Alpha(opacity="+(ai.opacity*100)+")";ab.filter=(ag.filterMatrix||"")+(ag.filterOpacity||"");}ai.font&&(ab.font=ai.font);ai["font-family"]&&(ab.fontFamily='"'+ai["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,"")+'"');ai["font-size"]&&(ab.fontSize=ai["font-size"]);ai["font-weight"]&&(ab.fontWeight=ai["font-weight"]);ai["font-style"]&&(ab.fontStyle=ai["font-style"]);if(ai.opacity!=null||ai["stroke-width"]!=null||ai.fill!=null||ai.stroke!=null||ai["stroke-width"]!=null||ai["stroke-opacity"]!=null||ai["fill-opacity"]!=null||ai["stroke-dasharray"]!=null||ai["stroke-miterlimit"]!=null||ai["stroke-linejoin"]!=null||ai["stroke-linecap"]!=null){ag=ae.shape||ag;var ah=(ag.getElementsByTagName("fill")&&ag.getElementsByTagName("fill")[0]),ak=false;!ah&&(ak=ah=U("fill"));if("fill-opacity" in ai||"opacity" in ai){var i=((+aj["fill-opacity"]+1||2)-1)*((+aj.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);ah.opacity=i;}ai.fill&&(ah.on=true);if(ah.on==null||ai.fill=="none"){ah.on=false;}if(ah.on&&ai.fill){var R=ai.fill.match(/^url\(([^\)]+)\)$/i);if(R){ah.src=R[1];ah.type="tile";}else{ah.color=f.getRGB(ai.fill).hex;ah.src="";ah.type="solid";if(f.getRGB(ai.fill).error&&(an.type in {circle:1,ellipse:1}||(ai.fill+"").charAt(0)!="r")&&L(an,ai.fill)){aj.fill="none";aj.gradient=ai.fill;}}}ak&&ag.appendChild(ah);var Z=(ag.getElementsByTagName("stroke")&&ag.getElementsByTagName("stroke")[0]),al=false;!Z&&(al=Z=U("stroke"));if((ai.stroke&&ai.stroke!="none")||ai["stroke-width"]||ai["stroke-opacity"]!=null||ai["stroke-dasharray"]||ai["stroke-miterlimit"]||ai["stroke-linejoin"]||ai["stroke-linecap"]){Z.on=true;}(ai.stroke=="none"||Z.on==null||ai.stroke==0||ai["stroke-width"]==0)&&(Z.on=false);Z.on&&ai.stroke&&(Z.color=f.getRGB(ai.stroke).hex);var i=((+aj["stroke-opacity"]+1||2)-1)*((+aj.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);Z.opacity=i;ai["stroke-linejoin"]&&(Z.joinstyle=ai["stroke-linejoin"]||"miter");Z.miterlimit=ai["stroke-miterlimit"]||8;ai["stroke-linecap"]&&(Z.endcap={butt:"flat",square:"square",round:"round"}[ai["stroke-linecap"]]||"miter");ai["stroke-width"]&&(Z.weight=(parseFloat(ai["stroke-width"])||1)*12/16);if(ai["stroke-dasharray"]){var af={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};Z.dashstyle=af[ai["stroke-dasharray"]]||"";}al&&ag.appendChild(Z);}if(an.type=="text"){var ab=an.paper.span.style;aj.font&&(ab.font=aj.font);aj["font-family"]&&(ab.fontFamily=aj["font-family"]);aj["font-size"]&&(ab.fontSize=aj["font-size"]);aj["font-weight"]&&(ab.fontWeight=aj["font-weight"]);aj["font-style"]&&(ab.fontStyle=aj["font-style"]);an.node.string&&(an.paper.span.innerHTML=an.node.string.replace(/</g,"&#60;").replace(/&/g,"&#38;").replace(/\n/g,"<br>"));an.W=aj.w=an.paper.span.offsetWidth;an.H=aj.h=an.paper.span.offsetHeight;an.X=aj.x;an.Y=aj.y+Math.round(an.H/2);switch(aj["text-anchor"]){case"start":an.node.style["v-text-align"]="left";an.bbx=Math.round(an.W/2);break;case"end":an.node.style["v-text-align"]="right";an.bbx=-Math.round(an.W/2);break;default:an.node.style["v-text-align"]="center";break;}}};var L=function(e,ac){e.attrs=e.attrs||{};var ad=e.attrs,af=e.node.getElementsByTagName("fill"),aa="linear",ab=".5 .5";e.attrs.gradient=ac;ac=(ac+"").replace(/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,function(ah,ai,i){aa="radial";if(ai&&i){ai=parseFloat(ai);i=parseFloat(i);if(Math.pow(ai-0.5,2)+Math.pow(i-0.5,2)>0.25){i=Math.sqrt(0.25-Math.pow(ai-0.5,2))+0.5;}ab=ai+" "+i;}return"";});ac=ac.split(/\s*\-\s*/);if(aa=="linear"){var R=ac.shift();R=-parseFloat(R);if(isNaN(R)){return null;}}var Z=n(ac);if(!Z){return null;}e=e.shape||e.node;af=af[0]||U("fill");if(Z.length){af.on=true;af.method="none";af.type=(aa=="radial")?"gradientradial":"gradient";af.color=Z[0].color;af.color2=Z[Z.length-1].color;var ag=[];for(var Y=0,ae=Z.length;Y<ae;Y++){Z[Y].offset&&ag.push(Z[Y].offset+" "+Z[Y].color);}if(ag.length){af.colors.value=ag.join(",");}else{af.colors&&(af.colors.value="0% "+af.color);}if(aa=="radial"){af.focus="100%";af.focussize=ab;af.focusposition=ab;}else{af.angle=(270-R)%360;}}return 1;};var m=function(Z,ab,e){var aa=0,R=0,i=0,Y=1;this[0]=Z;this.node=Z;Z.raphael=this;this.X=0;this.Y=0;this.attrs={};this.Group=ab;this.paper=e;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};};m.prototype.rotate=function(i,e,R){if(i==null){if(this._.rt.cx){return[this._.rt.deg,this._.rt.cx,this._.rt.cy].join(" ");}return this._.rt.deg;}i=(i+"").split(X);if(i.length-1){e=parseFloat(i[1]);R=parseFloat(i[2]);}i=parseFloat(i[0]);if(e!=null){this._.rt.deg=i;}else{this._.rt.deg+=i;}R==null&&(e=null);this._.rt.cx=e;this._.rt.cy=R;this.setBox(this.attrs,e,R);this.Group.style.rotation=this._.rt.deg;return this;};m.prototype.setBox=function(aa,ab,Z){var R=this.Group.style,ac=(this.shape&&this.shape.style)||this.node.style;aa=aa||{};for(var ad in aa){if(aa.hasOwnProperty(ad)){this.attrs[ad]=aa[ad];}}ab=ab||this._.rt.cx;Z=Z||this._.rt.cy;var ag=this.attrs,aj,ai,ak,af;switch(this.type){case"circle":aj=ag.cx-ag.r;ai=ag.cy-ag.r;ak=af=ag.r*2;break;case"ellipse":aj=ag.cx-ag.rx;ai=ag.cy-ag.ry;ak=ag.rx*2;af=ag.ry*2;break;case"rect":case"image":aj=ag.x;ai=ag.y;ak=ag.width||0;af=ag.height||0;break;case"text":this.textpath.v=["m",Math.round(ag.x),", ",Math.round(ag.y-2),"l",Math.round(ag.x)+1,", ",Math.round(ag.y-2)].join("");aj=ag.x-Math.round(this.W/2);ai=ag.y-this.H/2;ak=this.W;af=this.H;break;case"path":if(!this.attrs.path){aj=0;ai=0;ak=this.paper.width;af=this.paper.height;}else{var ae=B(this.attrs.path);aj=ae.x;ai=ae.y;ak=ae.width;af=ae.height;}break;default:aj=0;ai=0;ak=this.paper.width;af=this.paper.height;break;}ab=(ab==null)?aj+ak/2:ab;Z=(Z==null)?ai+af/2:Z;var Y=ab-this.paper.width/2,ah=Z-this.paper.height/2;if(this.type=="path"||this.type=="text"){(R.left!=Y+"px")&&(R.left=Y+"px");(R.top!=ah+"px")&&(R.top=ah+"px");this.X=this.type=="text"?aj:-Y;this.Y=this.type=="text"?ai:-ah;this.W=ak;this.H=af;(ac.left!=-Y+"px")&&(ac.left=-Y+"px");(ac.top!=-ah+"px")&&(ac.top=-ah+"px");}else{(R.left!=Y+"px")&&(R.left=Y+"px");(R.top!=ah+"px")&&(R.top=ah+"px");this.X=aj;this.Y=ai;this.W=ak;this.H=af;(R.width!=this.paper.width+"px")&&(R.width=this.paper.width+"px");(R.height!=this.paper.height+"px")&&(R.height=this.paper.height+"px");(ac.left!=aj-Y+"px")&&(ac.left=aj-Y+"px");(ac.top!=ai-ah+"px")&&(ac.top=ai-ah+"px");(ac.width!=ak+"px")&&(ac.width=ak+"px");(ac.height!=af+"px")&&(ac.height=af+"px");var al=(+aa.r||0)/(Math.min(ak,af));if(this.type=="rect"&&this.arcsize!=al&&(al||this.arcsize)){var e=U(al?"roundrect":"rect");e.arcsize=al;this.Group.appendChild(e);this.node.parentNode.removeChild(this.node);this.node=e;this.arcsize=al;E(this,this.attrs);this.setBox(this.attrs);}}};m.prototype.hide=function(){this.Group.style.display="none";return this;};m.prototype.show=function(){this.Group.style.display="block";return this;};m.prototype.getBBox=function(){if(this.type=="path"){return B(this.attrs.path);}return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H};};m.prototype.remove=function(){this[0].parentNode.removeChild(this[0]);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);};m.prototype.attr=function(){if(arguments.length==1&&f.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(this.attrs&&arguments.length==1&&f.is(arguments[0],"array")){var e={};for(var R=0,Y=arguments[0].length;R<Y;R++){e[arguments[0][R]]=this.attrs[arguments[0][R]];}return e;}var Z;if(arguments.length==2){Z={};Z[arguments[0]]=arguments[1];}if(arguments.length==1&&f.is(arguments[0],"object")){Z=arguments[0];}if(Z){if(Z.gradient&&(this.type in {circle:1,ellipse:1}||(Z.gradient+"").charAt(0)!="r")){L(this,Z.gradient);}if(Z.text&&this.type=="text"){this.node.string=Z.text;}E(this,Z);this.setBox(this.attrs);}return this;};m.prototype.toFront=function(){this.Group.parentNode.appendChild(this.Group);return this;};m.prototype.toBack=function(){if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);}return this;};m.prototype.insertAfter=function(e){if(e.Group.nextSibling){e.Group.parentNode.insertBefore(this.Group,e.Group.nextSibling);}else{e.Group.parentNode.appendChild(this.Group);}return this;};m.prototype.insertBefore=function(e){e.Group.parentNode.insertBefore(this.Group,e.Group);return this;};var C=function(i,e,ac,aa){var Z=U("group"),ab=U("oval"),R=ab.style;Z.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";Z.coordsize=i.coordsize;Z.coordorigin=i.coordorigin;Z.appendChild(ab);var Y=new m(ab,Z,i);Y.type="circle";E(Y,{stroke:"#000",fill:"none"});Y.attrs.cx=e;Y.attrs.cy=ac;Y.attrs.r=aa;Y.setBox({x:e-aa,y:ac-aa,width:aa*2,height:aa*2});i.canvas.appendChild(Z);return Y;};var H=function(i,ac,ab,ad,Y,e){var Z=U("group"),R=U(e?"roundrect":"rect"),ae=(+e||0)/(Math.min(ad,Y));R.arcsize=ae;Z.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";Z.coordsize=i.coordsize;Z.coordorigin=i.coordorigin;Z.appendChild(R);var aa=new m(R,Z,i);aa.type="rect";E(aa,{stroke:"#000"});aa.arcsize=ae;aa.setBox({x:ac,y:ab,width:ad,height:Y,r:+e});i.canvas.appendChild(Z);return aa;};var h=function(e,ad,ac,R,i){var Z=U("group"),Y=U("oval"),ab=Y.style;Z.style.cssText="position:absolute;left:0;top:0;width:"+e.width+"px;height:"+e.height+"px";Z.coordsize=e.coordsize;Z.coordorigin=e.coordorigin;Z.appendChild(Y);var aa=new m(Y,Z,e);aa.type="ellipse";E(aa,{stroke:"#000"});aa.attrs.cx=ad;aa.attrs.cy=ac;aa.attrs.rx=R;aa.attrs.ry=i;aa.setBox({x:ad-R,y:ac-i,width:R*2,height:i*2});e.canvas.appendChild(Z);return aa;};var o=function(i,e,ad,ac,ae,Y){var Z=U("group"),R=U("image"),ab=R.style;Z.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";Z.coordsize=i.coordsize;Z.coordorigin=i.coordorigin;R.src=e;Z.appendChild(R);var aa=new m(R,Z,i);aa.type="image";aa.attrs.src=e;aa.attrs.x=ad;aa.attrs.y=ac;aa.attrs.w=ae;aa.attrs.h=Y;aa.setBox({x:ad,y:ac,width:ae,height:Y});i.canvas.appendChild(Z);return aa;};var G=function(i,ad,ac,ae){var Z=U("group"),Y=U("shape"),ab=Y.style,af=U("path"),e=af.style,R=U("textpath");Z.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";Z.coordsize=i.coordsize;Z.coordorigin=i.coordorigin;af.v=f.format("m{0},{1}l{2},{1}",Math.round(ad),Math.round(ac),Math.round(ad)+1);af.textpathok=true;ab.width=i.width;ab.height=i.height;R.string=ae;R.on=true;Y.appendChild(R);Y.appendChild(af);Z.appendChild(Y);var aa=new m(R,Z,i);aa.shape=Y;aa.textpath=af;aa.type="text";aa.attrs.text=ae;aa.attrs.x=ad;aa.attrs.y=ac;aa.attrs.w=1;aa.attrs.h=1;E(aa,{font:p.font,stroke:"none",fill:"#000"});aa.setBox();i.canvas.appendChild(Z);return aa;};var D=function(R,e){var i=this.canvas.style;this.width=parseFloat(R||this.width);this.height=parseFloat(e||this.height);i.width=this.width+"px";i.height=this.height+"px";i.clip="rect(0 "+this.width+"px "+this.height+"px 0)";this.coordsize=this.width+" "+this.height;return this;};g.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!g.namespaces.rvml&&g.namespaces.add("rvml","urn:schemas-microsoft-com:vml");var U=function(e){return g.createElement("<rvml:"+e+' class="rvml">');};}catch(T){var U=function(e){return g.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');};}var l=function(){var Y=F.apply(null,arguments),i=Y.container,ae=Y.height,af,R=Y.width,ad=Y.x,ac=Y.y;if(!i){throw new Error("VML container not found.");}var aa={},ab=aa.canvas=g.createElement("div"),Z=ab.style;R=parseFloat(R)||512;ae=parseFloat(ae)||342;aa.width=R;aa.height=ae;aa.coordsize=R+" "+ae;aa.coordorigin="0 0";aa.span=g.createElement("span");aa.span.style.cssText="position:absolute;left:-9999px;top:-9999px;padding:0;margin:0;line-height:1;display:inline;";ab.appendChild(aa.span);Z.cssText=f.format("width:{0}px;height:{1}px;position:absolute;clip:rect(0 {0}px {1}px 0)",R,ae);if(i==1){g.body.appendChild(ab);Z.left=ad+"px";Z.top=ac+"px";i={style:{width:R,height:ae}};}else{i.style.width=R;i.style.height=ae;if(i.firstChild){i.insertBefore(ab,i.firstChild);}else{i.appendChild(ab);}}for(var e in b){if(b.hasOwnProperty(e)){aa[e]=b[e];}}a.call(aa,aa,f.fn);aa.clear=function(){while(ab.firstChild){ab.removeChild(ab.firstChild);}};aa.raphael=f;return aa;};b.remove=function(){this.canvas.parentNode.removeChild(this.canvas);};}if({"Apple Computer, Inc.":1,"Google Inc.":1}[navigator.vendor]){b.safari=function(){var e=this.rect(-99,-99,this.width+99,this.height+99);setTimeout(function(){e.remove();});};}else{b.safari=function(){};}var j=(function(){if(g.addEventListener){return function(Z,R,i,e){var Y=function(aa){return i.call(e,aa);};Z.addEventListener(R,Y,false);return function(){Z.removeEventListener(R,Y,false);return true;};};}else{if(g.attachEvent){return function(aa,Y,R,i){var Z=function(ab){return R.call(i,ab||K.event);};aa.attachEvent("on"+Y,Z);var e=function(){aa.detachEvent("on"+Y,Z);return true;};if(Y=="mouseover"){aa.attachEvent("onmouseenter",Z);return function(){aa.detachEvent("onmouseenter",Z);return e();};}else{if(Y=="mouseout"){aa.attachEvent("onmouseleave",Z);return function(){aa.detachEvent("onmouseleave",Z);return e();};}}return e;};}}})();for(var P=u.length;P--;){(function(e){m.prototype[e]=function(i){if(f.is(i,"function")){this.events=this.events||{};this.events[e]=this.events[e]||{};this.events[e][i]=this.events[e][i]||[];this.events[e][i].push(j(this.shape||this.node,e,i,this));}return this;};m.prototype["un"+e]=function(i){this.events&&this.events[e]&&this.events[e][i]&&this.events[e][i].length&&this.events[e][i].shift()()&&!this.events[e][i].length&&delete this.events[e][i];};})(u[P]);}b.circle=function(e,R,i){return C(this,e||0,R||0,i||0);};b.rect=function(e,Z,i,R,Y){return H(this,e||0,Z||0,i||0,R||0,Y||0);};b.ellipse=function(e,Y,R,i){return h(this,e||0,Y||0,R||0,i||0);};b.path=function(e){e&&!f.is(e,"string")&&!f.is(e[0],"array")&&(e+="");return V(f.format.apply(f,arguments),this);};b.image=function(Y,e,Z,i,R){return o(this,Y||"about:blank",e||0,Z||0,i||0,R||0);};b.text=function(e,R,i){return G(this,e||0,R||0,i||"");};b.set=function(e){arguments.length>1&&(e=Array.prototype.splice.call(arguments,0,arguments.length));return new k(e);};b.setSize=D;m.prototype.stop=function(){clearTimeout(this.animation_in_progress);return this;};m.prototype.scale=function(aj,ai,Y,R){if(aj==null&&ai==null){return{x:this._.sx,y:this._.sy,toString:function(){return this.x+" "+this.y;}};}ai=ai||aj;!+ai&&(ai=aj);var an,al,am,ak,aA=this.attrs;if(aj!=0){var ag=this.getBBox(),ad=ag.x+ag.width/2,aa=ag.y+ag.height/2,az=aj/this._.sx,ay=ai/this._.sy;Y=(+Y||Y==0)?Y:ad;R=(+R||R==0)?R:aa;var af=Math.round(aj/Math.abs(aj)),ac=Math.round(ai/Math.abs(ai)),aq=this.node.style,aC=Y+(ad-Y)*af*az,aB=R+(aa-R)*ac*ay;switch(this.type){case"rect":case"image":var ae=aA.width*af*az,ap=aA.height*ac*ay,ah=aA.r*Math.min(az,ay),ab=aC-ae/2,Z=aB-ap/2;this.attr({width:ae,height:ap,x:ab,y:Z,r:ah});break;case"circle":case"ellipse":this.attr({rx:aA.rx*az,ry:aA.ry*ay,r:aA.r*Math.min(az,ay),cx:aC,cy:aB});break;case"path":var at=c(aA.path),au=true;for(var aw=0,ao=at.length;aw<ao;aw++){var ar=at[aw];if(ar[0].toUpperCase()=="M"&&au){continue;}else{au=false;}if(f.svg&&ar[0].toUpperCase()=="A"){ar[at[aw].length-2]*=az;ar[at[aw].length-1]*=ay;ar[1]*=az;ar[2]*=ay;ar[5]=+(af+ac?!!+ar[5]:!+ar[5]);}else{for(var av=1,ax=ar.length;av<ax;av++){ar[av]*=(av%2)?az:ay;}}}var e=B(at),an=aC-e.x-e.width/2,al=aB-e.y-e.height/2;at[0][1]+=an;at[0][2]+=al;this.attr({path:at});break;}if(this.type in {text:1,image:1}&&(af!=1||ac!=1)){if(this.transformations){this.transformations[2]="scale(".concat(af,",",ac,")");this.node.setAttribute("transform",this.transformations.join(" "));an=(af==-1)?-aA.x-(ae||0):aA.x;al=(ac==-1)?-aA.y-(ap||0):aA.y;this.attr({x:an,y:al});aA.fx=af-1;aA.fy=ac-1;}else{this.node.filterMatrix=" progid:DXImageTransform.Microsoft.Matrix(M11=".concat(af,", M12=0, M21=0, M22=",ac,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");aq.filter=(this.node.filterMatrix||"")+(this.node.filterOpacity||"");}}else{if(this.transformations){this.transformations[2]="";this.node.setAttribute("transform",this.transformations.join(" "));aA.fx=0;aA.fy=0;}else{this.node.filterMatrix="";aq.filter=(this.node.filterMatrix||"")+(this.node.filterOpacity||"");}}aA.scale=[aj,ai,Y,R].join(" ");this._.sx=aj;this._.sy=ai;}return this;};f.easing_formulas={linear:function(e){return e;},"<":function(e){return Math.pow(e,3);},">":function(e){return Math.pow(e-1,3)+1;},"<>":function(e){e=e*2;if(e<1){return Math.pow(e,3)/2;}e-=2;return(Math.pow(e,3)+2)/2;},backIn:function(i){var e=1.70158;return i*i*((e+1)*i-e);},backOut:function(i){i=i-1;var e=1.70158;return i*i*((e+1)*i+e)+1;},elastic:function(R){if(R==0||R==1){return R;}var i=0.3,e=i/4;return Math.pow(2,-10*R)*Math.sin((R-e)*(2*Math.PI)/i)+1;},bounce:function(Y){var i=7.5625,R=2.75,e;if(Y<(1/R)){e=i*Y*Y;}else{if(Y<(2/R)){Y-=(1.5/R);e=i*Y*Y+0.75;}else{if(Y<(2.5/R)){Y-=(2.25/R);e=i*Y*Y+0.9375;}else{Y-=(2.625/R);e=i*Y*Y+0.984375;}}}return e;}};m.prototype.animate=function(ar,ai,ah,Z){clearTimeout(this.animation_in_progress);if(f.is(ah,"function")||!ah){Z=ah||null;}var al={},R={},af={},ae={x:0,y:0};for(var aj in ar){if(ar.hasOwnProperty(aj)){if(aj in t){al[aj]=this.attr(aj);(al[aj]==null)&&(al[aj]=p[aj]);R[aj]=ar[aj];switch(t[aj]){case"number":af[aj]=(R[aj]-al[aj])/ai;break;case"colour":al[aj]=f.getRGB(al[aj]);var ak=f.getRGB(R[aj]);af[aj]={r:(ak.r-al[aj].r)/ai,g:(ak.g-al[aj].g)/ai,b:(ak.b-al[aj].b)/ai};break;case"path":var aa=N(al[aj],R[aj]);al[aj]=aa[0];R[aj]=aa[1];af[aj]=[];for(var an=0,ad=al[aj].length;an<ad;an++){af[aj][an]=[0];for(var am=1,ap=al[aj][an].length;am<ap;am++){af[aj][an][am]=(R[aj][an][am]-al[aj][an][am])/ai;}}break;case"csv":var e=(ar[aj]+"").split(X),ac=(al[aj]+"").split(X);switch(aj){case"translation":al[aj]=[0,0];af[aj]=[e[0]/ai,e[1]/ai];break;case"rotation":al[aj]=(ac[1]==e[1]&&ac[2]==e[2])?ac:[0,e[1],e[2]];af[aj]=[(e[0]-al[aj][0])/ai,0,0];break;case"scale":ar[aj]=e;al[aj]=(al[aj]+"").split(X);af[aj]=[(e[0]-al[aj][0])/ai,(e[1]-al[aj][1])/ai,0,0];break;case"clip-rect":al[aj]=(al[aj]+"").split(X);af[aj]=[];var an=4;while(an--){af[aj][an]=(e[an]-al[aj][an])/ai;}break;}R[aj]=e;}}}}var Y=+new Date,ag=0,aq=function(i){return +i>255?255:+i;},ab=this;(function ao(){var au=new Date-Y,aC={},at;if(au<ai){var aA=f.easing_formulas[ah]?f.easing_formulas[ah](au/ai):au/ai;for(var ay in al){if(al.hasOwnProperty(ay)){switch(t[ay]){case"number":at=+al[ay]+aA*ai*af[ay];break;case"colour":at="rgb("+[aq(Math.round(al[ay].r+aA*ai*af[ay].r)),aq(Math.round(al[ay].g+aA*ai*af[ay].g)),aq(Math.round(al[ay].b+aA*ai*af[ay].b))].join(",")+")";break;case"path":at=[];for(var aw=0,aD=al[ay].length;aw<aD;aw++){at[aw]=[al[ay][aw][0]];for(var av=1,ax=al[ay][aw].length;av<ax;av++){at[aw][av]=+al[ay][aw][av]+aA*ai*af[ay][aw][av];}at[aw]=at[aw].join(" ");}at=at.join(" ");break;case"csv":switch(ay){case"translation":var aB=af[ay][0]*(au-ag),az=af[ay][1]*(au-ag);ae.x+=aB;ae.y+=az;at=[aB,az].join(" ");break;case"rotation":at=+al[ay][0]+aA*ai*af[ay][0];al[ay][1]&&(at+=","+al[ay][1]+","+al[ay][2]);break;case"scale":at=[+al[ay][0]+aA*ai*af[ay][0],+al[ay][1]+aA*ai*af[ay][1],(2 in ar[ay]?ar[ay][2]:""),(3 in ar[ay]?ar[ay][3]:"")].join(" ");break;case"clip-rect":at=[];var aw=4;while(aw--){at[aw]=+al[ay][aw]+aA*ai*af[ay][aw];}break;}break;}aC[ay]=at;}}ab.attr(aC);ab.animation_in_progress=setTimeout(ao);f.svg&&b.safari();}else{(ae.x||ae.y)&&ab.translate(-ae.x,-ae.y);ab.attr(ar);clearTimeout(ab.animation_in_progress);f.svg&&b.safari();(f.is(Z,"function"))&&Z.call(ab);}ag=au;})();return this;};m.prototype.translate=function(e,R){if(e==null){return{x:this._.tx,y:this._.ty};}this._.tx+=+e;this._.ty+=+R;switch(this.type){case"circle":case"ellipse":this.attr({cx:+e+this.attrs.cx,cy:+R+this.attrs.cy});break;case"rect":case"image":case"text":this.attr({x:+e+this.attrs.x,y:+R+this.attrs.y});break;case"path":var i=c(this.attrs.path);i[0][1]+=+e;i[0][2]+=+R;this.attr({path:i});break;}return this;};m.prototype.toString=function(){return"Rapha\u00ebl\u2019s object";};var k=function(e){this.items=[];this.length=0;if(e){for(var R=0,Y=e.length;R<Y;R++){if(e[R]&&(e[R].constructor==m||e[R].constructor==k)){this[this.items.length]=this.items[this.items.length]=e[R];this.length++;}}}};k.prototype.push=function(){var Z,e;for(var R=0,Y=arguments.length;R<Y;R++){Z=arguments[R];if(Z&&(Z.constructor==m||Z.constructor==k)){e=this.items.length;this[e]=this.items[e]=Z;this.length++;}}return this;};k.prototype.pop=function(){delete this[this.length--];return this.items.pop();};for(var Q in m.prototype){if(m.prototype.hasOwnProperty(Q)){k.prototype[Q]=(function(e){return function(){for(var R=0,Y=this.items.length;R<Y;R++){this.items[R][e].apply(this.items[R],arguments);}return this;};})(Q);}}k.prototype.attr=function(R,ab){if(R&&f.is(R,"array")&&f.is(R[0],"object")){for(var e=0,aa=R.length;e<aa;e++){this.items[e].attr(R[e]);}}else{for(var Y=0,Z=this.items.length;Y<Z;Y++){this.items[Y].attr.apply(this.items[Y],arguments);}}return this;};k.prototype.animate=function(aa,R,ad,ac){if(f.is(ad,"function")||!ad){ac=ad||null;}var e=this.items.length,Y=e,ab=this;if(ac){var Z=function(){!--e&&ac.call(ab);};while(Y--){this.items[Y].animate(aa,R,ad||Z,Z);}}else{while(Y--){this.items[Y].animate(aa,R,ad);}}return this;};k.prototype.getBBox=function(){var e=[],ab=[],R=[],Z=[];for(var Y=this.items.length;Y--;){var aa=this.items[Y].getBBox();e.push(aa.x);ab.push(aa.y);R.push(aa.x+aa.width);Z.push(aa.y+aa.height);}e=Math.min.apply(Math,e);ab=Math.min.apply(Math,ab);return{x:e,y:ab,width:Math.max.apply(Math,R)-e,height:Math.max.apply(Math,Z)-ab};};f.registerFont=function(i){if(!i.face){return i;}this.fonts=this.fonts||{};var Y={w:i.w,face:{},glyphs:{}},R=i.face["font-family"];for(var ab in i.face){if(i.face.hasOwnProperty(ab)){Y.face[ab]=i.face[ab];}}if(this.fonts[R]){this.fonts[R].push(Y);}else{this.fonts[R]=[Y];}if(!i.svg){Y.face["units-per-em"]=parseInt(i.face["units-per-em"],10);for(var Z in i.glyphs){if(i.glyphs.hasOwnProperty(Z)){var aa=i.glyphs[Z];Y.glyphs[Z]={w:aa.w,k:{},d:aa.d&&"M"+aa.d.replace(/[mlcxtrv]/g,function(ac){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[ac]||"M";})+"z"};if(aa.k){for(var e in aa.k){if(aa.hasOwnProperty(e)){Y.glyphs[Z].k[e]=aa.k[e];}}}}}}return i;};b.getFont=function(ad,ae,R,Z){Z=Z||"normal";R=R||"normal";ae=+ae||{normal:400,bold:700,lighter:300,bolder:800}[ae]||400;var aa=f.fonts[ad];if(!aa){var Y=new RegExp("(^|\\s)"+ad.replace(/[^\w\d\s+!~.:_-]/g,"")+"(\\s|$)","i");for(var e in f.fonts){if(f.fonts.hasOwnProperty(e)){if(Y.test(e)){aa=f.fonts[e];break;}}}}var ab;if(aa){for(var ac=0,af=aa.length;ac<af;ac++){ab=aa[ac];if(ab.face["font-weight"]==ae&&(ab.face["font-style"]==R||!ab.face["font-style"])&&ab.face["font-stretch"]==Z){break;}}}return ab;};b.print=function(af,ae,ac,R,aj){var aa=this.set(),ad=(ac+"").split(""),e=0,ai="",Z;f.is(R,"string")&&(R=this.getFont(R));if(R){Z=(aj||16)/R.face["units-per-em"];for(var ab=0,ag=ad.length;ab<ag;ab++){var Y=ab&&R.glyphs[ad[ab-1]]||{},ah=R.glyphs[ad[ab]];e+=ab?(Y.w||R.w)+(Y.k&&Y.k[ad[ab]]||0):0;ah&&ah.d&&aa.push(this.path(ah.d).attr({fill:"#000",stroke:"none",translation:[e,0]}));}aa.scale(Z,Z,0,ae).translate(af,(aj||16)/2);}return aa;};f.format=function(i){var e=f.is(arguments[1],"array")?[0].concat(arguments[1]):arguments;i&&f.is(i,"string")&&e.length-1&&(i=i.replace(/\{(\d+)\}/g,function(Y,R){return e[++R]==null?"":e[R];}));return i||"";};f.ninja=function(){var R=window.Raphael,i;if(O.was){window.Raphael=O.is;}else{try{delete window.Raphael;}catch(Y){window.Raphael=i;}}return R;};f.el=m.prototype;return f;})();
\ No newline at end of file
+window.Raphael=(function(){var ac=/[, ]+/,g=document,P=window,U={was:"Raphael" in window,is:window.Raphael},f=function(){if(f.is(arguments[0],"array")){var e=arguments[0],R=m[h](f,e.splice(0,3+f.is(e[0],"number"))),af=R.set();for(var ae=0,ag=e[C];ae<ag;ae++){var ad=e[ae]||{};ad.type in {circle:1,rect:1,path:1,ellipse:1,text:1,image:1}&&af.push(R[ad.type]().attr(ad));}return af;}return m[h](f,arguments);},b={},t={"clip-rect":"0 0 10e9 10e9",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},x={"clip-rect":"csv",cx:"number",cy:"number",fill:"colour","fill-opacity":"number","font-size":"number",height:"number",opacity:"number",path:"path",r:"number",rotation:"csv",rx:"number",ry:"number",scale:"csv",stroke:"colour","stroke-opacity":"number","stroke-width":"number",translation:"csv",width:"number",x:"number",y:"number"},y=["click","dblclick","mousedown","mousemove","mouseout","mouseover","mouseup"],o="prototype",h="apply",C="length",s="parseFloat",r="parseInt";f.version="1.0";f.type=(window.SVGAngle||document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML");f.svg=!(f.vml=f.type=="VML");f.idGenerator=0;f.fn={};f.is=function(i,e){e=(e+"").toLowerCase();if((e=="object"||e=="undefined")&&typeof i==e){return true;}if(i==null&&e=="null"){return true;}return Object[o].toString.call(i).replace(/^\[object\s+|\]$/gi,"").toLowerCase()==e;};f.setWindow=function(e){P=e;g=P.document;};f.hsb2rgb=ab(function(aj,ah,an){if(f.is(aj,"object")&&"h" in aj&&"s" in aj&&"b" in aj){an=aj.b;ah=aj.s;aj=aj.h;}var ae,af,ao;if(an==0){return{r:0,g:0,b:0,hex:"#000"};}if(aj>1||ah>1||an>1){aj/=255;ah/=255;an/=255;}var ag=Math.floor(aj*6),ak=(aj*6)-ag,ad=an*(1-ah),R=an*(1-(ah*ak)),ap=an*(1-(ah*(1-ak)));ae=[an,R,ad,ad,ap,an,an][ag];af=[ap,an,an,R,ad,ad,ap][ag];ao=[ad,ad,ap,an,an,R,ad][ag];ae*=255;af*=255;ao*=255;var al={r:ae,g:af,b:ao},e=(~~ae).toString(16),ai=(~~af).toString(16),am=(~~ao).toString(16);if(e[C]==1){e="0"+e;}if(ai[C]==1){ai="0"+ai;}if(am[C]==1){am="0"+am;}al.hex="#"+e+ai+am;return al;},f);f.rgb2hsb=ab(function(e,i,ah){if(f.is(e,"object")&&"r" in e&&"g" in e&&"b" in e){ah=e.b;i=e.g;e=e.r;}if(f.is(e,"string")){var aj=f.getRGB(e);e=aj.r;i=aj.g;ah=aj.b;}if(e>1||i>1||ah>1){e/=255;i/=255;ah/=255;}var ag=Math.max(e,i,ah),R=Math.min(e,i,ah),ae,ad,af=ag;if(R==ag){return{h:0,s:0,b:ag};}else{var ai=(ag-R);ad=ai/ag;if(e==ag){ae=(i-ah)/ai;}else{if(i==ag){ae=2+((ah-e)/ai);}else{ae=4+((e-i)/ai);}}ae/=6;if(ae<0){ae+=1;}if(ae>1){ae-=1;}}return{h:ae,s:ad,b:af};},f);f._path2string=function(){var ad="",ag;for(var R=0,ae=this[C];R<ae;R++){for(var e=0,af=this[R][C];e<af;e++){ad+=this[R][e];e&&e!=af-1&&(ad+=",");}R!=ae-1&&(ad+="\n");}return ad.replace(/,(?=-)/g,"");};function ab(ad,i,e){function R(){var ae=Array[o].splice.call(arguments,0,arguments[C]),af=ae.join("\u25ba");R.cache=R.cache||{};R.count=R.count||[];if(af in R.cache){return e?e(R.cache[af]):R.cache[af];}if(R.count[C]>1000){delete R.cache[R.count.unshift()];}R.count.push(af);R.cache[af]=ad[h](i,ae);return e?e(R.cache[af]):R.cache[af];}return R;}f.getRGB=ab(function(e){var al={none:"none",aliceblue:"#f0f8ff",amethyst:"#96c",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"},ag;e=al[(e+"").toLowerCase()]||e;if(!e){return{r:-1,g:-1,b:-1,hex:"none",error:1};}if(e=="none"){return{r:-1,g:-1,b:-1,hex:"none"};}var R,ad,aj,ah=(e+"").match(/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i);if(ah){if(ah[2]){aj=P[r](ah[2].substring(5),16);ad=P[r](ah[2].substring(3,5),16);R=P[r](ah[2].substring(1,3),16);}if(ah[3]){aj=P[r](ah[3].substring(3)+ah[3].substring(3),16);ad=P[r](ah[3].substring(2,3)+ah[3].substring(2,3),16);R=P[r](ah[3].substring(1,2)+ah[3].substring(1,2),16);}if(ah[4]){ah=ah[4].split(/\s*,\s*/);R=P[s](ah[0]);ad=P[s](ah[1]);aj=P[s](ah[2]);}if(ah[5]){ah=ah[5].split(/\s*,\s*/);R=P[s](ah[0])*2.55;ad=P[s](ah[1])*2.55;aj=P[s](ah[2])*2.55;}if(ah[6]){ah=ah[6].split(/\s*,\s*/);R=P[s](ah[0]);ad=P[s](ah[1]);aj=P[s](ah[2]);return f.hsb2rgb(R,ad,aj);}if(ah[7]){ah=ah[7].split(/\s*,\s*/);R=P[s](ah[0])*2.55;ad=P[s](ah[1])*2.55;aj=P[s](ah[2])*2.55;return f.hsb2rgb(R,ad,aj);}ah={r:R,g:ad,b:aj};var i=(~~R).toString(16),af=(~~ad).toString(16),ai=(~~aj).toString(16),ak=/^(?=\d$)/,ae="replace";i=i[ae](ak,"0");af=af[ae](ak,"0");ai=ai[ae](ak,"0");ah.hex="#"+i+af+ai;ag=ah;}else{ag={r:-1,g:-1,b:-1,hex:"none",error:1};}return ag;},f);f.getColor=function(i){var R=this.getColor.start=this.getColor.start||{h:0,s:1,b:i||0.75},e=this.hsb2rgb(R.h,R.s,R.b);R.h+=0.075;if(R.h>1){R.h=0;R.s-=0.2;if(R.s<=0){this.getColor.start={h:0,s:1,b:R.b};}}return e.hex;};f.getColor.reset=function(){delete this.start;};f.parsePathString=ab(function(e){if(!e){return null;}var R={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=[];if(f.is(e,"array")&&f.is(e[0],"array")){i=w(e);}if(!i[C]){(e+"").replace(/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,function(ae,ad,ah){var ag=[],af=ad.toLowerCase();ah.replace(/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,function(aj,ai){ai&&ag.push(+ai);});while(ag[C]>=R[af]){i.push([ad].concat(ag.splice(0,R[af])));if(!R[af]){break;}}});}i.toString=f._path2string;return i;});var H=ab(function(ak){if(!ak){return{x:0,y:0,width:0,height:0};}ak=T(ak);var ah=0,ag=0,ad=[],R=[];for(var ae=0,aj=ak[C];ae<aj;ae++){if(ak[ae][0]=="M"){ah=ak[ae][1];ag=ak[ae][2];ad.push(ah);R.push(ag);}else{var af=N(ah,ag,ak[ae][1],ak[ae][2],ak[ae][3],ak[ae][4],ak[ae][5],ak[ae][6]);ad=ad.concat(af.min.x,af.max.x);R=R.concat(af.min.y,af.max.y);}}var e=Math.min[h](0,ad),ai=Math.min[h](0,R);return{x:e,y:ai,width:Math.max[h](0,ad)-e,height:Math.max[h](0,R)-ai};}),w=function(ag){var ad=[];if(!f.is(ag,"array")||!f.is(ag&&ag[0],"array")){ag=f.parsePathString(ag);}for(var R=0,ae=ag[C];R<ae;R++){ad[R]=[];for(var e=0,af=ag[R][C];e<af;e++){ad[R][e]=ag[R][e];}}ad.toString=f._path2string;return ad;},c=ab(function(ae){if(!f.is(ae,"array")||!f.is(ae&&ae[0],"array")){ae=f.parsePathString(ae);}var ak=[],am=0,al=0,ap=0,ao=0,ad=0;if(ae[0][0]=="M"){am=ae[0][1];al=ae[0][2];ap=am;ao=al;ad++;ak.push(["M",am,al]);}for(var ah=ad,aq=ae[C];ah<aq;ah++){var e=ak[ah]=[],an=ae[ah];if(an[0]!=an[0].toLowerCase()){e[0]=an[0].toLowerCase();switch(e[0]){case"a":e[1]=an[1];e[2]=an[2];e[3]=an[3];e[4]=an[4];e[5]=an[5];e[6]=+(an[6]-am).toFixed(3);e[7]=+(an[7]-al).toFixed(3);break;case"v":e[1]=+(an[1]-al).toFixed(3);break;case"m":ap=an[1];ao=an[2];default:for(var ag=1,ai=an[C];ag<ai;ag++){e[ag]=+(an[ag]-((ag%2)?am:al)).toFixed(3);}}}else{e=ak[ah]=[];if(an[0]=="m"){ap=an[1]+am;ao=an[2]+al;}for(var af=0,R=an[C];af<R;af++){ak[ah][af]=an[af];}}var aj=ak[ah][C];switch(ak[ah][0]){case"z":am=ap;al=ao;break;case"h":am+=+ak[ah][aj-1];break;case"v":al+=+ak[ah][aj-1];break;default:am+=+ak[ah][aj-2];al+=+ak[ah][aj-1];}}ak.toString=f._path2string;return ak;},0,w),z=ab(function(ae){if(!f.is(ae,"array")||!f.is(ae&&ae[0],"array")){ae=f.parsePathString(ae);}var aj=[],al=0,ak=0,ao=0,an=0,ad=0;if(ae[0][0]=="M"){al=+ae[0][1];ak=+ae[0][2];ao=al;an=ak;ad++;aj[0]=["M",al,ak];}for(var ah=ad,ap=ae[C];ah<ap;ah++){var e=aj[ah]=[],am=ae[ah];if(am[0]!=(am[0]+"").toUpperCase()){e[0]=(am[0]+"").toUpperCase();switch(e[0]){case"A":e[1]=am[1];e[2]=am[2];e[3]=am[3];e[4]=am[4];e[5]=am[5];e[6]=+(am[6]+al);e[7]=+(am[7]+ak);break;case"V":e[1]=+am[1]+ak;break;case"H":e[1]=+am[1]+al;break;case"M":ao=+am[1]+al;an=+am[2]+ak;default:for(var ag=1,ai=am[C];ag<ai;ag++){e[ag]=+am[ag]+((ag%2)?al:ak);}}}else{for(var af=0,R=am[C];af<R;af++){aj[ah][af]=am[af];}}switch(e[0]){case"Z":al=ao;ak=an;break;case"H":al=e[1];break;case"V":ak=e[1];break;default:al=aj[ah][aj[ah][C]-2];ak=aj[ah][aj[ah][C]-1];}}aj.toString=f._path2string;return aj;},null,w),d=function(i,ad,e,R){return[i,ad,e,R,e,R];},A=function(i,ad,ag,ae,e,R){var af=1/3,ah=2/3;return[af*i+ah*ag,af*ad+ah*ae,af*e+ah*ag,af*R+ah*ae,e,R];},u=function(ap,aU,az,ax,aq,ak,af,ao,aT,ar){var ae=Math.PI,aw=ae*120/180,e=ae/180*(+aq||0),aD=[],aA,aQ=ab(function(aV,aY,i){var aX=aV*Math.cos(i)-aY*Math.sin(i),aW=aV*Math.sin(i)+aY*Math.cos(i);return{x:aX,y:aW};});if(!ar){aA=aQ(ap,aU,-e);ap=aA.x;aU=aA.y;aA=aQ(ao,aT,-e);ao=aA.x;aT=aA.y;var R=Math.cos(ae/180*aq),am=Math.sin(ae/180*aq),aF=(ap-ao)/2,aE=(aU-aT)/2;az=Math.max(az,Math.abs(aF));ax=Math.max(ax,Math.abs(aE));var ad=az*az,aI=ax*ax,aK=(ak==af?-1:1)*Math.sqrt(Math.abs((ad*aI-ad*aE*aE-aI*aF*aF)/(ad*aE*aE+aI*aF*aF))),au=aK*az*aE/ax+(ap+ao)/2,at=aK*-ax*aF/az+(aU+aT)/2,aj=Math.asin((aU-at)/ax),ai=Math.asin((aT-at)/ax);aj=ap<au?ae-aj:aj;ai=ao<au?ae-ai:ai;aj<0&&(aj=ae*2+aj);ai<0&&(ai=ae*2+ai);if(af&&aj>ai){aj=aj-ae*2;}if(!af&&ai>aj){ai=ai-ae*2;}}else{aj=ar[0];ai=ar[1];au=ar[2];at=ar[3];}var an=ai-aj;if(Math.abs(an)>aw){var av=ai,ay=ao,al=aT;ai=aj+aw*(af&&ai>aj?1:-1);ao=au+az*Math.cos(ai);aT=at+ax*Math.sin(ai);aD=u(ao,aT,az,ax,aq,0,af,ay,al,[ai,av,au,at]);}an=ai-aj;var ah=Math.cos(aj),aS=Math.sin(aj),ag=Math.cos(ai),aR=Math.sin(ai),aG=Math.tan(an/4),aJ=4/3*az*aG,aH=4/3*ax*aG,aP=[ap,aU],aO=[ap+aJ*aS,aU-aH*ah],aN=[ao+aJ*aR,aT-aH*ag],aL=[ao,aT];aO[0]=2*aP[0]-aO[0];aO[1]=2*aP[1]-aO[1];if(ar){return[aO,aN,aL].concat(aD);}else{aD=[aO,aN,aL].concat(aD).join(",").split(",");var aB=[];for(var aM=0,aC=aD[C];aM<aC;aM++){aB[aM]=aM%2?aQ(aD[aM-1],aD[aM],e).y:aQ(aD[aM],aD[aM+1],e).x;}return aB;}},E=ab(function(i,e,at,aq,af,ae,ah,ag,am){var ak=Math.pow(1-am,3)*i+Math.pow(1-am,2)*3*am*at+(1-am)*3*am*am*af+Math.pow(am,3)*ah,ai=Math.pow(1-am,3)*e+Math.pow(1-am,2)*3*am*aq+(1-am)*3*am*am*ae+Math.pow(am,3)*ag,ao=i+2*am*(at-i)+am*am*(af-2*at+i),an=e+2*am*(aq-e)+am*am*(ae-2*aq+e),ar=at+2*am*(af-at)+am*am*(ah-2*af+at),ap=aq+2*am*(ae-aq)+am*am*(ag-2*ae+aq),al=(1-am)*i+am*at,aj=(1-am)*e+am*aq,ad=(1-am)*af+am*ah,R=(1-am)*ae+am*ag;return{x:ak,y:ai,m:{x:ao,y:an},n:{x:ar,y:ap},start:{x:al,y:aj},end:{x:ad,y:R}};}),N=ab(function(i,e,ad,R,aq,ap,am,aj){var ao=(aq-2*ad+i)-(am-2*aq+ad),al=2*(ad-i)-2*(aq-ad),ai=i-ad,ag=(-al+Math.sqrt(al*al-4*ao*ai))/2/ao,ae=(-al-Math.sqrt(al*al-4*ao*ai))/2/ao,ak=[e,aj],an=[i,am],ah=E(i,e,ad,R,aq,ap,am,aj,ag>0&&ag<1?ag:0),af=E(i,e,ad,R,aq,ap,am,aj,ae>0&&ae<1?ae:0);an=an.concat(ah.x,af.x);ak=ak.concat(ah.y,af.y);ao=(ap-2*R+e)-(aj-2*ap+R);al=2*(R-e)-2*(ap-R);ai=e-R;ag=(-al+Math.sqrt(al*al-4*ao*ai))/2/ao;ae=(-al-Math.sqrt(al*al-4*ao*ai))/2/ao;ah=E(i,e,ad,R,aq,ap,am,aj,ag>0&&ag<1?ag:0);af=E(i,e,ad,R,aq,ap,am,aj,ae>0&&ae<1?ae:0);an=an.concat(ah.x,af.x);ak=ak.concat(ah.y,af.y);return{min:{x:Math.min[h](Math,an),y:Math.min[h](Math,ak)},max:{x:Math.max[h](Math,an),y:Math.max[h](Math,ak)}};}),T=ab(function(ap,ak){var ae=z(ap),al=ak&&z(ak),am={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},ag=function(aq,ar){var i,at;if(!aq){return["C",ar.x,ar.y,ar.x,ar.y,ar.x,ar.y];}!(aq[0] in {T:1,Q:1})&&(ar.qx=ar.qy=null);switch(aq[0]){case"M":ar.X=aq[1];ar.Y=aq[2];break;case"A":aq=["C"].concat(u[h](0,[ar.x,ar.y].concat(aq.slice(1))));break;case"S":i=ar.x+(ar.x-(ar.bx||ar.x));at=ar.y+(ar.y-(ar.by||ar.y));aq=["C",i,at].concat(aq.slice(1));break;case"T":ar.qx=ar.x+(ar.x-(ar.qx||ar.x));ar.qy=ar.y+(ar.y-(ar.qy||ar.y));aq=["C"].concat(A(ar.x,ar.y,ar.qx,ar.qy,aq[1],aq[2]));break;case"Q":ar.qx=aq[1];ar.qy=aq[2];aq=["C"].concat(A(ar.x,ar.y,aq[1],aq[2],aq[3],aq[4]));break;case"L":aq=["C"].concat(d(ar.x,ar.y,aq[1],aq[2]));break;case"H":aq=["C"].concat(d(ar.x,ar.y,aq[1],ar.y));break;case"V":aq=["C"].concat(d(ar.x,ar.y,ar.x,aq[1]));break;case"Z":aq=["C"].concat(d(ar.x,ar.y,ar.X,ar.Y));break;}return aq;},R=function(aq,ar){if(aq[ar][C]>7){aq[ar].shift();var at=aq[ar];while(at[C]){aq.splice(ar++,0,["C"].concat(at.splice(0,6)));}aq.splice(ar,1);an=Math.max(ae[C],al&&al[C]||0);}},ad=function(av,au,ar,aq,at){if(av&&au&&av[at][0]=="M"&&au[at][0]!="M"){au.splice(at,0,["M",aq.x,aq.y]);ar.bx=0;ar.by=0;ar.x=av[at][1];ar.y=av[at][2];an=Math.max(ae[C],al&&al[C]||0);}};for(var ai=0,an=Math.max(ae[C],al&&al[C]||0);ai<an;ai++){ae[ai]=ag(ae[ai],am);R(ae,ai);al&&(al[ai]=ag(al[ai],e));al&&R(al,ai);ad(ae,al,am,e,ai);ad(al,ae,e,am,ai);var ah=ae[ai],ao=al&&al[ai],af=ah[C],aj=al&&ao[C];am.x=ah[af-2];am.y=ah[af-1];am.bx=P[s](ah[af-4])||am.x;am.by=P[s](ah[af-3])||am.y;e.bx=al&&(P[s](ao[aj-4])||e.x);e.by=al&&(P[s](ao[aj-3])||e.y);e.x=al&&ao[aj-2];e.y=al&&ao[aj-1];}return al?[ae,al]:ae;},null,w),p=ab(function(aj){var ai=[];for(var af=0,ak=aj[C];af<ak;af++){var e={},ah=aj[af].match(/^([^:]*):?([\d\.]*)/);e.color=f.getRGB(ah[1]);if(e.color.error){return null;}e.color=e.color.hex;ah[2]&&(e.offset=ah[2]+"%");ai.push(e);}for(var af=1,ak=ai[C]-1;af<ak;af++){if(!ai[af].offset){var R=P[s](ai[af-1].offset||0),ad=0;for(var ae=af+1;ae<ak;ae++){if(ai[ae].offset){ad=ai[ae].offset;break;}}if(!ad){ad=100;ae=ak;}ad=P[s](ad);var ag=(ad-R)/(ae-af+1);for(;af<ae;af++){R+=ag;ai[af].offset=R+"%";}}}return ai;}),K=function(){var R,i,ae,ad,e;if(f.is(arguments[0],"string")||f.is(arguments[0],"object")){if(f.is(arguments[0],"string")){R=g.getElementById(arguments[0]);}else{R=arguments[0];}if(R.tagName){if(arguments[1]==null){return{container:R,width:R.style.pixelWidth||R.offsetWidth,height:R.style.pixelHeight||R.offsetHeight};}else{return{container:R,width:arguments[1],height:arguments[2]};}}}else{if(f.is(arguments[0],"number")&&arguments[C]>3){return{container:1,x:arguments[0],y:arguments[1],width:arguments[2],height:arguments[3]};}}},a=function(e,R){var i=this;for(var ad in R){if(R.hasOwnProperty(ad)&&!(ad in e)){switch(typeof R[ad]){case"function":(function(ae){e[ad]=e===i?ae:function(){return ae[h](i,arguments);};})(R[ad]);break;case"object":e[ad]=e[ad]||{};a.call(this,e[ad],R[ad]);break;default:e[ad]=R[ad];break;}}}};if(f.svg){b.svgns="http://www.w3.org/2000/svg";b.xlink="http://www.w3.org/1999/xlink";var S=function(e){return +e+(Math.floor(e)==e)*0.5;};var D=function(af){for(var R=0,ad=af[C];R<ad;R++){if(af[R][0].toLowerCase()!="a"){for(var e=1,ae=af[R][C];e<ae;e++){af[R][e]=S(af[R][e]);}}else{af[R][6]=S(af[R][6]);af[R][7]=S(af[R][7]);}}return af;};var F=function(R,e){if(e){for(var i in e){if(e.hasOwnProperty(i)){R.setAttribute(i,e[i]);}}}else{return g.createElementNS(b.svgns,R);}};f.toString=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version;};var aa=function(e,ad){var i=F("path");ad.canvas&&ad.canvas.appendChild(i);var R=new n(i,ad);R.type="path";J(R,{fill:"none",stroke:"#000",path:e});return R;};var Q=function(ad,an,e){var ak="linear",ah=0.5,af=0.5,ap=ad.style;an=(an+"").replace(/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,function(aq,i,ar){ak="radial";if(i&&ar){ah=P[s](i);af=P[s](ar);if(Math.pow(ah-0.5,2)+Math.pow(af-0.5,2)>0.25){af=Math.sqrt(0.25-Math.pow(ah-0.5,2))+0.5;}}return"";});an=an.split(/\s*\-\s*/);if(ak=="linear"){var ag=an.shift();ag=-P[s](ag);if(isNaN(ag)){return null;}var ae=[0,0,Math.cos(ag*Math.PI/180),Math.sin(ag*Math.PI/180)],am=1/(Math.max(Math.abs(ae[2]),Math.abs(ae[3]))||1);ae[2]*=am;ae[3]*=am;if(ae[2]<0){ae[0]=-ae[2];ae[2]=0;}if(ae[3]<0){ae[1]=-ae[3];ae[3]=0;}}var aj=p(an);if(!aj){return null;}var R=F(ak+"Gradient");R.id="r"+(f.idGenerator++).toString(36);ak=="radial"?F(R,{fx:ah,fy:af}):F(R,{x1:ae[0],y1:ae[1],x2:ae[2],y2:ae[3]});e.defs.appendChild(R);for(var ai=0,ao=aj[C];ai<ao;ai++){var al=F("stop");F(al,{offset:aj[ai].offset?aj[ai].offset:!ai?"0%":"100%","stop-color":aj[ai].color||"#fff"});R.appendChild(al);}F(ad,{fill:"url(#"+R.id+")",opacity:1,"fill-opacity":1});ap.fill="";ap.opacity=1;ap.fillOpacity=1;return 1;};var v=function(i){var e=i.getBBox();F(i.pattern,{patternTransform:f.format("translate({0},{1})",e.x,e.y)});};var J=function(al,av){var ao={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},aq=al.node,am=al.attrs,ai=al.attr("rotation"),af=function(aC,aB){aB=ao[(aB+"").toLowerCase()];if(aB){var az=aC.attrs["stroke-width"]||"1",ax={round:az,square:az,butt:0}[aC.attrs["stroke-linecap"]||av["stroke-linecap"]]||0,aA=[];var ay=aB[C];while(ay--){aA[ay]=aB[ay]*az+((ay%2)?1:-1)*ax;}F(aq,{"stroke-dasharray":aA.join(",")});}};P[s](ai)&&al.rotate(0,true);for(var ap in av){if(av.hasOwnProperty(ap)){if(!(ap in t)){continue;}var an=av[ap];am[ap]=an;switch(ap){case"href":case"title":case"target":var at=aq.parentNode;if(at.tagName.toLowerCase()!="a"){var ad=F("a");at.insertBefore(ad,aq);ad.appendChild(aq);at=ad;}at.setAttributeNS(al.paper.xlink,ap,an);break;case"clip-rect":var i=(an+"").split(ac);if(i[C]==4){al.clip&&al.clip.parentNode.parentNode.removeChild(al.clip.parentNode);var R=F("clipPath"),ar=F("rect");R.id="r"+(f.idGenerator++).toString(36);F(ar,{x:i[0],y:i[1],width:i[2],height:i[3]});R.appendChild(ar);al.paper.defs.appendChild(R);F(aq,{"clip-path":"url(#"+R.id+")"});al.clip=ar;}if(!an){var au=g.getElementById(aq.getAttribute("clip-path").replace(/(^url\(#|\)$)/g,""));au&&au.parentNode.removeChild(au);F(aq,{"clip-path":""});delete al.clip;}break;case"path":if(an&&al.type=="path"){am.path=D(z(an));F(aq,{d:am.path});}break;case"width":aq.setAttribute(ap,an);if(am.fx){ap="x";an=am.x;}else{break;}case"x":if(am.fx){an=-am.x-(am.width||0);}case"rx":if(ap=="rx"&&al.type=="rect"){break;}case"cx":aq.setAttribute(ap,an);al.pattern&&v(al);break;case"height":aq.setAttribute(ap,an);if(am.fy){ap="y";an=am.y;}else{break;}case"y":if(am.fy){an=-am.y-(am.height||0);}case"ry":if(ap=="ry"&&al.type=="rect"){break;}case"cy":aq.setAttribute(ap,an);al.pattern&&v(al);break;case"r":if(al.type=="rect"){F(aq,{rx:an,ry:an});}else{aq.setAttribute(ap,an);}break;case"src":if(al.type=="image"){aq.setAttributeNS(al.paper.xlink,"href",an);}break;case"stroke-width":aq.style.strokeWidth=an;aq.setAttribute(ap,an);if(am["stroke-dasharray"]){af(al,am["stroke-dasharray"]);}break;case"stroke-dasharray":af(al,an);break;case"rotation":ai=an;al.rotate(an,true);break;case"translation":var ag=(an+"").split(ac);al.translate((+ag[0]+1||2)-1,(+ag[1]+1||2)-1);break;case"scale":var ag=(an+"").split(ac);al.scale(+ag[0]||1,+ag[1]||+ag[0]||1,+ag[2]||null,+ag[3]||null);break;case"fill":var ae=(an+"").match(/^url\(['"]?([^\)]+)['"]?\)$/i);if(ae){var R=F("pattern"),ak=F("image");R.id="r"+(f.idGenerator++).toString(36);F(R,{x:0,y:0,patternUnits:"userSpaceOnUse"});F(ak,{x:0,y:0});ak.setAttributeNS(al.paper.xlink,"href",ae[1]);R.appendChild(ak);var aw=g.createElement("img");aw.style.cssText="position:absolute;left:-9999em;top-9999em";aw.onload=function(){F(R,{width:this.offsetWidth,height:this.offsetHeight});F(ak,{width:this.offsetWidth,height:this.offsetHeight});g.body.removeChild(this);b.safari();};g.body.appendChild(aw);aw.src=ae[1];al.paper.defs.appendChild(R);aq.style.fill="url(#"+R.id+")";F(aq,{fill:"url(#"+R.id+")"});al.pattern=R;al.pattern&&v(al);break;}if(!f.getRGB(an).error){delete av.gradient;delete am.gradient;if(!f.is(am.opacity,"undefined")&&f.is(av.opacity,"undefined")){aq.style.opacity=am.opacity;F(aq,{opacity:am.opacity});}if(!f.is(am["fill-opacity"],"undefined")&&f.is(av["fill-opacity"],"undefined")){aq.style.fillOpacity=am["fill-opacity"];F(aq,{"fill-opacity":am["fill-opacity"]});}}else{if((al.type in {circle:1,ellipse:1}||(an+"").charAt(0)!="r")&&Q(aq,an,al.paper)){am.gradient=an;am.fill="none";break;}}case"stroke":aq.style[ap]=f.getRGB(an).hex;aq.setAttribute(ap,f.getRGB(an).hex);break;case"gradient":(al.type in {circle:1,ellipse:1}||(an+"").charAt(0)!="r")&&Q(aq,an,al.paper);break;case"opacity":case"fill-opacity":if(am.gradient){var e=g.getElementById(aq.getAttribute("fill").replace(/^url\(#|\)$/g,""));if(e){var ah=e.getElementsByTagName("stop");ah[ah[C]-1].setAttribute("stop-opacity",an);}break;}default:ap=="font-size"&&(an=P[r](an,10)+"px");var aj=ap.replace(/(\-.)/g,function(ax){return ax.substring(1).toUpperCase();});aq.style[aj]=an;aq.setAttribute(ap,an);break;}}}X(al,av);P[r](ai,10)&&al.rotate(ai,true);};var O=1.2;var X=function(e,ae){if(e.type!="text"||!("text" in ae||"font" in ae||"font-size" in ae||"x" in ae||"y" in ae)){return;}var aj=e.attrs,R=e.node,al=R.firstChild?P[r](g.defaultView.getComputedStyle(R.firstChild,"").getPropertyValue("font-size"),10):10;if("text" in ae){while(R.firstChild){R.removeChild(R.firstChild);}var ad=(ae.text+"").split("\n");for(var af=0,ak=ad[C];af<ak;af++){var ah=F("tspan");af&&F(ah,{dy:al*O,x:aj.x});ah.appendChild(g.createTextNode(ad[af]));R.appendChild(ah);}}else{var ad=R.getElementsByTagName("tspan");for(var af=0,ak=ad[C];af<ak;af++){af&&F(ad[af],{dy:al*O,x:aj.x});}}F(R,{y:aj.y});var ag=e.getBBox(),ai=aj.y-(ag.y+ag.height/2);ai&&F(R,{y:aj.y+ai});};var n=function(i,e){var ad=0,R=0;this[0]=i;this.node=i;i.raphael=this;this.paper=e;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};};n[o].rotate=function(i,e,ad){if(i==null){if(this._.rt.cx){return[this._.rt.deg,this._.rt.cx,this._.rt.cy].join(" ");}return this._.rt.deg;}var R=this.getBBox();i=(i+"").split(ac);if(i[C]-1){e=P[s](i[1]);ad=P[s](i[2]);}i=P[s](i[0]);if(e!=null){this._.rt.deg=i;}else{this._.rt.deg+=i;}(ad==null)&&(e=null);this._.rt.cx=e;this._.rt.cy=ad;e=e==null?R.x+R.width/2:e;ad=ad==null?R.y+R.height/2:ad;if(this._.rt.deg){this.transformations[0]=f.format("rotate({0} {1} {2})",this._.rt.deg,e,ad);this.clip&&F(this.clip,{transform:f.format("rotate({0} {1} {2})",-this._.rt.deg,e,ad)});}else{this.transformations[0]="";this.clip&&F(this.clip,{transform:""});}F(this.node,{transform:this.transformations.join(" ")});return this;};n[o].hide=function(){this.node.style.display="none";return this;};n[o].show=function(){this.node.style.display="block";return this;};n[o].remove=function(){this.node.parentNode.removeChild(this.node);};n[o].getBBox=function(){if(this.type=="path"){return H(this.attrs.path);}if(this.node.style.display=="none"){this.show();var ad=true;}var ah={};try{ah=this.node.getBBox();}catch(af){}finally{ah=ah||{};}if(this.type=="text"){ah={x:ah.x,y:Infinity,width:ah.width,height:0};for(var R=0,ae=this.node.getNumberOfChars();R<ae;R++){var ag=this.node.getExtentOfChar(R);(ag.y<ah.y)&&(ah.y=ag.y);(ag.y+ag.height-ah.y>ah.height)&&(ah.height=ag.y+ag.height-ah.y);}}ad&&this.hide();return ah;};n[o].attr=function(){if(arguments[C]==1&&f.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(arguments[C]==1&&f.is(arguments[0],"array")){var e={};for(var i in arguments[0]){if(arguments[0].hasOwnProperty(i)){e[arguments[0][i]]=this.attrs[arguments[0][i]];}}return e;}if(arguments[C]==2){var R={};R[arguments[0]]=arguments[1];J(this,R);}else{if(arguments[C]==1&&f.is(arguments[0],"object")){J(this,arguments[0]);}}return this;};n[o].toFront=function(){this.node.parentNode.appendChild(this.node);return this;};n[o].toBack=function(){if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);}return this;};n[o].insertAfter=function(e){if(e.node.nextSibling){e.node.parentNode.insertBefore(this.node,e.node.nextSibling);}else{e.node.parentNode.appendChild(this.node);}return this;};n[o].insertBefore=function(e){var i=e.node;i.parentNode.insertBefore(this.node,i);return this;};var G=function(i,e,af,ae){e=S(e);af=S(af);var ad=F("circle");i.canvas&&i.canvas.appendChild(ad);var R=new n(ad,i);R.attrs={cx:e,cy:af,r:ae,fill:"none",stroke:"#000"};R.type="circle";F(ad,R.attrs);return R;};var M=function(R,e,ah,i,af,ag){e=S(e);ah=S(ah);var ae=F("rect");R.canvas&&R.canvas.appendChild(ae);var ad=new n(ae,R);ad.attrs={x:e,y:ah,width:i,height:af,r:ag||0,rx:ag||0,ry:ag||0,fill:"none",stroke:"#000"};ad.type="rect";F(ae,ad.attrs);return ad;};var j=function(i,e,ag,af,ae){e=S(e);ag=S(ag);var ad=F("ellipse");i.canvas&&i.canvas.appendChild(ad);var R=new n(ad,i);R.attrs={cx:e,cy:ag,rx:af,ry:ae,fill:"none",stroke:"#000"};R.type="ellipse";F(ad,R.attrs);return R;};var q=function(R,ag,e,ah,i,af){var ae=F("image");F(ae,{x:e,y:ah,width:i,height:af,preserveAspectRatio:"none"});ae.setAttributeNS(R.xlink,"href",ag);R.canvas&&R.canvas.appendChild(ae);var ad=new n(ae,R);ad.attrs={x:e,y:ah,width:i,height:af,src:ag};ad.type="image";return ad;};var L=function(i,e,af,ae){var ad=F("text");F(ad,{x:e,y:af,"text-anchor":"middle"});i.canvas&&i.canvas.appendChild(ad);var R=new n(ad,i);R.attrs={x:e,y:af,"text-anchor":"middle",text:ae,font:t.font,stroke:"none",fill:"#000"};R.type="text";J(R,R.attrs);return R;};var I=function(i,e){this.width=i||this.width;this.height=e||this.height;this.canvas.setAttribute("width",this.width);this.canvas.setAttribute("height",this.height);return this;};var m=function(){var ae=K[h](null,arguments),R=ae&&ae.container,ag=ae.x,af=ae.y,ad=ae.width,ah=ae.height;if(!R){throw new Error("SVG container not found.");}b.canvas=F("svg");var e=b.canvas,ai=e.style;e.setAttribute("width",ad||512);b.width=ad||512;e.setAttribute("height",ah||342);b.height=ah||342;if(R==1){g.body.appendChild(e);ai.position="absolute";ai.left=ag+"px";ai.top=af+"px";}else{if(R.firstChild){R.insertBefore(e,R.firstChild);}else{R.appendChild(e);}}R={canvas:e,clear:function(){while(this.canvas.firstChild){this.canvas.removeChild(this.canvas.firstChild);}this.desc=F("desc");this.defs=F("defs");this.desc.appendChild(g.createTextNode("Created with Rapha\u00ebl"));this.canvas.appendChild(this.desc);this.canvas.appendChild(this.defs);}};for(var i in b){if(b.hasOwnProperty(i)){if(i!="create"){R[i]=b[i];}}}a.call(R,R,f.fn);R.clear();R.raphael=f;return R;};b.remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);};}if(f.vml){var B=function(ag){var ae=T(ag);for(var R=0,ad=ae[C];R<ad;R++){ae[R][0]=(ae[R][0]+"").toLowerCase();ae[R][0]=="z"&&(ae[R][0]="x");for(var e=1,af=ae[R][C];e<af;e++){ae[R][e]=~~(ae[R][e]+0.5);}}return(ae+"");};f.toString=function(){return"Your browser doesn\u2019t support SVG. Assuming it is Internet Explorer and falling down to VML.\nYou are running Rapha\u00ebl "+this.version;};var aa=function(e,af){var ad=Z("group"),ag=ad.style;ag.position="absolute";ag.left=0;ag.top=0;ag.width=af.width+"px";ag.height=af.height+"px";ad.coordsize=af.coordsize;ad.coordorigin=af.coordorigin;var R=Z("shape"),i=R.style;i.width=af.width+"px";i.height=af.height+"px";R.path="";R.coordsize=this.coordsize;R.coordorigin=this.coordorigin;ad.appendChild(R);var ae=new n(R,ad,af);ae.isAbsolute=true;ae.type="path";ae.path=[];ae.Path="";if(e){ae.attrs.path=f.parsePathString(e);ae.node.path=B(ae.attrs.path);}J(ae,{fill:"none",stroke:"#000"});ae.setBox();af.canvas.appendChild(ad);return ae;};var J=function(aj,an){aj.attrs=aj.attrs||{};var al=aj.node,ao=aj.attrs,ag=al.style,ad,at=aj;for(var ah in an){if(an.hasOwnProperty(ah)){ao[ah]=an[ah];}}an.href&&(al.href=an.href);an.title&&(al.title=an.title);an.target&&(al.target=an.target);if(an.path&&aj.type=="path"){ao.path=f.parsePathString(an.path);al.path=B(ao.path);}if(an.rotation!=null){aj.rotate(an.rotation,true);}if(an.translation){ad=(an.translation+"").split(ac);aj.translate(ad[0],ad[1]);}if(an.scale){ad=(an.scale+"").split(ac);aj.scale(+ad[0]||1,+ad[1]||+ad[0]||1,+ad[2]||null,+ad[3]||null);}if("clip-rect" in an){var e=(an["clip-rect"]+"").split(ac);if(e[C]==4){e[2]=+e[2]+(+e[0]);e[3]=+e[3]+(+e[1]);var ai=al.clipRect||g.createElement("div"),ar=ai.style,af=al.parentNode;ar.clip=f.format("rect({1}px {2}px {3}px {0}px)",e);if(!al.clipRect){ar.position="absolute";ar.top=0;ar.left=0;ar.width=aj.paper.width+"px";ar.height=aj.paper.height+"px";af.parentNode.insertBefore(ai,af);ai.appendChild(af);al.clipRect=ai;}}if(!an["clip-rect"]){al.clipRect&&(al.clipRect.style.clip="");}}if(aj.type=="image"&&an.src){al.src=an.src;}if(aj.type=="image"&&an.opacity){al.filterOpacity=" progid:DXImageTransform.Microsoft.Alpha(opacity="+(an.opacity*100)+")";ag.filter=(al.filterMatrix||"")+(al.filterOpacity||"");}an.font&&(ag.font=an.font);an["font-family"]&&(ag.fontFamily='"'+an["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,"")+'"');an["font-size"]&&(ag.fontSize=an["font-size"]);an["font-weight"]&&(ag.fontWeight=an["font-weight"]);an["font-style"]&&(ag.fontStyle=an["font-style"]);if(an.opacity!=null||an["stroke-width"]!=null||an.fill!=null||an.stroke!=null||an["stroke-width"]!=null||an["stroke-opacity"]!=null||an["fill-opacity"]!=null||an["stroke-dasharray"]!=null||an["stroke-miterlimit"]!=null||an["stroke-linejoin"]!=null||an["stroke-linecap"]!=null){al=aj.shape||al;var am=(al.getElementsByTagName("fill")&&al.getElementsByTagName("fill")[0]),ap=false;!am&&(ap=am=Z("fill"));if("fill-opacity" in an||"opacity" in an){var i=((+ao["fill-opacity"]+1||2)-1)*((+ao.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);am.opacity=i;}an.fill&&(am.on=true);if(am.on==null||an.fill=="none"){am.on=false;}if(am.on&&an.fill){var R=an.fill.match(/^url\(([^\)]+)\)$/i);if(R){am.src=R[1];am.type="tile";}else{am.color=f.getRGB(an.fill).hex;am.src="";am.type="solid";if(f.getRGB(an.fill).error&&(at.type in {circle:1,ellipse:1}||(an.fill+"").charAt(0)!="r")&&Q(at,an.fill)){ao.fill="none";ao.gradient=an.fill;}}}ap&&al.appendChild(am);var ae=(al.getElementsByTagName("stroke")&&al.getElementsByTagName("stroke")[0]),aq=false;!ae&&(aq=ae=Z("stroke"));if((an.stroke&&an.stroke!="none")||an["stroke-width"]||an["stroke-opacity"]!=null||an["stroke-dasharray"]||an["stroke-miterlimit"]||an["stroke-linejoin"]||an["stroke-linecap"]){ae.on=true;}(an.stroke=="none"||ae.on==null||an.stroke==0||an["stroke-width"]==0)&&(ae.on=false);ae.on&&an.stroke&&(ae.color=f.getRGB(an.stroke).hex);var i=((+ao["stroke-opacity"]+1||2)-1)*((+ao.opacity+1||2)-1);i<0&&(i=0);i>1&&(i=1);ae.opacity=i;an["stroke-linejoin"]&&(ae.joinstyle=an["stroke-linejoin"]||"miter");ae.miterlimit=an["stroke-miterlimit"]||8;an["stroke-linecap"]&&(ae.endcap={butt:"flat",square:"square",round:"round"}[an["stroke-linecap"]]||"miter");an["stroke-width"]&&(ae.weight=(P[s](an["stroke-width"])||1)*12/16);if(an["stroke-dasharray"]){var ak={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};ae.dashstyle=ak[an["stroke-dasharray"]]||"";}aq&&al.appendChild(ae);}if(at.type=="text"){var ag=at.paper.span.style;ao.font&&(ag.font=ao.font);ao["font-family"]&&(ag.fontFamily=ao["font-family"]);ao["font-size"]&&(ag.fontSize=ao["font-size"]);ao["font-weight"]&&(ag.fontWeight=ao["font-weight"]);ao["font-style"]&&(ag.fontStyle=ao["font-style"]);at.node.string&&(at.paper.span.innerHTML=at.node.string.replace(/</g,"&#60;").replace(/&/g,"&#38;").replace(/\n/g,"<br>"));at.W=ao.w=at.paper.span.offsetWidth;at.H=ao.h=at.paper.span.offsetHeight;at.X=ao.x;at.Y=ao.y+~~(at.H/2+0.5);switch(ao["text-anchor"]){case"start":at.node.style["v-text-align"]="left";at.bbx=~~(at.W/2+0.5);break;case"end":at.node.style["v-text-align"]="right";at.bbx=-~~(at.W/2+0.5);break;default:at.node.style["v-text-align"]="center";break;}}};var Q=function(e,ah){e.attrs=e.attrs||{};var ai=e.attrs,ak=e.node.getElementsByTagName("fill"),af="linear",ag=".5 .5";e.attrs.gradient=ah;ah=(ah+"").replace(/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,function(am,an,i){af="radial";if(an&&i){an=P[s](an);i=P[s](i);if(Math.pow(an-0.5,2)+Math.pow(i-0.5,2)>0.25){i=Math.sqrt(0.25-Math.pow(an-0.5,2))+0.5;}ag=an+" "+i;}return"";});ah=ah.split(/\s*\-\s*/);if(af=="linear"){var R=ah.shift();R=-P[s](R);if(isNaN(R)){return null;}}var ae=p(ah);if(!ae){return null;}e=e.shape||e.node;ak=ak[0]||Z("fill");if(ae[C]){ak.on=true;ak.method="none";ak.type=(af=="radial")?"gradientradial":"gradient";ak.color=ae[0].color;ak.color2=ae[ae[C]-1].color;var al=[];for(var ad=0,aj=ae[C];ad<aj;ad++){ae[ad].offset&&al.push(ae[ad].offset+" "+ae[ad].color);}if(al[C]&&ak.colors){ak.colors.value=al.join(",");}else{ak.colors.value="0% "+ak.color;}if(af=="radial"){ak.focus="100%";ak.focussize=ag;ak.focusposition=ag;}else{ak.angle=(270-R)%360;}}return 1;};var n=function(ae,ag,e){var af=0,R=0,i=0,ad=1;this[0]=ae;this.node=ae;ae.raphael=this;this.X=0;this.Y=0;this.attrs={};this.Group=ag;this.paper=e;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};};n[o].rotate=function(i,e,R){if(i==null){if(this._.rt.cx){return[this._.rt.deg,this._.rt.cx,this._.rt.cy].join(" ");}return this._.rt.deg;}i=(i+"").split(ac);if(i[C]-1){e=P[s](i[1]);R=P[s](i[2]);}i=P[s](i[0]);if(e!=null){this._.rt.deg=i;}else{this._.rt.deg+=i;}R==null&&(e=null);this._.rt.cx=e;this._.rt.cy=R;this.setBox(this.attrs,e,R);this.Group.style.rotation=this._.rt.deg;return this;};n[o].setBox=function(af,ag,ae){var R=this.Group.style,ah=(this.shape&&this.shape.style)||this.node.style;af=af||{};for(var ai in af){if(af.hasOwnProperty(ai)){this.attrs[ai]=af[ai];}}ag=ag||this._.rt.cx;ae=ae||this._.rt.cy;var al=this.attrs,ao,an,ap,ak;switch(this.type){case"circle":ao=al.cx-al.r;an=al.cy-al.r;ap=ak=al.r*2;break;case"ellipse":ao=al.cx-al.rx;an=al.cy-al.ry;ap=al.rx*2;ak=al.ry*2;break;case"rect":case"image":ao=al.x;an=al.y;ap=al.width||0;ak=al.height||0;break;case"text":this.textpath.v=["m",~~(al.x+0.5),", ",~~(al.y-2+0.5),"l",~~(al.x+0.5)+1,", ",~~(al.y-2+0.5)].join("");ao=al.x-~~(this.W/2+0.5);an=al.y-this.H/2;ap=this.W;ak=this.H;break;case"path":if(!this.attrs.path){ao=0;an=0;ap=this.paper.width;ak=this.paper.height;}else{var aj=H(this.attrs.path);ao=aj.x;an=aj.y;ap=aj.width;ak=aj.height;}break;default:ao=0;an=0;ap=this.paper.width;ak=this.paper.height;break;}ag=(ag==null)?ao+ap/2:ag;ae=(ae==null)?an+ak/2:ae;var ad=ag-this.paper.width/2,am=ae-this.paper.height/2;if(this.type=="path"||this.type=="text"){(R.left!=ad+"px")&&(R.left=ad+"px");(R.top!=am+"px")&&(R.top=am+"px");this.X=this.type=="text"?ao:-ad;this.Y=this.type=="text"?an:-am;this.W=ap;this.H=ak;(ah.left!=-ad+"px")&&(ah.left=-ad+"px");(ah.top!=-am+"px")&&(ah.top=-am+"px");}else{(R.left!=ad+"px")&&(R.left=ad+"px");(R.top!=am+"px")&&(R.top=am+"px");this.X=ao;this.Y=an;this.W=ap;this.H=ak;(R.width!=this.paper.width+"px")&&(R.width=this.paper.width+"px");(R.height!=this.paper.height+"px")&&(R.height=this.paper.height+"px");(ah.left!=ao-ad+"px")&&(ah.left=ao-ad+"px");(ah.top!=an-am+"px")&&(ah.top=an-am+"px");(ah.width!=ap+"px")&&(ah.width=ap+"px");(ah.height!=ak+"px")&&(ah.height=ak+"px");var aq=(+af.r||0)/(Math.min(ap,ak));if(this.type=="rect"&&this.arcsize!=aq&&(aq||this.arcsize)){var e=Z(aq?"roundrect":"rect");e.arcsize=aq;this.Group.appendChild(e);this.node.parentNode.removeChild(this.node);this.node=e;this.arcsize=aq;J(this,this.attrs);this.setBox(this.attrs);}}};n[o].hide=function(){this.Group.style.display="none";return this;};n[o].show=function(){this.Group.style.display="block";return this;};n[o].getBBox=function(){if(this.type=="path"){return H(this.attrs.path);}return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H};};n[o].remove=function(){this[0].parentNode.removeChild(this[0]);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);};n[o].attr=function(){if(arguments[C]==1&&f.is(arguments[0],"string")){if(arguments[0]=="translation"){return this.translate();}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}return this.attrs[arguments[0]];}if(this.attrs&&arguments[C]==1&&f.is(arguments[0],"array")){var e={};for(var R=0,ad=arguments[0][C];R<ad;R++){e[arguments[0][R]]=this.attrs[arguments[0][R]];}return e;}var ae;if(arguments[C]==2){ae={};ae[arguments[0]]=arguments[1];}if(arguments[C]==1&&f.is(arguments[0],"object")){ae=arguments[0];}if(ae){if(ae.gradient&&(this.type in {circle:1,ellipse:1}||(ae.gradient+"").charAt(0)!="r")){Q(this,ae.gradient);}if(ae.text&&this.type=="text"){this.node.string=ae.text;}J(this,ae);this.setBox(this.attrs);}return this;};n[o].toFront=function(){this.Group.parentNode.appendChild(this.Group);return this;};n[o].toBack=function(){if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);}return this;};n[o].insertAfter=function(e){if(e.Group.nextSibling){e.Group.parentNode.insertBefore(this.Group,e.Group.nextSibling);}else{e.Group.parentNode.appendChild(this.Group);}return this;};n[o].insertBefore=function(e){e.Group.parentNode.insertBefore(this.Group,e.Group);return this;};var G=function(i,e,ah,af){var ae=Z("group"),ag=Z("oval"),R=ag.style;ae.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";ae.coordsize=i.coordsize;ae.coordorigin=i.coordorigin;ae.appendChild(ag);var ad=new n(ag,ae,i);ad.type="circle";J(ad,{stroke:"#000",fill:"none"});ad.attrs.cx=e;ad.attrs.cy=ah;ad.attrs.r=af;ad.setBox({x:e-af,y:ah-af,width:af*2,height:af*2});i.canvas.appendChild(ae);return ad;};var M=function(i,ah,ag,ai,ad,e){var ae=Z("group"),R=Z(e?"roundrect":"rect"),aj=(+e||0)/(Math.min(ai,ad));R.arcsize=aj;ae.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";ae.coordsize=i.coordsize;ae.coordorigin=i.coordorigin;ae.appendChild(R);var af=new n(R,ae,i);af.type="rect";J(af,{stroke:"#000"});af.arcsize=aj;af.setBox({x:ah,y:ag,width:ai,height:ad,r:+e});i.canvas.appendChild(ae);return af;};var j=function(e,ai,ah,R,i){var ae=Z("group"),ad=Z("oval"),ag=ad.style;ae.style.cssText="position:absolute;left:0;top:0;width:"+e.width+"px;height:"+e.height+"px";ae.coordsize=e.coordsize;ae.coordorigin=e.coordorigin;ae.appendChild(ad);var af=new n(ad,ae,e);af.type="ellipse";J(af,{stroke:"#000"});af.attrs.cx=ai;af.attrs.cy=ah;af.attrs.rx=R;af.attrs.ry=i;af.setBox({x:ai-R,y:ah-i,width:R*2,height:i*2});e.canvas.appendChild(ae);return af;};var q=function(i,e,ai,ah,aj,ad){var ae=Z("group"),R=Z("image"),ag=R.style;ae.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";ae.coordsize=i.coordsize;ae.coordorigin=i.coordorigin;R.src=e;ae.appendChild(R);var af=new n(R,ae,i);af.type="image";af.attrs.src=e;af.attrs.x=ai;af.attrs.y=ah;af.attrs.w=aj;af.attrs.h=ad;af.setBox({x:ai,y:ah,width:aj,height:ad});i.canvas.appendChild(ae);return af;};var L=function(i,ai,ah,aj){var ae=Z("group"),ad=Z("shape"),ag=ad.style,ak=Z("path"),e=ak.style,R=Z("textpath");ae.style.cssText="position:absolute;left:0;top:0;width:"+i.width+"px;height:"+i.height+"px";ae.coordsize=i.coordsize;ae.coordorigin=i.coordorigin;ak.v=f.format("m{0},{1}l{2},{1}",~~(ai+0.5),~~(ah+0.5),~~(ai+0.5)+1);ak.textpathok=true;ag.width=i.width;ag.height=i.height;R.string=aj;R.on=true;ad.appendChild(R);ad.appendChild(ak);ae.appendChild(ad);var af=new n(R,ae,i);af.shape=ad;af.textpath=ak;af.type="text";af.attrs.text=aj;af.attrs.x=ai;af.attrs.y=ah;af.attrs.w=1;af.attrs.h=1;J(af,{font:t.font,stroke:"none",fill:"#000"});af.setBox();i.canvas.appendChild(ae);return af;};var I=function(R,e){var i=this.canvas.style;this.width=P[s](R||this.width);this.height=P[s](e||this.height);i.width=this.width+"px";i.height=this.height+"px";i.clip="rect(0 "+this.width+"px "+this.height+"px 0)";this.coordsize=this.width+" "+this.height;return this;};g.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!g.namespaces.rvml&&g.namespaces.add("rvml","urn:schemas-microsoft-com:vml");var Z=function(e){return g.createElement("<rvml:"+e+' class="rvml">');};}catch(Y){var Z=function(e){return g.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');};}var m=function(){var ad=K[h](null,arguments),i=ad.container,aj=ad.height,ak,R=ad.width,ai=ad.x,ah=ad.y;if(!i){throw new Error("VML container not found.");}var af={},ag=af.canvas=g.createElement("div"),ae=ag.style;R=P[s](R)||512;aj=P[s](aj)||342;af.width=R;af.height=aj;af.coordsize=R+" "+aj;af.coordorigin="0 0";af.span=g.createElement("span");af.span.style.cssText="position:absolute;left:-9999px;top:-9999px;padding:0;margin:0;line-height:1;display:inline;";ag.appendChild(af.span);ae.cssText=f.format("width:{0}px;height:{1}px;position:absolute;clip:rect(0 {0}px {1}px 0)",R,aj);if(i==1){g.body.appendChild(ag);ae.left=ai+"px";ae.top=ah+"px";i={style:{width:R,height:aj}};}else{i.style.width=R;i.style.height=aj;if(i.firstChild){i.insertBefore(ag,i.firstChild);}else{i.appendChild(ag);}}for(var e in b){if(b.hasOwnProperty(e)){af[e]=b[e];}}a.call(af,af,f.fn);af.clear=function(){while(ag.firstChild){ag.removeChild(ag.firstChild);}};af.raphael=f;return af;};b.remove=function(){this.canvas.parentNode.removeChild(this.canvas);};}if({"Apple Computer, Inc.":1,"Google Inc.":1}[navigator.vendor]){b.safari=function(){var e=this.rect(-99,-99,this.width+99,this.height+99);setTimeout(function(){e.remove();});};}else{b.safari=function(){};}var k=(function(){if(g.addEventListener){return function(ae,R,i,e){var ad=function(af){return i.call(e,af);};ae.addEventListener(R,ad,false);return function(){ae.removeEventListener(R,ad,false);return true;};};}else{if(g.attachEvent){return function(af,ad,R,i){var ae=function(ag){return R.call(i,ag||P.event);};af.attachEvent("on"+ad,ae);var e=function(){af.detachEvent("on"+ad,ae);return true;};if(ad=="mouseover"){af.attachEvent("onmouseenter",ae);return function(){af.detachEvent("onmouseenter",ae);return e();};}else{if(ad=="mouseout"){af.attachEvent("onmouseleave",ae);return function(){af.detachEvent("onmouseleave",ae);return e();};}}return e;};}}})();for(var V=y[C];V--;){(function(e){n[o][e]=function(i){if(f.is(i,"function")){this.events=this.events||{};this.events[e]=this.events[e]||{};this.events[e][i]=this.events[e][i]||[];this.events[e][i].push(k(this.shape||this.node,e,i,this));}return this;};n[o]["un"+e]=function(i){this.events&&this.events[e]&&this.events[e][i]&&this.events[e][i][C]&&this.events[e][i].shift()()&&!this.events[e][i][C]&&delete this.events[e][i];};})(y[V]);}b.circle=function(e,R,i){return G(this,e||0,R||0,i||0);};b.rect=function(e,ae,i,R,ad){return M(this,e||0,ae||0,i||0,R||0,ad||0);};b.ellipse=function(e,ad,R,i){return j(this,e||0,ad||0,R||0,i||0);};b.path=function(e){e&&!f.is(e,"string")&&!f.is(e[0],"array")&&(e+="");return aa(f.format[h](f,arguments),this);};b.image=function(ad,e,ae,i,R){return q(this,ad||"about:blank",e||0,ae||0,i||0,R||0);};b.text=function(e,R,i){return L(this,e||0,R||0,i||"");};b.set=function(e){arguments[C]>1&&(e=Array[o].splice.call(arguments,0,arguments[C]));return new l(e);};b.setSize=I;n[o].stop=function(){clearTimeout(this.animation_in_progress);return this;};n[o].scale=function(ao,an,ad,R){if(ao==null&&an==null){return{x:this._.sx,y:this._.sy,toString:function(){return this.x+" "+this.y;}};}an=an||ao;!+an&&(an=ao);var at,aq,ar,ap,aF=this.attrs;if(ao!=0){var al=this.getBBox(),ai=al.x+al.width/2,af=al.y+al.height/2,aE=ao/this._.sx,aD=an/this._.sy;ad=(+ad||ad==0)?ad:ai;R=(+R||R==0)?R:af;var ak=~~(ao/Math.abs(ao)),ah=~~(an/Math.abs(an)),aw=this.node.style,aH=ad+(ai-ad)*ak*aE,aG=R+(af-R)*ah*aD;switch(this.type){case"rect":case"image":var aj=aF.width*ak*aE,av=aF.height*ah*aD,am=aF.r*Math.min(aE,aD),ag=aH-aj/2,ae=aG-av/2;this.attr({width:aj,height:av,x:ag,y:ae,r:am});break;case"circle":case"ellipse":this.attr({rx:aF.rx*aE,ry:aF.ry*aD,r:aF.r*Math.min(aE,aD),cx:aH,cy:aG});break;case"path":var ay=c(aF.path),az=true;for(var aB=0,au=ay[C];aB<au;aB++){var ax=ay[aB];if(ax[0].toUpperCase()=="M"&&az){continue;}else{az=false;}if(f.svg&&ax[0].toUpperCase()=="A"){ax[ay[aB][C]-2]*=aE;ax[ay[aB][C]-1]*=aD;ax[1]*=aE;ax[2]*=aD;ax[5]=+(ak+ah?!!+ax[5]:!+ax[5]);}else{for(var aA=1,aC=ax[C];aA<aC;aA++){ax[aA]*=(aA%2)?aE:aD;}}}var e=H(ay),at=aH-e.x-e.width/2,aq=aG-e.y-e.height/2;ay[0][1]+=at;ay[0][2]+=aq;this.attr({path:ay});break;}if(this.type in {text:1,image:1}&&(ak!=1||ah!=1)){if(this.transformations){this.transformations[2]="scale(".concat(ak,",",ah,")");this.node.setAttribute("transform",this.transformations.join(" "));at=(ak==-1)?-aF.x-(aj||0):aF.x;aq=(ah==-1)?-aF.y-(av||0):aF.y;this.attr({x:at,y:aq});aF.fx=ak-1;aF.fy=ah-1;}else{this.node.filterMatrix=" progid:DXImageTransform.Microsoft.Matrix(M11=".concat(ak,", M12=0, M21=0, M22=",ah,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");aw.filter=(this.node.filterMatrix||"")+(this.node.filterOpacity||"");}}else{if(this.transformations){this.transformations[2]="";this.node.setAttribute("transform",this.transformations.join(" "));aF.fx=0;aF.fy=0;}else{this.node.filterMatrix="";aw.filter=(this.node.filterMatrix||"")+(this.node.filterOpacity||"");}}aF.scale=[ao,an,ad,R].join(" ");this._.sx=ao;this._.sy=an;}return this;};f.easing_formulas={linear:function(e){return e;},"<":function(e){return Math.pow(e,3);},">":function(e){return Math.pow(e-1,3)+1;},"<>":function(e){e=e*2;if(e<1){return Math.pow(e,3)/2;}e-=2;return(Math.pow(e,3)+2)/2;},backIn:function(i){var e=1.70158;return i*i*((e+1)*i-e);},backOut:function(i){i=i-1;var e=1.70158;return i*i*((e+1)*i+e)+1;},elastic:function(R){if(R==0||R==1){return R;}var i=0.3,e=i/4;return Math.pow(2,-10*R)*Math.sin((R-e)*(2*Math.PI)/i)+1;},bounce:function(ad){var i=7.5625,R=2.75,e;if(ad<(1/R)){e=i*ad*ad;}else{if(ad<(2/R)){ad-=(1.5/R);e=i*ad*ad+0.75;}else{if(ad<(2.5/R)){ad-=(2.25/R);e=i*ad*ad+0.9375;}else{ad-=(2.625/R);e=i*ad*ad+0.984375;}}}return e;}};n[o].animate=function(ax,an,am,ae){clearTimeout(this.animation_in_progress);if(f.is(am,"function")||!am){ae=am||null;}var aq={},R={},ak={},aj={x:0,y:0};for(var ao in ax){if(ax.hasOwnProperty(ao)){if(ao in x){aq[ao]=this.attr(ao);(aq[ao]==null)&&(aq[ao]=t[ao]);R[ao]=ax[ao];switch(x[ao]){case"number":ak[ao]=(R[ao]-aq[ao])/an;break;case"colour":aq[ao]=f.getRGB(aq[ao]);var ap=f.getRGB(R[ao]);ak[ao]={r:(ap.r-aq[ao].r)/an,g:(ap.g-aq[ao].g)/an,b:(ap.b-aq[ao].b)/an};break;case"path":var af=T(aq[ao],R[ao]);aq[ao]=af[0];R[ao]=af[1];ak[ao]=[];for(var at=0,ai=aq[ao][C];at<ai;at++){ak[ao][at]=[0];for(var ar=1,av=aq[ao][at][C];ar<av;ar++){ak[ao][at][ar]=(R[ao][at][ar]-aq[ao][at][ar])/an;}}break;case"csv":var e=(ax[ao]+"").split(ac),ah=(aq[ao]+"").split(ac);switch(ao){case"translation":aq[ao]=[0,0];ak[ao]=[e[0]/an,e[1]/an];break;case"rotation":aq[ao]=(ah[1]==e[1]&&ah[2]==e[2])?ah:[0,e[1],e[2]];ak[ao]=[(e[0]-aq[ao][0])/an,0,0];break;case"scale":ax[ao]=e;aq[ao]=(aq[ao]+"").split(ac);ak[ao]=[(e[0]-aq[ao][0])/an,(e[1]-aq[ao][1])/an,0,0];break;case"clip-rect":aq[ao]=(aq[ao]+"").split(ac);ak[ao]=[];var at=4;while(at--){ak[ao][at]=(e[at]-aq[ao][at])/an;}break;}R[ao]=e;}}}}var ad=+new Date,al=0,aw=function(i){return i>255?255:i;},ag=this;(function au(){var az=new Date-ad,aH={},ay;if(az<an){var aF=f.easing_formulas[am]?f.easing_formulas[am](az/an):az/an;for(var aD in aq){if(aq.hasOwnProperty(aD)){switch(x[aD]){case"number":ay=+aq[aD]+aF*an*ak[aD];break;case"colour":ay="rgb("+[aw(~~(aq[aD].r+aF*an*ak[aD].r+0.5)),aw(~~(aq[aD].g+aF*an*ak[aD].g+0.5)),aw(~~(aq[aD].b+aF*an*ak[aD].b+0.5))].join(",")+")";break;case"path":ay=[];for(var aB=0,aI=aq[aD][C];aB<aI;aB++){ay[aB]=[aq[aD][aB][0]];for(var aA=1,aC=aq[aD][aB][C];aA<aC;aA++){ay[aB][aA]=+aq[aD][aB][aA]+aF*an*ak[aD][aB][aA];}ay[aB]=ay[aB].join(" ");}ay=ay.join(" ");break;case"csv":switch(aD){case"translation":var aG=ak[aD][0]*(az-al),aE=ak[aD][1]*(az-al);aj.x+=aG;aj.y+=aE;ay=[aG,aE].join(" ");break;case"rotation":ay=+aq[aD][0]+aF*an*ak[aD][0];aq[aD][1]&&(ay+=","+aq[aD][1]+","+aq[aD][2]);break;case"scale":ay=[+aq[aD][0]+aF*an*ak[aD][0],+aq[aD][1]+aF*an*ak[aD][1],(2 in ax[aD]?ax[aD][2]:""),(3 in ax[aD]?ax[aD][3]:"")].join(" ");break;case"clip-rect":ay=[];var aB=4;while(aB--){ay[aB]=+aq[aD][aB]+aF*an*ak[aD][aB];}break;}break;}aH[aD]=ay;}}ag.attr(aH);ag.animation_in_progress=setTimeout(au);f.svg&&b.safari();}else{(aj.x||aj.y)&&ag.translate(-aj.x,-aj.y);ag.attr(ax);clearTimeout(ag.animation_in_progress);f.svg&&b.safari();(f.is(ae,"function"))&&ae.call(ag);}al=az;})();return this;};n[o].translate=function(e,R){if(e==null){return{x:this._.tx,y:this._.ty};}this._.tx+=+e;this._.ty+=+R;switch(this.type){case"circle":case"ellipse":this.attr({cx:+e+this.attrs.cx,cy:+R+this.attrs.cy});break;case"rect":case"image":case"text":this.attr({x:+e+this.attrs.x,y:+R+this.attrs.y});break;case"path":var i=c(this.attrs.path);i[0][1]+=+e;i[0][2]+=+R;this.attr({path:i});break;}return this;};n[o].toString=function(){return"Rapha\u00ebl\u2019s object";};var l=function(e){this.items=[];this[C]=0;if(e){for(var R=0,ad=e[C];R<ad;R++){if(e[R]&&(e[R].constructor==n||e[R].constructor==l)){this[this.items[C]]=this.items[this.items[C]]=e[R];this[C]++;}}}};l[o].push=function(){var ae,e;for(var R=0,ad=arguments[C];R<ad;R++){ae=arguments[R];if(ae&&(ae.constructor==n||ae.constructor==l)){e=this.items[C];this[e]=this.items[e]=ae;this[C]++;}}return this;};l[o].pop=function(){delete this[this[C]--];return this.items.pop();};for(var W in n[o]){if(n[o].hasOwnProperty(W)){l[o][W]=(function(e){return function(){for(var R=0,ad=this.items[C];R<ad;R++){this.items[R][e][h](this.items[R],arguments);}return this;};})(W);}}l[o].attr=function(R,ag){if(R&&f.is(R,"array")&&f.is(R[0],"object")){for(var e=0,af=R[C];e<af;e++){this.items[e].attr(R[e]);}}else{for(var ad=0,ae=this.items[C];ad<ae;ad++){this.items[ad].attr[h](this.items[ad],arguments);}}return this;};l[o].animate=function(af,R,ai,ah){if(f.is(ai,"function")||!ai){ah=ai||null;}var e=this.items[C],ad=e,ag=this;if(ah){var ae=function(){!--e&&ah.call(ag);};while(ad--){this.items[ad].animate(af,R,ai||ae,ae);}}else{while(ad--){this.items[ad].animate(af,R,ai);}}return this;};l[o].getBBox=function(){var e=[],ag=[],R=[],ae=[];for(var ad=this.items[C];ad--;){var af=this.items[ad].getBBox();e.push(af.x);ag.push(af.y);R.push(af.x+af.width);ae.push(af.y+af.height);}e=Math.min[h](Math,e);ag=Math.min[h](Math,ag);return{x:e,y:ag,width:Math.max[h](Math,R)-e,height:Math.max[h](Math,ae)-ag};};f.registerFont=function(i){if(!i.face){return i;}this.fonts=this.fonts||{};var ad={w:i.w,face:{},glyphs:{}},R=i.face["font-family"];for(var ag in i.face){if(i.face.hasOwnProperty(ag)){ad.face[ag]=i.face[ag];}}if(this.fonts[R]){this.fonts[R].push(ad);}else{this.fonts[R]=[ad];}if(!i.svg){ad.face["units-per-em"]=P[r](i.face["units-per-em"],10);for(var ae in i.glyphs){if(i.glyphs.hasOwnProperty(ae)){var af=i.glyphs[ae];ad.glyphs[ae]={w:af.w,k:{},d:af.d&&"M"+af.d.replace(/[mlcxtrv]/g,function(ah){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[ah]||"M";})+"z"};if(af.k){for(var e in af.k){if(af.hasOwnProperty(e)){ad.glyphs[ae].k[e]=af.k[e];}}}}}}return i;};b.getFont=function(ai,aj,R,ae){ae=ae||"normal";R=R||"normal";aj=+aj||{normal:400,bold:700,lighter:300,bolder:800}[aj]||400;var af=f.fonts[ai];if(!af){var ad=new RegExp("(^|\\s)"+ai.replace(/[^\w\d\s+!~.:_-]/g,"")+"(\\s|$)","i");for(var e in f.fonts){if(f.fonts.hasOwnProperty(e)){if(ad.test(e)){af=f.fonts[e];break;}}}}var ag;if(af){for(var ah=0,ak=af[C];ah<ak;ah++){ag=af[ah];if(ag.face["font-weight"]==aj&&(ag.face["font-style"]==R||!ag.face["font-style"])&&ag.face["font-stretch"]==ae){break;}}}return ag;};b.print=function(ak,aj,ah,R,ao){var af=this.set(),ai=(ah+"").split(""),e=0,an="",ae;f.is(R,"string")&&(R=this.getFont(R));if(R){ae=(ao||16)/R.face["units-per-em"];for(var ag=0,al=ai[C];ag<al;ag++){var ad=ag&&R.glyphs[ai[ag-1]]||{},am=R.glyphs[ai[ag]];e+=ag?(ad.w||R.w)+(ad.k&&ad.k[ai[ag]]||0):0;am&&am.d&&af.push(this.path(am.d).attr({fill:"#000",stroke:"none",translation:[e,0]}));}af.scale(ae,ae,0,aj).translate(ak,(ao||16)/2);}return af;};f.format=function(i){var e=f.is(arguments[1],"array")?[0].concat(arguments[1]):arguments;i&&f.is(i,"string")&&e[C]-1&&(i=i.replace(/\{(\d+)\}/g,function(ad,R){return e[++R]==null?"":e[R];}));return i||"";};f.ninja=function(){var R=window.Raphael,i;if(U.was){window.Raphael=U.is;}else{try{delete window.Raphael;}catch(ad){window.Raphael=i;}}return R;};f.el=n[o];return f;})();
\ No newline at end of file
index 894da64..2391b76 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Raphael 1.0 RC2 - JavaScript Vector Library
+ * Raphael 1.0 - JavaScript Vector Library
  *
  * Copyright (c) 2008 - 2009 Dmitry Baranovskiy (http://raphaeljs.com)
  * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
@@ -16,22 +16,27 @@ window.Raphael = (function () {
         },
         R = function () {
             if (R.is(arguments[0], "array")) {
-                var res = [],
-                    a = arguments[0],
-                    cnv = create.apply(R, a.splice(0, 3 + R.is(a[0], "number")));
-                for (var i = 0, ii = a.length; i < ii; i++) {
+                var a = arguments[0],
+                    cnv = create[ap](R, a.splice(0, 3 + R.is(a[0], "number"))),
+                    res = cnv.set();
+                for (var i = 0, ii = a[ln]; i < ii; i++) {
                     var j = a[i] || {};
                     j.type in {circle:1, rect:1, path:1, ellipse:1, text:1, image:1} && res.push(cnv[j.type]().attr(j));
                 }
                 return res;
             }
-            return create.apply(R, arguments);
+            return create[ap](R, arguments);
         },
         paper = {},
         availableAttrs = {"clip-rect": "0 0 10e9 10e9", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0},
         availableAnimAttrs = {"clip-rect": "csv", cx: "number", cy: "number", fill: "colour", "fill-opacity": "number", "font-size": "number", height: "number", opacity: "number", path: "path", r: "number", rotation: "csv", rx: "number", ry: "number", scale: "csv", stroke: "colour", "stroke-opacity": "number", "stroke-width": "number", translation: "csv", width: "number", x: "number", y: "number"},
-        events = ["click", "dblclick", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup"];
-    R.version = "1.0 RC2";
+        events = ["click", "dblclick", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup"],
+        proto = "prototype",
+        ap = "apply",
+        ln = "length",
+        pf = "parseFloat",
+        pi = "parseInt";
+    R.version = "1.0";
     R.type = (window.SVGAngle || document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
     R.svg = !(R.vml = R.type == "VML");
     R.idGenerator = 0;
@@ -44,7 +49,7 @@ window.Raphael = (function () {
         if (o == null && type == "null") {
             return true;
         }
-        return Object.prototype.toString.call(o).replace(/^\[object\s+|\]$/gi, "").toLowerCase() == type;
+        return Object[proto].toString.call(o).replace(/^\[object\s+|\]$/gi, "").toLowerCase() == type;
     };
     R.setWindow = function (newwin) {
         win = newwin;
@@ -80,16 +85,16 @@ window.Raphael = (function () {
         green *= 255;
         blue *= 255;
         var rgb = {r: red, g: green, b: blue},
-            r = Math.round(red).toString(16),
-            g = Math.round(green).toString(16),
-            b = Math.round(blue).toString(16);
-        if (r.length == 1) {
+            r = (~~red).toString(16),
+            g = (~~green).toString(16),
+            b = (~~blue).toString(16);
+        if (r[ln] == 1) {
             r = "0" + r;
         }
-        if (g.length == 1) {
+        if (g[ln] == 1) {
             g = "0" + g;
         }
-        if (b.length == 1) {
+        if (b[ln] == 1) {
             b = "0" + b;
         }
         rgb.hex = "#" + r + g + b;
@@ -142,8 +147,8 @@ window.Raphael = (function () {
     R._path2string = function () {
         var res = "",
             item;
-        for (var i = 0, ii = this.length; i < ii; i++) {
-            for (var j = 0, jj = this[i].length; j < jj; j++) {
+        for (var i = 0, ii = this[ln]; i < ii; i++) {
+            for (var j = 0, jj = this[i][ln]; j < jj; j++) {
                 res += this[i][j];
                 j && j != jj - 1 && (res += ",");
             }
@@ -153,31 +158,29 @@ window.Raphael = (function () {
     };
     function cacher(f, scope, postprocessor) {
         function newf() {
-            var arg = Array.prototype.splice.call(arguments, 0, arguments.length),
+            var arg = Array[proto].splice.call(arguments, 0, arguments[ln]),
                 args = arg.join("\u25ba");
             newf.cache = newf.cache || {};
             newf.count = newf.count || [];
             if (args in newf.cache) {
                 return postprocessor ? postprocessor(newf.cache[args]) : newf.cache[args];
             }
-            if (newf.count.length > 1000) {
+            if (newf.count[ln] > 1000) {
                 delete newf.cache[newf.count.unshift()];
             }
             newf.count.push(args);
-            newf.cache[args] = f.apply(scope, arg);
+            newf.cache[args] = f[ap](scope, arg);
             return postprocessor ? postprocessor(newf.cache[args]) : newf.cache[args];
         }
         return newf;
     }
 
     R.getRGB = cacher(function (colour) {
-        var htmlcolors = {aliceblue: "#f0f8ff", amethyst: "#96c", antiquewhite: "#faebd7", aqua: "#0ff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000", blanchedalmond: "#ffebcd", blue: "#00f", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#0ff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgreen: "#006400", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#f0f", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", gold: "#ffd700", goldenrod: "#daa520", gray: "#808080", green: "#008000", greenyellow: "#adff2f", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavender: "#e6e6fa", lavenderblush: "#fff0f5", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgreen: "#90ee90", lightgrey: "#d3d3d3", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#789", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#0f0", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#f0f", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", red: "#f00", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#fff", whitesmoke: "#f5f5f5", yellow: "#ff0", yellowgreen: "#9acd32"},
-        res;
-        if ((colour + "").toLowerCase() in htmlcolors) {
-            colour = htmlcolors[(colour + "").toLowerCase()];
-        }
+        var htmlcolors = {none: "none", aliceblue: "#f0f8ff", amethyst: "#96c", antiquewhite: "#faebd7", aqua: "#0ff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000", blanchedalmond: "#ffebcd", blue: "#00f", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#0ff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgreen: "#006400", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#f0f", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", gold: "#ffd700", goldenrod: "#daa520", gray: "#808080", green: "#008000", greenyellow: "#adff2f", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavender: "#e6e6fa", lavenderblush: "#fff0f5", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgreen: "#90ee90", lightgrey: "#d3d3d3", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#789", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#0f0", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#f0f", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", red: "#f00", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#fff", whitesmoke: "#f5f5f5", yellow: "#ff0", yellowgreen: "#9acd32"},
+            res;
+        colour = htmlcolors[(colour + "").toLowerCase()] || colour;
         if (!colour) {
-            return {r: 0, g: 0, b: 0, hex: "#000"};
+            return {r: -1, g: -1, b: -1, hex: "none", error: 1};
         }
         if (colour == "none") {
             return {r: -1, g: -1, b: -1, hex: "none"};
@@ -188,48 +191,50 @@ window.Raphael = (function () {
             rgb = (colour + "").match(/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i);
         if (rgb) {
             if (rgb[2]) {
-                blue = parseInt(rgb[2].substring(5), 16);
-                green = parseInt(rgb[2].substring(3, 5), 16);
-                red = parseInt(rgb[2].substring(1, 3), 16);
+                blue = win[pi](rgb[2].substring(5), 16);
+                green = win[pi](rgb[2].substring(3, 5), 16);
+                red = win[pi](rgb[2].substring(1, 3), 16);
             }
             if (rgb[3]) {
-                blue = parseInt(rgb[3].substring(3) + rgb[3].substring(3), 16);
-                green = parseInt(rgb[3].substring(2, 3) + rgb[3].substring(2, 3), 16);
-                red = parseInt(rgb[3].substring(1, 2) + rgb[3].substring(1, 2), 16);
+                blue = win[pi](rgb[3].substring(3) + rgb[3].substring(3), 16);
+                green = win[pi](rgb[3].substring(2, 3) + rgb[3].substring(2, 3), 16);
+                red = win[pi](rgb[3].substring(1, 2) + rgb[3].substring(1, 2), 16);
             }
             if (rgb[4]) {
                 rgb = rgb[4].split(/\s*,\s*/);
-                red = parseFloat(rgb[0]);
-                green = parseFloat(rgb[1]);
-                blue = parseFloat(rgb[2]);
+                red = win[pf](rgb[0]);
+                green = win[pf](rgb[1]);
+                blue = win[pf](rgb[2]);
             }
             if (rgb[5]) {
                 rgb = rgb[5].split(/\s*,\s*/);
-                red = parseFloat(rgb[0]) * 2.55;
-                green = parseFloat(rgb[1]) * 2.55;
-                blue = parseFloat(rgb[2]) * 2.55;
+                red = win[pf](rgb[0]) * 2.55;
+                green = win[pf](rgb[1]) * 2.55;
+                blue = win[pf](rgb[2]) * 2.55;
             }
             if (rgb[6]) {
                 rgb = rgb[6].split(/\s*,\s*/);
-                red = parseFloat(rgb[0]);
-                green = parseFloat(rgb[1]);
-                blue = parseFloat(rgb[2]);
+                red = win[pf](rgb[0]);
+                green = win[pf](rgb[1]);
+                blue = win[pf](rgb[2]);
                 return R.hsb2rgb(red, green, blue);
             }
             if (rgb[7]) {
                 rgb = rgb[7].split(/\s*,\s*/);
-                red = parseFloat(rgb[0]) * 2.55;
-                green = parseFloat(rgb[1]) * 2.55;
-                blue = parseFloat(rgb[2]) * 2.55;
+                red = win[pf](rgb[0]) * 2.55;
+                green = win[pf](rgb[1]) * 2.55;
+                blue = win[pf](rgb[2]) * 2.55;
                 return R.hsb2rgb(red, green, blue);
             }
             rgb = {r: red, g: green, b: blue};
-            var r = Math.round(red).toString(16),
-                g = Math.round(green).toString(16),
-                b = Math.round(blue).toString(16);
-            (r.length == 1) && (r = "0" + r);
-            (g.length == 1) && (g = "0" + g);
-            (b.length == 1) && (b = "0" + b);
+            var r = (~~red).toString(16),
+                g = (~~green).toString(16),
+                b = (~~blue).toString(16),
+                rg = /^(?=\d$)/,
+                rp = "replace";
+            r = r[rp](rg, "0");
+            g = g[rp](rg, "0");
+            b = b[rp](rg, "0");
             rgb.hex = "#" + r + g + b;
             res = rgb;
         } else {
@@ -263,14 +268,14 @@ window.Raphael = (function () {
         if (R.is(pathString, "array") && R.is(pathString[0], "array")) { // rough assumption
             data = pathClone(pathString);
         }
-        if (!data.length) {
+        if (!data[ln]) {
             (pathString + "").replace(/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig, function (a, b, c) {
                 var params = [],
                     name = b.toLowerCase();
                 c.replace(/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig, function (a, b) {
                     b && params.push(+b);
                 });
-                while (params.length >= paramCounts[name]) {
+                while (params[ln] >= paramCounts[name]) {
                     data.push([b].concat(params.splice(0, paramCounts[name])));
                     if (!paramCounts[name]) {
                         break;
@@ -290,7 +295,7 @@ window.Raphael = (function () {
             y = 0,
             X = [],
             Y = [];
-        for (var i = 0, ii = path.length; i < ii; i++) {
+        for (var i = 0, ii = path[ln]; i < ii; i++) {
             if (path[i][0] == "M") {
                 x = path[i][1];
                 y = path[i][2];
@@ -302,13 +307,13 @@ window.Raphael = (function () {
                 Y = Y.concat(dim.min.y, dim.max.y);
             }
         }
-        var xmin = Math.min.apply(0, X),
-            ymin = Math.min.apply(0, Y);
+        var xmin = Math.min[ap](0, X),
+            ymin = Math.min[ap](0, Y);
         return {
             x: xmin,
             y: ymin,
-            width: Math.max.apply(0, X) - xmin,
-            height: Math.max.apply(0, Y) - ymin
+            width: Math.max[ap](0, X) - xmin,
+            height: Math.max[ap](0, Y) - ymin
         };
     }),
         pathClone = function (pathArray) {
@@ -316,9 +321,9 @@ window.Raphael = (function () {
             if (!R.is(pathArray, "array") || !R.is(pathArray && pathArray[0], "array")) { // rough assumption
                 pathArray = R.parsePathString(pathArray);
             }
-            for (var i = 0, ii = pathArray.length; i < ii; i++) {
+            for (var i = 0, ii = pathArray[ln]; i < ii; i++) {
                 res[i] = [];
-                for (var j = 0, jj = pathArray[i].length; j < jj; j++) {
+                for (var j = 0, jj = pathArray[i][ln]; j < jj; j++) {
                     res[i][j] = pathArray[i][j];
                 }
             }
@@ -343,7 +348,7 @@ window.Raphael = (function () {
                 start++;
                 res.push(["M", x, y]);
             }
-            for (var i = start, ii = pathArray.length; i < ii; i++) {
+            for (var i = start, ii = pathArray[ln]; i < ii; i++) {
                 var r = res[i] = [],
                     pa = pathArray[i];
                 if (pa[0] != pa[0].toLowerCase()) {
@@ -365,7 +370,7 @@ window.Raphael = (function () {
                             mx = pa[1];
                             my = pa[2];
                         default:
-                            for (var j = 1, jj = pa.length; j < jj; j++) {
+                            for (var j = 1, jj = pa[ln]; j < jj; j++) {
                                 r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);
                             }
                     }
@@ -375,11 +380,11 @@ window.Raphael = (function () {
                         mx = pa[1] + x;
                         my = pa[2] + y;
                     }
-                    for (var k = 0, kk = pa.length; k < kk; k++) {
+                    for (var k = 0, kk = pa[ln]; k < kk; k++) {
                         res[i][k] = pa[k];
                     }
                 }
-                var len = res[i].length;
+                var len = res[i][ln];
                 switch (res[i][0]) {
                     case "z":
                         x = mx;
@@ -417,7 +422,7 @@ window.Raphael = (function () {
                 start++;
                 res[0] = ["M", x, y];
             }
-            for (var i = start, ii = pathArray.length; i < ii; i++) {
+            for (var i = start, ii = pathArray[ln]; i < ii; i++) {
                 var r = res[i] = [],
                     pa = pathArray[i];
                 if (pa[0] != (pa[0] + "").toUpperCase()) {
@@ -442,12 +447,12 @@ window.Raphael = (function () {
                             mx = +pa[1] + x;
                             my = +pa[2] + y;
                         default:
-                            for (var j = 1, jj = pa.length; j < jj; j++) {
+                            for (var j = 1, jj = pa[ln]; j < jj; j++) {
                                 r[j] = +pa[j] + ((j % 2) ? x : y);
                             }
                     }
                 } else {
-                    for (var k = 0, kk = pa.length; k < kk; k++) {
+                    for (var k = 0, kk = pa[ln]; k < kk; k++) {
                         res[i][k] = pa[k];
                     }
                 }
@@ -463,8 +468,8 @@ window.Raphael = (function () {
                         y = r[1];
                         break;
                     default:
-                        x = res[i][res[i].length - 2];
-                        y = res[i][res[i].length - 1];
+                        x = res[i][res[i][ln] - 2];
+                        y = res[i][res[i][ln] - 1];
                 }
             }
             res.toString = R._path2string;
@@ -488,8 +493,9 @@ window.Raphael = (function () {
         a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
             // for more information of where this math came from visit:
             // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
-            var _120 = Math.PI * 120 / 180,
-                rad = Math.PI / 180 * (+angle || 0),
+            var PI = Math.PI,
+                _120 = PI * 120 / 180,
+                rad = PI / 180 * (+angle || 0),
                 res = [],
                 xy,
                 rotate = cacher(function (x, y, rad) {
@@ -504,8 +510,8 @@ window.Raphael = (function () {
                 xy = rotate(x2, y2, -rad);
                 x2 = xy.x;
                 y2 = xy.y;
-                var cos = Math.cos(Math.PI / 180 * angle),
-                    sin = Math.sin(Math.PI / 180 * angle),
+                var cos = Math.cos(PI / 180 * angle),
+                    sin = Math.sin(PI / 180 * angle),
                     x = (x1 - x2) / 2,
                     y = (y1 - y2) / 2;
                 rx = Math.max(rx, Math.abs(x));
@@ -519,15 +525,15 @@ window.Raphael = (function () {
                     f1 = Math.asin((y1 - cy) / ry),
                     f2 = Math.asin((y2 - cy) / ry);
 
-                f1 = x1 < cx ? Math.PI - f1 : f1;
-                f2 = x2 < cx ? Math.PI - f2 : f2;
-                f1 < 0 && (f1 = Math.PI * 2 + f1);
-                f2 < 0 && (f2 = Math.PI * 2 + f2);
+                f1 = x1 < cx ? PI - f1 : f1;
+                f2 = x2 < cx ? PI - f2 : f2;
+                f1 < 0 && (f1 = PI * 2 + f1);
+                f2 < 0 && (f2 = PI * 2 + f2);
                 if (sweep_flag && f1 > f2) {
-                    f1 = f1 - Math.PI * 2;
+                    f1 = f1 - PI * 2;
                 }
                 if (!sweep_flag && f2 > f1) {
-                    f2 = f2 - Math.PI * 2;
+                    f2 = f2 - PI * 2;
                 }
             } else {
                 f1 = recursive[0];
@@ -564,7 +570,7 @@ window.Raphael = (function () {
             } else {
                 res = [m2, m3, m4].concat(res).join(",").split(",");
                 var newres = [];
-                for (var i = 0, ii = res.length; i < ii; i++) {
+                for (var i = 0, ii = res[ln]; i < ii; i++) {
                     newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;
                 }
                 return newres;
@@ -605,8 +611,8 @@ window.Raphael = (function () {
             x = x.concat(dot1.x, dot2.x);
             y = y.concat(dot1.y, dot2.y);
             return {
-                min: {x: Math.min.apply(Math, x), y: Math.min.apply(Math, y)},
-                max: {x: Math.max.apply(Math, x), y: Math.max.apply(Math, y)}
+                min: {x: Math.min[ap](Math, x), y: Math.min[ap](Math, y)},
+                max: {x: Math.max[ap](Math, x), y: Math.max[ap](Math, y)}
             };
         }),
         path2curve = cacher(function (path, path2) {
@@ -626,7 +632,7 @@ window.Raphael = (function () {
                             d.Y = path[2];
                             break;
                         case "A":
-                            path = ["C"].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));
+                            path = ["C"].concat(a2c[ap](0, [d.x, d.y].concat(path.slice(1))));
                             break;
                         case "S":
                             nx = d.x + (d.x - (d.bx || d.x));
@@ -659,14 +665,14 @@ window.Raphael = (function () {
                     return path;
                 },
                 fixArc = function (pp, i) {
-                    if (pp[i].length > 7) {
+                    if (pp[i][ln] > 7) {
                         pp[i].shift();
                         var pi = pp[i];
-                        while (pi.length) {
+                        while (pi[ln]) {
                             pp.splice(i++, 0, ["C"].concat(pi.splice(0, 6)));
                         }
                         pp.splice(i, 1);
-                        ii = Math.max(p.length, p2 && p2.length || 0);
+                        ii = Math.max(p[ln], p2 && p2[ln] || 0);
                     }
                 },
                 fixM = function (path1, path2, a1, a2, i) {
@@ -676,10 +682,10 @@ window.Raphael = (function () {
                         a1.by = 0;
                         a1.x = path1[i][1];
                         a1.y = path1[i][2];
-                        ii = Math.max(p.length, p2 && p2.length || 0);
+                        ii = Math.max(p[ln], p2 && p2[ln] || 0);
                     }
                 };
-            for (var i = 0, ii = Math.max(p.length, p2 && p2.length || 0); i < ii; i++) {
+            for (var i = 0, ii = Math.max(p[ln], p2 && p2[ln] || 0); i < ii; i++) {
                 p[i] = processPath(p[i], attrs);
                 fixArc(p, i);
                 p2 && (p2[i] = processPath(p2[i], attrs2));
@@ -688,14 +694,14 @@ window.Raphael = (function () {
                 fixM(p2, p, attrs2, attrs, i);
                 var seg = p[i],
                     seg2 = p2 && p2[i],
-                    seglen = seg.length,
-                    seg2len = p2 && seg2.length;
+                    seglen = seg[ln],
+                    seg2len = p2 && seg2[ln];
                 attrs.x = seg[seglen - 2];
                 attrs.y = seg[seglen - 1];
-                attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;
-                attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;
-                attrs2.bx = p2 && (parseFloat(seg2[seg2len - 4]) || attrs2.x);
-                attrs2.by = p2 && (parseFloat(seg2[seg2len - 3]) || attrs2.y);
+                attrs.bx = win[pf](seg[seglen - 4]) || attrs.x;
+                attrs.by = win[pf](seg[seglen - 3]) || attrs.y;
+                attrs2.bx = p2 && (win[pf](seg2[seg2len - 4]) || attrs2.x);
+                attrs2.by = p2 && (win[pf](seg2[seg2len - 3]) || attrs2.y);
                 attrs2.x = p2 && seg2[seg2len - 2];
                 attrs2.y = p2 && seg2[seg2len - 1];
             }
@@ -703,7 +709,7 @@ window.Raphael = (function () {
         }, null, pathClone),
         parseDots = cacher(function (gradient) {
             var dots = [];
-            for (var i = 0, ii = gradient.length; i < ii; i++) {
+            for (var i = 0, ii = gradient[ln]; i < ii; i++) {
                 var dot = {},
                     par = gradient[i].match(/^([^:]*):?([\d\.]*)/);
                 dot.color = R.getRGB(par[1]);
@@ -714,10 +720,10 @@ window.Raphael = (function () {
                 par[2] && (dot.offset = par[2] + "%");
                 dots.push(dot);
             }
-            for (var i = 1, ii = dots.length - 1; i < ii; i++) {
+            for (var i = 1, ii = dots[ln] - 1; i < ii; i++) {
                 if (!dots[i].offset) {
-                    var start = parseFloat(dots[i - 1].offset || 0),
-                        end = false;
+                    var start = win[pf](dots[i - 1].offset || 0),
+                        end = 0;
                     for (var j = i + 1; j < ii; j++) {
                         if (dots[j].offset) {
                             end = dots[j].offset;
@@ -728,7 +734,7 @@ window.Raphael = (function () {
                         end = 100;
                         j = ii;
                     }
-                    end = parseFloat(end);
+                    end = win[pf](end);
                     var d = (end - start) / (j - i + 1);
                     for (; i < j; i++) {
                         start += d;
@@ -761,7 +767,7 @@ window.Raphael = (function () {
                         return {container: container, width: arguments[1], height: arguments[2]};
                     }
                 }
-            } else if (R.is(arguments[0], "number") && arguments.length > 3) {
+            } else if (R.is(arguments[0], "number") && arguments[ln] > 3) {
                 return {container: 1, x: arguments[0], y: arguments[1], width: arguments[2], height: arguments[3]};
             }
         },
@@ -771,7 +777,7 @@ window.Raphael = (function () {
                 switch (typeof add[prop]) {
                     case "function":
                         (function (f) {
-                            con[prop] = con === that ? f : function () { return f.apply(that, arguments); };
+                            con[prop] = con === that ? f : function () { return f[ap](that, arguments); };
                         })(add[prop]);
                     break;
                     case "object":
@@ -793,9 +799,9 @@ window.Raphael = (function () {
             return +num + (Math.floor(num) == num) * .5;
         };
         var roundPath = function (path) {
-            for (var i = 0, ii = path.length; i < ii; i++) {
+            for (var i = 0, ii = path[ln]; i < ii; i++) {
                 if (path[i][0].toLowerCase() != "a") {
-                    for (var j = 1, jj = path[i].length; j < jj; j++) {
+                    for (var j = 1, jj = path[i][ln]; j < jj; j++) {
                         path[i][j] = round(path[i][j]);
                     }
                 } else {
@@ -832,8 +838,8 @@ window.Raphael = (function () {
             gradient = (gradient + "").replace(/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/, function (all, _fx, _fy) {
                 type = "radial";
                 if (_fx && _fy) {
-                    fx = parseFloat(_fx);
-                    fy = parseFloat(_fy);
+                    fx = win[pf](_fx);
+                    fy = win[pf](_fy);
                     if (Math.pow(fx - .5, 2) + Math.pow(fy - .5, 2) > .25) {
                         fy = Math.sqrt(.25 - Math.pow(fx - .5, 2)) + .5;
                     }
@@ -843,7 +849,7 @@ window.Raphael = (function () {
             gradient = gradient.split(/\s*\-\s*/);
             if (type == "linear") {
                 var angle = gradient.shift();
-                angle = -parseFloat(angle);
+                angle = -win[pf](angle);
                 if (isNaN(angle)) {
                     return null;
                 }
@@ -868,7 +874,7 @@ window.Raphael = (function () {
             el.id = "r" + (R.idGenerator++).toString(36);
             type == "radial" ? $(el, {fx: fx, fy: fy}) : $(el, {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]});
             SVG.defs.appendChild(el);
-            for (var i = 0, ii = dots.length; i < ii; i++) {
+            for (var i = 0, ii = dots[ln]; i < ii; i++) {
                 var stop = $("stop");
                 $(stop, {
                     offset: dots[i].offset ? dots[i].offset : !i ? "0%" : "100%",
@@ -914,14 +920,14 @@ window.Raphael = (function () {
                         var width = o.attrs["stroke-width"] || "1",
                             butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0,
                             dashes = [];
-                        var i = value.length;
+                        var i = value[ln];
                         while (i--) {
                             dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;
                         }
                         $(node, {"stroke-dasharray": dashes.join(",")});
                     }
                 };
-            parseFloat(rot) && o.rotate(0, true);
+            win[pf](rot) && o.rotate(0, true);
             for (var att in params) if (params.hasOwnProperty(att)) {
                 if (!(att in availableAttrs)) {
                     continue;
@@ -944,7 +950,7 @@ window.Raphael = (function () {
                       break;
                     case "clip-rect":
                         var rect = (value + "").split(separator);
-                        if (rect.length == 4) {
+                        if (rect[ln] == 4) {
                             o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
                             var el = $("clipPath"),
                                 rc = $("rect");
@@ -1108,12 +1114,12 @@ window.Raphael = (function () {
                             var gradient = doc.getElementById(node.getAttribute("fill").replace(/^url\(#|\)$/g, ""));
                             if (gradient) {
                                 var stops = gradient.getElementsByTagName("stop");
-                                stops[stops.length - 1].setAttribute("stop-opacity", value);
+                                stops[stops[ln] - 1].setAttribute("stop-opacity", value);
                             }
                             break;
                         }
                     default:
-                        att == "font-size" && (value = parseInt(value, 10) + "px");
+                        att == "font-size" && (value = win[pi](value, 10) + "px");
                         var cssrule = att.replace(/(\-.)/g, function (w) {
                             return w.substring(1).toUpperCase();
                         });
@@ -1125,7 +1131,7 @@ window.Raphael = (function () {
             }
             
             tuneText(o, params);
-            parseInt(rot, 10) && o.rotate(rot, true);
+            win[pi](rot, 10) && o.rotate(rot, true);
         };
         var leading = 1.2;
         var tuneText = function (el, params) {
@@ -1134,14 +1140,14 @@ window.Raphael = (function () {
             }
             var a = el.attrs,
                 node = el.node,
-                fontSize = node.firstChild ? parseInt(doc.defaultView.getComputedStyle(node.firstChild, "").getPropertyValue("font-size"), 10) : 10;
+                fontSize = node.firstChild ? win[pi](doc.defaultView.getComputedStyle(node.firstChild, "").getPropertyValue("font-size"), 10) : 10;
 
             if ("text" in params) {
                 while (node.firstChild) {
                     node.removeChild(node.firstChild);
                 }
                 var texts = (params.text + "").split("\n");
-                for (var i = 0, ii = texts.length; i < ii; i++) {
+                for (var i = 0, ii = texts[ln]; i < ii; i++) {
                     var tspan = $("tspan");
                     i && $(tspan, {dy: fontSize * leading, x: a.x});
                     tspan.appendChild(doc.createTextNode(texts[i]));
@@ -1149,7 +1155,7 @@ window.Raphael = (function () {
                 }
             } else {
                 var texts = node.getElementsByTagName("tspan");
-                for (var i = 0, ii = texts.length; i < ii; i++) {
+                for (var i = 0, ii = texts[ln]; i < ii; i++) {
                     i && $(texts[i], {dy: fontSize * leading, x: a.x});
                 }
             }
@@ -1175,7 +1181,7 @@ window.Raphael = (function () {
                 sy: 1
             };
         };
-        Element.prototype.rotate = function (deg, cx, cy) {
+        Element[proto].rotate = function (deg, cx, cy) {
             if (deg == null) {
                 if (this._.rt.cx) {
                     return [this._.rt.deg, this._.rt.cx, this._.rt.cy].join(" ");
@@ -1184,11 +1190,11 @@ window.Raphael = (function () {
             }
             var bbox = this.getBBox();
             deg = (deg + "").split(separator);
-            if (deg.length - 1) {
-                cx = parseFloat(deg[1]);
-                cy = parseFloat(deg[2]);
+            if (deg[ln] - 1) {
+                cx = win[pf](deg[1]);
+                cy = win[pf](deg[2]);
             }
-            deg = parseFloat(deg[0]);
+            deg = win[pf](deg[0]);
             if (cx != null) {
                 this._.rt.deg = deg;
             } else {
@@ -1209,18 +1215,18 @@ window.Raphael = (function () {
             $(this.node, {transform: this.transformations.join(" ")});
             return this;
         };
-        Element.prototype.hide = function () {
+        Element[proto].hide = function () {
             this.node.style.display = "none";
             return this;
         };
-        Element.prototype.show = function () {
+        Element[proto].show = function () {
             this.node.style.display = "block";
             return this;
         };
-        Element.prototype.remove = function () {
+        Element[proto].remove = function () {
             this.node.parentNode.removeChild(this.node);
         };
-        Element.prototype.getBBox = function () {
+        Element[proto].getBBox = function () {
             if (this.type == "path") {
                 return pathDimensions(this.attrs.path);
             }
@@ -1247,8 +1253,8 @@ window.Raphael = (function () {
             hide && this.hide();
             return bbox;
         };
-        Element.prototype.attr = function () {
-            if (arguments.length == 1 && R.is(arguments[0], "string")) {
+        Element[proto].attr = function () {
+            if (arguments[ln] == 1 && R.is(arguments[0], "string")) {
                 if (arguments[0] == "translation") {
                     return this.translate();
                 }
@@ -1260,33 +1266,33 @@ window.Raphael = (function () {
                 }
                 return this.attrs[arguments[0]];
             }
-            if (arguments.length == 1 && R.is(arguments[0], "array")) {
+            if (arguments[ln] == 1 && R.is(arguments[0], "array")) {
                 var values = {};
                 for (var j in arguments[0]) if (arguments[0].hasOwnProperty(j)) {
                     values[arguments[0][j]] = this.attrs[arguments[0][j]];
                 }
                 return values;
             }
-            if (arguments.length == 2) {
+            if (arguments[ln] == 2) {
                 var params = {};
                 params[arguments[0]] = arguments[1];
                 setFillAndStroke(this, params);
-            } else if (arguments.length == 1 && R.is(arguments[0], "object")) {
+            } else if (arguments[ln] == 1 && R.is(arguments[0], "object")) {
                 setFillAndStroke(this, arguments[0]);
             }
             return this;
         };
-        Element.prototype.toFront = function () {
+        Element[proto].toFront = function () {
             this.node.parentNode.appendChild(this.node);
             return this;
         };
-        Element.prototype.toBack = function () {
+        Element[proto].toBack = function () {
             if (this.node.parentNode.firstChild != this.node) {
                 this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
             }
             return this;
         };
-        Element.prototype.insertAfter = function (element) {
+        Element[proto].insertAfter = function (element) {
             if (element.node.nextSibling) {
                 element.node.parentNode.insertBefore(this.node, element.node.nextSibling);
             } else {
@@ -1294,7 +1300,7 @@ window.Raphael = (function () {
             }
             return this;
         };
-        Element.prototype.insertBefore = function (element) {
+        Element[proto].insertBefore = function (element) {
             var node = element.node;
             node.parentNode.insertBefore(this.node, node);
             return this;
@@ -1361,7 +1367,7 @@ window.Raphael = (function () {
             return this;
         };
         var create = function () {
-            var con = getContainer.apply(null, arguments),
+            var con = getContainer[ap](null, arguments),
                 container = con && con.container,
                 x = con.x,
                 y = con.y,
@@ -1421,11 +1427,11 @@ window.Raphael = (function () {
     if (R.vml) {
         var path2vml = function (path) {
             var pa = path2curve(path);
-            for (var i = 0, ii = pa.length; i < ii; i++) {
+            for (var i = 0, ii = pa[ln]; i < ii; i++) {
                 pa[i][0] = (pa[i][0] + "").toLowerCase();
                 pa[i][0] == "z" && (pa[i][0] = "x");
-                for (var j = 1, jj = pa[i].length; j < jj; j++) {
-                    pa[i][j] = Math.round(pa[i][j]);
+                for (var j = 1, jj = pa[i][ln]; j < jj; j++) {
+                    pa[i][j] = ~~(pa[i][j] + .5);
                 }
             }
             return (pa + "");
@@ -1493,7 +1499,7 @@ window.Raphael = (function () {
             }
             if ("clip-rect" in params) {
                 var rect = (params["clip-rect"] + "").split(separator);
-                if (rect.length == 4) {
+                if (rect[ln] == 4) {
                     rect[2] = +rect[2] + (+rect[0]);
                     rect[3] = +rect[3] + (+rect[1]);
                     var div = node.clipRect || doc.createElement("div"),
@@ -1589,7 +1595,7 @@ window.Raphael = (function () {
                 params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter");
                 stroke.miterlimit = params["stroke-miterlimit"] || 8;
                 params["stroke-linecap"] && (stroke.endcap = {butt: "flat", square: "square", round: "round"}[params["stroke-linecap"]] || "miter");
-                params["stroke-width"] && (stroke.weight = (parseFloat(params["stroke-width"]) || 1) * 12 / 16);
+                params["stroke-width"] && (stroke.weight = (win[pf](params["stroke-width"]) || 1) * 12 / 16);
                 if (params["stroke-dasharray"]) {
                     var dasharray = {
                         "-": "shortdash",
@@ -1618,17 +1624,17 @@ window.Raphael = (function () {
                 res.W = a.w = res.paper.span.offsetWidth;
                 res.H = a.h = res.paper.span.offsetHeight;
                 res.X = a.x;
-                res.Y = a.y + Math.round(res.H / 2);
+                res.Y = a.y + ~~(res.H / 2 + .5);
 
                 // text-anchor emulation
                 switch (a["text-anchor"]) {
                     case "start":
                         res.node.style["v-text-align"] = "left";
-                        res.bbx = Math.round(res.W / 2);
+                        res.bbx = ~~(res.W / 2 + .5);
                     break;
                     case "end":
                         res.node.style["v-text-align"] = "right";
-                        res.bbx = -Math.round(res.W / 2);
+                        res.bbx = -~~(res.W / 2 + .5);
                     break;
                     default:
                         res.node.style["v-text-align"] = "center";
@@ -1646,8 +1652,8 @@ window.Raphael = (function () {
             gradient = (gradient + "").replace(/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/, function (all, fx, fy) {
                 type = "radial";
                 if (fx && fy) {
-                    fx = parseFloat(fx);
-                    fy = parseFloat(fy);
+                    fx = win[pf](fx);
+                    fy = win[pf](fy);
                     if (Math.pow(fx - .5, 2) + Math.pow(fy - .5, 2) > .25) {
                         fy = Math.sqrt(.25 - Math.pow(fx - .5, 2)) + .5;
                     }
@@ -1658,7 +1664,7 @@ window.Raphael = (function () {
             gradient = gradient.split(/\s*\-\s*/);
             if (type == "linear") {
                 var angle = gradient.shift();
-                angle = -parseFloat(angle);
+                angle = -win[pf](angle);
                 if (isNaN(angle)) {
                     return null;
                 }
@@ -1669,20 +1675,20 @@ window.Raphael = (function () {
             }
             o = o.shape || o.node;
             fill = fill[0] || createNode("fill");
-            if (dots.length) {
+            if (dots[ln]) {
                 fill.on = true;
                 fill.method = "none";
                 fill.type = (type == "radial") ? "gradientradial" : "gradient";
                 fill.color = dots[0].color;
-                fill.color2 = dots[dots.length - 1].color;
+                fill.color2 = dots[dots[ln] - 1].color;
                 var clrs = [];
-                for (var i = 0, ii = dots.length; i < ii; i++) {
+                for (var i = 0, ii = dots[ln]; i < ii; i++) {
                     dots[i].offset && clrs.push(dots[i].offset + " " + dots[i].color);
                 }
-                if (clrs.length) {
+                if (clrs[ln] && fill.colors) {
                     fill.colors.value = clrs.join(",");
                 } else {
-                    fill.colors && (fill.colors.value = "0% " + fill.color);
+                    fill.colors.value = "0% " + fill.color;
                 }
                 if (type == "radial") {
                     fill.focus = "100%";
@@ -1715,7 +1721,7 @@ window.Raphael = (function () {
                 sy: 1
             };
         };
-        Element.prototype.rotate = function (deg, cx, cy) {
+        Element[proto].rotate = function (deg, cx, cy) {
             if (deg == null) {
                 if (this._.rt.cx) {
                     return [this._.rt.deg, this._.rt.cx, this._.rt.cy].join(" ");
@@ -1723,11 +1729,11 @@ window.Raphael = (function () {
                 return this._.rt.deg;
             }
             deg = (deg + "").split(separator);
-            if (deg.length - 1) {
-                cx = parseFloat(deg[1]);
-                cy = parseFloat(deg[2]);
+            if (deg[ln] - 1) {
+                cx = win[pf](deg[1]);
+                cy = win[pf](deg[2]);
             }
-            deg = parseFloat(deg[0]);
+            deg = win[pf](deg[0]);
             if (cx != null) {
                 this._.rt.deg = deg;
             } else {
@@ -1745,7 +1751,7 @@ window.Raphael = (function () {
             // !R.is(fill.angle, "undefined") && (fill.angle = b);
             return this;
         };
-        Element.prototype.setBox = function (params, cx, cy) {
+        Element[proto].setBox = function (params, cx, cy) {
             var gs = this.Group.style,
                 os = (this.shape && this.shape.style) || this.node.style;
             params = params || {};
@@ -1779,8 +1785,8 @@ window.Raphael = (function () {
                     h = attr.height || 0;
                     break;
                 case "text":
-                    this.textpath.v = ["m", Math.round(attr.x), ", ", Math.round(attr.y - 2), "l", Math.round(attr.x) + 1, ", ", Math.round(attr.y - 2)].join("");
-                    x = attr.x - Math.round(this.W / 2);
+                    this.textpath.v = ["m", ~~(attr.x + .5), ", ", ~~(attr.y - 2 + .5), "l", ~~(attr.x + .5) + 1, ", ", ~~(attr.y - 2 + .5)].join("");
+                    x = attr.x - ~~(this.W / 2 + .5);
                     y = attr.y - this.H / 2;
                     w = this.W;
                     h = this.H;
@@ -1846,15 +1852,15 @@ window.Raphael = (function () {
                 }
             }
         };
-        Element.prototype.hide = function () {
+        Element[proto].hide = function () {
             this.Group.style.display = "none";
             return this;
         };
-        Element.prototype.show = function () {
+        Element[proto].show = function () {
             this.Group.style.display = "block";
             return this;
         };
-        Element.prototype.getBBox = function () {
+        Element[proto].getBBox = function () {
             if (this.type == "path") {
                 return pathDimensions(this.attrs.path);
             }
@@ -1865,13 +1871,13 @@ window.Raphael = (function () {
                 height: this.H
             };
         };
-        Element.prototype.remove = function () {
+        Element[proto].remove = function () {
             this[0].parentNode.removeChild(this[0]);
             this.Group.parentNode.removeChild(this.Group);
             this.shape && this.shape.parentNode.removeChild(this.shape);
         };
-        Element.prototype.attr = function () {
-            if (arguments.length == 1 && R.is(arguments[0], "string")) {
+        Element[proto].attr = function () {
+            if (arguments[ln] == 1 && R.is(arguments[0], "string")) {
                 if (arguments[0] == "translation") {
                     return this.translate();
                 }
@@ -1883,19 +1889,19 @@ window.Raphael = (function () {
                 }
                 return this.attrs[arguments[0]];
             }
-            if (this.attrs && arguments.length == 1 && R.is(arguments[0], "array")) {
+            if (this.attrs && arguments[ln] == 1 && R.is(arguments[0], "array")) {
                 var values = {};
-                for (var i = 0, ii = arguments[0].length; i < ii; i++) {
+                for (var i = 0, ii = arguments[0][ln]; i < ii; i++) {
                     values[arguments[0][i]] = this.attrs[arguments[0][i]];
                 };
                 return values;
             }
             var params;
-            if (arguments.length == 2) {
+            if (arguments[ln] == 2) {
                 params = {};
                 params[arguments[0]] = arguments[1];
             }
-            if (arguments.length == 1 && R.is(arguments[0], "object")) {
+            if (arguments[ln] == 1 && R.is(arguments[0], "object")) {
                 params = arguments[0];
             }
             if (params) {
@@ -1910,17 +1916,17 @@ window.Raphael = (function () {
             }
             return this;
         };
-        Element.prototype.toFront = function () {
+        Element[proto].toFront = function () {
             this.Group.parentNode.appendChild(this.Group);
             return this;
         };
-        Element.prototype.toBack = function () {
+        Element[proto].toBack = function () {
             if (this.Group.parentNode.firstChild != this.Group) {
                 this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild);
             }
             return this;
         };
-        Element.prototype.insertAfter = function (element) {
+        Element[proto].insertAfter = function (element) {
             if (element.Group.nextSibling) {
                 element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling);
             } else {
@@ -1928,7 +1934,7 @@ window.Raphael = (function () {
             }
             return this;
         };
-        Element.prototype.insertBefore = function (element) {
+        Element[proto].insertBefore = function (element) {
             element.Group.parentNode.insertBefore(this.Group, element.Group);
             return this;
         };
@@ -2017,7 +2023,7 @@ window.Raphael = (function () {
             g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
             g.coordsize = vml.coordsize;
             g.coordorigin = vml.coordorigin;
-            path.v = R.format("m{0},{1}l{2},{1}", Math.round(x), Math.round(y), Math.round(x) + 1);
+            path.v = R.format("m{0},{1}l{2},{1}", ~~(x + .5), ~~(y + .5), ~~(x + .5) + 1);
             path.textpathok = true;
             ol.width = vml.width;
             ol.height = vml.height;
@@ -2042,8 +2048,8 @@ window.Raphael = (function () {
         };
         var setSize = function (width, height) {
             var cs = this.canvas.style;
-            this.width = parseFloat(width || this.width);
-            this.height = parseFloat(height || this.height);
+            this.width = win[pf](width || this.width);
+            this.height = win[pf](height || this.height);
             cs.width = this.width + "px";
             cs.height = this.height + "px";
             cs.clip = "rect(0 " + this.width + "px " + this.height + "px 0)";
@@ -2062,7 +2068,7 @@ window.Raphael = (function () {
             };
         }
         var create = function () {
-            var con = getContainer.apply(null, arguments),
+            var con = getContainer[ap](null, arguments),
                 container = con.container,
                 height = con.height,
                 s,
@@ -2075,8 +2081,8 @@ window.Raphael = (function () {
             var res = {},
                 c = res.canvas = doc.createElement("div"),
                 cs = c.style;
-            width = parseFloat(width) || 512;
-            height = parseFloat(height) || 342;
+            width = win[pf](width) || 512;
+            height = win[pf](height) || 342;
             res.width = width;
             res.height = height;
             res.coordsize = width + " " + height;
@@ -2172,9 +2178,9 @@ window.Raphael = (function () {
             };
         }
     })();
-    for (var i = events.length; i--;) {
+    for (var i = events[ln]; i--;) {
         (function (eventName) {
-            Element.prototype[eventName] = function (fn) {
+            Element[proto][eventName] = function (fn) {
                 if (R.is(fn, "function")) {
                     this.events = this.events || {};
                     this.events[eventName] = this.events[eventName] || {};
@@ -2183,13 +2189,13 @@ window.Raphael = (function () {
                 }
                 return this;
             };
-            Element.prototype["un" + eventName] = function (fn) {
+            Element[proto]["un" + eventName] = function (fn) {
                 this.events &&
                 this.events[eventName] &&
                 this.events[eventName][fn] &&
-                this.events[eventName][fn].length &&
+                this.events[eventName][fn][ln] &&
                 this.events[eventName][fn].shift()() &&
-                !this.events[eventName][fn].length &&
+                !this.events[eventName][fn][ln] &&
                 delete this.events[eventName][fn];
             };
 
@@ -2206,7 +2212,7 @@ window.Raphael = (function () {
     };
     paper.path = function (pathString) {
         pathString && !R.is(pathString, "string") && !R.is(pathString[0], "array") && (pathString += "");
-        return thePath(R.format.apply(R, arguments), this);
+        return thePath(R.format[ap](R, arguments), this);
     };
     paper.image = function (src, x, y, w, h) {
         return theImage(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0);
@@ -2215,15 +2221,15 @@ window.Raphael = (function () {
         return theText(this, x || 0, y || 0, text || "");
     };
     paper.set = function (itemsArray) {
-        arguments.length > 1 && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));
+        arguments[ln] > 1 && (itemsArray = Array[proto].splice.call(arguments, 0, arguments[ln]));
         return new Set(itemsArray);
     };
     paper.setSize = setSize;
-    Element.prototype.stop = function () {
+    Element[proto].stop = function () {
         clearTimeout(this.animation_in_progress);
         return this;
     };
-    Element.prototype.scale = function (x, y, cx, cy) {
+    Element[proto].scale = function (x, y, cx, cy) {
         if (x == null && y == null) {
             return {x: this._.sx, y: this._.sy, toString: function () { return this.x + " " + this.y; }};
         }
@@ -2242,8 +2248,8 @@ window.Raphael = (function () {
                 ky = y / this._.sy;
             cx = (+cx || cx == 0) ? cx : rcx;
             cy = (+cy || cy == 0) ? cy : rcy;
-            var dirx = Math.round(x / Math.abs(x)),
-                diry = Math.round(y / Math.abs(y)),
+            var dirx = ~~(x / Math.abs(x)),
+                diry = ~~(y / Math.abs(y)),
                 s = this.node.style,
                 ncx = cx + (rcx - cx) * dirx * kx,
                 ncy = cy + (rcy - cy) * diry * ky;
@@ -2276,7 +2282,7 @@ window.Raphael = (function () {
                 case "path":
                     var path = pathToRelative(a.path),
                         skip = true;
-                    for (var i = 0, ii = path.length; i < ii; i++) {
+                    for (var i = 0, ii = path[ln]; i < ii; i++) {
                         var p = path[i];
                         if (p[0].toUpperCase() == "M" && skip) {
                             continue;
@@ -2284,13 +2290,13 @@ window.Raphael = (function () {
                             skip = false;
                         }
                         if (R.svg && p[0].toUpperCase() == "A") {
-                            p[path[i].length - 2] *= kx;
-                            p[path[i].length - 1] *= ky;
+                            p[path[i][ln] - 2] *= kx;
+                            p[path[i][ln] - 1] *= ky;
                             p[1] *= kx;
                             p[2] *= ky;
                             p[5] = +(dirx + diry ? !!+p[5] : !+p[5]);
                         } else {
-                            for (var j = 1, jj = p.length; j < jj; j++) {
+                            for (var j = 1, jj = p[ln]; j < jj; j++) {
                                 p[j] *= (j % 2) ? kx : ky;
                             }
                         }
@@ -2397,7 +2403,7 @@ window.Raphael = (function () {
         }
     };
 
-    Element.prototype.animate = function (params, ms, easing, callback) {
+    Element[proto].animate = function (params, ms, easing, callback) {
         clearTimeout(this.animation_in_progress);
         if (R.is(easing, "function") || !easing) {
             callback = easing || null;
@@ -2429,9 +2435,9 @@ window.Raphael = (function () {
                         from[attr] = pathes[0];
                         to[attr] = pathes[1];
                         diff[attr] = [];
-                        for (var i = 0, ii = from[attr].length; i < ii; i++) {
+                        for (var i = 0, ii = from[attr][ln]; i < ii; i++) {
                             diff[attr][i] = [0];
-                            for (var j = 1, jj = from[attr][i].length; j < jj; j++) {
+                            for (var j = 1, jj = from[attr][i][ln]; j < jj; j++) {
                                 diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;
                             }
                         }
@@ -2469,7 +2475,7 @@ window.Raphael = (function () {
         var start = +new Date,
             prev = 0,
             upto255 = function (color) {
-                return +color > 255 ? 255 : +color;
+                return color > 255 ? 255 : color;
             },
             that = this;
         (function tick() {
@@ -2485,16 +2491,16 @@ window.Raphael = (function () {
                             break;
                         case "colour":
                             now = "rgb(" + [
-                                upto255(Math.round(from[attr].r + pos * ms * diff[attr].r)),
-                                upto255(Math.round(from[attr].g + pos * ms * diff[attr].g)),
-                                upto255(Math.round(from[attr].b + pos * ms * diff[attr].b))
+                                upto255(~~(from[attr].r + pos * ms * diff[attr].r + .5)),
+                                upto255(~~(from[attr].g + pos * ms * diff[attr].g + .5)),
+                                upto255(~~(from[attr].b + pos * ms * diff[attr].b + .5))
                             ].join(",") + ")";
                             break;
                         case "path":
                             now = [];
-                            for (var i = 0, ii = from[attr].length; i < ii; i++) {
+                            for (var i = 0, ii = from[attr][ln]; i < ii; i++) {
                                 now[i] = [from[attr][i][0]];
-                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {
+                                for (var j = 1, jj = from[attr][i][ln]; j < jj; j++) {
                                     now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];
                                 }
                                 now[i] = now[i].join(" ");
@@ -2543,7 +2549,7 @@ window.Raphael = (function () {
         })();
         return this;
     };
-    Element.prototype.translate = function (x, y) {
+    Element[proto].translate = function (x, y) {
         if (x == null) {
             return {x: this._.tx, y: this._.ty};
         }
@@ -2568,7 +2574,7 @@ window.Raphael = (function () {
         }
         return this;
     };
-    Element.prototype.toString = function () {
+    Element[proto].toString = function () {
         return "Rapha\u00ebl\u2019s object";
     };
     
@@ -2576,60 +2582,60 @@ window.Raphael = (function () {
     // Set
     var Set = function (items) {
         this.items = [];
-        this.length = 0;
+        this[ln] = 0;
         if (items) {
-            for (var i = 0, ii = items.length; i < ii; i++) {
+            for (var i = 0, ii = items[ln]; i < ii; i++) {
                 if (items[i] && (items[i].constructor == Element || items[i].constructor == Set)) {
-                    this[this.items.length] = this.items[this.items.length] = items[i];
-                    this.length++;
+                    this[this.items[ln]] = this.items[this.items[ln]] = items[i];
+                    this[ln]++;
                 }
             }
         }
     };
-    Set.prototype.push = function () {
+    Set[proto].push = function () {
         var item,
             len;
-        for (var i = 0, ii = arguments.length; i < ii; i++) {
+        for (var i = 0, ii = arguments[ln]; i < ii; i++) {
             item = arguments[i];
             if (item && (item.constructor == Element || item.constructor == Set)) {
-                len = this.items.length;
+                len = this.items[ln];
                 this[len] = this.items[len] = item;
-                this.length++;
+                this[ln]++;
             }
         }
         return this;
     };
-    Set.prototype.pop = function () {
-        delete this[this.length--];
+    Set[proto].pop = function () {
+        delete this[this[ln]--];
         return this.items.pop();
     };
-    for (var method in Element.prototype) if (Element.prototype.hasOwnProperty(method)) {
-        Set.prototype[method] = (function (methodname) {
+    for (var method in Element[proto]) if (Element[proto].hasOwnProperty(method)) {
+        Set[proto][method] = (function (methodname) {
             return function () {
-                for (var i = 0, ii = this.items.length; i < ii; i++) {
-                    this.items[i][methodname].apply(this.items[i], arguments);
+                for (var i = 0, ii = this.items[ln]; i < ii; i++) {
+                    this.items[i][methodname][ap](this.items[i], arguments);
                 }
                 return this;
             };
         })(method);
     }
-    Set.prototype.attr = function (name, value) {
+    Set[proto].attr = function (name, value) {
         if (name && R.is(name, "array") && R.is(name[0], "object")) {
-            for (var j = 0, jj = name.length; j < jj; j++) {
+            for (var j = 0, jj = name[ln]; j < jj; j++) {
                 this.items[j].attr(name[j]);
             }
         } else {
-            for (var i = 0, ii = this.items.length; i < ii; i++) {
-                this.items[i].attr.apply(this.items[i], arguments);
+            for (var i = 0, ii = this.items[ln]; i < ii; i++) {
+                this.items[i].attr[ap](this.items[i], arguments);
             }
         }
         return this;
     };
-    Set.prototype.animate = function (params, ms, easing, callback) {
+    Set[proto].animate = function (params, ms, easing, callback) {
         if (R.is(easing, "function") || !easing) {
             callback = easing || null;
         }
-        var len = this.items.length,
+        var len = this.items[ln],
             i = len,
             set = this;
         if (callback) {
@@ -2647,25 +2653,25 @@ window.Raphael = (function () {
         return this;
     };
     
-    Set.prototype.getBBox = function () {
+    Set[proto].getBBox = function () {
         var x = [],
             y = [],
             w = [],
             h = [];
-        for (var i = this.items.length; i--;) {
+        for (var i = this.items[ln]; i--;) {
             var box = this.items[i].getBBox();
             x.push(box.x);
             y.push(box.y);
             w.push(box.x + box.width);
             h.push(box.y + box.height);
         }
-        x = Math.min.apply(Math, x);
-        y = Math.min.apply(Math, y);
+        x = Math.min[ap](Math, x);
+        y = Math.min[ap](Math, y);
         return {
             x: x,
             y: y,
-            width: Math.max.apply(Math, w) - x,
-            height: Math.max.apply(Math, h) - y
+            width: Math.max[ap](Math, w) - x,
+            height: Math.max[ap](Math, h) - y
         };
     };
 
@@ -2689,7 +2695,7 @@ window.Raphael = (function () {
             this.fonts[family] = [fontcopy];
         }
         if (!font.svg) {
-            fontcopy.face["units-per-em"] = parseInt(font.face["units-per-em"], 10);
+            fontcopy.face["units-per-em"] = win[pi](font.face["units-per-em"], 10);
             for (var glyph in font.glyphs) if (font.glyphs.hasOwnProperty(glyph)) {
                 var path = font.glyphs[glyph];
                 fontcopy.glyphs[glyph] = {
@@ -2724,7 +2730,7 @@ window.Raphael = (function () {
         }
         var thefont;
         if (font) {
-            for (var i = 0, ii = font.length; i < ii; i++) {
+            for (var i = 0, ii = font[ln]; i < ii; i++) {
                 thefont = font[i];
                 if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) {
                     break;
@@ -2742,7 +2748,7 @@ window.Raphael = (function () {
         R.is(font, "string") && (font = this.getFont(font));
         if (font) {
             scale = (size || 16) / font.face["units-per-em"];
-            for (var i = 0, ii = letters.length; i < ii; i++) {
+            for (var i = 0, ii = letters[ln]; i < ii; i++) {
                 var prev = i && font.glyphs[letters[i - 1]] || {},
                     curr = font.glyphs[letters[i]];
                 shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) : 0;
@@ -2755,7 +2761,7 @@ window.Raphael = (function () {
 
     R.format = function (token) {
         var args = R.is(arguments[1], "array") ? [0].concat(arguments[1]) : arguments;
-        token && R.is(token, "string") && args.length - 1 && (token = token.replace(/\{(\d+)\}/g, function (str, i) {
+        token && R.is(token, "string") && args[ln] - 1 && (token = token.replace(/\{(\d+)\}/g, function (str, i) {
             return args[++i] == null ? "" : args[i];
         }));
         return token || "";
@@ -2773,6 +2779,6 @@ window.Raphael = (function () {
         }
         return r;
     };
-    R.el = Element.prototype;
+    R.el = Element[proto];
     return R;
 })();
\ No newline at end of file