Documentation fixes
authorDmitry Baranovskiy <dmitry@baranovskiy.com>
Wed, 27 Jul 2011 06:37:35 +0000 (16:37 +1000)
committerDmitry Baranovskiy <dmitry@baranovskiy.com>
Wed, 27 Jul 2011 06:37:35 +0000 (16:37 +1000)
raphael-min.js
raphael.core.js
raphael.js
raphael.svg.js
reference.html

index 29a95de..6b72c9a 100644 (file)
@@ -1 +1,8 @@
-(function(){function cq(b,d,e,f,h,i){e=Q(e);var j,k,l,m=[],n,o,p,q=b.ms,s={},t={},u={};if(f)for(w=0,x=ck.length;w<x;w++){var v=ck[w];if(v.el.id==d.id&&v.anim==b){v.percent!=e?(ck.splice(w,1),l=1):k=v,d.attr(v.totalOrigin);break}}else f=+t;for(var w=0,x=b.percents.length;w<x;w++){if(b.percents[w]==e||b.percents[w]>f*b.top){e=b.percents[w],o=b.percents[w-1]||0,q=q/b.top*(e-o),n=b.percents[w+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[w]])}if(!!j){if(!k){for(attr in j)if(j[g](attr))if(V[g](attr)||d.paper.customAttributes[g](attr)){s[attr]=d.attr(attr),s[attr]==null&&(s[attr]=U[attr]),t[attr]=j[attr];switch(V[attr]){case C:u[attr]=(t[attr]-s[attr])/q;break;case"colour":s[attr]=a.getRGB(s[attr]);var y=a.getRGB(t[attr]);u[attr]={r:(y.r-s[attr].r)/q,g:(y.g-s[attr].g)/q,b:(y.b-s[attr].b)/q};break;case"path":var z=bF(s[attr],t[attr]),A=z[1];s[attr]=z[0],u[attr]=[];for(w=0,x=s[attr].length;w<x;w++){u[attr][w]=[0];for(var B=1,D=s[attr][w].length;B<D;B++)u[attr][w][B]=(A[w][B]-s[attr][w][B])/q}break;case"transform":var E=d._,F=bP(E[attr],t[attr]);if(F){s[attr]=F.from,t[attr]=F.to,u[attr]=[],u[attr].real=!0;for(w=0,x=s[attr].length;w<x;w++){u[attr][w]=[s[attr][w][0]];for(B=1,D=s[attr][w].length;B<D;B++)u[attr][w][B]=(t[attr][w][B]-s[attr][w][B])/q}}else{var G=d.matrix||new bQ,H={_:{transform:E.transform},getBBox:function(){return d.getBBox(1)}};s[attr]=[G.a,G.b,G.c,G.d,G.e,G.f],bN(H,t[attr]),t[attr]=H._.transform,u[attr]=[(H.matrix.a-G.a)/q,(H.matrix.b-G.b)/q,(H.matrix.c-G.c)/q,(H.matrix.d-G.d)/q,(H.matrix.e-G.e)/q,(H.matrix.e-G.f)/q]}break;case"csv":var I=r(j[attr]).split(c),J=r(s[attr]).split(c);if(attr=="clip-rect"){s[attr]=J,u[attr]=[],w=J.length;while(w--)u[attr][w]=(I[w]-s[attr][w])/q}t[attr]=I;break;default:I=[].concat(j[attr]),J=[].concat(s[attr]),u[attr]=[],w=d.paper.customAttributes[attr].length;while(w--)u[attr][w]=((I[w]||0)-(J[w]||0))/q}}var K=j.easing,L=a.easing_formulas[K];if(!L){L=r(K).match(N);if(L&&L.length==5){var M=L;L=function(a){return co(a,+M[1],+M[2],+M[3],+M[4],q)}}else L=be}p=j.start||b.start||+(new Date),v={anim:b,percent:e,timestamp:p,start:p+(b.del||0),status:0,initstatus:f||0,stop:!1,ms:q,easing:L,from:s,diff:u,to:t,el:d,callback:j.callback,prev:o,next:n,repeat:i||b.times,origin:d.attr(),totalOrigin:h},ck.push(v);if(f&&!k){v.stop=!0,v.start=new Date-q*f;if(ck.length==1)return cm()}ck.length==1&&cl(cm)}else k.initstatus=f,k.start=new Date-k.ms*f;cu("anim.start."+d.id,d,b)}}function cp(a,b){var c=[];this.anim=a,this.ms=b,this.times=1;if(this.anim){for(var d in this.anim)this.anim[g](d)&&c.push(+d);c.sort(bc)}this.top=c[c.length-1],this.percents=c}function co(a,b,c,d,e,f){function o(a,b){var c,d,e,f,j,k;for(e=a,k=0;k<8;k++){f=m(e)-a;if(z(f)<b)return e;j=(3*i*e+2*h)*e+g;if(z(j)<1e-6)break;e=e-f/j}c=0,d=1,e=a;if(e<c)return c;if(e>d)return d;while(c<d){f=m(e);if(z(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cc(){return this.x+q+this.y+q+this.width+" × "+this.height}function cb(){return this.x+q+this.y}function bQ(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bv(){return this.hex}function bt(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bs(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bs(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function a(c){if(a.is(c,"function"))return b?c():cu.on("DOMload",c);if(a.is(c,E)){var e=c,f=a._engine.create[m](a,e.splice(0,3+a.is(e[0],C))),h=f.set(),i=0,j=e.length,k;for(;i<j;i++)k=e[i]||{},d[g](k.type)&&h.push(f[k.type]().attr(k));return h}var l=Array.prototype.slice.call(arguments,0);if(a.is(l[l.length-1],"function")){var n=l.pop();return b?n.call(a._engine.create[m](a,l)):cu.on("DOMload",function(){n.call(a._engine.create[m](a,l))})}return a._engine.create[m](a,arguments)}a.version="2.0.0";var b,c=/[, ]+/,d={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},e=/\{(\d+)\}/g,f="prototype",g="hasOwnProperty",h={doc:document,win:window},i={was:Object.prototype[g].call(h.win,"Raphael"),is:h.win.Raphael},j=function(){},k,l="appendChild",m="apply",n="concat",o="createTouch"in h.doc,p="",q=" ",r=String,s="split",t="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend".split(q),u={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},v=r.prototype.toLowerCase,w=Math,x=w.max,y=w.min,z=w.abs,A=w.pow,B=w.PI,C="number",D="string",E="array",F="toString",G="fill",H=Object.prototype.toString,I={},J="push",K=a._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i,L=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,M={NaN:1,Infinity:1,"-Infinity":1},N=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,O=w.round,P="setAttribute",Q=parseFloat,R=parseInt,S=" progid:DXImageTransform.Microsoft",T=r.prototype.toUpperCase,U=a._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",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,rx:0,ry:0,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",transform:"",width:0,x:0,y:0},V=a._availableAnimAttrs={blur:C,"clip-rect":"csv",cx:C,cy:C,fill:"colour","fill-opacity":C,"font-size":C,height:C,opacity:C,path:"path",r:C,rx:C,ry:C,stroke:"colour","stroke-opacity":C,"stroke-width":C,transform:"transform",width:C,x:C,y:C},W=/\s*,\s*/,X={hs:1,rg:1},Y=/,?([achlmqrstvxz]),?/gi,Z=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?\s*,?\s*)+)/ig,$=/([rstm])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?\s*,?\s*)+)/ig,_=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)\s*,?\s*/ig,ba=a._radial_gradient=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,bb=function(a,b){return a.key-b.key},bc=function(a,b){return a-b},bd=function(){},be=function(a){return a},bf=a._rectPath=function(a,b,c,d,e){if(e)return[["M",a+e,b],["l",c-e*2,0],["a",e,e,0,0,1,e,e],["l",0,d-e*2],["a",e,e,0,0,1,-e,e],["l",e*2-c,0],["a",e,e,0,0,1,-e,-e],["l",0,e*2-d],["a",e,e,0,0,1,e,-e],["z"]];return[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]]},bg=function(a,b,c,d){d==null&&(d=c);return[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]]},bh=a._getPath={path:function(a){return a.attr("path")},circle:function(a){var b=a.attrs;return bg(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return bg(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return bf(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return bf(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return bf(b.x,b.y,b.width,b.height)}},bi=function(a,b){if(!b)return a;var c,d,e,f,g;a=bF(a);for(e=0,ii=a.length;e<ii;e++){g=a[e];for(f=1,jj=g.length;f<jj;f+=2)c=b.x(g[f],g[f+1]),d=b.y(g[f],g[f+1]),g[f]=c,g[f+1]=d}return a};a._g=h,a.type=h.win.SVGAngle||h.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML";if(a.type=="VML"){var bj=h.doc.createElement("div"),bk;bj.innerHTML='<v:shape adj="1"/>',bk=bj.firstChild,bk.style.behavior="url(#default#VML)";if(!bk||typeof bk.adj!="object")return a.type=p;bj=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,k.customAttributes={},a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(f<d)return c-f;if(f>b-d)return c-f+b}return c};var bl=a._createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){cu("setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,initWin&&initWin(h.win)};var bm=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write("<body>"),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bm=bt(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bm=bt(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bm(b)},bn=function(){return"hsb("+[this.h,this.s,this.b]+")"},bo=function(){return"hsl("+[this.h,this.s,this.l]+")"},bp=function(){return this.hex},bq=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},br=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:bp};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},crl.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=bp;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bn}},a.rgb2hsl=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bo}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bu=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bt(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bv};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bm(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4].split(W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5].split(W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6].split(W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bv},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv}},a),a.hsb=bt(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bt(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bt(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=bt(function(b){if(!b)return null;var c={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bx(b)),d.length||r(b).replace(Z,function(a,b,e){var f=[],g=v.call(b);e.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(d.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");while(f.length>=c[g]){d.push([b][n](f.splice(0,c[g])));if(!c[g])break}}),d.toString=a._path2string;return d}),a.parseTransformString=bt(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bx(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([f][n](e))}),d.toString=a._path2string;return d}),a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3)*a+A(j,2)*3*i*c+j*3*i*i*e+A(i,3)*g,l=A(j,3)*b+A(j,2)*3*i*d+j*3*i*i*f+A(i,3)*h,m=a+2*i*(c-a)+i*i*(e-2*c+a),n=b+2*i*(d-b)+i*i*(f-2*d+b),o=c+2*i*(e-c)+i*i*(g-2*e+c),p=d+2*i*(f-d)+i*i*(h-2*f+d),q=(1-i)*a+i*c,r=(1-i)*b+i*d,s=(1-i)*e+i*g,t=(1-i)*f+i*h,u=90-w.atan2(m-o,n-p)*180/B;(m>o||n<p)&&(u+=180);return{x:k,y:l,m:{x:m,y:n},n:{x:o,y:p},start:{x:q,y:r},end:{x:s,y:t},alpha:u}};var bw=bt(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=bF(a);var b=0,c=0,d=[],e=[],f;for(var g=0,h=a.length;g<h;g++){f=a[g];if(f[0]=="M")b=f[1],c=f[2],d.push(b),e.push(c);else{var i=bE(b,c,f[1],f[2],f[3],f[4],f[5],f[6]);d=d[n](i.min.x,i.max.x),e=e[n](i.min.y,i.max.y),b=f[5],c=f[6]}}var j=y[m](0,d),k=y[m](0,e);return{x:j,y:k,width:x[m](0,d)-j,height:x[m](0,e)-k}},null,function(a){return{x:a.x,y:a.y,width:a.width,height:a.height}}),bx=function(b){var c=[];if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);for(var d=0,e=b.length;d<e;d++){c[d]=[];for(var f=0,g=b[d].length;f<g;f++)c[d][f]=b[d][f]}c.toString=a._path2string;return c},by=a._pathToRelative=bt(function(b){if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);var c=[],d=0,e=0,f=0,g=0,h=0;b[0][0]=="M"&&(d=b[0][1],e=b[0][2],f=d,g=e,h++,c.push(["M",d,e]));for(var i=h,j=b.length;i<j;i++){var k=c[i]=[],l=b[i];if(l[0]!=v.call(l[0])){k[0]=v.call(l[0]);switch(k[0]){case"a":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]-d).toFixed(3),k[7]=+(l[7]-e).toFixed(3);break;case"v":k[1]=+(l[1]-e).toFixed(3);break;case"m":f=l[1],g=l[2];default:for(var m=1,n=l.length;m<n;m++)k[m]=+(l[m]-(m%2?d:e)).toFixed(3)}}else{k=c[i]=[],l[0]=="m"&&(f=l[1]+d,g=l[2]+e);for(var o=0,p=l.length;o<p;o++)c[i][o]=l[o]}var q=c[i].length;switch(c[i][0]){case"z":d=f,e=g;break;case"h":d+=+c[i][q-1];break;case"v":e+=+c[i][q-1];break;default:d+=+c[i][q-2],e+=+c[i][q-1]}}c.toString=a._path2string;return c},0,bx),bz=a._pathToAbsolute=bt(function(b){if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);if(!b||!b.length)return[["M",0,0]];var c=[],d=0,e=0,f=0,g=0,h=0;b[0][0]=="M"&&(d=+b[0][1],e=+b[0][2],f=d,g=e,h++,c[0]=["M",d,e]);for(var i=h,j=b.length;i<j;i++){var k=c[i]=[],l=b[i];if(l[0]!=T.call(l[0])){k[0]=T.call(l[0]);switch(k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+d),k[7]=+(l[7]+e);break;case"V":k[1]=+l[1]+e;break;case"H":k[1]=+l[1]+d;break;case"M":f=+l[1]+d,g=+l[2]+e;default:for(var m=1,n=l.length;m<n;m++)k[m]=+l[m]+(m%2?d:e)}}else for(var o=0,p=l.length;o<p;o++)c[i][o]=l[o];switch(k[0]){case"Z":d=f,e=g;break;case"H":d=k[1];break;case"V":e=k[1];break;case"M":f=c[i][c[i].length-2],g=c[i][c[i].length-1];default:d=c[i][c[i].length-2],e=c[i][c[i].length-1]}}c.toString=a._path2string;return c},null,bx),bA=function(a,b,c,d){return[a,b,c,d,c,d]},bB=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},bC=function(a,b,c,d,e,f,g,h,i,j){var k=B*120/180,l=B/180*(+e||0),m=[],o,p=bt(function(a,b,c){var d=a*w.cos(c)-b*w.sin(c),e=a*w.sin(c)+b*w.cos(c);return{x:d,y:e}});if(!j){o=p(a,b,-l),a=o.x,b=o.y,o=p(h,i,-l),h=o.x,i=o.y;var q=w.cos(B/180*e),r=w.sin(B/180*e),s=(a-h)/2,t=(b-i)/2,u=s*s/(c*c)+t*t/(d*d);u>1&&(u=w.sqrt(u),c=u*c,d=u*d);var v=c*c,x=d*d,y=(f==g?-1:1)*w.sqrt(z((v*x-v*t*t-x*s*s)/(v*t*t+x*s*s))),A=y*c*t/d+(a+h)/2,C=y*-d*s/c+(b+i)/2,D=w.asin(((b-C)/d).toFixed(9)),E=w.asin(((i-C)/d).toFixed(9));D=a<A?B-D:D,E=h<A?B-E:E,D<0&&(D=B*2+D),E<0&&(E=B*2+E),g&&D>E&&(D=D-B*2),!g&&E>D&&(E=E-B*2)}else D=j[0],E=j[1],A=j[2],C=j[3];var F=E-D;if(z(F)>k){var G=E,H=h,I=i;E=D+k*(g&&E>D?1:-1),h=A+c*w.cos(E),i=C+d*w.sin(E),m=bC(h,i,c,d,e,0,g,H,I,[E,G,A,C])}F=E-D;var J=w.cos(D),K=w.sin(D),L=w.cos(E),M=w.sin(E),N=w.tan(F/4),O=4/3*c*N,P=4/3*d*N,Q=[a,b],R=[a+O*K,b-P*J],S=[h+O*M,i-P*L],T=[h,i];R[0]=2*Q[0]-R[0],R[1]=2*Q[1]-R[1];if(j)return[R,S,T][n](m);m=[R,S,T][n](m).join().split(",");var U=[];for(var V=0,W=m.length;V<W;V++)U[V]=V%2?p(m[V-1],m[V],l).y:p(m[V],m[V+1],l).x;return U},bD=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:A(j,3)*a+A(j,2)*3*i*c+j*3*i*i*e+A(i,3)*g,y:A(j,3)*b+A(j,2)*3*i*d+j*3*i*i*f+A(i,3)*h}},bE=bt(function(a,b,c,d,e,f,g,h){var i=e-2*c+a-(g-2*e+c),j=2*(c-a)-2*(e-c),k=a-c,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,o=[b,h],p=[a,g],q;z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bD(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bD(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bD(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bD(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bF=bt(function(a,b){var c=bz(a),d=b&&bz(b),e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bC[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bB(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bB(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bA(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bA(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bA(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bA(b.x,b.y,b.X,b.Y))}return a},h=function(a,b){if(a[b].length>7){a[b].shift();var e=a[b];while(e.length)a.splice(b++,0,["C"][n](e.splice(0,6)));a.splice(b,1),k=x(c.length,d&&d.length||0)}},i=function(a,b,e,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),e.bx=0,e.by=0,e.x=a[g][1],e.y=a[g][2],k=x(c.length,d&&d.length||0))};for(var j=0,k=x(c.length,d&&d.length||0);j<k;j++){c[j]=g(c[j],e),h(c,j),d&&(d[j]=g(d[j],f)),d&&h(d,j),i(c,d,e,f,j),i(d,c,f,e,j);var l=c[j],o=d&&d[j],p=l.length,q=d&&o.length;e.x=l[p-2],e.y=l[p-1],e.bx=Q(l[p-4])||e.x,e.by=Q(l[p-3])||e.y,f.bx=d&&(Q(o[q-4])||f.x),f.by=d&&(Q(o[q-3])||f.y),f.x=d&&o[q-2],f.y=d&&o[q-1]}return d?[c,d]:c},null,bx),bG=a._parseDots=bt(function(b){var c=[];for(var d=0,e=b.length;d<e;d++){var f={},g=b[d].match(/^([^:]*):?([\d\.]*)/);f.color=a.getRGB(g[1]);if(f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),c.push(f)}for(d=1,e=c.length-1;d<e;d++)if(!c[d].offset){var h=Q(c[d-1].offset||0),i=0;for(var j=d+1;j<e;j++)if(c[j].offset){i=c[j].offset;break}i||(i=100,j=e),i=Q(i);var k=(i-h)/(j-d+1);for(;d<j;d++)h+=k,c[d].offset=h+"%"}return c}),bH=a._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)},bI=a._tofront=function(a,b){b.top!==a&&(bH(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},bJ=a._toback=function(a,b){b.bottom!==a&&(bH(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},bK=a._insertafter=function(a,b,c){bH(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},bL=a._insertbefore=function(a,b,c){bH(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},bM=function(a){return function(){throw new Error("Raphaël: you are calling to method “"+a+"” of removed object")}},bN=a._extractTransform=function(b,c){if(c==null)return b._.transform;c=r(c).replace(/\.{3}|\u2026/g,b._.transform||p);var d=a.parseTransformString(c),e=0,f=0,g=0,h=1,i=1,j=b._,k=new bQ;j.transform=d||[];if(d)for(var l=0,m=d.length;l<m;l++){var n=d[l],o=n.length,q;n[0]=r(n[0]).toLowerCase(),n[0]=="t"&&o==3?k.translate(n[1],n[2]):n[0]=="r"?o==2?(q=q||b.getBBox(1),k.rotate(n[1],q.x+q.width/2,q.y+q.height/2),e+=n[1]):o==4&&(k.rotate(n[1],n[2],n[3]),e+=n[1]):n[0]=="s"?o==2||o==3?(q=q||b.getBBox(1),k.scale(n[1],n[o-1],q.x+q.width/2,q.y+q.height/2),h*=n[1],i*=n[o-1]):o==5&&(k.scale(n[1],n[2],n[3],n[4]),h*=n[1],i*=n[2]):n[0]=="m"&&o==7&&k.add(n[1],n[2],n[3],n[4],n[5],n[6]),j.dirtyT=1,b.matrix=k}b.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,h==1&&i==1&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1},bO=function(a){switch(a[0]){case"t":return["t",0,0];case"m":return["m",1,0,0,1,0,0];case"r":return a.length==4?["r",0,a[2],a[3]]:["r",0];case"s":return a.length==5?["s",1,1,a[3],a[4]]:a.length==3?["s",1,1]:["s",1]}},bP=a._equaliseTransform=function(b,c){c=r(c).replace(/\.{3}|\u2026/g,b),b=a.parseTransformString(b)||[],c=a.parseTransformString(c)||[];var d=x(b.length,c.length),e=[],f=[],g=0,h,i,j,k;for(;g<d;g++){j=b[g]||bO(c[g]),k=c[g]||bO(j);if(j[0]!=k[0]||j[0]=="r"&&(j[2]!=k[2]||j[3]!=k[3])||j[0]=="s"&&(j[3]!=k[3]||j[4]!=k[4]))return;e[g]=[],f[g]=[];for(h=0,i=x(j.length,k.length);h<i;h++)h in j&&(e[g][h]=j[h]),h in k&&(f[g][h]=k[h])}return{from:e,to:f}};a._getContainer=function(b,c,d,e){var f;f=e==null&&!a.is(b,"object")?h.doc.getElementById(b):b;if(f!=null){if(f.tagName)return c==null?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d};return{container:1,x:b,y:c,width:d,height:e}}},a.pathToRelative=by,a._engine={},a.path2curve=bF,a.matrix=function(a,b,c,d,e,f){return new bQ(a,b,c,d,e,f)},function(b){function d(a){var b=w.sqrt(c(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)}function c(a){return a[0]*a[0]+a[1]*a[1]}b.add=function(a,b,c,d,e,f){var g=[[],[],[]],h=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],i=[[a,c,e],[b,d,f],[0,0,1]],j,k,l,m;a&&a instanceof bQ&&(i=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]);for(j=0;j<3;j++)for(k=0;k<3;k++){m=0;for(l=0;l<3;l++)m+=h[j][l]*i[l][k];g[j][k]=m}this.a=g[0][0],this.b=g[1][0],this.c=g[0][1],this.d=g[1][1],this.e=g[0][2],this.f=g[1][2]},b.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new bQ(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},b.clone=function(){return new bQ(this.a,this.b,this.c,this.d,this.e,this.f)},b.translate=function(a,b){this.add(1,0,0,1,a,b)},b.scale=function(a,b,c,d){b==null&&(b=a),this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),this.add(1,0,0,1,-c,-d)},b.rotate=function(b,c,d){b=a.rad(b);var e=+w.cos(b).toFixed(9),f=+w.sin(b).toFixed(9);this.add(e,f,-f,e,c,d),this.add(1,0,0,1,-c,-d)},b.x=function(a,b){return a*this.a+b*this.c+this.e},b.y=function(a,b){return a*this.b+b*this.d+this.f},b.get=function(a){return+this[r.fromCharCode(97+a)].toFixed(4)},b.toString=function(){return a.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},b.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},b.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},b.split=function(){var b={};b.dx=this.e,b.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];b.scalex=w.sqrt(c(e[0])),d(e[0]),b.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*b.shear,e[1][1]-e[0][1]*b.shear],b.scaley=w.sqrt(c(e[1])),d(e[1]),b.shear/=b.scaley;var f=-e[0][1],g=e[1][1];g<0?(b.rotate=a.deg(w.acos(g)),f<0&&(b.rotate=360-b.rotate)):b.rotate=a.deg(w.asin(f)),b.isSimple=!+b.shear.toFixed(9)&&(b.scalex.toFixed(9)==b.scaley.toFixed(9)||!b.rotate),b.isSuperSimple=!+b.shear.toFixed(9)&&b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate,b.noRotation=!+b.shear.toFixed(9)&&!b.rotate;return b},b.toTransformString=function(){var a=this.split();return a.isSimple?"t"+[a.dx,a.dy]+"s"+[a.scalex,a.scaley,0,0]+"r"+[a.rotate,0,0]:"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(bQ.prototype);var bR=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);navigator.vendor=="Apple Computer, Inc."&&(bR&&bR[1]<4||navigator.platform.slice(0,2)=="iP")||navigator.vendor=="Google Inc."&&bR&&bR[1]<8?k.safari=function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:k.safari=bd;var bS=function(){this.returnValue=!1},bT=function(){return this.originalEvent.preventDefault()},bU=function(){this.cancelBubble=!0},bV=function(){return this.originalEvent.stopPropagation()},bW=function(){if(h.doc.addEventListener)return function(a,b,c,d){var e=o&&u[b]?u[b]:b,f=function(e){var f=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,i=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,j=e.clientX+i,k=e.clientY+f;if(o&&u[g](b))for(var l=0,m=e.targetTouches&&e.targetTouches.length;l<m;l++)if(e.targetTouches[l].target==a){var n=e;e=e.targetTouches[l],e.originalEvent=n,e.preventDefault=bT,e.stopPropagation=bV;break}return c.call(d,e,j,k)};a.addEventListener(e,f,!1);return function(){a.removeEventListener(e,f,!1);return!0}};if(h.doc.attachEvent)return function(a,b,c,d){var e=function(a){a=a||h.win.event;var b=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;a.preventDefault=a.preventDefault||bS,a.stopPropagation=a.stopPropagation||bU;return c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){a.detachEvent("on"+b,e);return!0};return f}}(),bX=[],bY=function(a){var b=a.clientX,c=a.clientY,d=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f,g=bX.length;while(g--){f=bX[g];if(o){var i=a.touches.length,j;while(i--){j=a.touches[i];if(j.identifier==f.el._drag.id){b=j.clientX,c=j.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}}else a.preventDefault();var k=f.el.node,l,m=k.nextSibling,n=k.parentNode,p=k.style.display;h.win.opera&&n.removeChild(k),k.style.display="none",l=f.el.paper.getElementByPoint(b,c),k.style.display=p,h.win.opera&&(m?n.insertBefore(k,m):n.appendChild(k)),l&&cu("drag.over."+f.el.id,f.el,l),b+=e,c+=d,cu("drag.move."+f.el.id,f.move_scope||f.el,b-f.el._drag.x,c-f.el._drag.y,b,c,a)}},bZ=function(b){a.unmousemove(bY).unmouseup(bZ);var c=bX.length,d;while(c--)d=bX[c],d.el._drag={},cu("drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,b);bX=[]},b$=a.el={};for(var b_=t.length;b_--;)(function(b){a[b]=b$[b]=function(c,d){a.is(c,"function")&&(this.events=this.events||[],this.events.push({name:b,f:c,unbind:bW(this.shape||this.node||h.doc,b,c,d||this)}));return this},a["un"+b]=b$["un"+b]=function(a){var c=this.events,d=c.length;while(d--)if(c[d].name==b&&c[d].f==a){c[d].unbind(),c.splice(d,1),!c.length&&delete this.events;return this}return this}})(t[b_]);b$.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},b$.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)},b$.drag=function(b,c,d,e,f,g){function i(i){(i.originalEvent||i).preventDefault();var j=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,k=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft;this._drag.x=i.clientX+k,this._drag.y=i.clientY+j,this._drag.id=i.identifier,!bX.length&&a.mousemove(bY).mouseup(bZ),bX.push({el:this,move_scope:e,start_scope:f,end_scope:g}),c&&cu.on("drag.start."+this.id,c),b&&cu.on("drag.move."+this.id,b),d&&cu.on("drag.end."+this.id,d),cu("drag.start."+this.id,f||e||this,i.clientX+k,i.clientY+j,i)}this._drag={},this.mousedown(i);return this},b$.onDragOver=function(a){a?cu.on("drag.over."+this.id,a):cu.unbind("drag.over."+this.id)},b$.undrag=function(){var b=bX.length;while(b--)bX[b].el==this&&(a.unmousedown(bX[b].start),bX.splice(b++,1),cu.unbind("drag.*."+this.id));!bX.length&&a.unmousemove(bY).unmouseup(bZ)},k.circle=function(b,c,d){var e=a._engine.circle(this,b||0,c||0,d||0);this.__set__&&this.__set__.push(e);return e},k.rect=function(b,c,d,e,f){var g=a._engine.rect(this,b||0,c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.ellipse=function(b,c,d,e){var f=a._engine.ellipse(this,b||0,c||0,d||0,e||0);this.__set__&&this.__set__.push(f);return f},k.path=function(b){b&&!a.is(b,D)&&!a.is(b[0],E)&&(b+=p);var c=a._engine.path(a.format[m](a,arguments),this);this.__set__&&this.__set__.push(c);return c},k.image=function(b,c,d,e,f){var g=a._engine.image(this,b||"about:blank",c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.text=function(b,c,d){var e=a._engine.text(this,b||0,c||0,r(d));this.__set__&&this.__set__.push(e);return e},k.set=function(b){!a.is(b,"array")&&(b=Array.prototype.splice.call(arguments,0,arguments.length));var c=new cr(b);this.__set__&&this.__set__.push(c);return c},k.setStart=function(a){this.__set__=a||this.set()},k.setFinish=function(a){var b=this.__set__;delete this.__set__;return b},k.setSize=a._engine.setSize,k.setViewBox=a._engine.setViewBox,k.top=k.bottom=null,k.raphael=a;var ca=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,i=b.top+(h.win.pageYOffset||e.scrollTop||d.scrollTop)-f,j=b.left+(h.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:i,x:j}};k.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=h.doc.elementFromPoint(a,b);if(h.win.opera&&e.tagName=="svg"){var f=ca(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var i=d.getIntersectionList(g,null);i.length&&(e=i[i.length-1])}if(!e)return null;while(e.parentNode&&e!=d.parentNode&&!e.raphael)e=e.parentNode;e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null;return e},k.getById=function(a){var b=this.bottom;while(b){if(b.id==a)return b;b=b.next}return null},k.forEach=function(a,b){var c=this.bottom;while(c){if(a.call(b,c)===!1)return this;c=c.next}return this},b$.getBBox=function(a){if(this.removed)return{};var b=this._;if(a){if(b.dirty||!b.bboxwt)this.realPath=bh[this.type](this),b.bboxwt=bw(this.realPath),b.bboxwt.toString=cc,b.dirty=0;return b.bboxwt}if(b.dirty||b.dirtyT||!b.bbox){if(b.dirty||!this.realPath)b.bboxwt=0,this.realPath=bh[this.type](this);b.bbox=bw(bi(this.realPath,this.matrix)),b.bbox.toString=cc,b.dirty=b.dirtyT=0}return b.bbox},b$.clone=function(){if(this.removed)return null;return this.paper[this.type]().attr(this.attr())},b$.glow=function(a){if(this.type=="text")return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||bh[this.type](this);f=this.matrix?bi(f,this.matrix):f;for(var g=1;g<c+1;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cd={},ce=function(b,c,d,e,f,g,h,i,j){var k=0,l=100,m=[b,c,d,e,f,g,h,i].join(),n=cd[m],o,p;!n&&(cd[m]=n={data:[]}),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(function(){delete cd[m]},2e3);if(j!=null&&!n.precision){var q=ce(b,c,d,e,f,g,h,i);n.precision=~~q*10,n.data=[]}l=n.precision||l;for(var r=0;r<l+1;r++){n.data[r*l]?p=n.data[r*l]:(p=a.findDotsAtSegment(b,c,d,e,f,g,h,i,r/l),n.data[r*l]=p),r&&(k+=A(A(o.x-p.x,2)+A(o.y-p.y,2),.5));if(j!=null&&k>=j)return p;o=p}if(j==null)return k},cf=function(b,c){return function(d,e,f){d=bF(d);var g,h,i,j,k="",l={},m,n=0;for(var o=0,p=d.length;o<p;o++){i=d[o];if(i[0]=="M")g=+i[1],h=+i[2];else{j=ce(g,h,i[1],i[2],i[3],i[4],i[5],i[6]);if(n+j>e){if(c&&!l.start){m=ce(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=ce(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[1],i[2],i[3],i[4],i[5],i[6],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cg=cf(1),ch=cf(),ci=cf(0,1);a.getTotalLength=cg,a.getPointAtLength=ch,a.getSubpath=function(a,b,c){if(z(this.getTotalLength(a)-c)<1e-6)return ci(a,b).end;var d=ci(a,c,1);return b?ci(d,b).end:d},b$.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cg(this.attrs.path)}},b$.getPointAtLength=function(a){if(this.type=="path")return ch(this.attrs.path,a)},b$.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cj=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cj.easeIn=cj["ease-in"]=cj["<"],cj.easeOut=cj["ease-out"]=cj[">"],cj.easeInOut=cj["ease-in-out"]=cj["<>"],cj["back-in"]=cj.backIn,cj["back-out"]=cj.backOut;var ck=[],cl=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cm=function(){var b=+(new Date),c=0;for(;c<ck.length;c++){var d=ck[c];if(d.el.removed||d.paused)continue;var e=b-d.start,f=d.ms,h=d.easing,i=d.from,j=d.diff,k=d.to,l=d.t,m=d.el,n={},o;d.initstatus?(e=(d.initstatus*d.anim.top-d.prev)/(d.percent-d.prev)*f,d.status=d.initstatus,delete d.initstatus,d.stop&&ck.splice(c--,1)):d.status=(d.prev+(d.percent-d.prev)*(e/f))/d.anim.top;if(e<0)continue;if(e<f){var p=h(e/f);for(var r in i)if(i[g](r)){switch(V[r]){case C:o=+i[r]+p*f*j[r];break;case"colour":o="rgb("+[cn(O(i[r].r+p*f*j[r].r)),cn(O(i[r].g+p*f*j[r].g)),cn(O(i[r].b+p*f*j[r].b))].join(",")+")";break;case"path":o=[];for(var s=0,t=i[r].length;s<t;s++){o[s]=[i[r][s][0]];for(var u=1,v=i[r][s].length;u<v;u++)o[s][u]=+i[r][s][u]+p*f*j[r][s][u];o[s]=o[s].join(q)}o=o.join(q);break;case"transform":if(j[r].real){o=[];for(s=0,t=i[r].length;s<t;s++){o[s]=[i[r][s][0]];for(u=1,v=i[r][s].length;u<v;u++)o[s][u]=i[r][s][u]+p*f*j[r][s][u]}}else{var w=function(a){return+i[r][a]+p*f*j[r][a]};o=[["m",w(0),w(1),w(2),w(3),w(4),w(5)]]}break;case"csv":if(r=="clip-rect"){o=[],s=4;while(s--)o[s]=+i[r][s]+p*f*j[r][s]}break;default:var x=[].concat(i[r]);o=[],s=m.paper.customAttributes[r].length;while(s--)o[s]=+x[s]+p*f*j[r][s]}n[r]=o}m.attr(n),function(a,b,c){setTimeout(function(){cu("anim.frame."+a,b,c)})}(m.id,m,d.anim)}else(function(b,c,d){setTimeout(function(){cu("anim.frame."+c.id,c,d),cu("anim.finish."+c.id,c,d),a.is(b,"function")&&b.call(c)})})(d.callback,m,d.anim),m.attr(k),ck.splice(c--,1),d.repeat>1&&!d.next&&cq(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1),d.next&&!d.stop&&cq(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}a.svg&&m&&m.paper&&m.paper.safari(),ck.length&&cl(cm)},cn=function(a){return a>255?255:a<0?0:a};b$.animateWith=function(a,b,c,d,e){this.animate(b,c,d,e);var f,g;for(var h=0,i=ck.length;h<i;h++)g=ck[h],g.el.id==a.id?f=g.timestamp:g.el.id==this.id&&(g.start=f);return this.animate(b,c,d,e)},b$.onAnimation=function(a){a?cu.on("anim.frame."+this.id,a):cu.unbind("anim.frame."+this.id);return this},cp.prototype.delay=function(a){var b=new cp(this.anim,this.ms);b.times=this.times,b.del=+a||0;return b},cp.prototype.repeat=function(a){var b=new cp(this.anim,this.ms);b.del=this.del,b.times=w.floor(x(a,0))||1;return b},a.animation=function(b,c,d,e){if(a.is(d,"function")||!d)e=e||d||null,d=null;b=Object(b),c=+c||0;var f={},h,i;for(i in b)b[g](i)&&Q(i)!=i&&(h=!0,f[i]=b[i]);if(!h)return new cp(b,c);d&&(f.easing=d),e&&(f.callback=e);return new cp({100:f},c)},b$.animate=function(b,c,d,e){var f=this;if(f.removed){e&&e.call(f);return f}var g=b instanceof cp?b:a.animation(b,c,d,e);cq(g,f,g.percents[0],null,f.attr());return f},b$.setTime=function(a,b){a&&b!=null&&this.status(a,y(b,a.ms)/a.ms);return this},b$.status=function(a,b){var c=[],d=0,e,f;if(b!=null){cq(a,this,-1,y(b,1));return this}e=ck.length;for(;d<e;d++){f=ck[d];if(f.el.id==this.id&&(!a||f.anim==a)){if(a)return f.status;c.push({anim:f.anim,status:f.status})}}if(a)return 0;return c},b$.pause=function(a){for(var b=0;b<ck.length;b++)ck[b].el.id==this.id&&(!a||ck[b].anim==a)&&cu("anim.pause."+this.id,this,ck[b].anim)!==!1&&(ck[b].paused=!0);return this},b$.resume=function(a){for(var b=0;b<ck.length;b++)if(ck[b].el.id==this.id&&(!a||ck[b].anim==a)){var c=ck[b];cu("anim.resume."+this.id,this,c.anim)!==!1&&(delete c.paused,this.status(c.anim,c.status))}return this},b$.stop=function(a){for(var b=0;b<ck.length;b++)ck[b].el.id==this.id&&(!a||ck[b].anim==a)&&cu("anim.stop."+this.id,this,ck[b].anim)!==!1&&ck.splice(b--,1);return this},b$.toString=function(){return"Raphaël’s object"};var cr=function(a){this.items=[],this.length=0,this.type="set";if(a)for(var b=0,c=a.length;b<c;b++)a[b]&&(a[b].constructor==b$.constructor||a[b].constructor==cr)&&(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},cs=cr.prototype;cs.push=function(){var a,b;for(var c=0,d=arguments.length;c<d;c++)a=arguments[c],a&&(a.constructor==b$.constructor||a.constructor==cr)&&(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},cs.pop=function(){this.length&&delete this[this.length--];return this.items.pop()},cs.forEach=function(a,b){for(var c=0,d=this.items.length;c<d;c++)if(a.call(b,this.items[c])===!1)return this;return this};for(var ct in b$)b$[g](ct)&&(cs[ct]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][m](c,b)})}}(ct));cs.attr=function(b,c){if(b&&a.is(b,E)&&a.is(b[0],"object"))for(var d=0,e=b.length;d<e;d++)this.items[d].attr(b[d]);else for(var f=0,g=this.items.length;f<g;f++)this.items[f].attr(b,c);return this},cs.clear=function(){while(this.length)this.pop()},cs.animate=function(b,c,d,e){(a.is(d,"function")||!d)&&(e=d||null);var f=this.items.length,g=f,h,i=this,j;if(!f)return this;e&&(j=function(){!--f&&e.call(i)}),d=a.is(d,D)?d:j;var k=b instanceof cp?b:a.animation(b,c,d,j);h=this.items[--g].animate(k);while(g--)this.items[g]&&!this.items[g].removed&&this.items[g].animateWith(h,k);return this},cs.insertAfter=function(a){var b=this.items.length;while(b--)this.items[b].insertAfter(a);return this},cs.getBBox=function(){var a=[],b=[],c=[],d=[];for(var e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}a=y[m](0,a),b=y[m](0,b);return{x:a,y:b,width:x[m](0,c)-a,height:x[m](0,d)-b}},cs.clone=function(a){a=new cr;for(var b=0,c=this.items.length;b<c;b++)a.push(this.items[b].clone());return a},cs.toString=function(){return"Raphaël‘s set"},a.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[g](d)&&(b.face[d]=a.face[d]);this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=R(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[g](e)){var f=a.glyphs[e];b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"};if(f.k)for(var h in f.k)f[g](h)&&(b.glyphs[e].k[h]=f.k[h])}}return a},k.getFont=function(b,c,d,e){e=e||"normal",d=d||"normal",c=+c||{normal:400,bold:700,lighter:300,bolder:800}[c]||400;if(!!a.fonts){var f=a.fonts[b];if(!f){var h=new RegExp("(^|\\s)"+b.replace(/[^\w\d\s+!~.:_-]/g,p)+"(\\s|$)","i");for(var i in a.fonts)if(a.fonts[g](i)&&h.test(i)){f=a.fonts[i];break}}var j;if(f)for(var k=0,l=f.length;k<l;k++){j=f[k];if(j.face["font-weight"]==c&&(j.face["font-style"]==d||!j.face["font-style"])&&j.face["font-stretch"]==e)break}return j}},k.print=function(b,d,e,f,g,h,i){h=h||"middle",i=x(y(i||0,1),-1);var j=this.set(),k=r(e).split(p),l=0,m=p,n;a.is(f,e)&&(f=this.getFont(f));if(f){n=(g||16)/f.face["units-per-em"];var o=f.face.bbox.split(c),q=+o[0],s=+o[1]+(h=="baseline"?o[3]-o[1]+ +f.face.descent:(o[3]-o[1])/2);for(var t=0,u=k.length;t<u;t++){var v=t&&f.glyphs[k[t-1]]||{},w=f.glyphs[k[t]];l+=t?(v.w||f.w)+(v.k&&v.k[k[t]]||0)+f.w*i:0,w&&w.d&&j.push(this.path(w.d).attr({fill:"#000",stroke:"none",transform:[["t",l*n,0]]}))}j.transform(["...s",n,n,q,s,"t",(b-q)/n,(d-s)/n])}return j},a.format=function(b,c){var d=a.is(c,E)?[0][n](c):arguments;b&&a.is(b,D)&&d.length-1&&(b=b.replace(e,function(a,b){return d[++b]==null?p:d[b]}));return b||p},a.ninja=function(){i.was?h.win.Raphael=i.is:delete Raphael;return a},a.st=cs,function(b,c,d){function e(){/in/.test(b.readyState)?setTimeout(e,9):a.eve("DOMload")}b.readyState==null&&b.addEventListener&&(b.addEventListener(c,d=function(){b.removeEventListener(c,d,!1),b.readyState="complete"},!1),b.readyState="loading"),e()}(document,"DOMContentLoaded"),i.was?h.win.Raphael=a:Raphael=a;var cu=a.eve=function(){var a="0.2.3",b="hasOwnProperty",c=/[\.\/]/,d="*",e=function(){},f=function(a,b){return a-b},g,h={n:{}},i=function(a,b){var c=h,d=Array.prototype.slice.call(arguments,2),e=i.listeners(a),j=0,k=!1,l,m=[],n={},o=[];g=a;for(var p=0,q=e.length;p<q;p++)"zIndex"in e[p]&&(m.push(e[p].zIndex),e[p].zIndex<0&&(n[e[p].zIndex]=e[p]));m.sort(f);while(m[j]<0){l=n[m[j++]];if(l.apply(b,d)===k)return k}for(p=0;p<q;p++){l=e[p];if("zIndex"in l)if(l.zIndex==m[j]){if(l.apply(b,d)===k)return k;do{j++,l=n[m[j]];if(l&&l.apply(b,d)===k)return k}while(l)}else n[l.zIndex]=l;else if(l.apply(b,d)===k)return k}};i.listeners=function(a){var b=a.split(c),e=h,f,g,i,j,k,l,m,n,o=[e],p=[];for(j=0,k=b.length;j<k;j++){n=[];for(l=0,m=o.length;l<m;l++){e=o[l].n,g=[e[b[j]],e[d]],i=2;while(i--)f=g[i],f&&(n.push(f),p=p.concat(f.f||[]))}o=n}return p},i.on=function(a,b){var d=a.split(c),f=h;for(var g=0,i=d.length;g<i;g++)f=f.n,!f[d[g]]&&(f[d[g]]={n:{}}),f=f[d[g]];f.f=f.f||[];for(g=0,i=f.f.length;g<i;g++)if(f.f[g]==b)return e;f.f.push(b);return function(a){+a==+a&&(b.zIndex=+a)}},i.nt=function(a){if(a)return(new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)")).test(g);return g},i.unbind=function(a,e){var f=a.split(c),g,i,j,k=[h];for(var l=0,m=f.length;l<m;l++)for(var n=0;n<k.length;n+=j.length-2){j=[n,1],g=k[n].n;if(f[l]!=d)g[f[l]]&&j.push(g[f[l]]);else for(i in g)g[b](i)&&j.push(g[i]);k.splice.apply(k,j)}for(l=0,m=k.length;l<m;l++){g=k[l];while(g.n){if(e){if(g.f){for(l=0,m=g.f.length;l<m;l++)if(g.f[l]==e){g.f.splice(l,1);break}!g.f.length&&delete g.f}for(i in g.n)if(g.n[b](i)&&g.n[i].f){var o=g.n[i].f;for(l=0,m=o.length;l<m;l++)if(o[l]==e){o.splice(l,1);break}!o.length&&delete g.n[i].f}}else{delete g.f;for(i in g.n)g.n[b](i)&&g.n[i].f&&delete g.n[i].f}g=g.n}}},i.version=a,i.toString=function(){return"You are running Eve "+a};return i}();cu.on("DOMload",function(){b=!0})})(),window.Raphael.svg&&function(a){var b="hasOwnProperty",c=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=a.eve,l="",m="http://www.w3.org/1999/xlink",n={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},o={};a.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var p=function(d,e){if(e){typeof d=="string"&&(d=p(d));for(var f in e)e[b](f)&&(f.substring(0,6)=="xlink:"?d.setAttributeNS(m,f.substring(6),c(e[f])):d.setAttribute(f,c(e[f])))}else d=a._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},q={},r=/^url\(#(.*)\)$/,s=function(b,c){var d=b.getAttribute("fill");d=d&&d.match(r),d&&!--q[d[1]]&&(delete q[d[1]],c.defs.removeChild(a._g.doc.getElementById(d[1])))},t=function(b,e){var j="linear",k=b.id+e,m=.5,n=.5,o=b.node,q=b.paper,r=o.style,s=a._g.doc.getElementById(k);if(!s){e=c(e).replace(a._radial_gradient,function(a,b,c){j="radial";if(b&&c){m=d(b),n=d(c);var e=(n>.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;b.gradient&&(q.defs.removeChild(b.gradient),delete b.gradient),k=k.replace(/[\(\)\s,\xb0#]/g,"-"),s=p(j+"Gradient",{id:k}),b.gradient=s,p(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),q.defs.appendChild(s);for(var x=0,y=w.length;x<y;x++)s.appendChild(p("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}p(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1;return 1},u=function(a){var b=a.getBBox(1);p(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},v=function(d,e,f){if(d.type=="path"){var g=c(e).toLowerCase().split("-"),h=d.paper,i=f?"end":"start",j=d.node,k=d.attrs,l=k["stroke-width"],m=g.length,q="classic",r,s,t,u,v,w=3,x=3,y=5;while(m--)switch(g[m]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":q=g[m];break;case"wide":x=5;break;case"narrow":x=2;break;case"long":w=5;break;case"short":w=2}q=="open"?(w+=2,x+=2,y+=2,t=1,u=f?4:1,v={fill:"none",stroke:k.stroke}):(u=t=w/2,v={fill:k.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&o[d._.arrows.endPath]--,d._.arrows.endMarker&&o[d._.arrows.endMarker]--):(d._.arrows.startPath&&o[d._.arrows.startPath]--,d._.arrows.startMarker&&o[d._.arrows.startMarker]--):d._.arrows={};if(q!="none"){var z="raphael-marker-"+q,A="raphael-marker-"+i+q+w+x;a._g.doc.getElementById(z)?o[z]++:(h.defs.appendChild(p(p("path"),{"stroke-linecap":"round",d:n[q],id:z})),o[z]=1);var B=a._g.doc.getElementById(A),C;B?(o[A]++,C=B.getElementsByTagName("use")[0]):(B=p(p("marker"),{id:A,markerHeight:x,markerWidth:w,orient:"auto",refX:u,refY:x/2}),C=p(p("use"),{"xlink:href":"#"+z,transform:(f?" rotate(180 "+w/2+" "+x/2+") ":S)+"scale("+w/y+","+x/y+")","stroke-width":1/((w/y+x/y)/2)}),B.appendChild(C),h.defs.appendChild(B),o[A]=1),p(C,v);var D=t*(q!="diamond"&&q!="oval");f?(r=d._.arrows.startdx*l||0,s=a.getTotalLength(k.path)-D*l):(r=D*l,s=a.getTotalLength(k.path)-(d._.arrows.enddx*l||0)),v={},v["marker-"+i]="url(#"+A+")";if(s||r)v.d=Raphael.getSubpath(k.path,r,s);p(j,v),d._.arrows[i+"Path"]=z,d._.arrows[i+"Marker"]=A,d._.arrows[i+"dx"]=D,d._.arrows[i+"Type"]=q,d._.arrows[i+"String"]=e}else f?(r=d._.arrows.startdx*l||0,s=a.getTotalLength(k.path)-r):(r=0,s=a.getTotalLength(k.path)-(d._.arrows.enddx*l||0)),d._.arrows[i+"Path"]&&p(j,{d:Raphael.getSubpath(k.path,r,s)}),delete d._.arrows[i+"Path"],delete d._.arrows[i+"Marker"],delete d._.arrows[i+"dx"],delete d._.arrows[i+"Type"],delete d._.arrows[i+"String"];for(v in o)if(o[b](v)&&!o[v]){var E=a._g.doc.getElementById(v);E&&E.parentNode.removeChild(E)}}},w=function(d,f){var i={"":[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]},k=d.node,n=d.attrs,o=function(a,b){b=i[c(b).toLowerCase()];if(b){var d=a.attrs["stroke-width"]||"1",e={round:d,square:d,butt:0}[a.attrs["stroke-linecap"]||f["stroke-linecap"]]||0,g=[],h=b.length;while(h--)g[h]=b[h]*d+(h%2?1:-1)*e;p(k,{"stroke-dasharray":g.join(",")})}};for(var q in f)if(f[b](q)){if(!a._availableAttrs[b](q))continue;var r=f[q];n[q]=r;switch(q){case"blur":d.blur(r);break;case"href":case"title":case"target":var s=k.parentNode;if(s.tagName.toLowerCase()!="a"){var w=p("a");s.insertBefore(w,k),w.appendChild(k),s=w}q=="target"&&r=="blank"?s.setAttributeNS(m,"show","new"):s.setAttributeNS(m,q,r);break;case"cursor":k.style.cursor=r;break;case"transform":d.transform(r);break;case"arrow-start":v(d,r);break;case"arrow-end":v(d,r,1);break;case"clip-rect":var x=c(r).split(j);if(x.length==4){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var z=p("clipPath"),A=p("rect");z.id=a._createUUID(),p(A,{x:x[0],y:x[1],width:x[2],height:x[3]}),z.appendChild(A),d.paper.defs.appendChild(z),p(k,{"clip-path":"url(#"+z.id+")"}),d.clip=A}if(!r){var B=a._g.doc.getElementById(k.getAttribute("clip-path").replace(/(^url\(#|\)$)/g,l));B&&B.parentNode.removeChild(B),p(k,{"clip-path":l}),delete d.clip}break;case"path":d.type=="path"&&(p(k,{d:r?n.path=a._pathToAbsolute(r):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&v(d,d._.arrows.startString),"endString"in d._.arrows&&v(d,d._.arrows.endString,1)));break;case"width":k.setAttribute(q,r),d._.dirty=1;if(n.fx)q="x",r=n.x;else break;case"x":n.fx&&(r=-n.x-(n.width||0));case"rx":if(q=="rx"&&d.type=="rect")break;case"cx":k.setAttribute(q,r),d.pattern&&u(d),d._.dirty=1;break;case"height":k.setAttribute(q,r),d._.dirty=1;if(n.fy)q="y",r=n.y;else break;case"y":n.fy&&(r=-n.y-(n.height||0));case"ry":if(q=="ry"&&d.type=="rect")break;case"cy":k.setAttribute(q,r),d.pattern&&u(d),d._.dirty=1;break;case"r":d.type=="rect"?p(k,{rx:r,ry:r}):k.setAttribute(q,r),d._.dirty=1;break;case"src":d.type=="image"&&k.setAttributeNS(m,"href",r);break;case"stroke-width":if(d._.sx!=1||d._.sy!=1)r/=g(h(d._.sx),h(d._.sy))||1;d.paper._vbSize&&(r*=d.paper._vbSize),k.setAttribute(q,r),n["stroke-dasharray"]&&o(d,n["stroke-dasharray"]),d._.arrows&&("startString"in d._.arrows&&v(d,d._.arrows.startString),"endString"in d._.arrows&&v(d,d._.arrows.endString,1));break;case"stroke-dasharray":o(d,r);break;case"fill":var C=c(r).match(a._ISURL);if(C){z=p("pattern");var D=p("image");z.id=a._createUUID(),p(z,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),p(D,{x:0,y:0,"xlink:href":C[1]}),z.appendChild(D),function(b){a._preload(C[1],function(){var a=this.offsetWidth,c=this.offsetHeight;p(b,{width:a,height:c}),p(D,{width:a,height:c}),d.paper.safari()})}(z),d.paper.defs.appendChild(z),k.style.fill="url(#"+z.id+")",p(k,{fill:"url(#"+z.id+")"}),d.pattern=z,d.pattern&&u(d);break}var F=a.getRGB(r);if(!F.error)delete f.gradient,delete n.gradient,!a.is(n.opacity,"undefined")&&a.is(f.opacity,"undefined")&&p(k,{opacity:n.opacity}),!a.is(n["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&p(k,{"fill-opacity":n["fill-opacity"]});else if((d.type=="circle"||d.type=="ellipse"||c(r).charAt()!="r")&&t(d,r)){if("opacity"in n||"fill-opacity"in n){var G=a._g.doc.getElementById(k.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(G){var H=G.getElementsByTagName("stop");p(H[H.length-1],{"stop-opacity":("opacity"in n?n.opacity:1)*("fill-opacity"in n?n["fill-opacity"]:1)})}}n.gradient=r,n.fill="none";break}F[b]("opacity")&&p(k,{"fill-opacity":F.opacity>1?F.opacity/100:F.opacity});case"stroke":F=a.getRGB(r),k.setAttribute(q,F.hex),q=="stroke"&&F[b]("opacity")&&p(k,{"stroke-opacity":F.opacity>1?F.opacity/100:F.opacity}),q=="stroke"&&d._.arrows&&("startString"in d._.arrows&&v(d,d._.arrows.startString),"endString"in d._.arrows&&v(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(r).charAt()!="r")&&t(d,r);break;case"opacity":n.gradient&&!n[b]("stroke-opacity")&&p(k,{"stroke-opacity":r>1?r/100:r});case"fill-opacity":if(n.gradient){G=a._g.doc.getElementById(k.getAttribute("fill").replace(/^url\(#|\)$/g,l)),G&&(H=G.getElementsByTagName("stop"),p(H[H.length-1],{"stop-opacity":r}));break};default:q=="font-size"&&(r=e(r,10)+"px");var I=q.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});k.style[I]=r,d._.dirty=1,k.setAttribute(q,r)}}y(d,f)},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n<o;n++)m=p("tspan"),n&&p(m,{dy:i*x,x:g.x}),m.appendChild(a._g.doc.createTextNode(j[n])),h.appendChild(m),k[n]=m}else{k=h.getElementsByTagName("tspan");for(n=0,o=k.length;n<o;n++)n?p(k[n],{dy:i*x,x:g.x}):p(k[0],{dy:0})}p(h,{x:g.x,y:g.y}),d._.dirty=1;var q=d._getBBox(),r=g.y-(q.y+q.height/2);r&&a.is(r,"finite")&&p(k[0],{dy:r})}},z=function(b,c){var d=0,e=0;this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.matrix=a.matrix(),this.realPath=null,this.paper=c,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},A=a.el;z.prototype=A,A.constructor=z,a._engine.path=function(a,b){var c=p("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);d.type="path",w(d,{fill:"none",stroke:"#000",path:a});return d},A.rotate=function(a,b,e){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this.transform(this._.transform.concat([["r",a,b,e]]));return this},A.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]]));return this},A.translate=function(a,b){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this.transform(this._.transform.concat([["t",a,b]]));return this},A.transform=function(c){var d=this._;if(c==null)return d.transform;a._extractTransform(this,c),this.clip&&p(this.clip,{transform:this.matrix.invert()}),this.pattern&&u(this),this.node&&p(this.node,{transform:this.matrix});if(d.sx!=1||d.sy!=1){var e=this.attrs[b]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){!this.removed&&this.paper.safari(this.node.style.display="none");return this},A.show=function(){!this.removed&&this.paper.safari(this.node.style.display="");return this},A.remove=function(){if(!this.removed){k.unbind("*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node);for(var b in this)delete this[b];this.removed=!0}},A._getBBox=function(){if(this.node.style.display=="none"){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}a&&this.hide();return b},A.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill=="none"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,"string")){if(c=="fill"&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;if(c=="transform")return this._.transform;var g=c.split(j),h={};for(var i=0,k=g.length;i<k;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return k-1?h:h[g[0]]}if(d==null&&a.is(c,"array")){h={};for(i=0,k=c.length;i<k;i++)h[c[i]]=this.attr(c[i]);return h}if(d!=null){var l={};l[c]=d}else c!=null&&a.is(c,"object")&&(l=c);for(var m in this.paper.customAttributes)if(this.paper.customAttributes[b](m)&&l[b](m)&&a.is(this.paper.customAttributes[m],"function")){var n=this.paper.customAttributes[m].apply(this,[].concat(l[m]));this.attrs[m]=l[m];for(var o in n)n[b](o)&&(l[o]=n[o])}w(this,l);return this},A.toFront=function(){if(this.removed)return this;this.node.parentNode.appendChild(this.node);var b=this.paper;b.top!=this&&a._tofront(this,b);return this},A.toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper);var b=this.paper}return this},A.insertAfter=function(b){if(this.removed)return this;var c=b.node||b[b.length-1].node;c.nextSibling?c.parentNode.insertBefore(this.node,c.nextSibling):c.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},A.insertBefore=function(b){if(this.removed)return this;var c=b.node||b[0].node;c.parentNode.insertBefore(this.node,c),a._insertbefore(this,b,this.paper);return this},A.blur=function(b){var c=this;if(+b!==0){var d=p("filter"),e=p("feGaussianBlur");c.attrs.blur=b,d.id=a._createUUID(),p(e,{stdDeviation:+b||1.5}),d.appendChild(e),c.paper.defs.appendChild(d),c._blur=d,p(c.node,{filter:"url(#"+d.id+")"})}else c._blur&&(c._blur.parentNode.removeChild(c._blur),delete c._blur,delete c.attrs.blur),c.node.removeAttribute("filter")},a._engine.circle=function(a,b,c,d){var e=p("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",p(e,f.attrs);return f},a._engine.rect=function(a,b,c,d,e,f){var g=p("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",p(g,h.attrs);return h},a._engine.ellipse=function(a,b,c,d,e){var f=p("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",p(f,g.attrs);return g},a._engine.image=function(a,b,c,d,e,f){var g=p("image");p(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(m,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image";return h},a._engine.text=function(b,c,d,e){var f=p("text");b.canvas&&b.canvas.appendChild(f);var g=new z(f,b);g.attrs={x:c,y:d,"text-anchor":"middle",text:e,font:a._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs);return g},a._engine.setSize=function(a,b){this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox);return this},a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,g=b.height;if(!c)throw new Error("SVG container not found.");var h=p("svg"),i="overflow:hidden;",j;d=d||0,e=e||0,f=f||512,g=g||342,p(h,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),c==1?(h.style.cssText=i+"position:absolute;left:"+d+"px;top:"+e+"px",a._g.doc.body.appendChild(h),j=1):(h.style.cssText=i+"position:relative",c.firstChild?c.insertBefore(h,c.firstChild):c.appendChild(h)),c=new a._Paper,c.width=f,c.height=g,c.canvas=h,c.clear(),c._left=c._top=0,j&&(c.renderfix=function(){}),c.renderfix();return c},a._engine.setViewBox=function(a,b,c,d,e){k("setViewBox",this,this._viewBox,[a,b,c,d,e]);var f=g(c/this.width,d/this.height),h=this.top,i=e?"meet":"xMinYMin",j,l;a==null?(this._vbSize&&(f=1),delete this._vbSize,j="0 0 "+this.width+S+this.height):(this._vbSize=f,j=a+S+b+S+c+S+d),p(this.canvas,{viewBox:j,preserveAspectRatio:i});while(f&&h)l="stroke-width"in h.attrs?h.attrs["stroke-width"]:1,h.attr({"stroke-width":l}),h._.dirty=1,h._.dirtyT=1,h=h.prev;this._viewBox=[a,b,c,d,!!e];return this},a.prototype.renderfix=function(){var a=this.canvas,b=a.style,c=a.getScreenCTM(),d=-c.e%1,e=-c.f%1;if(d||e)d&&(this._left=(this._left+d)%1,b.left=this._left+"px"),e&&(this._top=(this._top+e)%1,b.top=this._top+"px")},a.prototype.clear=function(){a.eve("clear",this);var b=this.canvas;while(b.firstChild)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=p("desc")).appendChild(a._g.doc.createTextNode("Created with Raphaël "+a.version)),b.appendChild(this.desc),b.appendChild(this.defs=p("defs"))},a.prototype.remove=function(){k("remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=removed(a)};var B=a.st;for(var C in A)A[b](C)&&!B[b](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}(window.Raphael),window.Raphael.vml&&function(a){var b="hasOwnProperty",c=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=a.eve,m=" ",n="",o={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},p=/([clmz]),?([^clmz]*)/gi,q=/ progid:\S+Blur\([^\)]+\)/g,r=/-?[^,\s-]+/g,s="position:absolute;left:0;top:0;width:1px;height:1px",t=21600,u={path:1,rect:1},v={circle:1,ellipse:1},w=function(b){var d=/[ahqstv]/ig,e=a._pathToAbsolute;c(b).match(d)&&(e=path2curve),d=/[clmz]/g;if(e==a._pathToAbsolute&&!c(b).match(d)){var g=c(b).replace(p,function(a,b,c){var d=[],e=b.toLowerCase()=="m",g=o[b];c.replace(r,function(a){e&&d.length==2&&(g+=d+o[b=="m"?"l":"L"],d=[]),d.push(f(a*t))});return g+d});return g}var h=e(b),i,j;g=[];for(var k=0,l=h.length;k<l;k++){i=h[k],j=h[k][0].toLowerCase(),j=="z"&&(j="x");for(var q=1,s=i.length;q<s;q++)j+=f(i[q]*t)+(q!=s-1?",":n);g.push(j)}return g.join(m)},x=function(b,c,d){var e=a.matrix();e.rotate(-b,.5,.5);return{dx:e.x(c,d),dy:e.y(c,d)}},y=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,n=l.style,o=1,p="",q,r=t/b,s=t/c;n.visibility="hidden";if(!!b&&!!c){l.coordsize=i(r)+m+i(s),n.rotation=f*(b*c<0?-1:1);if(f){var u=x(f,d,e);d=u.dx,e=u.dy}b<0&&(p+="x"),c<0&&(p+=" y")&&(o=-1),n.flip=p,l.coordorigin=d*-r+m+e*-s;if(k||g.fillsize){var v=l.getElementsByTagName(j);v=v&&v[0],l.removeChild(v),k&&(u=x(f,h.x(k[0],k[1]),h.y(k[0],k[1])),v.position=u.dx*o+m+u.dy*o),g.fillsize&&(v.size=g.fillsize[0]*i(b)+m+g.fillsize[1]*i(c)),l.appendChild(v)}n.visibility="visible"}};a.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version},addArrow=function(a,b,d){var e=c(b).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";while(g--)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},setFillAndStroke=function(e,i){e.attrs=e.attrs||{};var l=e.node,o=e.attrs,p=l.style,q,r=u[e.type]&&(i.x!=o.x||i.y!=o.y||i.width!=o.width||i.height!=o.height||i.cx!=o.cx||i.cy!=o.cy||i.rx!=o.rx||i.ry!=o.ry||i.r!=o.r),s=v[e.type]&&(o.cx!=i.cx||o.cy!=i.cy||o.r!=i.r||o.rx!=i.rx||o.ry!=i.ry),x=e;for(var y in i)i[b](y)&&(o[y]=i[y]);r&&(o.path=a._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),"transform"in i&&e.transform(i.transform);if(i.path&&e.type=="path"||r)l.path=w(o.path);if(s){var z=o.cx,B=o.cy,C=o.rx||o.r||0,D=o.ry||o.r||0;l.path=a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((z-C)*t),f((B-D)*t),f((z+C)*t),f((B+D)*t),f(z*t))}if("clip-rect"in i){var F=c(i["clip-rect"]).split(k);if(F.length==4){F[2]=+F[2]+ +F[0],F[3]=+F[3]+ +F[1];var G=l.clipRect||a._g.doc.createElement("div"),H=G.style,I=l.parentNode;H.clip=a.format("rect({1}px {2}px {3}px {0}px)",F),l.clipRect||(H.position="absolute",H.top=0,H.left=0,H.width=e.paper.width+"px",H.height=e.paper.height+"px",I.parentNode.insertBefore(G,I),G.appendChild(I),l.clipRect=G)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip=n)}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,n)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}"arrow-start"in i&&addArrow(x,i["arrow-start"]),"arrow-end"in i&&addArrow(x,i["arrow-end"],1);if(i.opacity!=null||i["stroke-width"]!=null||i.fill!=null||i.src!=null||i.stroke!=null||i["stroke-width"]!=null||i["stroke-opacity"]!=null||i["fill-opacity"]!=null||i["stroke-dasharray"]!=null||i["stroke-miterlimit"]!=null||i["stroke-linejoin"]!=null||i["stroke-linecap"]!=null){var K=l.getElementsByTagName(j),L=!1;K=K&&K[0],!K&&(L=K=A(j)),e.type=="image"&&i.src&&(K.src=i.src),i.fill&&(K.on=!0);if(K.on==null||i.fill=="none"||i.fill===null)K.on=!1;if(K.on&&i.fill){var M=c(i.fill).match(a._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+m+N.y,e._.fillpos=[N.x,N.y],a._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=a.getRGB(i.fill).hex,K.src=n,K.type="solid",a.getRGB(i.fill).error&&(x.type in{circle:1,ellipse:1}||c(i.fill).charAt()!="r")&&addGradientFill(x,i.fill,K)&&(o.fill="none",o.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+o["fill-opacity"]+1||2)-1)*((+o.opacity+1||2)-1)*((+a.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=A("stroke"));if(i.stroke&&i.stroke!="none"||i["stroke-width"]||i["stroke-opacity"]!=null||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])P.on=!0;(i.stroke=="none"||i.stroke===null||P.on==null||i.stroke==0||i["stroke-width"]==0)&&(P.on=!1);var T=a.getRGB(i.stroke);P.on&&i.stroke&&(P.color=T.hex),O=((+o["stroke-opacity"]+1||2)-1)*((+o.opacity+1||2)-1)*((+T.o+1||2)-1);var U=(d(i["stroke-width"])||1)*.75;O=h(g(O,0),1),i["stroke-width"]==null&&(U=o["stroke-width"]),i["stroke-width"]&&(P.weight=U),U&&U<1&&(O*=U)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap=i["stroke-linecap"]=="butt"?"flat":i["stroke-linecap"]=="square"?"square":"round");if(i["stroke-dasharray"]){var V={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=V[b](i["stroke-dasharray"])?V[i["stroke-dasharray"]]:n}Q&&l.appendChild(P)}if(x.type=="text"){x.paper.canvas.style.display=n;var W=x.paper.span,X=100,Y=o.font&&o.font.match(/\d+(?:\.\d*)?(?=px)/);p=W.style,o.font&&(p.font=o.font),o["font-family"]&&(p.fontFamily=o["font-family"]),o["font-weight"]&&(p.fontWeight=o["font-weight"]),o["font-style"]&&(p.fontStyle=o["font-style"]),Y=d(Y?Y[0]:o["font-size"]),p.fontSize=Y*X+"px",x.textpath.string&&(W.innerHTML=c(x.textpath.string).replace(/</g,"&#60;").replace(/&/g,"&#38;").replace(/\n/g,"<br>"));var Z=W.getBoundingClientRect();x.W=o.w=(Z.right-Z.left)/X,x.H=o.h=(Z.bottom-Z.top)/X,x.paper.canvas.style.display="none",x.X=o.x,x.Y=o.y+x.H/2,("x"in i||"y"in i)&&(x.path.v=a.format("m{0},{1}l{2},{1}",f(o.x*t),f(o.y*t),f(o.x*t)+1));var $=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var _=0,ba=$.length;_<ba;_++)if($[_]in i){x._.dirty=1;break}switch(o["text-anchor"]){case"start":x.textpath.style["v-text-align"]="left",x.bbx=x.W/2;break;case"end":x.textpath.style["v-text-align"]="right",x.bbx=-x.W/2;break;default:x.textpath.style["v-text-align"]="center",x.bbx=0}x.textpath.style["v-text-kern"]=!0}},addGradientFill=function(b,f,g){b.attrs=b.attrs||{};var h=b.attrs,i,j,k="linear",l=".5 .5";b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){k="radial",b&&c&&(b=d(b),c=d(c),pow(b-.5,2)+pow(c-.5,2)>.25&&(c=e.sqrt(.25-pow(b-.5,2))*((c>.5)*2-1)+.5),l=b+m+c);return n}),f=f.split(/\s*\-\s*/);if(k=="linear"){var o=f.shift();o=-d(o);if(isNaN(o))return null}var p=a._parseDots(f);if(!p)return null;b=b.shape||b.node;if(p.length){b.removeChild(g),g.on=!0,g.method="none",g.color=p[0].color,g.color2=p[p.length-1].color;var q=[];for(var r=0,s=p.length;r<s;r++)p[r].offset&&q.push(p[r].offset+m+p[r].color);g.colors=q.length?q.join():"0% "+g.color,k=="radial"?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=l,g.angle=0):(g.type="gradient",g.angle=(270-o)%360),b.appendChild(g)}return 1},Element=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=c,this.matrix=a.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null};var z=a.el;Element.prototype=z,z.constructor=Element,z.transform=function(b){if(b==null)return this._.transform;a._extractTransform(this,b);var d=this.matrix.clone(),e=this.paper._viewBoxShift,f=this.skew,g=this.node,h,i=c(this.attrs.fill).indexOf("-")+1;d.translate(-0.5,-0.5),e&&(d.scale(e.scale,e.scale,-1,-1),d.translate(e.dx,e.dy));if(i||this.type=="image"){f.matrix="1 0 0 1",f.offset="0 0",h=d.split();if(i&&h.noRotation||!h.isSimple){g.style.filter=d.toFilter();var j=this.getBBox(),k=this.getBBox(1),l=j.x-k.x,o=j.y-k.y;g.coordorigin=l*-t+m+o*-t,y(this,1,1,l,o,0)}else g.style.filter=n,y(this,h.scalex,h.scaley,h.dx,h.dy,h.rotate)}else g.style.filter=n,f.matrix=c(d),f.offset=d.offset();return this},z.rotate=function(a,b,e){if(this.removed)return this;if(a!=null){a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,b,e]]));return this}},z.translate=function(a,b){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=b),this.transform(this._.transform.concat([["t",a,b]]));return this},z.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this._.dirtyT=1;return this},z.hide=function(){!this.removed&&(this.node.style.display="none");return this},z.show=function(){!this.removed&&(this.node.style.display=n);return this},z._getBBox=function(){if(this.removed)return{};return this.type=="text"?{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}:pathDimensions(this.attrs.path)},z.remove=function(){if(!this.removed){a.eve.unbind("*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var b in this)delete this[b];this.removed=!0}},z.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill=="none"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,"string")){if(c==j&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;var g=c.split(k),h={};for(var i=0,l=g.length;i<l;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return l-1?h:h[g[0]]}if(this.attrs&&d==null&&a.is(c,"array")){h={};for(i=0,l=c.length;i<l;i++)h[c[i]]=this.attr(c[i]);return h}var m;d!=null&&(m={},m[c]=d),d==null&&a.is(c,"object")&&(m=c);for(var n in m)a.eve("attr."+n+"."+this.id,this,m[n]);if(m){for(n in this.paper.customAttributes)if(this.paper.customAttributes[b](n)&&m[b](n)&&a.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[][concat](m[n]));this.attrs[n]=m[n];for(var p in o)o[b](p)&&(m[p]=o[p])}m.text&&this.type=="text"&&(this.textpath.string=m.text),setFillAndStroke(this,m)}return this},z.toFront=function(){!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&tofront(this,this.paper);return this},z.toBack=function(){if(this.removed)return this;this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),toback(this,this.paper));return this},z.insertAfter=function(b){if(this.removed)return this;b.constructor==Set&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},z.insertBefore=function(b){if(this.removed)return this;b.constructor==Set&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),a._insertbefore(this,b,this.paper);return this},z.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;d=d.replace(q,n),+b!==0?(this.attrs.blur=b,c.filter=d+m+ms+".Blur(pixelradius="+(+b||1.5)+")",c.margin=a.format("-{0}px 0 0 -{0}px",f(+b||1.5))):(c.filter=d,c.margin=0,delete this.attrs.blur)},a._engine.path=function(a,b){var c=A("shape");c.style.cssText=s,c.coordsize=t+m+t,c.coordorigin=b.coordorigin;var d=new Element(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=n,setFillAndStroke(d,e),b.canvas.appendChild(c);var f=A("skew");f.on=!0,c.appendChild(f),d.skew=f,d.transform(n);return d},a._engine.rect=function(b,c,d,e,f,g){var h=a._rectPath(c,d,e,f,g),i=b.path(h),j=i.attrs;i.X=j.x=c,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect";return i},a._engine.ellipse=function(a,b,c,d,e){var f=a.path(),g=f.attrs;f.X=b-d,f.Y=c-e,f.W=d*2,f.H=e*2,f.type="ellipse",setFillAndStroke(f,{cx:b,cy:c,rx:d,ry:e});return f},a._engine.circle=function(a,b,c,d){var e=a.path(),f=e.attrs;e.X=b-d,e.Y=c-d,e.W=e.H=d*2,e.type="circle",setFillAndStroke(e,{cx:b,cy:c,r:d});return e},a._engine.image=function(b,c,d,e,f,g){var h=a._rectPath(d,e,f,g),i=b.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];k.src=c,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=c,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),y(i,1,1,0,0,0);return i},a._engine.text=function(b,d,e,g){var h=A("shape"),i=A("path"),j=A("textpath");d=d||0,e=e||0,g=g||"",i.v=a.format("m{0},{1}l{2},{1}",f(d*t),f(e*t),f(d*t)+1),i.textpathok=!0,j.string=c(g),j.on=!0,h.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px",h.coordsize=t+m+t,h.coordorigin="0 0";var k=new Element(h,b),l={fill:"#000",stroke:"none",font:availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=c(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,setFillAndStroke(k,l),h.appendChild(j),h.appendChild(i),b.canvas.appendChild(h);var o=A("skew");o.on=!0,h.appendChild(o),k.skew=o,k.transform(n);return k},a._engine.setSize=function(a,b){var c=this.canvas.style;this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),c.width=a,c.height=b,c.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&setViewBox.apply(this,this._viewBox);return this},a._engine.setViewBox=function(b,c,d,e,f){a.eve("setViewBox",this,this._viewBox,[b,c,d,e,f]);var h=this.width,i=this.height,j=1/g(d/h,e/i),k,l;f&&(k=i/e,l=h/d,d*k<h&&(b-=(h-d*k)/2/k),e*l<i&&(c-=(i-e*l)/2/l)),this._viewBox=[b,c,d,e,!!f],this._viewBoxShift={dx:-b,dy:-c,scale:j},this.forEach(function(a){a.transform("...")});return this};var A,B=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),A=function(a){return b.createElement("<rvml:"+a+' class="rvml">')}}catch(c){A=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}};B(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=t*1e3+m+t*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("clear",this),this.canvas.innerHTML=n,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=removed(b);return!0}}(window.Raphael)
\ No newline at end of file
+// ┌─────────────────────────────────────────────────────────────────────┐ \\
+// │ "Raphaël 2.0" - JavaScript Vector Library                           │ \\
+// ├─────────────────────────────────────────────────────────────────────┤ \\
+// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
+// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
+// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\
+// └─────────────────────────────────────────────────────────────────────┘ \\
+(function(a){var b="0.3.0",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=Array.prototype.slice.call(arguments,2),e=k.listeners(a),f=0,l=!1,m,n=[],o={},p=[],q=[];h=a,i=0;for(var r=0,s=e.length;r<s;r++)"zIndex"in e[r]&&(n.push(e[r].zIndex),e[r].zIndex<0&&(o[e[r].zIndex]=e[r]));n.sort(g);while(n[f]<0){m=o[n[f++]],p.push(m.apply(b,d));if(i)return p}for(r=0;r<s;r++){m=e[r];if("zIndex"in m)if(m.zIndex==n[f]){p.push(m.apply(b,d));if(i)return p;do{f++,m=o[n[f]],m&&p.push(m.apply(b,d));if(i)return p}while(m)}else o[m.zIndex]=m;else{p.push(m.apply(b,d));if(i)return p}}return p.length?p:null};k.listeners=function(a){var b=a.split(d),c=j,f,g,h,i,k,l,m,n,o=[c],p=[];for(i=0,k=b.length;i<k;i++){n=[];for(l=0,m=o.length;l<m;l++){c=o[l].n,g=[c[b[i]],c[e]],h=2;while(h--)f=g[h],f&&(n.push(f),p=p.concat(f.f||[]))}o=n}return p},k.on=function(a,b){var c=a.split(d),e=j;for(var g=0,h=c.length;g<h;g++)e=e.n,!e[c[g]]&&(e[c[g]]={n:{}}),e=e[c[g]];e.f=e.f||[];for(g=0,h=e.f.length;g<h;g++)if(e.f[g]==b)return f;e.f.push(b);return function(a){+a==+a&&(b.zIndex=+a)}},k.stop=function(){i=1},k.nt=function(a){if(a)return(new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)")).test(h);return h},k.unbind=function(a,b){var f=a.split(d),g,h,i,k=[j];for(var l=0,m=f.length;l<m;l++)for(var n=0;n<k.length;n+=i.length-2){i=[n,1],g=k[n].n;if(f[l]!=e)g[f[l]]&&i.push(g[f[l]]);else for(h in g)g[c](h)&&i.push(g[h]);k.splice.apply(k,i)}for(l=0,m=k.length;l<m;l++){g=k[l];while(g.n){if(b){if(g.f){for(l=0,m=g.f.length;l<m;l++)if(g.f[l]==b){g.f.splice(l,1);break}!g.f.length&&delete g.f}for(h in g.n)if(g.n[c](h)&&g.n[h].f){var o=g.n[h].f;for(l=0,m=o.length;l<m;l++)if(o[l]==b){o.splice(l,1);break}!o.length&&delete g.n[h].f}}else{delete g.f;for(h in g.n)g.n[c](h)&&g.n[h].f&&delete g.n[h].f}g=g.n}}},k.version=b,k.toString=function(){return"You are running Eve "+b},typeof module!="undefined"&&module.exports?module.exports=k:a.eve=k})(this),function(){function cq(b,d,e,f,h,i){e=Q(e);var j,k,l,m=[],n,o,p,q=b.ms,s={},t={},u={};if(f)for(w=0,x=ck.length;w<x;w++){var v=ck[w];if(v.el.id==d.id&&v.anim==b){v.percent!=e?(ck.splice(w,1),l=1):k=v,d.attr(v.totalOrigin);break}}else f=+t;for(var w=0,x=b.percents.length;w<x;w++){if(b.percents[w]==e||b.percents[w]>f*b.top){e=b.percents[w],o=b.percents[w-1]||0,q=q/b.top*(e-o),n=b.percents[w+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[w]])}if(!!j){if(!k){for(attr in j)if(j[g](attr))if(V[g](attr)||d.paper.customAttributes[g](attr)){s[attr]=d.attr(attr),s[attr]==null&&(s[attr]=U[attr]),t[attr]=j[attr];switch(V[attr]){case C:u[attr]=(t[attr]-s[attr])/q;break;case"colour":s[attr]=a.getRGB(s[attr]);var y=a.getRGB(t[attr]);u[attr]={r:(y.r-s[attr].r)/q,g:(y.g-s[attr].g)/q,b:(y.b-s[attr].b)/q};break;case"path":var z=bF(s[attr],t[attr]),A=z[1];s[attr]=z[0],u[attr]=[];for(w=0,x=s[attr].length;w<x;w++){u[attr][w]=[0];for(var B=1,D=s[attr][w].length;B<D;B++)u[attr][w][B]=(A[w][B]-s[attr][w][B])/q}break;case"transform":var E=d._,F=bP(E[attr],t[attr]);if(F){s[attr]=F.from,t[attr]=F.to,u[attr]=[],u[attr].real=!0;for(w=0,x=s[attr].length;w<x;w++){u[attr][w]=[s[attr][w][0]];for(B=1,D=s[attr][w].length;B<D;B++)u[attr][w][B]=(t[attr][w][B]-s[attr][w][B])/q}}else{var G=d.matrix||new bQ,H={_:{transform:E.transform},getBBox:function(){return d.getBBox(1)}};s[attr]=[G.a,G.b,G.c,G.d,G.e,G.f],bN(H,t[attr]),t[attr]=H._.transform,u[attr]=[(H.matrix.a-G.a)/q,(H.matrix.b-G.b)/q,(H.matrix.c-G.c)/q,(H.matrix.d-G.d)/q,(H.matrix.e-G.e)/q,(H.matrix.e-G.f)/q]}break;case"csv":var I=r(j[attr]).split(c),J=r(s[attr]).split(c);if(attr=="clip-rect"){s[attr]=J,u[attr]=[],w=J.length;while(w--)u[attr][w]=(I[w]-s[attr][w])/q}t[attr]=I;break;default:I=[].concat(j[attr]),J=[].concat(s[attr]),u[attr]=[],w=d.paper.customAttributes[attr].length;while(w--)u[attr][w]=((I[w]||0)-(J[w]||0))/q}}var K=j.easing,L=a.easing_formulas[K];if(!L){L=r(K).match(N);if(L&&L.length==5){var M=L;L=function(a){return co(a,+M[1],+M[2],+M[3],+M[4],q)}}else L=be}p=j.start||b.start||+(new Date),v={anim:b,percent:e,timestamp:p,start:p+(b.del||0),status:0,initstatus:f||0,stop:!1,ms:q,easing:L,from:s,diff:u,to:t,el:d,callback:j.callback,prev:o,next:n,repeat:i||b.times,origin:d.attr(),totalOrigin:h},ck.push(v);if(f&&!k){v.stop=!0,v.start=new Date-q*f;if(ck.length==1)return cm()}ck.length==1&&cl(cm)}else k.initstatus=f,k.start=new Date-k.ms*f;eve("anim.start."+d.id,d,b)}}function cp(a,b){var c=[];this.anim=a,this.ms=b,this.times=1;if(this.anim){for(var d in this.anim)this.anim[g](d)&&c.push(+d);c.sort(bc)}this.top=c[c.length-1],this.percents=c}function co(a,b,c,d,e,f){function o(a,b){var c,d,e,f,j,k;for(e=a,k=0;k<8;k++){f=m(e)-a;if(z(f)<b)return e;j=(3*i*e+2*h)*e+g;if(z(j)<1e-6)break;e=e-f/j}c=0,d=1,e=a;if(e<c)return c;if(e>d)return d;while(c<d){f=m(e);if(z(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cc(){return this.x+q+this.y+q+this.width+" × "+this.height}function cb(){return this.x+q+this.y}function bQ(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bv(){return this.hex}function bt(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bs(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bs(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function a(c){if(a.is(c,"function"))return b?c():eve.on("DOMload",c);if(a.is(c,E)){var e=c,f=a._engine.create[m](a,e.splice(0,3+a.is(e[0],C))),h=f.set(),i=0,j=e.length,k;for(;i<j;i++)k=e[i]||{},d[g](k.type)&&h.push(f[k.type]().attr(k));return h}var l=Array.prototype.slice.call(arguments,0);if(a.is(l[l.length-1],"function")){var n=l.pop();return b?n.call(a._engine.create[m](a,l)):eve.on("DOMload",function(){n.call(a._engine.create[m](a,l))})}return a._engine.create[m](a,arguments)}a.version="2.0.0",a.eve=eve;var b,c=/[, ]+/,d={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},e=/\{(\d+)\}/g,f="prototype",g="hasOwnProperty",h={doc:document,win:window},i={was:Object.prototype[g].call(h.win,"Raphael"),is:h.win.Raphael},j=function(){},k,l="appendChild",m="apply",n="concat",o="createTouch"in h.doc,p="",q=" ",r=String,s="split",t="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend".split(q),u={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},v=r.prototype.toLowerCase,w=Math,x=w.max,y=w.min,z=w.abs,A=w.pow,B=w.PI,C="number",D="string",E="array",F="toString",G="fill",H=Object.prototype.toString,I={},J="push",K=a._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i,L=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,M={NaN:1,Infinity:1,"-Infinity":1},N=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,O=w.round,P="setAttribute",Q=parseFloat,R=parseInt,S=" progid:DXImageTransform.Microsoft",T=r.prototype.toUpperCase,U=a._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",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,rx:0,ry:0,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",transform:"",width:0,x:0,y:0},V=a._availableAnimAttrs={blur:C,"clip-rect":"csv",cx:C,cy:C,fill:"colour","fill-opacity":C,"font-size":C,height:C,opacity:C,path:"path",r:C,rx:C,ry:C,stroke:"colour","stroke-opacity":C,"stroke-width":C,transform:"transform",width:C,x:C,y:C},W=/\s*,\s*/,X={hs:1,rg:1},Y=/,?([achlmqrstvxz]),?/gi,Z=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?\s*,?\s*)+)/ig,$=/([rstm])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?\s*,?\s*)+)/ig,_=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)\s*,?\s*/ig,ba=a._radial_gradient=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,bb=function(a,b){return a.key-b.key},bc=function(a,b){return a-b},bd=function(){},be=function(a){return a},bf=a._rectPath=function(a,b,c,d,e){if(e)return[["M",a+e,b],["l",c-e*2,0],["a",e,e,0,0,1,e,e],["l",0,d-e*2],["a",e,e,0,0,1,-e,e],["l",e*2-c,0],["a",e,e,0,0,1,-e,-e],["l",0,e*2-d],["a",e,e,0,0,1,e,-e],["z"]];return[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]]},bg=function(a,b,c,d){d==null&&(d=c);return[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]]},bh=a._getPath={path:function(a){return a.attr("path")},circle:function(a){var b=a.attrs;return bg(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return bg(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return bf(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return bf(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return bf(b.x,b.y,b.width,b.height)}},bi=function(a,b){if(!b)return a;var c,d,e,f,g;a=bF(a);for(e=0,ii=a.length;e<ii;e++){g=a[e];for(f=1,jj=g.length;f<jj;f+=2)c=b.x(g[f],g[f+1]),d=b.y(g[f],g[f+1]),g[f]=c,g[f+1]=d}return a};a._g=h,a.type=h.win.SVGAngle||h.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML";if(a.type=="VML"){var bj=h.doc.createElement("div"),bk;bj.innerHTML='<v:shape adj="1"/>',bk=bj.firstChild,bk.style.behavior="url(#default#VML)";if(!bk||typeof bk.adj!="object")return a.type=p;bj=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,k.customAttributes={},a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(f<d)return c-f;if(f>b-d)return c-f+b}return c};var bl=a._createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,initWin&&initWin(h.win)};var bm=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write("<body>"),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bm=bt(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bm=bt(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bm(b)},bn=function(){return"hsb("+[this.h,this.s,this.b]+")"},bo=function(){return"hsl("+[this.h,this.s,this.l]+")"},bp=function(){return this.hex},bq=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},br=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:bp};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},crl.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=bp;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bn}},a.rgb2hsl=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bo}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bu=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bt(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bv};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bm(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4].split(W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5].split(W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6].split(W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bv},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv}},a),a.hsb=bt(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bt(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bt(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=bt(function(b){if(!b)return null;var c={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bx(b)),d.length||r(b).replace(Z,function(a,b,e){var f=[],g=v.call(b);e.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(d.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");while(f.length>=c[g]){d.push([b][n](f.splice(0,c[g])));if(!c[g])break}}),d.toString=a._path2string;return d}),a.parseTransformString=bt(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bx(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([f][n](e))}),d.toString=a._path2string;return d}),a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3)*a+A(j,2)*3*i*c+j*3*i*i*e+A(i,3)*g,l=A(j,3)*b+A(j,2)*3*i*d+j*3*i*i*f+A(i,3)*h,m=a+2*i*(c-a)+i*i*(e-2*c+a),n=b+2*i*(d-b)+i*i*(f-2*d+b),o=c+2*i*(e-c)+i*i*(g-2*e+c),p=d+2*i*(f-d)+i*i*(h-2*f+d),q=(1-i)*a+i*c,r=(1-i)*b+i*d,s=(1-i)*e+i*g,t=(1-i)*f+i*h,u=90-w.atan2(m-o,n-p)*180/B;(m>o||n<p)&&(u+=180);return{x:k,y:l,m:{x:m,y:n},n:{x:o,y:p},start:{x:q,y:r},end:{x:s,y:t},alpha:u}};var bw=bt(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=bF(a);var b=0,c=0,d=[],e=[],f;for(var g=0,h=a.length;g<h;g++){f=a[g];if(f[0]=="M")b=f[1],c=f[2],d.push(b),e.push(c);else{var i=bE(b,c,f[1],f[2],f[3],f[4],f[5],f[6]);d=d[n](i.min.x,i.max.x),e=e[n](i.min.y,i.max.y),b=f[5],c=f[6]}}var j=y[m](0,d),k=y[m](0,e);return{x:j,y:k,width:x[m](0,d)-j,height:x[m](0,e)-k}},null,function(a){return{x:a.x,y:a.y,width:a.width,height:a.height}}),bx=function(b){var c=[];if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);for(var d=0,e=b.length;d<e;d++){c[d]=[];for(var f=0,g=b[d].length;f<g;f++)c[d][f]=b[d][f]}c.toString=a._path2string;return c},by=a._pathToRelative=bt(function(b){if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);var c=[],d=0,e=0,f=0,g=0,h=0;b[0][0]=="M"&&(d=b[0][1],e=b[0][2],f=d,g=e,h++,c.push(["M",d,e]));for(var i=h,j=b.length;i<j;i++){var k=c[i]=[],l=b[i];if(l[0]!=v.call(l[0])){k[0]=v.call(l[0]);switch(k[0]){case"a":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]-d).toFixed(3),k[7]=+(l[7]-e).toFixed(3);break;case"v":k[1]=+(l[1]-e).toFixed(3);break;case"m":f=l[1],g=l[2];default:for(var m=1,n=l.length;m<n;m++)k[m]=+(l[m]-(m%2?d:e)).toFixed(3)}}else{k=c[i]=[],l[0]=="m"&&(f=l[1]+d,g=l[2]+e);for(var o=0,p=l.length;o<p;o++)c[i][o]=l[o]}var q=c[i].length;switch(c[i][0]){case"z":d=f,e=g;break;case"h":d+=+c[i][q-1];break;case"v":e+=+c[i][q-1];break;default:d+=+c[i][q-2],e+=+c[i][q-1]}}c.toString=a._path2string;return c},0,bx),bz=a._pathToAbsolute=bt(function(b){if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);if(!b||!b.length)return[["M",0,0]];var c=[],d=0,e=0,f=0,g=0,h=0;b[0][0]=="M"&&(d=+b[0][1],e=+b[0][2],f=d,g=e,h++,c[0]=["M",d,e]);for(var i=h,j=b.length;i<j;i++){var k=c[i]=[],l=b[i];if(l[0]!=T.call(l[0])){k[0]=T.call(l[0]);switch(k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+d),k[7]=+(l[7]+e);break;case"V":k[1]=+l[1]+e;break;case"H":k[1]=+l[1]+d;break;case"M":f=+l[1]+d,g=+l[2]+e;default:for(var m=1,n=l.length;m<n;m++)k[m]=+l[m]+(m%2?d:e)}}else for(var o=0,p=l.length;o<p;o++)c[i][o]=l[o];switch(k[0]){case"Z":d=f,e=g;break;case"H":d=k[1];break;case"V":e=k[1];break;case"M":f=c[i][c[i].length-2],g=c[i][c[i].length-1];default:d=c[i][c[i].length-2],e=c[i][c[i].length-1]}}c.toString=a._path2string;return c},null,bx),bA=function(a,b,c,d){return[a,b,c,d,c,d]},bB=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},bC=function(a,b,c,d,e,f,g,h,i,j){var k=B*120/180,l=B/180*(+e||0),m=[],o,p=bt(function(a,b,c){var d=a*w.cos(c)-b*w.sin(c),e=a*w.sin(c)+b*w.cos(c);return{x:d,y:e}});if(!j){o=p(a,b,-l),a=o.x,b=o.y,o=p(h,i,-l),h=o.x,i=o.y;var q=w.cos(B/180*e),r=w.sin(B/180*e),s=(a-h)/2,t=(b-i)/2,u=s*s/(c*c)+t*t/(d*d);u>1&&(u=w.sqrt(u),c=u*c,d=u*d);var v=c*c,x=d*d,y=(f==g?-1:1)*w.sqrt(z((v*x-v*t*t-x*s*s)/(v*t*t+x*s*s))),A=y*c*t/d+(a+h)/2,C=y*-d*s/c+(b+i)/2,D=w.asin(((b-C)/d).toFixed(9)),E=w.asin(((i-C)/d).toFixed(9));D=a<A?B-D:D,E=h<A?B-E:E,D<0&&(D=B*2+D),E<0&&(E=B*2+E),g&&D>E&&(D=D-B*2),!g&&E>D&&(E=E-B*2)}else D=j[0],E=j[1],A=j[2],C=j[3];var F=E-D;if(z(F)>k){var G=E,H=h,I=i;E=D+k*(g&&E>D?1:-1),h=A+c*w.cos(E),i=C+d*w.sin(E),m=bC(h,i,c,d,e,0,g,H,I,[E,G,A,C])}F=E-D;var J=w.cos(D),K=w.sin(D),L=w.cos(E),M=w.sin(E),N=w.tan(F/4),O=4/3*c*N,P=4/3*d*N,Q=[a,b],R=[a+O*K,b-P*J],S=[h+O*M,i-P*L],T=[h,i];R[0]=2*Q[0]-R[0],R[1]=2*Q[1]-R[1];if(j)return[R,S,T][n](m);m=[R,S,T][n](m).join().split(",");var U=[];for(var V=0,W=m.length;V<W;V++)U[V]=V%2?p(m[V-1],m[V],l).y:p(m[V],m[V+1],l).x;return U},bD=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:A(j,3)*a+A(j,2)*3*i*c+j*3*i*i*e+A(i,3)*g,y:A(j,3)*b+A(j,2)*3*i*d+j*3*i*i*f+A(i,3)*h}},bE=bt(function(a,b,c,d,e,f,g,h){var i=e-2*c+a-(g-2*e+c),j=2*(c-a)-2*(e-c),k=a-c,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,o=[b,h],p=[a,g],q;z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bD(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bD(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bD(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bD(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bF=bt(function(a,b){var c=bz(a),d=b&&bz(b),e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bC[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bB(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bB(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bA(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bA(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bA(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bA(b.x,b.y,b.X,b.Y))}return a},h=function(a,b){if(a[b].length>7){a[b].shift();var e=a[b];while(e.length)a.splice(b++,0,["C"][n](e.splice(0,6)));a.splice(b,1),k=x(c.length,d&&d.length||0)}},i=function(a,b,e,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),e.bx=0,e.by=0,e.x=a[g][1],e.y=a[g][2],k=x(c.length,d&&d.length||0))};for(var j=0,k=x(c.length,d&&d.length||0);j<k;j++){c[j]=g(c[j],e),h(c,j),d&&(d[j]=g(d[j],f)),d&&h(d,j),i(c,d,e,f,j),i(d,c,f,e,j);var l=c[j],o=d&&d[j],p=l.length,q=d&&o.length;e.x=l[p-2],e.y=l[p-1],e.bx=Q(l[p-4])||e.x,e.by=Q(l[p-3])||e.y,f.bx=d&&(Q(o[q-4])||f.x),f.by=d&&(Q(o[q-3])||f.y),f.x=d&&o[q-2],f.y=d&&o[q-1]}return d?[c,d]:c},null,bx),bG=a._parseDots=bt(function(b){var c=[];for(var d=0,e=b.length;d<e;d++){var f={},g=b[d].match(/^([^:]*):?([\d\.]*)/);f.color=a.getRGB(g[1]);if(f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),c.push(f)}for(d=1,e=c.length-1;d<e;d++)if(!c[d].offset){var h=Q(c[d-1].offset||0),i=0;for(var j=d+1;j<e;j++)if(c[j].offset){i=c[j].offset;break}i||(i=100,j=e),i=Q(i);var k=(i-h)/(j-d+1);for(;d<j;d++)h+=k,c[d].offset=h+"%"}return c}),bH=a._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)},bI=a._tofront=function(a,b){b.top!==a&&(bH(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},bJ=a._toback=function(a,b){b.bottom!==a&&(bH(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},bK=a._insertafter=function(a,b,c){bH(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},bL=a._insertbefore=function(a,b,c){bH(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},bM=function(a){return function(){throw new Error("Raphaël: you are calling to method “"+a+"” of removed object")}},bN=a._extractTransform=function(b,c){if(c==null)return b._.transform;c=r(c).replace(/\.{3}|\u2026/g,b._.transform||p);var d=a.parseTransformString(c),e=0,f=0,g=0,h=1,i=1,j=b._,k=new bQ;j.transform=d||[];if(d)for(var l=0,m=d.length;l<m;l++){var n=d[l],o=n.length,q;n[0]=r(n[0]).toLowerCase(),n[0]=="t"&&o==3?k.translate(n[1],n[2]):n[0]=="r"?o==2?(q=q||b.getBBox(1),k.rotate(n[1],q.x+q.width/2,q.y+q.height/2),e+=n[1]):o==4&&(k.rotate(n[1],n[2],n[3]),e+=n[1]):n[0]=="s"?o==2||o==3?(q=q||b.getBBox(1),k.scale(n[1],n[o-1],q.x+q.width/2,q.y+q.height/2),h*=n[1],i*=n[o-1]):o==5&&(k.scale(n[1],n[2],n[3],n[4]),h*=n[1],i*=n[2]):n[0]=="m"&&o==7&&k.add(n[1],n[2],n[3],n[4],n[5],n[6]),j.dirtyT=1,b.matrix=k}b.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,h==1&&i==1&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1},bO=function(a){switch(a[0]){case"t":return["t",0,0];case"m":return["m",1,0,0,1,0,0];case"r":return a.length==4?["r",0,a[2],a[3]]:["r",0];case"s":return a.length==5?["s",1,1,a[3],a[4]]:a.length==3?["s",1,1]:["s",1]}},bP=a._equaliseTransform=function(b,c){c=r(c).replace(/\.{3}|\u2026/g,b),b=a.parseTransformString(b)||[],c=a.parseTransformString(c)||[];var d=x(b.length,c.length),e=[],f=[],g=0,h,i,j,k;for(;g<d;g++){j=b[g]||bO(c[g]),k=c[g]||bO(j);if(j[0]!=k[0]||j[0]=="r"&&(j[2]!=k[2]||j[3]!=k[3])||j[0]=="s"&&(j[3]!=k[3]||j[4]!=k[4]))return;e[g]=[],f[g]=[];for(h=0,i=x(j.length,k.length);h<i;h++)h in j&&(e[g][h]=j[h]),h in k&&(f[g][h]=k[h])}return{from:e,to:f}};a._getContainer=function(b,c,d,e){var f;f=e==null&&!a.is(b,"object")?h.doc.getElementById(b):b;if(f!=null){if(f.tagName)return c==null?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d};return{container:1,x:b,y:c,width:d,height:e}}},a.pathToRelative=by,a._engine={},a.path2curve=bF,a.matrix=function(a,b,c,d,e,f){return new bQ(a,b,c,d,e,f)},function(b){function d(a){var b=w.sqrt(c(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)}function c(a){return a[0]*a[0]+a[1]*a[1]}b.add=function(a,b,c,d,e,f){var g=[[],[],[]],h=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],i=[[a,c,e],[b,d,f],[0,0,1]],j,k,l,m;a&&a instanceof bQ&&(i=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]);for(j=0;j<3;j++)for(k=0;k<3;k++){m=0;for(l=0;l<3;l++)m+=h[j][l]*i[l][k];g[j][k]=m}this.a=g[0][0],this.b=g[1][0],this.c=g[0][1],this.d=g[1][1],this.e=g[0][2],this.f=g[1][2]},b.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new bQ(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},b.clone=function(){return new bQ(this.a,this.b,this.c,this.d,this.e,this.f)},b.translate=function(a,b){this.add(1,0,0,1,a,b)},b.scale=function(a,b,c,d){b==null&&(b=a),c||d&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),c||d&&this.add(1,0,0,1,-c,-d)},b.rotate=function(b,c,d){b=a.rad(b),c=c||0,d=d||0;var e=+w.cos(b).toFixed(9),f=+w.sin(b).toFixed(9);this.add(e,f,-f,e,c,d),this.add(1,0,0,1,-c,-d)},b.x=function(a,b){return a*this.a+b*this.c+this.e},b.y=function(a,b){return a*this.b+b*this.d+this.f},b.get=function(a){return+this[r.fromCharCode(97+a)].toFixed(4)},b.toString=function(){return a.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},b.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},b.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},b.split=function(){var b={};b.dx=this.e,b.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];b.scalex=w.sqrt(c(e[0])),d(e[0]),b.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*b.shear,e[1][1]-e[0][1]*b.shear],b.scaley=w.sqrt(c(e[1])),d(e[1]),b.shear/=b.scaley;var f=-e[0][1],g=e[1][1];g<0?(b.rotate=a.deg(w.acos(g)),f<0&&(b.rotate=360-b.rotate)):b.rotate=a.deg(w.asin(f)),b.isSimple=!+b.shear.toFixed(9)&&(b.scalex.toFixed(9)==b.scaley.toFixed(9)||!b.rotate),b.isSuperSimple=!+b.shear.toFixed(9)&&b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate,b.noRotation=!+b.shear.toFixed(9)&&!b.rotate;return b},b.toTransformString=function(){var a=this.split();return a.isSimple?"t"+[a.dx,a.dy]+"s"+[a.scalex,a.scaley,0,0]+"r"+[a.rotate,0,0]:"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(bQ.prototype);var bR=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);navigator.vendor=="Apple Computer, Inc."&&(bR&&bR[1]<4||navigator.platform.slice(0,2)=="iP")||navigator.vendor=="Google Inc."&&bR&&bR[1]<8?k.safari=function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:k.safari=bd;var bS=function(){this.returnValue=!1},bT=function(){return this.originalEvent.preventDefault()},bU=function(){this.cancelBubble=!0},bV=function(){return this.originalEvent.stopPropagation()},bW=function(){if(h.doc.addEventListener)return function(a,b,c,d){var e=o&&u[b]?u[b]:b,f=function(e){var f=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,i=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,j=e.clientX+i,k=e.clientY+f;if(o&&u[g](b))for(var l=0,m=e.targetTouches&&e.targetTouches.length;l<m;l++)if(e.targetTouches[l].target==a){var n=e;e=e.targetTouches[l],e.originalEvent=n,e.preventDefault=bT,e.stopPropagation=bV;break}return c.call(d,e,j,k)};a.addEventListener(e,f,!1);return function(){a.removeEventListener(e,f,!1);return!0}};if(h.doc.attachEvent)return function(a,b,c,d){var e=function(a){a=a||h.win.event;var b=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;a.preventDefault=a.preventDefault||bS,a.stopPropagation=a.stopPropagation||bU;return c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){a.detachEvent("on"+b,e);return!0};return f}}(),bX=[],bY=function(a){var b=a.clientX,c=a.clientY,d=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f,g=bX.length;while(g--){f=bX[g];if(o){var i=a.touches.length,j;while(i--){j=a.touches[i];if(j.identifier==f.el._drag.id){b=j.clientX,c=j.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}}else a.preventDefault();var k=f.el.node,l,m=k.nextSibling,n=k.parentNode,p=k.style.display;h.win.opera&&n.removeChild(k),k.style.display="none",l=f.el.paper.getElementByPoint(b,c),k.style.display=p,h.win.opera&&(m?n.insertBefore(k,m):n.appendChild(k)),l&&eve("drag.over."+f.el.id,f.el,l),b+=e,c+=d,eve("drag.move."+f.el.id,f.move_scope||f.el,b-f.el._drag.x,c-f.el._drag.y,b,c,a)}},bZ=function(b){a.unmousemove(bY).unmouseup(bZ);var c=bX.length,d;while(c--)d=bX[c],d.el._drag={},eve("drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,b);bX=[]},b$=a.el={};for(var b_=t.length;b_--;)(function(b){a[b]=b$[b]=function(c,d){a.is(c,"function")&&(this.events=this.events||[],this.events.push({name:b,f:c,unbind:bW(this.shape||this.node||h.doc,b,c,d||this)}));return this},a["un"+b]=b$["un"+b]=function(a){var c=this.events,d=c.length;while(d--)if(c[d].name==b&&c[d].f==a){c[d].unbind(),c.splice(d,1),!c.length&&delete this.events;return this}return this}})(t[b_]);b$.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},b$.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)},b$.drag=function(b,c,d,e,f,g){function i(i){(i.originalEvent||i).preventDefault();var j=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,k=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft;this._drag.x=i.clientX+k,this._drag.y=i.clientY+j,this._drag.id=i.identifier,!bX.length&&a.mousemove(bY).mouseup(bZ),bX.push({el:this,move_scope:e,start_scope:f,end_scope:g}),c&&eve.on("drag.start."+this.id,c),b&&eve.on("drag.move."+this.id,b),d&&eve.on("drag.end."+this.id,d),eve("drag.start."+this.id,f||e||this,i.clientX+k,i.clientY+j,i)}this._drag={},this.mousedown(i);return this},b$.onDragOver=function(a){a?eve.on("drag.over."+this.id,a):eve.unbind("drag.over."+this.id)},b$.undrag=function(){var b=bX.length;while(b--)bX[b].el==this&&(a.unmousedown(bX[b].start),bX.splice(b++,1),eve.unbind("drag.*."+this.id));!bX.length&&a.unmousemove(bY).unmouseup(bZ)},k.circle=function(b,c,d){var e=a._engine.circle(this,b||0,c||0,d||0);this.__set__&&this.__set__.push(e);return e},k.rect=function(b,c,d,e,f){var g=a._engine.rect(this,b||0,c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.ellipse=function(b,c,d,e){var f=a._engine.ellipse(this,b||0,c||0,d||0,e||0);this.__set__&&this.__set__.push(f);return f},k.path=function(b){b&&!a.is(b,D)&&!a.is(b[0],E)&&(b+=p);var c=a._engine.path(a.format[m](a,arguments),this);this.__set__&&this.__set__.push(c);return c},k.image=function(b,c,d,e,f){var g=a._engine.image(this,b||"about:blank",c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.text=function(b,c,d){var e=a._engine.text(this,b||0,c||0,r(d));this.__set__&&this.__set__.push(e);return e},k.set=function(b){!a.is(b,"array")&&(b=Array.prototype.splice.call(arguments,0,arguments.length));var c=new cr(b);this.__set__&&this.__set__.push(c);return c},k.setStart=function(a){this.__set__=a||this.set()},k.setFinish=function(a){var b=this.__set__;delete this.__set__;return b},k.setSize=a._engine.setSize,k.setViewBox=a._engine.setViewBox,k.top=k.bottom=null,k.raphael=a;var ca=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,i=b.top+(h.win.pageYOffset||e.scrollTop||d.scrollTop)-f,j=b.left+(h.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:i,x:j}};k.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=h.doc.elementFromPoint(a,b);if(h.win.opera&&e.tagName=="svg"){var f=ca(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var i=d.getIntersectionList(g,null);i.length&&(e=i[i.length-1])}if(!e)return null;while(e.parentNode&&e!=d.parentNode&&!e.raphael)e=e.parentNode;e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null;return e},k.getById=function(a){var b=this.bottom;while(b){if(b.id==a)return b;b=b.next}return null},k.forEach=function(a,b){var c=this.bottom;while(c){if(a.call(b,c)===!1)return this;c=c.next}return this},b$.getBBox=function(a){if(this.removed)return{};var b=this._;if(a){if(b.dirty||!b.bboxwt)this.realPath=bh[this.type](this),b.bboxwt=bw(this.realPath),b.bboxwt.toString=cc,b.dirty=0;return b.bboxwt}if(b.dirty||b.dirtyT||!b.bbox){if(b.dirty||!this.realPath)b.bboxwt=0,this.realPath=bh[this.type](this);b.bbox=bw(bi(this.realPath,this.matrix)),b.bbox.toString=cc,b.dirty=b.dirtyT=0}return b.bbox},b$.clone=function(){if(this.removed)return null;return this.paper[this.type]().attr(this.attr())},b$.glow=function(a){if(this.type=="text")return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||bh[this.type](this);f=this.matrix?bi(f,this.matrix):f;for(var g=1;g<c+1;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cd={},ce=function(b,c,d,e,f,g,h,i,j){var k=0,l=100,m=[b,c,d,e,f,g,h,i].join(),n=cd[m],o,p;!n&&(cd[m]=n={data:[]}),n.timer&&clearTimeout(n.timer),n.timer=setTimeout(function(){delete cd[m]},2e3);if(j!=null&&!n.precision){var q=ce(b,c,d,e,f,g,h,i);n.precision=~~q*10,n.data=[]}l=n.precision||l;for(var r=0;r<l+1;r++){n.data[r*l]?p=n.data[r*l]:(p=a.findDotsAtSegment(b,c,d,e,f,g,h,i,r/l),n.data[r*l]=p),r&&(k+=A(A(o.x-p.x,2)+A(o.y-p.y,2),.5));if(j!=null&&k>=j)return p;o=p}if(j==null)return k},cf=function(b,c){return function(d,e,f){d=bF(d);var g,h,i,j,k="",l={},m,n=0;for(var o=0,p=d.length;o<p;o++){i=d[o];if(i[0]=="M")g=+i[1],h=+i[2];else{j=ce(g,h,i[1],i[2],i[3],i[4],i[5],i[6]);if(n+j>e){if(c&&!l.start){m=ce(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=ce(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[1],i[2],i[3],i[4],i[5],i[6],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cg=cf(1),ch=cf(),ci=cf(0,1);a.getTotalLength=cg,a.getPointAtLength=ch,a.getSubpath=function(a,b,c){if(z(this.getTotalLength(a)-c)<1e-6)return ci(a,b).end;var d=ci(a,c,1);return b?ci(d,b).end:d},b$.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cg(this.attrs.path)}},b$.getPointAtLength=function(a){if(this.type=="path")return ch(this.attrs.path,a)},b$.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cj=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cj.easeIn=cj["ease-in"]=cj["<"],cj.easeOut=cj["ease-out"]=cj[">"],cj.easeInOut=cj["ease-in-out"]=cj["<>"],cj["back-in"]=cj.backIn,cj["back-out"]=cj.backOut;var ck=[],cl=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cm=function(){var b=+(new Date),c=0;for(;c<ck.length;c++){var d=ck[c];if(d.el.removed||d.paused)continue;var e=b-d.start,f=d.ms,h=d.easing,i=d.from,j=d.diff,k=d.to,l=d.t,m=d.el,n={},o;d.initstatus?(e=(d.initstatus*d.anim.top-d.prev)/(d.percent-d.prev)*f,d.status=d.initstatus,delete d.initstatus,d.stop&&ck.splice(c--,1)):d.status=(d.prev+(d.percent-d.prev)*(e/f))/d.anim.top;if(e<0)continue;if(e<f){var p=h(e/f);for(var r in i)if(i[g](r)){switch(V[r]){case C:o=+i[r]+p*f*j[r];break;case"colour":o="rgb("+[cn(O(i[r].r+p*f*j[r].r)),cn(O(i[r].g+p*f*j[r].g)),cn(O(i[r].b+p*f*j[r].b))].join(",")+")";break;case"path":o=[];for(var s=0,t=i[r].length;s<t;s++){o[s]=[i[r][s][0]];for(var u=1,v=i[r][s].length;u<v;u++)o[s][u]=+i[r][s][u]+p*f*j[r][s][u];o[s]=o[s].join(q)}o=o.join(q);break;case"transform":if(j[r].real){o=[];for(s=0,t=i[r].length;s<t;s++){o[s]=[i[r][s][0]];for(u=1,v=i[r][s].length;u<v;u++)o[s][u]=i[r][s][u]+p*f*j[r][s][u]}}else{var w=function(a){return+i[r][a]+p*f*j[r][a]};o=[["m",w(0),w(1),w(2),w(3),w(4),w(5)]]}break;case"csv":if(r=="clip-rect"){o=[],s=4;while(s--)o[s]=+i[r][s]+p*f*j[r][s]}break;default:var x=[].concat(i[r]);o=[],s=m.paper.customAttributes[r].length;while(s--)o[s]=+x[s]+p*f*j[r][s]}n[r]=o}m.attr(n),function(a,b,c){setTimeout(function(){eve("anim.frame."+a,b,c)})}(m.id,m,d.anim)}else(function(b,c,d){setTimeout(function(){eve("anim.frame."+c.id,c,d),eve("anim.finish."+c.id,c,d),a.is(b,"function")&&b.call(c)})})(d.callback,m,d.anim),m.attr(k),ck.splice(c--,1),d.repeat>1&&!d.next&&cq(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1),d.next&&!d.stop&&cq(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}a.svg&&m&&m.paper&&m.paper.safari(),ck.length&&cl(cm)},cn=function(a){return a>255?255:a<0?0:a};b$.animateWith=function(a,b,c,d,e){this.animate(b,c,d,e);var f,g;for(var h=0,i=ck.length;h<i;h++)g=ck[h],g.el.id==a.id?f=g.timestamp:g.el.id==this.id&&(g.start=f);return this.animate(b,c,d,e)},b$.onAnimation=function(a){a?eve.on("anim.frame."+this.id,a):eve.unbind("anim.frame."+this.id);return this},cp.prototype.delay=function(a){var b=new cp(this.anim,this.ms);b.times=this.times,b.del=+a||0;return b},cp.prototype.repeat=function(a){var b=new cp(this.anim,this.ms);b.del=this.del,b.times=w.floor(x(a,0))||1;return b},a.animation=function(b,c,d,e){if(a.is(d,"function")||!d)e=e||d||null,d=null;b=Object(b),c=+c||0;var f={},h,i;for(i in b)b[g](i)&&Q(i)!=i&&(h=!0,f[i]=b[i]);if(!h)return new cp(b,c);d&&(f.easing=d),e&&(f.callback=e);return new cp({100:f},c)},b$.animate=function(b,c,d,e){var f=this;if(f.removed){e&&e.call(f);return f}var g=b instanceof cp?b:a.animation(b,c,d,e);cq(g,f,g.percents[0],null,f.attr());return f},b$.setTime=function(a,b){a&&b!=null&&this.status(a,y(b,a.ms)/a.ms);return this},b$.status=function(a,b){var c=[],d=0,e,f;if(b!=null){cq(a,this,-1,y(b,1));return this}e=ck.length;for(;d<e;d++){f=ck[d];if(f.el.id==this.id&&(!a||f.anim==a)){if(a)return f.status;c.push({anim:f.anim,status:f.status})}}if(a)return 0;return c},b$.pause=function(a){for(var b=0;b<ck.length;b++)ck[b].el.id==this.id&&(!a||ck[b].anim==a)&&eve("anim.pause."+this.id,this,ck[b].anim)!==!1&&(ck[b].paused=!0);return this},b$.resume=function(a){for(var b=0;b<ck.length;b++)if(ck[b].el.id==this.id&&(!a||ck[b].anim==a)){var c=ck[b];eve("anim.resume."+this.id,this,c.anim)!==!1&&(delete c.paused,this.status(c.anim,c.status))}return this},b$.stop=function(a){for(var b=0;b<ck.length;b++)ck[b].el.id==this.id&&(!a||ck[b].anim==a)&&eve("anim.stop."+this.id,this,ck[b].anim)!==!1&&ck.splice(b--,1);return this},b$.toString=function(){return"Raphaël’s object"};var cr=function(a){this.items=[],this.length=0,this.type="set";if(a)for(var b=0,c=a.length;b<c;b++)a[b]&&(a[b].constructor==b$.constructor||a[b].constructor==cr)&&(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},cs=cr.prototype;cs.push=function(){var a,b;for(var c=0,d=arguments.length;c<d;c++)a=arguments[c],a&&(a.constructor==b$.constructor||a.constructor==cr)&&(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},cs.pop=function(){this.length&&delete this[this.length--];return this.items.pop()},cs.forEach=function(a,b){for(var c=0,d=this.items.length;c<d;c++)if(a.call(b,this.items[c])===!1)return this;return this};for(var ct in b$)b$[g](ct)&&(cs[ct]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][m](c,b)})}}(ct));cs.attr=function(b,c){if(b&&a.is(b,E)&&a.is(b[0],"object"))for(var d=0,e=b.length;d<e;d++)this.items[d].attr(b[d]);else for(var f=0,g=this.items.length;f<g;f++)this.items[f].attr(b,c);return this},cs.clear=function(){while(this.length)this.pop()},cs.animate=function(b,c,d,e){(a.is(d,"function")||!d)&&(e=d||null);var f=this.items.length,g=f,h,i=this,j;if(!f)return this;e&&(j=function(){!--f&&e.call(i)}),d=a.is(d,D)?d:j;var k=b instanceof cp?b:a.animation(b,c,d,j);h=this.items[--g].animate(k);while(g--)this.items[g]&&!this.items[g].removed&&this.items[g].animateWith(h,k);return this},cs.insertAfter=function(a){var b=this.items.length;while(b--)this.items[b].insertAfter(a);return this},cs.getBBox=function(){var a=[],b=[],c=[],d=[];for(var e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}a=y[m](0,a),b=y[m](0,b);return{x:a,y:b,width:x[m](0,c)-a,height:x[m](0,d)-b}},cs.clone=function(a){a=new cr;for(var b=0,c=this.items.length;b<c;b++)a.push(this.items[b].clone());return a},cs.toString=function(){return"Raphaël‘s set"},a.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[g](d)&&(b.face[d]=a.face[d]);this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=R(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[g](e)){var f=a.glyphs[e];b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"};if(f.k)for(var h in f.k)f[g](h)&&(b.glyphs[e].k[h]=f.k[h])}}return a},k.getFont=function(b,c,d,e){e=e||"normal",d=d||"normal",c=+c||{normal:400,bold:700,lighter:300,bolder:800}[c]||400;if(!!a.fonts){var f=a.fonts[b];if(!f){var h=new RegExp("(^|\\s)"+b.replace(/[^\w\d\s+!~.:_-]/g,p)+"(\\s|$)","i");for(var i in a.fonts)if(a.fonts[g](i)&&h.test(i)){f=a.fonts[i];break}}var j;if(f)for(var k=0,l=f.length;k<l;k++){j=f[k];if(j.face["font-weight"]==c&&(j.face["font-style"]==d||!j.face["font-style"])&&j.face["font-stretch"]==e)break}return j}},k.print=function(b,d,e,f,g,h,i){h=h||"middle",i=x(y(i||0,1),-1);var j=this.set(),k=r(e).split(p),l=0,m=p,n;a.is(f,e)&&(f=this.getFont(f));if(f){n=(g||16)/f.face["units-per-em"];var o=f.face.bbox.split(c),q=+o[0],s=+o[1]+(h=="baseline"?o[3]-o[1]+ +f.face.descent:(o[3]-o[1])/2);for(var t=0,u=k.length;t<u;t++){var v=t&&f.glyphs[k[t-1]]||{},w=f.glyphs[k[t]];l+=t?(v.w||f.w)+(v.k&&v.k[k[t]]||0)+f.w*i:0,w&&w.d&&j.push(this.path(w.d).attr({fill:"#000",stroke:"none",transform:[["t",l*n,0]]}))}j.transform(["...s",n,n,q,s,"t",(b-q)/n,(d-s)/n])}return j},a.format=function(b,c){var d=a.is(c,E)?[0][n](c):arguments;b&&a.is(b,D)&&d.length-1&&(b=b.replace(e,function(a,b){return d[++b]==null?p:d[b]}));return b||p},a.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),typeof e=="function"&&f&&(e=e()))}),e=(e==null||e==d?a:e)+"";return e};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),a.ninja=function(){i.was?h.win.Raphael=i.is:delete Raphael;return a},a.st=cs,function(b,c,d){function e(){/in/.test(b.readyState)?setTimeout(e,9):a.eve("DOMload")}b.readyState==null&&b.addEventListener&&(b.addEventListener(c,d=function(){b.removeEventListener(c,d,!1),b.readyState="complete"},!1),b.readyState="loading"),e()}(document,"DOMContentLoaded"),i.was?h.win.Raphael=a:Raphael=a,eve.on("DOMload",function(){b=!0})}(),window.Raphael.svg&&function(a){var b="hasOwnProperty",c=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=a.eve,l="",m="http://www.w3.org/1999/xlink",n={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},o={};a.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var p=function(d,e){if(e){typeof d=="string"&&(d=p(d));for(var f in e)e[b](f)&&(f.substring(0,6)=="xlink:"?d.setAttributeNS(m,f.substring(6),c(e[f])):d.setAttribute(f,c(e[f])))}else d=a._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},q={},r=/^url\(#(.*)\)$/,s=function(b,c){var d=b.getAttribute("fill");d=d&&d.match(r),d&&!--q[d[1]]&&(delete q[d[1]],c.defs.removeChild(a._g.doc.getElementById(d[1])))},t=function(b,e){var j="linear",k=b.id+e,m=.5,n=.5,o=b.node,q=b.paper,r=o.style,s=a._g.doc.getElementById(k);if(!s){e=c(e).replace(a._radial_gradient,function(a,b,c){j="radial";if(b&&c){m=d(b),n=d(c);var e=(n>.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;b.gradient&&(q.defs.removeChild(b.gradient),delete b.gradient),k=k.replace(/[\(\)\s,\xb0#]/g,"-"),s=p(j+"Gradient",{id:k}),b.gradient=s,p(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),q.defs.appendChild(s);for(var x=0,y=w.length;x<y;x++)s.appendChild(p("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}p(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1;return 1},u=function(a){var b=a.getBBox(1);p(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},v=function(d,e,f){if(d.type=="path"){var g=c(e).toLowerCase().split("-"),h=d.paper,i=f?"end":"start",j=d.node,k=d.attrs,l=k["stroke-width"],m=g.length,q="classic",r,s,t,u,v,w=3,x=3,y=5;while(m--)switch(g[m]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":q=g[m];break;case"wide":x=5;break;case"narrow":x=2;break;case"long":w=5;break;case"short":w=2}q=="open"?(w+=2,x+=2,y+=2,t=1,u=f?4:1,v={fill:"none",stroke:k.stroke}):(u=t=w/2,v={fill:k.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&o[d._.arrows.endPath]--,d._.arrows.endMarker&&o[d._.arrows.endMarker]--):(d._.arrows.startPath&&o[d._.arrows.startPath]--,d._.arrows.startMarker&&o[d._.arrows.startMarker]--):d._.arrows={};if(q!="none"){var z="raphael-marker-"+q,A="raphael-marker-"+i+q+w+x;a._g.doc.getElementById(z)?o[z]++:(h.defs.appendChild(p(p("path"),{"stroke-linecap":"round",d:n[q],id:z})),o[z]=1);var B=a._g.doc.getElementById(A),C;B?(o[A]++,C=B.getElementsByTagName("use")[0]):(B=p(p("marker"),{id:A,markerHeight:x,markerWidth:w,orient:"auto",refX:u,refY:x/2}),C=p(p("use"),{"xlink:href":"#"+z,transform:(f?" rotate(180 "+w/2+" "+x/2+") ":S)+"scale("+w/y+","+x/y+")","stroke-width":1/((w/y+x/y)/2)}),B.appendChild(C),h.defs.appendChild(B),o[A]=1),p(C,v);var D=t*(q!="diamond"&&q!="oval");f?(r=d._.arrows.startdx*l||0,s=a.getTotalLength(k.path)-D*l):(r=D*l,s=a.getTotalLength(k.path)-(d._.arrows.enddx*l||0)),v={},v["marker-"+i]="url(#"+A+")";if(s||r)v.d=Raphael.getSubpath(k.path,r,s);p(j,v),d._.arrows[i+"Path"]=z,d._.arrows[i+"Marker"]=A,d._.arrows[i+"dx"]=D,d._.arrows[i+"Type"]=q,d._.arrows[i+"String"]=e}else f?(r=d._.arrows.startdx*l||0,s=a.getTotalLength(k.path)-r):(r=0,s=a.getTotalLength(k.path)-(d._.arrows.enddx*l||0)),d._.arrows[i+"Path"]&&p(j,{d:Raphael.getSubpath(k.path,r,s)}),delete d._.arrows[i+"Path"],delete d._.arrows[i+"Marker"],delete d._.arrows[i+"dx"],delete d._.arrows[i+"Type"],delete d._.arrows[i+"String"];for(v in o)if(o[b](v)&&!o[v]){var E=a._g.doc.getElementById(v);E&&E.parentNode.removeChild(E)}}},w=function(d,f){var i={"":[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]},k=d.node,n=d.attrs,o=function(a,b){b=i[c(b).toLowerCase()];if(b){var d=a.attrs["stroke-width"]||"1",e={round:d,square:d,butt:0}[a.attrs["stroke-linecap"]||f["stroke-linecap"]]||0,g=[],h=b.length;while(h--)g[h]=b[h]*d+(h%2?1:-1)*e;p(k,{"stroke-dasharray":g.join(",")})}};for(var q in f)if(f[b](q)){if(!a._availableAttrs[b](q))continue;var r=f[q];n[q]=r;switch(q){case"blur":d.blur(r);break;case"href":case"title":case"target":var s=k.parentNode;if(s.tagName.toLowerCase()!="a"){var w=p("a");s.insertBefore(w,k),w.appendChild(k),s=w}q=="target"&&r=="blank"?s.setAttributeNS(m,"show","new"):s.setAttributeNS(m,q,r);break;case"cursor":k.style.cursor=r;break;case"transform":d.transform(r);break;case"arrow-start":v(d,r);break;case"arrow-end":v(d,r,1);break;case"clip-rect":var x=c(r).split(j);if(x.length==4){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var z=p("clipPath"),A=p("rect");z.id=a._createUUID(),p(A,{x:x[0],y:x[1],width:x[2],height:x[3]}),z.appendChild(A),d.paper.defs.appendChild(z),p(k,{"clip-path":"url(#"+z.id+")"}),d.clip=A}if(!r){var B=a._g.doc.getElementById(k.getAttribute("clip-path").replace(/(^url\(#|\)$)/g,l));B&&B.parentNode.removeChild(B),p(k,{"clip-path":l}),delete d.clip}break;case"path":d.type=="path"&&(p(k,{d:r?n.path=a._pathToAbsolute(r):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&v(d,d._.arrows.startString),"endString"in d._.arrows&&v(d,d._.arrows.endString,1)));break;case"width":k.setAttribute(q,r),d._.dirty=1;if(n.fx)q="x",r=n.x;else break;case"x":n.fx&&(r=-n.x-(n.width||0));case"rx":if(q=="rx"&&d.type=="rect")break;case"cx":k.setAttribute(q,r),d.pattern&&u(d),d._.dirty=1;break;case"height":k.setAttribute(q,r),d._.dirty=1;if(n.fy)q="y",r=n.y;else break;case"y":n.fy&&(r=-n.y-(n.height||0));case"ry":if(q=="ry"&&d.type=="rect")break;case"cy":k.setAttribute(q,r),d.pattern&&u(d),d._.dirty=1;break;case"r":d.type=="rect"?p(k,{rx:r,ry:r}):k.setAttribute(q,r),d._.dirty=1;break;case"src":d.type=="image"&&k.setAttributeNS(m,"href",r);break;case"stroke-width":if(d._.sx!=1||d._.sy!=1)r/=g(h(d._.sx),h(d._.sy))||1;d.paper._vbSize&&(r*=d.paper._vbSize),k.setAttribute(q,r),n["stroke-dasharray"]&&o(d,n["stroke-dasharray"]),d._.arrows&&("startString"in d._.arrows&&v(d,d._.arrows.startString),"endString"in d._.arrows&&v(d,d._.arrows.endString,1));break;case"stroke-dasharray":o(d,r);break;case"fill":var C=c(r).match(a._ISURL);if(C){z=p("pattern");var D=p("image");z.id=a._createUUID(),p(z,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),p(D,{x:0,y:0,"xlink:href":C[1]}),z.appendChild(D),function(b){a._preload(C[1],function(){var a=this.offsetWidth,c=this.offsetHeight;p(b,{width:a,height:c}),p(D,{width:a,height:c}),d.paper.safari()})}(z),d.paper.defs.appendChild(z),k.style.fill="url(#"+z.id+")",p(k,{fill:"url(#"+z.id+")"}),d.pattern=z,d.pattern&&u(d);break}var F=a.getRGB(r);if(!F.error)delete f.gradient,delete n.gradient,!a.is(n.opacity,"undefined")&&a.is(f.opacity,"undefined")&&p(k,{opacity:n.opacity}),!a.is(n["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&p(k,{"fill-opacity":n["fill-opacity"]});else if((d.type=="circle"||d.type=="ellipse"||c(r).charAt()!="r")&&t(d,r)){if("opacity"in n||"fill-opacity"in n){var G=a._g.doc.getElementById(k.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(G){var H=G.getElementsByTagName("stop");p(H[H.length-1],{"stop-opacity":("opacity"in n?n.opacity:1)*("fill-opacity"in n?n["fill-opacity"]:1)})}}n.gradient=r,n.fill="none";break}F[b]("opacity")&&p(k,{"fill-opacity":F.opacity>1?F.opacity/100:F.opacity});case"stroke":F=a.getRGB(r),k.setAttribute(q,F.hex),q=="stroke"&&F[b]("opacity")&&p(k,{"stroke-opacity":F.opacity>1?F.opacity/100:F.opacity}),q=="stroke"&&d._.arrows&&("startString"in d._.arrows&&v(d,d._.arrows.startString),"endString"in d._.arrows&&v(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(r).charAt()!="r")&&t(d,r);break;case"opacity":n.gradient&&!n[b]("stroke-opacity")&&p(k,{"stroke-opacity":r>1?r/100:r});case"fill-opacity":if(n.gradient){G=a._g.doc.getElementById(k.getAttribute("fill").replace(/^url\(#|\)$/g,l)),G&&(H=G.getElementsByTagName("stop"),p(H[H.length-1],{"stop-opacity":r}));break};default:q=="font-size"&&(r=e(r,10)+"px");var I=q.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});k.style[I]=r,d._.dirty=1,k.setAttribute(q,r)}}y(d,f)},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n<o;n++)m=p("tspan"),n&&p(m,{dy:i*x,x:g.x}),m.appendChild(a._g.doc.createTextNode(j[n])),h.appendChild(m),k[n]=m}else{k=h.getElementsByTagName("tspan");for(n=0,o=k.length;n<o;n++)n?p(k[n],{dy:i*x,x:g.x}):p(k[0],{dy:0})}p(h,{x:g.x,y:g.y}),d._.dirty=1;var q=d._getBBox(),r=g.y-(q.y+q.height/2);r&&a.is(r,"finite")&&p(k[0],{dy:r})}},z=function(b,c){var d=0,e=0;this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.matrix=a.matrix(),this.realPath=null,this.paper=c,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},A=a.el;z.prototype=A,A.constructor=z,a._engine.path=function(a,b){var c=p("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);d.type="path",w(d,{fill:"none",stroke:"#000",path:a});return d},A.rotate=function(a,b,e){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this.transform(this._.transform.concat([["r",a,b,e]]));return this},A.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]]));return this},A.translate=function(a,b){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this.transform(this._.transform.concat([["t",a,b]]));return this},A.transform=function(c){var d=this._;if(c==null)return d.transform;a._extractTransform(this,c),this.clip&&p(this.clip,{transform:this.matrix.invert()}),this.pattern&&u(this),this.node&&p(this.node,{transform:this.matrix});if(d.sx!=1||d.sy!=1){var e=this.attrs[b]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){!this.removed&&this.paper.safari(this.node.style.display="none");return this},A.show=function(){!this.removed&&this.paper.safari(this.node.style.display="");return this},A.remove=function(){if(!this.removed){k.unbind("*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node);for(var b in this)delete this[b];this.removed=!0}},A._getBBox=function(){if(this.node.style.display=="none"){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}a&&this.hide();return b},A.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill=="none"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,"string")){if(c=="fill"&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;if(c=="transform")return this._.transform;var g=c.split(j),h={};for(var i=0,k=g.length;i<k;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return k-1?h:h[g[0]]}if(d==null&&a.is(c,"array")){h={};for(i=0,k=c.length;i<k;i++)h[c[i]]=this.attr(c[i]);return h}if(d!=null){var l={};l[c]=d}else c!=null&&a.is(c,"object")&&(l=c);for(var m in this.paper.customAttributes)if(this.paper.customAttributes[b](m)&&l[b](m)&&a.is(this.paper.customAttributes[m],"function")){var n=this.paper.customAttributes[m].apply(this,[].concat(l[m]));this.attrs[m]=l[m];for(var o in n)n[b](o)&&(l[o]=n[o])}w(this,l);return this},A.toFront=function(){if(this.removed)return this;this.node.parentNode.appendChild(this.node);var b=this.paper;b.top!=this&&a._tofront(this,b);return this},A.toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper);var b=this.paper}return this},A.insertAfter=function(b){if(this.removed)return this;var c=b.node||b[b.length-1].node;c.nextSibling?c.parentNode.insertBefore(this.node,c.nextSibling):c.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},A.insertBefore=function(b){if(this.removed)return this;var c=b.node||b[0].node;c.parentNode.insertBefore(this.node,c),a._insertbefore(this,b,this.paper);return this},A.blur=function(b){var c=this;if(+b!==0){var d=p("filter"),e=p("feGaussianBlur");c.attrs.blur=b,d.id=a._createUUID(),p(e,{stdDeviation:+b||1.5}),d.appendChild(e),c.paper.defs.appendChild(d),c._blur=d,p(c.node,{filter:"url(#"+d.id+")"})}else c._blur&&(c._blur.parentNode.removeChild(c._blur),delete c._blur,delete c.attrs.blur),c.node.removeAttribute("filter")},a._engine.circle=function(a,b,c,d){var e=p("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",p(e,f.attrs);return f},a._engine.rect=function(a,b,c,d,e,f){var g=p("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",p(g,h.attrs);return h},a._engine.ellipse=function(a,b,c,d,e){var f=p("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",p(f,g.attrs);return g},a._engine.image=function(a,b,c,d,e,f){var g=p("image");p(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(m,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image";return h},a._engine.text=function(b,c,d,e){var f=p("text");b.canvas&&b.canvas.appendChild(f);var g=new z(f,b);g.attrs={x:c,y:d,"text-anchor":"middle",text:e,font:a._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs);return g},a._engine.setSize=function(a,b){this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox);return this},a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,g=b.height;if(!c)throw new Error("SVG container not found.");var h=p("svg"),i="overflow:hidden;",j;d=d||0,e=e||0,f=f||512,g=g||342,p(h,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),c==1?(h.style.cssText=i+"position:absolute;left:"+d+"px;top:"+e+"px",a._g.doc.body.appendChild(h),j=1):(h.style.cssText=i+"position:relative",c.firstChild?c.insertBefore(h,c.firstChild):c.appendChild(h)),c=new a._Paper,c.width=f,c.height=g,c.canvas=h,c.clear(),c._left=c._top=0,j&&(c.renderfix=function(){}),c.renderfix();return c},a._engine.setViewBox=function(a,b,c,d,e){k("setViewBox",this,this._viewBox,[a,b,c,d,e]);var f=g(c/this.width,d/this.height),h=this.top,i=e?"meet":"xMinYMin",j,l;a==null?(this._vbSize&&(f=1),delete this._vbSize,j="0 0 "+this.width+S+this.height):(this._vbSize=f,j=a+S+b+S+c+S+d),p(this.canvas,{viewBox:j,preserveAspectRatio:i});while(f&&h)l="stroke-width"in h.attrs?h.attrs["stroke-width"]:1,h.attr({"stroke-width":l}),h._.dirty=1,h._.dirtyT=1,h=h.prev;this._viewBox=[a,b,c,d,!!e];return this},a.prototype.renderfix=function(){var a=this.canvas,b=a.style,c=a.getScreenCTM(),d=-c.e%1,e=-c.f%1;if(d||e)d&&(this._left=(this._left+d)%1,b.left=this._left+"px"),e&&(this._top=(this._top+e)%1,b.top=this._top+"px")},a.prototype.clear=function(){a.eve("clear",this);var b=this.canvas;while(b.firstChild)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=p("desc")).appendChild(a._g.doc.createTextNode("Created with Raphaël "+a.version)),b.appendChild(this.desc),b.appendChild(this.defs=p("defs"))},a.prototype.remove=function(){k("remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=removed(a)};var B=a.st;for(var C in A)A[b](C)&&!B[b](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}(window.Raphael),window.Raphael.vml&&function(a){var b="hasOwnProperty",c=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=a.eve,m=" ",n="",o={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},p=/([clmz]),?([^clmz]*)/gi,q=/ progid:\S+Blur\([^\)]+\)/g,r=/-?[^,\s-]+/g,s="position:absolute;left:0;top:0;width:1px;height:1px",t=21600,u={path:1,rect:1},v={circle:1,ellipse:1},w=function(b){var d=/[ahqstv]/ig,e=a._pathToAbsolute;c(b).match(d)&&(e=path2curve),d=/[clmz]/g;if(e==a._pathToAbsolute&&!c(b).match(d)){var g=c(b).replace(p,function(a,b,c){var d=[],e=b.toLowerCase()=="m",g=o[b];c.replace(r,function(a){e&&d.length==2&&(g+=d+o[b=="m"?"l":"L"],d=[]),d.push(f(a*t))});return g+d});return g}var h=e(b),i,j;g=[];for(var k=0,l=h.length;k<l;k++){i=h[k],j=h[k][0].toLowerCase(),j=="z"&&(j="x");for(var q=1,s=i.length;q<s;q++)j+=f(i[q]*t)+(q!=s-1?",":n);g.push(j)}return g.join(m)},x=function(b,c,d){var e=a.matrix();e.rotate(-b,.5,.5);return{dx:e.x(c,d),dy:e.y(c,d)}},y=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,n=l.style,o=1,p="",q,r=t/b,s=t/c;n.visibility="hidden";if(!!b&&!!c){l.coordsize=i(r)+m+i(s),n.rotation=f*(b*c<0?-1:1);if(f){var u=x(f,d,e);d=u.dx,e=u.dy}b<0&&(p+="x"),c<0&&(p+=" y")&&(o=-1),n.flip=p,l.coordorigin=d*-r+m+e*-s;if(k||g.fillsize){var v=l.getElementsByTagName(j);v=v&&v[0],l.removeChild(v),k&&(u=x(f,h.x(k[0],k[1]),h.y(k[0],k[1])),v.position=u.dx*o+m+u.dy*o),g.fillsize&&(v.size=g.fillsize[0]*i(b)+m+g.fillsize[1]*i(c)),l.appendChild(v)}n.visibility="visible"}};a.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version},addArrow=function(a,b,d){var e=c(b).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";while(g--)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},setFillAndStroke=function(e,i){e.attrs=e.attrs||{};var l=e.node,o=e.attrs,p=l.style,q,r=u[e.type]&&(i.x!=o.x||i.y!=o.y||i.width!=o.width||i.height!=o.height||i.cx!=o.cx||i.cy!=o.cy||i.rx!=o.rx||i.ry!=o.ry||i.r!=o.r),s=v[e.type]&&(o.cx!=i.cx||o.cy!=i.cy||o.r!=i.r||o.rx!=i.rx||o.ry!=i.ry),x=e;for(var y in i)i[b](y)&&(o[y]=i[y]);r&&(o.path=a._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),"transform"in i&&e.transform(i.transform);if(i.path&&e.type=="path"||r)l.path=w(o.path);if(s){var z=o.cx,B=o.cy,C=o.rx||o.r||0,D=o.ry||o.r||0;l.path=a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((z-C)*t),f((B-D)*t),f((z+C)*t),f((B+D)*t),f(z*t))}if("clip-rect"in i){var F=c(i["clip-rect"]).split(k);if(F.length==4){F[2]=+F[2]+ +F[0],F[3]=+F[3]+ +F[1];var G=l.clipRect||a._g.doc.createElement("div"),H=G.style,I=l.parentNode;H.clip=a.format("rect({1}px {2}px {3}px {0}px)",F),l.clipRect||(H.position="absolute",H.top=0,H.left=0,H.width=e.paper.width+"px",H.height=e.paper.height+"px",I.parentNode.insertBefore(G,I),G.appendChild(I),l.clipRect=G)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip=n)}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,n)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}"arrow-start"in i&&addArrow(x,i["arrow-start"]),"arrow-end"in i&&addArrow(x,i["arrow-end"],1);if(i.opacity!=null||i["stroke-width"]!=null||i.fill!=null||i.src!=null||i.stroke!=null||i["stroke-width"]!=null||i["stroke-opacity"]!=null||i["fill-opacity"]!=null||i["stroke-dasharray"]!=null||i["stroke-miterlimit"]!=null||i["stroke-linejoin"]!=null||i["stroke-linecap"]!=null){var K=l.getElementsByTagName(j),L=!1;K=K&&K[0],!K&&(L=K=A(j)),e.type=="image"&&i.src&&(K.src=i.src),i.fill&&(K.on=!0);if(K.on==null||i.fill=="none"||i.fill===null)K.on=!1;if(K.on&&i.fill){var M=c(i.fill).match(a._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+m+N.y,e._.fillpos=[N.x,N.y],a._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=a.getRGB(i.fill).hex,K.src=n,K.type="solid",a.getRGB(i.fill).error&&(x.type in{circle:1,ellipse:1}||c(i.fill).charAt()!="r")&&addGradientFill(x,i.fill,K)&&(o.fill="none",o.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+o["fill-opacity"]+1||2)-1)*((+o.opacity+1||2)-1)*((+a.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=A("stroke"));if(i.stroke&&i.stroke!="none"||i["stroke-width"]||i["stroke-opacity"]!=null||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])P.on=!0;(i.stroke=="none"||i.stroke===null||P.on==null||i.stroke==0||i["stroke-width"]==0)&&(P.on=!1);var T=a.getRGB(i.stroke);P.on&&i.stroke&&(P.color=T.hex),O=((+o["stroke-opacity"]+1||2)-1)*((+o.opacity+1||2)-1)*((+T.o+1||2)-1);var U=(d(i["stroke-width"])||1)*.75;O=h(g(O,0),1),i["stroke-width"]==null&&(U=o["stroke-width"]),i["stroke-width"]&&(P.weight=U),U&&U<1&&(O*=U)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap=i["stroke-linecap"]=="butt"?"flat":i["stroke-linecap"]=="square"?"square":"round");if(i["stroke-dasharray"]){var V={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=V[b](i["stroke-dasharray"])?V[i["stroke-dasharray"]]:n}Q&&l.appendChild(P)}if(x.type=="text"){x.paper.canvas.style.display=n;var W=x.paper.span,X=100,Y=o.font&&o.font.match(/\d+(?:\.\d*)?(?=px)/);p=W.style,o.font&&(p.font=o.font),o["font-family"]&&(p.fontFamily=o["font-family"]),o["font-weight"]&&(p.fontWeight=o["font-weight"]),o["font-style"]&&(p.fontStyle=o["font-style"]),Y=d(Y?Y[0]:o["font-size"]),p.fontSize=Y*X+"px",x.textpath.string&&(W.innerHTML=c(x.textpath.string).replace(/</g,"&#60;").replace(/&/g,"&#38;").replace(/\n/g,"<br>"));var Z=W.getBoundingClientRect();x.W=o.w=(Z.right-Z.left)/X,x.H=o.h=(Z.bottom-Z.top)/X,x.paper.canvas.style.display="none",x.X=o.x,x.Y=o.y+x.H/2,("x"in i||"y"in i)&&(x.path.v=a.format("m{0},{1}l{2},{1}",f(o.x*t),f(o.y*t),f(o.x*t)+1));var $=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var _=0,ba=$.length;_<ba;_++)if($[_]in i){x._.dirty=1;break}switch(o["text-anchor"]){case"start":x.textpath.style["v-text-align"]="left",x.bbx=x.W/2;break;case"end":x.textpath.style["v-text-align"]="right",x.bbx=-x.W/2;break;default:x.textpath.style["v-text-align"]="center",x.bbx=0}x.textpath.style["v-text-kern"]=!0}},addGradientFill=function(b,f,g){b.attrs=b.attrs||{};var h=b.attrs,i,j,k="linear",l=".5 .5";b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){k="radial",b&&c&&(b=d(b),c=d(c),pow(b-.5,2)+pow(c-.5,2)>.25&&(c=e.sqrt(.25-pow(b-.5,2))*((c>.5)*2-1)+.5),l=b+m+c);return n}),f=f.split(/\s*\-\s*/);if(k=="linear"){var o=f.shift();o=-d(o);if(isNaN(o))return null}var p=a._parseDots(f);if(!p)return null;b=b.shape||b.node;if(p.length){b.removeChild(g),g.on=!0,g.method="none",g.color=p[0].color,g.color2=p[p.length-1].color;var q=[];for(var r=0,s=p.length;r<s;r++)p[r].offset&&q.push(p[r].offset+m+p[r].color);g.colors=q.length?q.join():"0% "+g.color,k=="radial"?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=l,g.angle=0):(g.type="gradient",g.angle=(270-o)%360),b.appendChild(g)}return 1},Element=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=c,this.matrix=a.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null};var z=a.el;Element.prototype=z,z.constructor=Element,z.transform=function(b){if(b==null)return this._.transform;a._extractTransform(this,b);var d=this.matrix.clone(),e=this.paper._viewBoxShift,f=this.skew,g=this.node,h,i=c(this.attrs.fill).indexOf("-")+1;d.translate(-0.5,-0.5),e&&(d.scale(e.scale,e.scale,-1,-1),d.translate(e.dx,e.dy));if(i||this.type=="image"){f.matrix="1 0 0 1",f.offset="0 0",h=d.split();if(i&&h.noRotation||!h.isSimple){g.style.filter=d.toFilter();var j=this.getBBox(),k=this.getBBox(1),l=j.x-k.x,o=j.y-k.y;g.coordorigin=l*-t+m+o*-t,y(this,1,1,l,o,0)}else g.style.filter=n,y(this,h.scalex,h.scaley,h.dx,h.dy,h.rotate)}else g.style.filter=n,f.matrix=c(d),f.offset=d.offset();return this},z.rotate=function(a,b,e){if(this.removed)return this;if(a!=null){a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,b,e]]));return this}},z.translate=function(a,b){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=b),this.transform(this._.transform.concat([["t",a,b]]));return this},z.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this._.dirtyT=1;return this},z.hide=function(){!this.removed&&(this.node.style.display="none");return this},z.show=function(){!this.removed&&(this.node.style.display=n);return this},z._getBBox=function(){if(this.removed)return{};return this.type=="text"?{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}:pathDimensions(this.attrs.path)},z.remove=function(){if(!this.removed){a.eve.unbind("*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var b in this)delete this[b];this.removed=!0}},z.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill=="none"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,"string")){if(c==j&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;var g=c.split(k),h={};for(var i=0,l=g.length;i<l;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return l-1?h:h[g[0]]}if(this.attrs&&d==null&&a.is(c,"array")){h={};for(i=0,l=c.length;i<l;i++)h[c[i]]=this.attr(c[i]);return h}var m;d!=null&&(m={},m[c]=d),d==null&&a.is(c,"object")&&(m=c);for(var n in m)a.eve("attr."+n+"."+this.id,this,m[n]);if(m){for(n in this.paper.customAttributes)if(this.paper.customAttributes[b](n)&&m[b](n)&&a.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[][concat](m[n]));this.attrs[n]=m[n];for(var p in o)o[b](p)&&(m[p]=o[p])}m.text&&this.type=="text"&&(this.textpath.string=m.text),setFillAndStroke(this,m)}return this},z.toFront=function(){!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&tofront(this,this.paper);return this},z.toBack=function(){if(this.removed)return this;this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),toback(this,this.paper));return this},z.insertAfter=function(b){if(this.removed)return this;b.constructor==Set&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},z.insertBefore=function(b){if(this.removed)return this;b.constructor==Set&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),a._insertbefore(this,b,this.paper);return this},z.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;d=d.replace(q,n),+b!==0?(this.attrs.blur=b,c.filter=d+m+ms+".Blur(pixelradius="+(+b||1.5)+")",c.margin=a.format("-{0}px 0 0 -{0}px",f(+b||1.5))):(c.filter=d,c.margin=0,delete this.attrs.blur)},a._engine.path=function(a,b){var c=A("shape");c.style.cssText=s,c.coordsize=t+m+t,c.coordorigin=b.coordorigin;var d=new Element(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=n,setFillAndStroke(d,e),b.canvas.appendChild(c);var f=A("skew");f.on=!0,c.appendChild(f),d.skew=f,d.transform(n);return d},a._engine.rect=function(b,c,d,e,f,g){var h=a._rectPath(c,d,e,f,g),i=b.path(h),j=i.attrs;i.X=j.x=c,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect";return i},a._engine.ellipse=function(a,b,c,d,e){var f=a.path(),g=f.attrs;f.X=b-d,f.Y=c-e,f.W=d*2,f.H=e*2,f.type="ellipse",setFillAndStroke(f,{cx:b,cy:c,rx:d,ry:e});return f},a._engine.circle=function(a,b,c,d){var e=a.path(),f=e.attrs;e.X=b-d,e.Y=c-d,e.W=e.H=d*2,e.type="circle",setFillAndStroke(e,{cx:b,cy:c,r:d});return e},a._engine.image=function(b,c,d,e,f,g){var h=a._rectPath(d,e,f,g),i=b.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];k.src=c,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=c,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),y(i,1,1,0,0,0);return i},a._engine.text=function(b,d,e,g){var h=A("shape"),i=A("path"),j=A("textpath");d=d||0,e=e||0,g=g||"",i.v=a.format("m{0},{1}l{2},{1}",f(d*t),f(e*t),f(d*t)+1),i.textpathok=!0,j.string=c(g),j.on=!0,h.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px",h.coordsize=t+m+t,h.coordorigin="0 0";var k=new Element(h,b),l={fill:"#000",stroke:"none",font:availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=c(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,setFillAndStroke(k,l),h.appendChild(j),h.appendChild(i),b.canvas.appendChild(h);var o=A("skew");o.on=!0,h.appendChild(o),k.skew=o,k.transform(n);return k},a._engine.setSize=function(a,b){var c=this.canvas.style;this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),c.width=a,c.height=b,c.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&setViewBox.apply(this,this._viewBox);return this},a._engine.setViewBox=function(b,c,d,e,f){a.eve("setViewBox",this,this._viewBox,[b,c,d,e,f]);var h=this.width,i=this.height,j=1/g(d/h,e/i),k,l;f&&(k=i/e,l=h/d,d*k<h&&(b-=(h-d*k)/2/k),e*l<i&&(c-=(i-e*l)/2/l)),this._viewBox=[b,c,d,e,!!f],this._viewBoxShift={dx:-b,dy:-c,scale:j},this.forEach(function(a){a.transform("...")});return this};var A,B=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),A=function(a){return b.createElement("<rvml:"+a+' class="rvml">')}}catch(c){A=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}};B(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=t*1e3+m+t*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("clear",this),this.canvas.innerHTML=n,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=removed(b);return!0}}(window.Raphael)
\ No newline at end of file
index ce38d5b..b7d54a0 100644 (file)
@@ -1,5 +1,5 @@
 // ┌─────────────────────────────────────────────────────────────────────┐ \\
-// │ Raphaël 2 - JavaScript Vector Library                               │ \\
+// │ "Raphaël 2.0" - JavaScript Vector Library                           │ \\
 // ├─────────────────────────────────────────────────────────────────────┤ \\
 // │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
 // │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
@@ -84,6 +84,7 @@
         }
     }
     R.version = "2.0.0";
+    R.eve = eve;
     var loaded,
         separator = /[, ]+/,
         elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
         }
     }
     (function (matrixproto) {
+        /*\
+         * Matrix.add
+         [ method ]
+         **
+         * Adds given matrix to existing one.
+         > Parameters
+         - a (number)
+         - b (number)
+         - c (number)
+         - d (number)
+         - e (number)
+         - f (number)
+         or
+         - matrix (object) @Matrix
+        \*/
         matrixproto.add = function (a, b, c, d, e, f) {
             var out = [[], [], []],
                 m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],
             this.e = out[0][2];
             this.f = out[1][2];
         };
+        /*\
+         * Matrix.invert
+         [ method ]
+         **
+         * Returns inverted version of the matrix
+         = (object) @Matrix
+        \*/
         matrixproto.invert = function () {
             var me = this,
                 x = me.a * me.d - me.b * me.c;
             return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);
         };
+        /*\
+         * Matrix.clone
+         [ method ]
+         **
+         * Returns copy of the matrix
+         = (object) @Matrix
+        \*/
         matrixproto.clone = function () {
             return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);
         };
+        /*\
+         * Matrix.translate
+         [ method ]
+         **
+         * Translate the matrix
+         > Parameters
+         - x (number)
+         - y (number)
+        \*/
         matrixproto.translate = function (x, y) {
             this.add(1, 0, 0, 1, x, y);
         };
+        /*\
+         * Matrix.scale
+         [ method ]
+         **
+         * Scales the matrix
+         > Parameters
+         - x (number)
+         - y (number) #optional
+         - cx (number) #optional
+         - cy (number) #optional
+        \*/
         matrixproto.scale = function (x, y, cx, cy) {
             y == null && (y = x);
-            this.add(1, 0, 0, 1, cx, cy);
+            cx || cy && this.add(1, 0, 0, 1, cx, cy);
             this.add(x, 0, 0, y, 0, 0);
-            this.add(1, 0, 0, 1, -cx, -cy);
+            cx || cy && this.add(1, 0, 0, 1, -cx, -cy);
         };
+        /*\
+         * Matrix.rotate
+         [ method ]
+         **
+         * Rotates the matrix
+         > Parameters
+         - a (number)
+         - x (number)
+         - y (number)
+        \*/
         matrixproto.rotate = function (a, x, y) {
             a = R.rad(a);
+            x = x || 0;
+            y = y || 0;
             var cos = +math.cos(a).toFixed(9),
                 sin = +math.sin(a).toFixed(9);
             this.add(cos, sin, -sin, cos, x, y);
             this.add(1, 0, 0, 1, -x, -y);
         };
+        /*\
+         * Matrix.x
+         [ method ]
+         **
+         * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y
+         > Parameters
+         - x (number)
+         - y (number)
+         = (number) x
+        \*/
         matrixproto.x = function (x, y) {
             return x * this.a + y * this.c + this.e;
         };
+        /*\
+         * Matrix.y
+         [ method ]
+         **
+         * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x
+         > Parameters
+         - x (number)
+         - y (number)
+         = (number) y
+        \*/
         matrixproto.y = function (x, y) {
             return x * this.b + y * this.d + this.f;
         };
             a[0] && (a[0] /= mag);
             a[1] && (a[1] /= mag);
         }
+        /*\
+         * Matrix.split
+         [ method ]
+         **
+         * Splits matrix into primitive transformations
+         = (object) in format:
+         o dx (number) translation by x
+         o dy (number) translation by y
+         o scalex (number) scale by x
+         o scaley (number) scale by y
+         o shear (number) shear
+         o rotate (number) rotation in deg
+         o isSimple (boolean) could it be represented via simple transformations
+        \*/
         matrixproto.split = function () {
             var out = {};
             // translation
             out.noRotation = !+out.shear.toFixed(9) && !out.rotate;
             return out;
         };
+        /*\
+         * Matrix.toTransformString
+         [ method ]
+         **
+         * Return transform string that represents given matrix
+         = (string) transform string
+        \*/
         matrixproto.toTransformString = function () {
             var s = this.split();
             if (s.isSimple) {
      o {
      o     width (number) size of the glow, default is `10`
      o     fill (boolean) will it be filled, default is `false`
-     o     opacity: opacity, default is `0.5`
-     o     offsetx: horizontal offset, default is `0`
-     o     offsety: vertical offset, default is `0`
-     o     color: glow colour, default is `black`
+     o     opacity (number) opacity, default is `0.5`
+     o     offsetx (number) horizontal offset, default is `0`
+     o     offsety (number) vertical offset, default is `0`
+     o     color (string) glow colour, default is `black`
      o }
      = (object) @Paper.set of elements that represents glow
     \*/
                 }));
             }
             out.transform(["...s", scale, scale, top, height, "t", (x - top) / scale, (y - height) / scale]);
-            // out.scale(scale, scale, top, height).translate(x - top, y - height);
         }
         return out;
     };
 
+    /*\
+     * Raphael.format
+     [ method ]
+     **
+     * Simple format function. Replaces construction of type “`{<number>}`” to the corresponding argument.
+     **
+     > Parameters
+     **
+     - token (string) string to format
+     - … (string) rest of arguments will be treated as parameters for replacement
+     = (string) formated string
+     > Usage
+     | var x = 10,
+     |     y = 20,
+     |     width = 40,
+     |     height = 50;
+     | // this will draw a rectangular shape equivalent to "M10,20h40v50h-40z"
+     | paper.path(Raphael.format("M{1},{2}h{3}v{4}h{5}z", x, y, width, height, -width));
+    \*/
     R.format = function (token, params) {
         var args = R.is(params, array) ? [0][concat](params) : arguments;
         token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {
         }));
         return token || E;
     };
+    /*\
+     * Raphael.fullfill
+     [ method ]
+     **
+     * A little bit more advanced format function than @Raphael.format. Replaces construction of type “`{<name>}`” to the corresponding argument.
+     **
+     > Parameters
+     **
+     - token (string) string to format
+     - json (object) object which properties will be used as a replacement
+     = (string) formated string
+     > Usage
+     | // this will draw a rectangular shape equivalent to "M10,20h40v50h-40z"
+     | paper.path(Raphael.format("M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z", {
+     |     x: 10,
+     |     y: 20,
+     |     dim: {
+     |         width: 40,
+     |         height: 50,
+     |         "negative width": -40
+     |     }
+     | }));
+    \*/
+    R.fullfill = (function () {
+        var tokenRegex = /\{([^\}]+)\}/g,
+            objNotationRegex = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, // matches .xxxxx or ["xxxxx"] to run over object properties
+            replacer = function (all, key, obj) {
+                var res = obj;
+                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {
+                    name = name || quotedName;
+                    if (res) {
+                        if (name in res) {
+                            res = res[name];
+                        }
+                        typeof res == "function" && isFunc && (res = res());
+                    }
+                });
+                res = (res == null || res == obj ? all : res) + "";
+                return res;
+            };
+        return function (str, obj) {
+            return String(str).replace(tokenRegex, function (all, key) {
+                return replacer(all, key, obj);
+            });
+        };
+    })();
+    /*\
+     * Raphael.ninja
+     [ method ]
+     **
+     * If you want to leave no trace of Raphaël (Well, Raphaël creates only one global variable `Raphael`, but anyway.) You can use `ninja` method.
+     * Beware, that in this case plugins could stop working, because they are depending on global variable existance.
+     **
+     = (object) Raphael object
+     > Usage
+     | (function (local_raphael) {
+     |     var paper = local_raphael(10, 10, 320, 200);
+     |     …
+     | })(Raphael.ninja());
+    \*/
     R.ninja = function () {
         oldRaphael.was ? (g.win.Raphael = oldRaphael.is) : delete Raphael;
         return R;
      * Raphael.st
      [ property (object) ]
      **
-     * You can add your own method to elements. This is usefull when you want to hack default functionality or
-     * want to wrap some common transformation or attributes in one method. In difference to canvas methods,
-     * you can redefine element method at any time. Expending element methods wouldn’t affect set.
+     * You can add your own method to elements and sets. It is wise to add a set method for each element method
+     * you added, so you will be able to call the same method on sets too.
+     **
+     * See also @Raphael.el.
      > Usage
      | Raphael.el.red = function () {
      |     this.attr({fill: "#f00"});
      | };
+     | Raphael.st.red = function () {
+     |     this.forEach(function () {
+     |         this.red();
+     |     });
+     | };
      | // then use it
-     | paper.circle(100, 100, 20).red();
+     | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();
     \*/
     R.st = setproto;
     // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
     })(document, "DOMContentLoaded");
 
     oldRaphael.was ? (g.win.Raphael = R) : (Raphael = R);
-
-    /*
-     * Eve 0.2.3 - JavaScript Events Library
-     *
-     * Copyright (c) 2010 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/)
-     * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
-     */
-
-    var eve = R.eve = (function () {
-        var version = "0.2.3",
-            has = "hasOwnProperty",
-            separator = /[\.\/]/,
-            wildcard = "*",
-            fun = function () {},
-            numsort = function (a, b) {
-                return a - b;
-            },
-            current_event,
-            events = {n: {}},
-        /*\
-         * eve
-         [ method ]
-         **
-         * Fires event with given `name`, given scope and other parameters.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated
-         - scope (object) context for the event handlers
-         - varargs (...) the rest of arguments will be sent to event handlers
-         **
-         = (array) array of errors, if any. Each element of the array is in format:
-         o {
-         o     error (string) error message
-         o     func (function) handler that caused error
-         o }
-        \*/
-            eve = function (name, scope) {
-                var e = events,
-                    args = Array.prototype.slice.call(arguments, 2),
-                    listeners = eve.listeners(name),
-                    z = 0,
-                    f = false,
-                    l,
-                    indexed = [],
-                    queue = {},
-                    errors = [];
-                current_event = name;
-                for (var i = 0, ii = listeners.length; i < ii; i++) if ("zIndex" in listeners[i]) {
-                    indexed.push(listeners[i].zIndex);
-                    if (listeners[i].zIndex < 0) {
-                        queue[listeners[i].zIndex] = listeners[i];
-                    }
-                }
-                indexed.sort(numsort);
-                while (indexed[z] < 0) {
-                    l = queue[indexed[z++]];
-                    if (l.apply(scope, args) === f) {
-                        return f;
-                    }
-                }
-                for (i = 0; i < ii; i++) {
-                    l = listeners[i];
-                    if ("zIndex" in l) {
-                        if (l.zIndex == indexed[z]) {
-                            if (l.apply(scope, args) === f) {
-                                return f;
-                            }
-                            do {
-                                z++;
-                                l = queue[indexed[z]];
-                                if (l) {
-                                    if (l.apply(scope, args) === f) {
-                                        return f;
-                                    }
-                                }
-                            } while (l)
-                        } else {
-                            queue[l.zIndex] = l;
-                        }
-                    } else {
-                        if (l.apply(scope, args) === f) {
-                            return f;
-                        }
-                    }
-                }
-            };
-        /*\
-         * eve.listeners
-         [ method ]
-         **
-         * Internal method which gives you array of all event handlers that will be triggered by the given `name`.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated
-         **
-         = (array) array of event handlers
-        \*/
-        eve.listeners = function (name) {
-            var names = name.split(separator),
-                e = events,
-                item,
-                items,
-                k,
-                i,
-                ii,
-                j,
-                jj,
-                nes,
-                es = [e],
-                out = [];
-            for (i = 0, ii = names.length; i < ii; i++) {
-                nes = [];
-                for (j = 0, jj = es.length; j < jj; j++) {
-                    e = es[j].n;
-                    items = [e[names[i]], e[wildcard]];
-                    k = 2;
-                    while (k--) {
-                        item = items[k];
-                        if (item) {
-                            nes.push(item);
-                            out = out.concat(item.f || []);
-                        }
-                    }
-                }
-                es = nes;
-            }
-            return out;
-        };
-    
-        /*\
-         * eve.on
-         [ method ]
-         **
-         * Binds given event handler with a given name. You can use wildcards “`*`” for the names:
-         | eve.on("*.under.*", f);
-         | eve("mouse.under.floor"); // triggers f
-         * Use @eve to trigger the listener.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards
-         - f (function) event handler function
-         **
-         = (function) returned function accept one number parameter that represents z-index of the handler. It is optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. 
-         > Example:
-         | eve.on("mouse", eat)(2);
-         | eve.on("mouse", scream);
-         | eve.on("mouse", catch)(1);
-         * This will ensure that `catch` function will be called before `eat`.
-         * If you want to put you hadler before not indexed handlers specify negative value.
-         * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.
-        \*/
-        eve.on = function (name, f) {
-            var names = name.split(separator),
-                e = events;
-            for (var i = 0, ii = names.length; i < ii; i++) {
-                e = e.n;
-                !e[names[i]] && (e[names[i]] = {n: {}});
-                e = e[names[i]];
-            }
-            e.f = e.f || [];
-            for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
-                return fun;
-            }
-            e.f.push(f);
-            return function (zIndex) {
-                if (+zIndex == +zIndex) {
-                    f.zIndex = +zIndex;
-                }
-            };
-        };
-        /*\
-         * eve.nt
-         [ method ]
-         **
-         * Could be used inside event handler to figure out actual name of the event.
-         **
-         > Arguments
-         **
-         - subname (string) #optional subname of the event
-         **
-         = (string) name of the event, if `subname` is not specified
-         * or
-         = (boolean) `true`, if current event’s name contains `subname`
-        \*/
-        eve.nt = function (subname) {
-            if (subname) {
-                return new RegExp("(?:\\.|\\/|^)" + subname + "(?:\\.|\\/|$)").test(current_event);
-            }
-            return current_event;
-        };
-        /*\
-         * eve.unbind
-         [ method ]
-         **
-         * Removes given function from the list of event listeners assigned to given name.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards
-         - f (function) event handler function
-        \*/
-        eve.unbind = function (name, f) {
-            var names = name.split(separator),
-                e,
-                key,
-                splice,
-                cur = [events];
-            for (var i = 0, ii = names.length; i < ii; i++) {
-                for (var j = 0; j < cur.length; j += splice.length - 2) {
-                    splice = [j, 1];
-                    e = cur[j].n;
-                    if (names[i] != wildcard) {
-                        if (e[names[i]]) {
-                            splice.push(e[names[i]]);
-                        }
-                    } else {
-                        for (key in e) if (e[has](key)) {
-                            splice.push(e[key]);
-                        }
-                    }
-                    cur.splice.apply(cur, splice);
-                }
-            }
-            for (i = 0, ii = cur.length; i < ii; i++) {
-                e = cur[i];
-                while (e.n) {
-                    if (f) {
-                        if (e.f) {
-                            for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
-                                e.f.splice(i, 1);
-                                break;
-                            }
-                            !e.f.length && delete e.f;
-                        }
-                        for (key in e.n) if (e.n[has](key) && e.n[key].f) {
-                            var funcs = e.n[key].f;
-                            for (i = 0, ii = funcs.length; i < ii; i++) if (funcs[i] == f) {
-                                funcs.splice(i, 1);
-                                break;
-                            }
-                            !funcs.length && delete e.n[key].f;
-                        }
-                    } else {
-                        delete e.f;
-                        for (key in e.n) if (e.n[has](key) && e.n[key].f) {
-                            delete e.n[key].f;
-                        }
-                    }
-                    e = e.n;
-                }
-            }
-        };
-        /*\
-         * eve.version
-         [ property (string) ]
-         **
-         * Current version of the library.
-        \*/
-        eve.version = version;
-        eve.toString = function () {
-            return "You are running Eve " + version;
-        };
-        return eve;
-    })();
-    
-    // Eve finished
     
     eve.on("DOMload", function () {
         loaded = true;
index 2f48123..ba4028c 100644 (file)
@@ -1,5 +1,291 @@
 // ┌─────────────────────────────────────────────────────────────────────┐ \\
-// │ Raphaël 2 - JavaScript Vector Library                               │ \\
+// │ "Raphaël 2.0" - JavaScript Vector Library                           │ \\
+// ├─────────────────────────────────────────────────────────────────────┤ \\
+// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
+// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
+// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\
+// └─────────────────────────────────────────────────────────────────────┘ \\
+
+/*
+ * Eve 0.3.0 - JavaScript Events Library
+ *
+ * Copyright (c) 2011 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+
+(function (glob) {
+    var version = "0.3.0",
+        has = "hasOwnProperty",
+        separator = /[\.\/]/,
+        wildcard = "*",
+        fun = function () {},
+        numsort = function (a, b) {
+            return a - b;
+        },
+        current_event,
+        stop,
+        events = {n: {}},
+    /*\
+     * eve
+     [ method ]
+     **
+     * Fires event with given `name`, given scope and other parameters.
+     **
+     > Arguments
+     **
+     - name (string) name of the event, dot (`.`) or slash (`/`) separated
+     - scope (object) context for the event handlers
+     - varargs (...) the rest of arguments will be sent to event handlers
+     **
+     = (boolean) `false` if any of callbacks return false, `true` otherwise
+    \*/
+        eve = function (name, scope) {
+            var e = events,
+                args = Array.prototype.slice.call(arguments, 2),
+                listeners = eve.listeners(name),
+                z = 0,
+                f = false,
+                l,
+                indexed = [],
+                queue = {},
+                out = [],
+                errors = [];
+            current_event = name;
+            stop = 0;
+            for (var i = 0, ii = listeners.length; i < ii; i++) if ("zIndex" in listeners[i]) {
+                indexed.push(listeners[i].zIndex);
+                if (listeners[i].zIndex < 0) {
+                    queue[listeners[i].zIndex] = listeners[i];
+                }
+            }
+            indexed.sort(numsort);
+            while (indexed[z] < 0) {
+                l = queue[indexed[z++]];
+                out.push(l.apply(scope, args));
+                if (stop) {
+                    return out;
+                }
+            }
+            for (i = 0; i < ii; i++) {
+                l = listeners[i];
+                if ("zIndex" in l) {
+                    if (l.zIndex == indexed[z]) {
+                        out.push(l.apply(scope, args));
+                        if (stop) {
+                            return out;
+                        }
+                        do {
+                            z++;
+                            l = queue[indexed[z]];
+                            l && out.push(l.apply(scope, args));
+                            if (stop) {
+                                return out;
+                            }
+                        } while (l)
+                    } else {
+                        queue[l.zIndex] = l;
+                    }
+                } else {
+                    out.push(l.apply(scope, args));
+                    if (stop) {
+                        return out;
+                    }
+                }
+            }
+            return out.length ? out : null;
+        };
+    /*\
+     * eve.listeners
+     [ method ]
+     **
+     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.
+     **
+     > Arguments
+     **
+     - name (string) name of the event, dot (`.`) or slash (`/`) separated
+     **
+     = (array) array of event handlers
+    \*/
+    eve.listeners = function (name) {
+        var names = name.split(separator),
+            e = events,
+            item,
+            items,
+            k,
+            i,
+            ii,
+            j,
+            jj,
+            nes,
+            es = [e],
+            out = [];
+        for (i = 0, ii = names.length; i < ii; i++) {
+            nes = [];
+            for (j = 0, jj = es.length; j < jj; j++) {
+                e = es[j].n;
+                items = [e[names[i]], e[wildcard]];
+                k = 2;
+                while (k--) {
+                    item = items[k];
+                    if (item) {
+                        nes.push(item);
+                        out = out.concat(item.f || []);
+                    }
+                }
+            }
+            es = nes;
+        }
+        return out;
+    };
+    
+    /*\
+     * eve.on
+     [ method ]
+     **
+     * Binds given event handler with a given name. You can use wildcards “`*`” for the names:
+     | eve.on("*.under.*", f);
+     | eve("mouse.under.floor"); // triggers f
+     * Use @eve to trigger the listener.
+     **
+     > Arguments
+     **
+     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards
+     - f (function) event handler function
+     **
+     = (function) returned function accept one number parameter that represents z-index of the handler. It is optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. 
+     > Example:
+     | eve.on("mouse", eat)(2);
+     | eve.on("mouse", scream);
+     | eve.on("mouse", catch)(1);
+     * This will ensure that `catch` function will be called before `eat`.
+     * If you want to put you hadler before not indexed handlers specify negative value.
+     * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.
+    \*/
+    eve.on = function (name, f) {
+        var names = name.split(separator),
+            e = events;
+        for (var i = 0, ii = names.length; i < ii; i++) {
+            e = e.n;
+            !e[names[i]] && (e[names[i]] = {n: {}});
+            e = e[names[i]];
+        }
+        e.f = e.f || [];
+        for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
+            return fun;
+        }
+        e.f.push(f);
+        return function (zIndex) {
+            if (+zIndex == +zIndex) {
+                f.zIndex = +zIndex;
+            }
+        };
+    };
+    /*\
+     * eve.stop
+     [ method ]
+     **
+     * Is used inside event handler to stop event
+    \*/
+    eve.stop = function () {
+        stop = 1;
+    };
+    /*\
+     * eve.nt
+     [ method ]
+     **
+     * Could be used inside event handler to figure out actual name of the event.
+     **
+     > Arguments
+     **
+     - subname (string) #optional subname of the event
+     **
+     = (string) name of the event, if `subname` is not specified
+     * or
+     = (boolean) `true`, if current event’s name contains `subname`
+    \*/
+    eve.nt = function (subname) {
+        if (subname) {
+            return new RegExp("(?:\\.|\\/|^)" + subname + "(?:\\.|\\/|$)").test(current_event);
+        }
+        return current_event;
+    };
+    /*\
+     * eve.unbind
+     [ method ]
+     **
+     * Removes given function from the list of event listeners assigned to given name.
+     **
+     > Arguments
+     **
+     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards
+     - f (function) event handler function
+    \*/
+    eve.unbind = function (name, f) {
+        var names = name.split(separator),
+            e,
+            key,
+            splice,
+            cur = [events];
+        for (var i = 0, ii = names.length; i < ii; i++) {
+            for (var j = 0; j < cur.length; j += splice.length - 2) {
+                splice = [j, 1];
+                e = cur[j].n;
+                if (names[i] != wildcard) {
+                    if (e[names[i]]) {
+                        splice.push(e[names[i]]);
+                    }
+                } else {
+                    for (key in e) if (e[has](key)) {
+                        splice.push(e[key]);
+                    }
+                }
+                cur.splice.apply(cur, splice);
+            }
+        }
+        for (i = 0, ii = cur.length; i < ii; i++) {
+            e = cur[i];
+            while (e.n) {
+                if (f) {
+                    if (e.f) {
+                        for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
+                            e.f.splice(i, 1);
+                            break;
+                        }
+                        !e.f.length && delete e.f;
+                    }
+                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {
+                        var funcs = e.n[key].f;
+                        for (i = 0, ii = funcs.length; i < ii; i++) if (funcs[i] == f) {
+                            funcs.splice(i, 1);
+                            break;
+                        }
+                        !funcs.length && delete e.n[key].f;
+                    }
+                } else {
+                    delete e.f;
+                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {
+                        delete e.n[key].f;
+                    }
+                }
+                e = e.n;
+            }
+        }
+    };
+    /*\
+     * eve.version
+     [ property (string) ]
+     **
+     * Current version of the library.
+    \*/
+    eve.version = version;
+    eve.toString = function () {
+        return "You are running Eve " + version;
+    };
+    (typeof module != "undefined" && module.exports) ? (module.exports = eve) : (glob.eve = eve);
+})(this);
+
+// ┌─────────────────────────────────────────────────────────────────────┐ \\
+// │ "Raphaël 2.0" - JavaScript Vector Library                           │ \\
 // ├─────────────────────────────────────────────────────────────────────┤ \\
 // │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
 // │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
         }
     }
     R.version = "2.0.0";
+    R.eve = eve;
     var loaded,
         separator = /[, ]+/,
         elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
         }
     }
     (function (matrixproto) {
+        /*\
+         * Matrix.add
+         [ method ]
+         **
+         * Adds given matrix to existing one.
+         > Parameters
+         - a (number)
+         - b (number)
+         - c (number)
+         - d (number)
+         - e (number)
+         - f (number)
+         or
+         - matrix (object) @Matrix
+        \*/
         matrixproto.add = function (a, b, c, d, e, f) {
             var out = [[], [], []],
                 m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],
             this.e = out[0][2];
             this.f = out[1][2];
         };
+        /*\
+         * Matrix.invert
+         [ method ]
+         **
+         * Returns inverted version of the matrix
+         = (object) @Matrix
+        \*/
         matrixproto.invert = function () {
             var me = this,
                 x = me.a * me.d - me.b * me.c;
             return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);
         };
+        /*\
+         * Matrix.clone
+         [ method ]
+         **
+         * Returns copy of the matrix
+         = (object) @Matrix
+        \*/
         matrixproto.clone = function () {
             return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);
         };
+        /*\
+         * Matrix.translate
+         [ method ]
+         **
+         * Translate the matrix
+         > Parameters
+         - x (number)
+         - y (number)
+        \*/
         matrixproto.translate = function (x, y) {
             this.add(1, 0, 0, 1, x, y);
         };
+        /*\
+         * Matrix.scale
+         [ method ]
+         **
+         * Scales the matrix
+         > Parameters
+         - x (number)
+         - y (number) #optional
+         - cx (number) #optional
+         - cy (number) #optional
+        \*/
         matrixproto.scale = function (x, y, cx, cy) {
             y == null && (y = x);
-            this.add(1, 0, 0, 1, cx, cy);
+            cx || cy && this.add(1, 0, 0, 1, cx, cy);
             this.add(x, 0, 0, y, 0, 0);
-            this.add(1, 0, 0, 1, -cx, -cy);
+            cx || cy && this.add(1, 0, 0, 1, -cx, -cy);
         };
+        /*\
+         * Matrix.rotate
+         [ method ]
+         **
+         * Rotates the matrix
+         > Parameters
+         - a (number)
+         - x (number)
+         - y (number)
+        \*/
         matrixproto.rotate = function (a, x, y) {
             a = R.rad(a);
+            x = x || 0;
+            y = y || 0;
             var cos = +math.cos(a).toFixed(9),
                 sin = +math.sin(a).toFixed(9);
             this.add(cos, sin, -sin, cos, x, y);
             this.add(1, 0, 0, 1, -x, -y);
         };
+        /*\
+         * Matrix.x
+         [ method ]
+         **
+         * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y
+         > Parameters
+         - x (number)
+         - y (number)
+         = (number) x
+        \*/
         matrixproto.x = function (x, y) {
             return x * this.a + y * this.c + this.e;
         };
+        /*\
+         * Matrix.y
+         [ method ]
+         **
+         * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x
+         > Parameters
+         - x (number)
+         - y (number)
+         = (number) y
+        \*/
         matrixproto.y = function (x, y) {
             return x * this.b + y * this.d + this.f;
         };
             a[0] && (a[0] /= mag);
             a[1] && (a[1] /= mag);
         }
+        /*\
+         * Matrix.split
+         [ method ]
+         **
+         * Splits matrix into primitive transformations
+         = (object) in format:
+         o dx (number) translation by x
+         o dy (number) translation by y
+         o scalex (number) scale by x
+         o scaley (number) scale by y
+         o shear (number) shear
+         o rotate (number) rotation in deg
+         o isSimple (boolean) could it be represented via simple transformations
+        \*/
         matrixproto.split = function () {
             var out = {};
             // translation
             out.noRotation = !+out.shear.toFixed(9) && !out.rotate;
             return out;
         };
+        /*\
+         * Matrix.toTransformString
+         [ method ]
+         **
+         * Return transform string that represents given matrix
+         = (string) transform string
+        \*/
         matrixproto.toTransformString = function () {
             var s = this.split();
             if (s.isSimple) {
      o {
      o     width (number) size of the glow, default is `10`
      o     fill (boolean) will it be filled, default is `false`
-     o     opacity: opacity, default is `0.5`
-     o     offsetx: horizontal offset, default is `0`
-     o     offsety: vertical offset, default is `0`
-     o     color: glow colour, default is `black`
+     o     opacity (number) opacity, default is `0.5`
+     o     offsetx (number) horizontal offset, default is `0`
+     o     offsety (number) vertical offset, default is `0`
+     o     color (string) glow colour, default is `black`
      o }
      = (object) @Paper.set of elements that represents glow
     \*/
                 }));
             }
             out.transform(["...s", scale, scale, top, height, "t", (x - top) / scale, (y - height) / scale]);
-            // out.scale(scale, scale, top, height).translate(x - top, y - height);
         }
         return out;
     };
 
+    /*\
+     * Raphael.format
+     [ method ]
+     **
+     * Simple format function. Replaces construction of type “`{<number>}`” to the corresponding argument.
+     **
+     > Parameters
+     **
+     - token (string) string to format
+     - … (string) rest of arguments will be treated as parameters for replacement
+     = (string) formated string
+     > Usage
+     | var x = 10,
+     |     y = 20,
+     |     width = 40,
+     |     height = 50;
+     | // this will draw a rectangular shape equivalent to "M10,20h40v50h-40z"
+     | paper.path(Raphael.format("M{1},{2}h{3}v{4}h{5}z", x, y, width, height, -width));
+    \*/
     R.format = function (token, params) {
         var args = R.is(params, array) ? [0][concat](params) : arguments;
         token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {
         }));
         return token || E;
     };
+    /*\
+     * Raphael.fullfill
+     [ method ]
+     **
+     * A little bit more advanced format function than @Raphael.format. Replaces construction of type “`{<name>}`” to the corresponding argument.
+     **
+     > Parameters
+     **
+     - token (string) string to format
+     - json (object) object which properties will be used as a replacement
+     = (string) formated string
+     > Usage
+     | // this will draw a rectangular shape equivalent to "M10,20h40v50h-40z"
+     | paper.path(Raphael.format("M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z", {
+     |     x: 10,
+     |     y: 20,
+     |     dim: {
+     |         width: 40,
+     |         height: 50,
+     |         "negative width": -40
+     |     }
+     | }));
+    \*/
+    R.fullfill = (function () {
+        var tokenRegex = /\{([^\}]+)\}/g,
+            objNotationRegex = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, // matches .xxxxx or ["xxxxx"] to run over object properties
+            replacer = function (all, key, obj) {
+                var res = obj;
+                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {
+                    name = name || quotedName;
+                    if (res) {
+                        if (name in res) {
+                            res = res[name];
+                        }
+                        typeof res == "function" && isFunc && (res = res());
+                    }
+                });
+                res = (res == null || res == obj ? all : res) + "";
+                return res;
+            };
+        return function (str, obj) {
+            return String(str).replace(tokenRegex, function (all, key) {
+                return replacer(all, key, obj);
+            });
+        };
+    })();
+    /*\
+     * Raphael.ninja
+     [ method ]
+     **
+     * If you want to leave no trace of Raphaël (Well, Raphaël creates only one global variable `Raphael`, but anyway.) You can use `ninja` method.
+     * Beware, that in this case plugins could stop working, because they are depending on global variable existance.
+     **
+     = (object) Raphael object
+     > Usage
+     | (function (local_raphael) {
+     |     var paper = local_raphael(10, 10, 320, 200);
+     |     …
+     | })(Raphael.ninja());
+    \*/
     R.ninja = function () {
         oldRaphael.was ? (g.win.Raphael = oldRaphael.is) : delete Raphael;
         return R;
      * Raphael.st
      [ property (object) ]
      **
-     * You can add your own method to elements. This is usefull when you want to hack default functionality or
-     * want to wrap some common transformation or attributes in one method. In difference to canvas methods,
-     * you can redefine element method at any time. Expending element methods wouldn’t affect set.
+     * You can add your own method to elements and sets. It is wise to add a set method for each element method
+     * you added, so you will be able to call the same method on sets too.
+     **
+     * See also @Raphael.el.
      > Usage
      | Raphael.el.red = function () {
      |     this.attr({fill: "#f00"});
      | };
+     | Raphael.st.red = function () {
+     |     this.forEach(function () {
+     |         this.red();
+     |     });
+     | };
      | // then use it
-     | paper.circle(100, 100, 20).red();
+     | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();
     \*/
     R.st = setproto;
     // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
     })(document, "DOMContentLoaded");
 
     oldRaphael.was ? (g.win.Raphael = R) : (Raphael = R);
-
-    /*
-     * Eve 0.2.3 - JavaScript Events Library
-     *
-     * Copyright (c) 2010 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/)
-     * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
-     */
-
-    var eve = R.eve = (function () {
-        var version = "0.2.3",
-            has = "hasOwnProperty",
-            separator = /[\.\/]/,
-            wildcard = "*",
-            fun = function () {},
-            numsort = function (a, b) {
-                return a - b;
-            },
-            current_event,
-            events = {n: {}},
-        /*\
-         * eve
-         [ method ]
-         **
-         * Fires event with given `name`, given scope and other parameters.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated
-         - scope (object) context for the event handlers
-         - varargs (...) the rest of arguments will be sent to event handlers
-         **
-         = (array) array of errors, if any. Each element of the array is in format:
-         o {
-         o     error (string) error message
-         o     func (function) handler that caused error
-         o }
-        \*/
-            eve = function (name, scope) {
-                var e = events,
-                    args = Array.prototype.slice.call(arguments, 2),
-                    listeners = eve.listeners(name),
-                    z = 0,
-                    f = false,
-                    l,
-                    indexed = [],
-                    queue = {},
-                    errors = [];
-                current_event = name;
-                for (var i = 0, ii = listeners.length; i < ii; i++) if ("zIndex" in listeners[i]) {
-                    indexed.push(listeners[i].zIndex);
-                    if (listeners[i].zIndex < 0) {
-                        queue[listeners[i].zIndex] = listeners[i];
-                    }
-                }
-                indexed.sort(numsort);
-                while (indexed[z] < 0) {
-                    l = queue[indexed[z++]];
-                    if (l.apply(scope, args) === f) {
-                        return f;
-                    }
-                }
-                for (i = 0; i < ii; i++) {
-                    l = listeners[i];
-                    if ("zIndex" in l) {
-                        if (l.zIndex == indexed[z]) {
-                            if (l.apply(scope, args) === f) {
-                                return f;
-                            }
-                            do {
-                                z++;
-                                l = queue[indexed[z]];
-                                if (l) {
-                                    if (l.apply(scope, args) === f) {
-                                        return f;
-                                    }
-                                }
-                            } while (l)
-                        } else {
-                            queue[l.zIndex] = l;
-                        }
-                    } else {
-                        if (l.apply(scope, args) === f) {
-                            return f;
-                        }
-                    }
-                }
-            };
-        /*\
-         * eve.listeners
-         [ method ]
-         **
-         * Internal method which gives you array of all event handlers that will be triggered by the given `name`.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated
-         **
-         = (array) array of event handlers
-        \*/
-        eve.listeners = function (name) {
-            var names = name.split(separator),
-                e = events,
-                item,
-                items,
-                k,
-                i,
-                ii,
-                j,
-                jj,
-                nes,
-                es = [e],
-                out = [];
-            for (i = 0, ii = names.length; i < ii; i++) {
-                nes = [];
-                for (j = 0, jj = es.length; j < jj; j++) {
-                    e = es[j].n;
-                    items = [e[names[i]], e[wildcard]];
-                    k = 2;
-                    while (k--) {
-                        item = items[k];
-                        if (item) {
-                            nes.push(item);
-                            out = out.concat(item.f || []);
-                        }
-                    }
-                }
-                es = nes;
-            }
-            return out;
-        };
-    
-        /*\
-         * eve.on
-         [ method ]
-         **
-         * Binds given event handler with a given name. You can use wildcards “`*`” for the names:
-         | eve.on("*.under.*", f);
-         | eve("mouse.under.floor"); // triggers f
-         * Use @eve to trigger the listener.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards
-         - f (function) event handler function
-         **
-         = (function) returned function accept one number parameter that represents z-index of the handler. It is optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. 
-         > Example:
-         | eve.on("mouse", eat)(2);
-         | eve.on("mouse", scream);
-         | eve.on("mouse", catch)(1);
-         * This will ensure that `catch` function will be called before `eat`.
-         * If you want to put you hadler before not indexed handlers specify negative value.
-         * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.
-        \*/
-        eve.on = function (name, f) {
-            var names = name.split(separator),
-                e = events;
-            for (var i = 0, ii = names.length; i < ii; i++) {
-                e = e.n;
-                !e[names[i]] && (e[names[i]] = {n: {}});
-                e = e[names[i]];
-            }
-            e.f = e.f || [];
-            for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
-                return fun;
-            }
-            e.f.push(f);
-            return function (zIndex) {
-                if (+zIndex == +zIndex) {
-                    f.zIndex = +zIndex;
-                }
-            };
-        };
-        /*\
-         * eve.nt
-         [ method ]
-         **
-         * Could be used inside event handler to figure out actual name of the event.
-         **
-         > Arguments
-         **
-         - subname (string) #optional subname of the event
-         **
-         = (string) name of the event, if `subname` is not specified
-         * or
-         = (boolean) `true`, if current event’s name contains `subname`
-        \*/
-        eve.nt = function (subname) {
-            if (subname) {
-                return new RegExp("(?:\\.|\\/|^)" + subname + "(?:\\.|\\/|$)").test(current_event);
-            }
-            return current_event;
-        };
-        /*\
-         * eve.unbind
-         [ method ]
-         **
-         * Removes given function from the list of event listeners assigned to given name.
-         **
-         > Arguments
-         **
-         - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards
-         - f (function) event handler function
-        \*/
-        eve.unbind = function (name, f) {
-            var names = name.split(separator),
-                e,
-                key,
-                splice,
-                cur = [events];
-            for (var i = 0, ii = names.length; i < ii; i++) {
-                for (var j = 0; j < cur.length; j += splice.length - 2) {
-                    splice = [j, 1];
-                    e = cur[j].n;
-                    if (names[i] != wildcard) {
-                        if (e[names[i]]) {
-                            splice.push(e[names[i]]);
-                        }
-                    } else {
-                        for (key in e) if (e[has](key)) {
-                            splice.push(e[key]);
-                        }
-                    }
-                    cur.splice.apply(cur, splice);
-                }
-            }
-            for (i = 0, ii = cur.length; i < ii; i++) {
-                e = cur[i];
-                while (e.n) {
-                    if (f) {
-                        if (e.f) {
-                            for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
-                                e.f.splice(i, 1);
-                                break;
-                            }
-                            !e.f.length && delete e.f;
-                        }
-                        for (key in e.n) if (e.n[has](key) && e.n[key].f) {
-                            var funcs = e.n[key].f;
-                            for (i = 0, ii = funcs.length; i < ii; i++) if (funcs[i] == f) {
-                                funcs.splice(i, 1);
-                                break;
-                            }
-                            !funcs.length && delete e.n[key].f;
-                        }
-                    } else {
-                        delete e.f;
-                        for (key in e.n) if (e.n[has](key) && e.n[key].f) {
-                            delete e.n[key].f;
-                        }
-                    }
-                    e = e.n;
-                }
-            }
-        };
-        /*\
-         * eve.version
-         [ property (string) ]
-         **
-         * Current version of the library.
-        \*/
-        eve.version = version;
-        eve.toString = function () {
-            return "You are running Eve " + version;
-        };
-        return eve;
-    })();
-    
-    // Eve finished
     
     eve.on("DOMload", function () {
         loaded = true;
@@ -4827,6 +5031,8 @@ window.Raphael.svg && function (R) {
          [ property (object) ]
          **
          * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.
+         **
+         * Note: Don’t mess with it.
          > Usage
          | // draw a circle at coordinate 10,10 with radius of 10
          | var c = paper.circle(10, 10, 10);
index 4fb1a62..9d77c0b 100644 (file)
@@ -601,6 +601,8 @@ window.Raphael.svg && function (R) {
          [ property (object) ]
          **
          * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.
+         **
+         * Note: Don’t mess with it.
          > Usage
          | // draw a circle at coordinate 10,10 with radius of 10
          | var c = paper.circle(10, 10, 10);
index d715e93..6dcbbad 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!-- Generated with Dr.js -->
-<html lang="en"><head><meta charset="utf-8"><title>Raphaël Reference</title><link rel="stylesheet" href="dr.css"></head><body id="dr-js"><div id="dr"><ol class="dr-toc"><li class="dr-lvl0"><a href="#Animation" class="undefined"><span>Animation</span></a></li><li class="dr-lvl1"><a href="#Animation.delay" class="dr-method"><span>Animation.delay()</span></a></li><li class="dr-lvl1"><a href="#Animation.repeat" class="dr-method"><span>Animation.repeat()</span></a></li><li class="dr-lvl0"><a href="#Element" class="undefined"><span>Element</span></a></li><li class="dr-lvl1"><a href="#Element.animate" class="dr-method"><span>Element.animate()</span></a></li><li class="dr-lvl1"><a href="#Element.animateWith" class="dr-method"><span>Element.animateWith()</span></a></li><li class="dr-lvl1"><a href="#Element.attr" class="dr-method"><span>Element.attr()</span></a></li><li class="dr-lvl1"><a href="#Element.clone" class="dr-method"><span>Element.clone()</span></a></li><li class="dr-lvl1"><a href="#Element.drag" class="dr-method"><span>Element.drag()</span></a></li><li class="dr-lvl1"><a href="#Element.getBBox" class="dr-method"><span>Element.getBBox()</span></a></li><li class="dr-lvl1"><a href="#Element.getPointAtLength" class="dr-method"><span>Element.getPointAtLength()</span></a></li><li class="dr-lvl1"><a href="#Element.getSubpath" class="dr-method"><span>Element.getSubpath()</span></a></li><li class="dr-lvl1"><a href="#Element.getTotalLength" class="dr-method"><span>Element.getTotalLength()</span></a></li><li class="dr-lvl1"><a href="#Element.glow" class="dr-method"><span>Element.glow()</span></a></li><li class="dr-lvl1"><a href="#Element.hide" class="dr-method"><span>Element.hide()</span></a></li><li class="dr-lvl1"><a href="#Element.hover" class="dr-method"><span>Element.hover()</span></a></li><li class="dr-lvl1"><a href="#Element.id" class="dr-property"><span>Element.id</span></a></li><li class="dr-lvl1"><a href="#Element.insertAfter" class="dr-method"><span>Element.insertAfter()</span></a></li><li class="dr-lvl1"><a href="#Element.insertBefore" class="dr-method"><span>Element.insertBefore()</span></a></li><li class="dr-lvl1"><a href="#Element.next" class="dr-property"><span>Element.next</span></a></li><li class="dr-lvl1"><a href="#Element.node" class="dr-property"><span>Element.node</span></a></li><li class="dr-lvl1"><a href="#Element.onDragOver" class="dr-method"><span>Element.onDragOver()</span></a></li><li class="dr-lvl1"><a href="#Element.paper" class="dr-property"><span>Element.paper</span></a></li><li class="dr-lvl1"><a href="#Element.pause" class="dr-method"><span>Element.pause()</span></a></li><li class="dr-lvl1"><a href="#Element.prev" class="dr-property"><span>Element.prev</span></a></li><li class="dr-lvl1"><a href="#Element.raphael" class="dr-property"><span>Element.raphael</span></a></li><li class="dr-lvl1"><a href="#Element.remove" class="dr-method"><span>Element.remove()</span></a></li><li class="dr-lvl1"><a href="#Element.resume" class="dr-method"><span>Element.resume()</span></a></li><li class="dr-lvl1"><a href="#Element.rotate" class="dr-method"><span>Element.rotate()</span></a></li><li class="dr-lvl1"><a href="#Element.scale" class="dr-method"><span>Element.scale()</span></a></li><li class="dr-lvl1"><a href="#Element.setTime" class="dr-method"><span>Element.setTime()</span></a></li><li class="dr-lvl1"><a href="#Element.show" class="dr-method"><span>Element.show()</span></a></li><li class="dr-lvl1"><a href="#Element.status" class="dr-method"><span>Element.status()</span></a></li><li class="dr-lvl1"><a href="#Element.stop" class="dr-method"><span>Element.stop()</span></a></li><li class="dr-lvl1"><a href="#Element.toBack" class="dr-method"><span>Element.toBack()</span></a></li><li class="dr-lvl1"><a href="#Element.toFront" class="dr-method"><span>Element.toFront()</span></a></li><li class="dr-lvl1"><a href="#Element.transform" class="dr-method"><span>Element.transform()</span></a></li><li class="dr-lvl1"><a href="#Element.translate" class="dr-method"><span>Element.translate()</span></a></li><li class="dr-lvl1"><a href="#Element.undrag" class="dr-method"><span>Element.undrag()</span></a></li><li class="dr-lvl1"><a href="#Element.unhover" class="dr-method"><span>Element.unhover()</span></a></li><li class="dr-lvl0"><a href="#Paper" class="undefined"><span>Paper</span></a></li><li class="dr-lvl1"><a href="#Paper.bottom" class="dr-property"><span>Paper.bottom</span></a></li><li class="dr-lvl1"><a href="#Paper.circle" class="dr-method"><span>Paper.circle()</span></a></li><li class="dr-lvl1"><a href="#Paper.clear" class="dr-method"><span>Paper.clear()</span></a></li><li class="dr-lvl1"><a href="#Paper.customAttributes" class="dr-property"><span>Paper.customAttributes</span></a></li><li class="dr-lvl1"><a href="#Paper.ellipse" class="dr-method"><span>Paper.ellipse()</span></a></li><li class="dr-lvl1"><a href="#Paper.forEach" class="dr-method"><span>Paper.forEach()</span></a></li><li class="dr-lvl1"><a href="#Paper.getById" class="dr-method"><span>Paper.getById()</span></a></li><li class="dr-lvl1"><a href="#Paper.getElementByPoint" class="dr-method"><span>Paper.getElementByPoint()</span></a></li><li class="dr-lvl1"><a href="#Paper.image" class="dr-method"><span>Paper.image()</span></a></li><li class="dr-lvl1"><a href="#Paper.path" class="dr-method"><span>Paper.path()</span></a></li><li class="dr-lvl1"><a href="#Paper.raphael" class="dr-property"><span>Paper.raphael</span></a></li><li class="dr-lvl1"><a href="#Paper.rect" class="dr-method"><span>Paper.rect()</span></a></li><li class="dr-lvl1"><a href="#Paper.remove" class="dr-method"><span>Paper.remove()</span></a></li><li class="dr-lvl1"><a href="#Paper.renderfix" class="dr-method"><span>Paper.renderfix()</span></a></li><li class="dr-lvl1"><a href="#Paper.safari" class="dr-method"><span>Paper.safari()</span></a></li><li class="dr-lvl1"><a href="#Paper.set" class="dr-method"><span>Paper.set()</span></a></li><li class="dr-lvl1"><a href="#Paper.setSize" class="dr-method"><span>Paper.setSize()</span></a></li><li class="dr-lvl1"><a href="#Paper.setViewBox" class="dr-method"><span>Paper.setViewBox()</span></a></li><li class="dr-lvl1"><a href="#Paper.text" class="dr-method"><span>Paper.text()</span></a></li><li class="dr-lvl1"><a href="#Paper.top" class="dr-property"><span>Paper.top</span></a></li><li class="dr-lvl0"><a href="#Raphael" class="dr-method"><span>Raphael()</span></a></li><li class="dr-lvl1"><a href="#Raphael.angle" class="dr-method"><span>Raphael.angle()</span></a></li><li class="dr-lvl1"><a href="#Raphael.animation" class="dr-method"><span>Raphael.animation()</span></a></li><li class="dr-lvl1"><a href="#Raphael.deg" class="dr-method"><span>Raphael.deg()</span></a></li><li class="dr-lvl1"><a href="#Raphael.easing_formulas" class="dr-property"><span>Raphael.easing_formulas</span></a></li><li class="dr-lvl1"><a href="#Raphael.el" class="dr-property"><span>Raphael.el</span></a></li><li class="dr-lvl1"><a href="#Raphael.findDotsAtSegment" class="dr-method"><span>Raphael.findDotsAtSegment()</span></a></li><li class="dr-lvl1"><a href="#Raphael.fn" class="dr-property"><span>Raphael.fn</span></a></li><li class="dr-lvl1"><a href="#Raphael.getColor" class="dr-method"><span>Raphael.getColor()</span></a></li><li class="dr-lvl2"><a href="#Raphael.getColor.reset" class="dr-method"><span>Raphael.getColor.reset()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getPointAtLength" class="dr-method"><span>Raphael.getPointAtLength()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getRGB" class="dr-method"><span>Raphael.getRGB()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getSubpath" class="dr-method"><span>Raphael.getSubpath()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getTotalLength" class="dr-method"><span>Raphael.getTotalLength()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsb" class="dr-method"><span>Raphael.hsb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsb2rgb" class="dr-method"><span>Raphael.hsb2rgb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsl" class="dr-method"><span>Raphael.hsl()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsl2rgb" class="dr-method"><span>Raphael.hsl2rgb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.is" class="dr-method"><span>Raphael.is()</span></a></li><li class="dr-lvl1"><a href="#Raphael.parsePathString" class="dr-method"><span>Raphael.parsePathString()</span></a></li><li class="dr-lvl1"><a href="#Raphael.parseTransformString" class="dr-method"><span>Raphael.parseTransformString()</span></a></li><li class="dr-lvl1"><a href="#Raphael.path2curve" class="dr-method"><span>Raphael.path2curve()</span></a></li><li class="dr-lvl1"><a href="#Raphael.pathToRelative" class="dr-method"><span>Raphael.pathToRelative()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rad" class="dr-method"><span>Raphael.rad()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rgb" class="dr-method"><span>Raphael.rgb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rgb2hsb" class="dr-method"><span>Raphael.rgb2hsb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rgb2hsl" class="dr-method"><span>Raphael.rgb2hsl()</span></a></li><li class="dr-lvl1"><a href="#Raphael.setWindow" class="dr-method"><span>Raphael.setWindow()</span></a></li><li class="dr-lvl1"><a href="#Raphael.snapTo" class="dr-method"><span>Raphael.snapTo()</span></a></li><li class="dr-lvl1"><a href="#Raphael.svg" class="dr-property"><span>Raphael.svg</span></a></li><li class="dr-lvl1"><a href="#Raphael.type" class="dr-property"><span>Raphael.type</span></a></li><li class="dr-lvl1"><a href="#Raphael.vml" class="dr-property"><span>Raphael.vml</span></a></li><li class="dr-lvl0"><a href="#Set" class="undefined"><span>Set</span></a></li><li class="dr-lvl1"><a href="#Set.forEach" class="dr-method"><span>Set.forEach()</span></a></li><li class="dr-lvl1"><a href="#Set.pop" class="dr-method"><span>Set.pop()</span></a></li><li class="dr-lvl1"><a href="#Set.push" class="dr-method"><span>Set.push()</span></a></li></ol><div class="dr-doc"><h1>Raphaël Reference</h1><p class="dr-source">Check out the source: <a href="raphael-src.html">raphael.js</a></p><h2 id="Animation" class="undefined"><i class="dr-trixie">&#160;</i>Animation<a href="#Animation" title="Link to this section" class="dr-hash">&#x2693;</a></h2>
-<h3 id="Animation.delay" class="dr-method"><i class="dr-trixie">&#160;</i>Animation.delay(delay)<a href="#Animation.delay" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5146">&#x27ad;</a></h3>
+<html lang="en"><head><meta charset="utf-8"><title>Raphaël 2.0 Reference</title><link rel="stylesheet" href="dr.css"></head><body id="dr-js"><div id="dr"><ol class="dr-toc"><li class="dr-lvl0"><a href="#Animation" class="{clas}"><span>Animation</span></a></li><li class="dr-lvl1"><a href="#Animation.delay" class="dr-method"><span>Animation.delay()</span></a></li><li class="dr-lvl1"><a href="#Animation.repeat" class="dr-method"><span>Animation.repeat()</span></a></li><li class="dr-lvl0"><a href="#Element" class="{clas}"><span>Element</span></a></li><li class="dr-lvl1"><a href="#Element.animate" class="dr-method"><span>Element.animate()</span></a></li><li class="dr-lvl1"><a href="#Element.animateWith" class="dr-method"><span>Element.animateWith()</span></a></li><li class="dr-lvl1"><a href="#Element.attr" class="dr-method"><span>Element.attr()</span></a></li><li class="dr-lvl1"><a href="#Element.clone" class="dr-method"><span>Element.clone()</span></a></li><li class="dr-lvl1"><a href="#Element.drag" class="dr-method"><span>Element.drag()</span></a></li><li class="dr-lvl1"><a href="#Element.getBBox" class="dr-method"><span>Element.getBBox()</span></a></li><li class="dr-lvl1"><a href="#Element.getPointAtLength" class="dr-method"><span>Element.getPointAtLength()</span></a></li><li class="dr-lvl1"><a href="#Element.getSubpath" class="dr-method"><span>Element.getSubpath()</span></a></li><li class="dr-lvl1"><a href="#Element.getTotalLength" class="dr-method"><span>Element.getTotalLength()</span></a></li><li class="dr-lvl1"><a href="#Element.glow" class="dr-method"><span>Element.glow()</span></a></li><li class="dr-lvl1"><a href="#Element.hide" class="dr-method"><span>Element.hide()</span></a></li><li class="dr-lvl1"><a href="#Element.hover" class="dr-method"><span>Element.hover()</span></a></li><li class="dr-lvl1"><a href="#Element.id" class="dr-property"><span>Element.id</span></a></li><li class="dr-lvl1"><a href="#Element.insertAfter" class="dr-method"><span>Element.insertAfter()</span></a></li><li class="dr-lvl1"><a href="#Element.insertBefore" class="dr-method"><span>Element.insertBefore()</span></a></li><li class="dr-lvl1"><a href="#Element.next" class="dr-property"><span>Element.next</span></a></li><li class="dr-lvl1"><a href="#Element.node" class="dr-property"><span>Element.node</span></a></li><li class="dr-lvl1"><a href="#Element.onDragOver" class="dr-method"><span>Element.onDragOver()</span></a></li><li class="dr-lvl1"><a href="#Element.paper" class="dr-property"><span>Element.paper</span></a></li><li class="dr-lvl1"><a href="#Element.pause" class="dr-method"><span>Element.pause()</span></a></li><li class="dr-lvl1"><a href="#Element.prev" class="dr-property"><span>Element.prev</span></a></li><li class="dr-lvl1"><a href="#Element.raphael" class="dr-property"><span>Element.raphael</span></a></li><li class="dr-lvl1"><a href="#Element.remove" class="dr-method"><span>Element.remove()</span></a></li><li class="dr-lvl1"><a href="#Element.resume" class="dr-method"><span>Element.resume()</span></a></li><li class="dr-lvl1"><a href="#Element.rotate" class="dr-method"><span>Element.rotate()</span></a></li><li class="dr-lvl1"><a href="#Element.scale" class="dr-method"><span>Element.scale()</span></a></li><li class="dr-lvl1"><a href="#Element.setTime" class="dr-method"><span>Element.setTime()</span></a></li><li class="dr-lvl1"><a href="#Element.show" class="dr-method"><span>Element.show()</span></a></li><li class="dr-lvl1"><a href="#Element.status" class="dr-method"><span>Element.status()</span></a></li><li class="dr-lvl1"><a href="#Element.stop" class="dr-method"><span>Element.stop()</span></a></li><li class="dr-lvl1"><a href="#Element.toBack" class="dr-method"><span>Element.toBack()</span></a></li><li class="dr-lvl1"><a href="#Element.toFront" class="dr-method"><span>Element.toFront()</span></a></li><li class="dr-lvl1"><a href="#Element.transform" class="dr-method"><span>Element.transform()</span></a></li><li class="dr-lvl1"><a href="#Element.translate" class="dr-method"><span>Element.translate()</span></a></li><li class="dr-lvl1"><a href="#Element.undrag" class="dr-method"><span>Element.undrag()</span></a></li><li class="dr-lvl1"><a href="#Element.unhover" class="dr-method"><span>Element.unhover()</span></a></li><li class="dr-lvl0"><a href="#Matrix" class="{clas}"><span>Matrix</span></a></li><li class="dr-lvl1"><a href="#Matrix.add" class="dr-method"><span>Matrix.add()</span></a></li><li class="dr-lvl1"><a href="#Matrix.clone" class="dr-method"><span>Matrix.clone()</span></a></li><li class="dr-lvl1"><a href="#Matrix.invert" class="dr-method"><span>Matrix.invert()</span></a></li><li class="dr-lvl1"><a href="#Matrix.rotate" class="dr-method"><span>Matrix.rotate()</span></a></li><li class="dr-lvl1"><a href="#Matrix.scale" class="dr-method"><span>Matrix.scale()</span></a></li><li class="dr-lvl1"><a href="#Matrix.split" class="dr-method"><span>Matrix.split()</span></a></li><li class="dr-lvl1"><a href="#Matrix.toTransformString" class="dr-method"><span>Matrix.toTransformString()</span></a></li><li class="dr-lvl1"><a href="#Matrix.translate" class="dr-method"><span>Matrix.translate()</span></a></li><li class="dr-lvl1"><a href="#Matrix.x" class="dr-method"><span>Matrix.x()</span></a></li><li class="dr-lvl1"><a href="#Matrix.y" class="dr-method"><span>Matrix.y()</span></a></li><li class="dr-lvl0"><a href="#Paper" class="{clas}"><span>Paper</span></a></li><li class="dr-lvl1"><a href="#Paper.bottom" class="dr-property"><span>Paper.bottom</span></a></li><li class="dr-lvl1"><a href="#Paper.circle" class="dr-method"><span>Paper.circle()</span></a></li><li class="dr-lvl1"><a href="#Paper.clear" class="dr-method"><span>Paper.clear()</span></a></li><li class="dr-lvl1"><a href="#Paper.customAttributes" class="dr-property"><span>Paper.customAttributes</span></a></li><li class="dr-lvl1"><a href="#Paper.ellipse" class="dr-method"><span>Paper.ellipse()</span></a></li><li class="dr-lvl1"><a href="#Paper.forEach" class="dr-method"><span>Paper.forEach()</span></a></li><li class="dr-lvl1"><a href="#Paper.getById" class="dr-method"><span>Paper.getById()</span></a></li><li class="dr-lvl1"><a href="#Paper.getElementByPoint" class="dr-method"><span>Paper.getElementByPoint()</span></a></li><li class="dr-lvl1"><a href="#Paper.image" class="dr-method"><span>Paper.image()</span></a></li><li class="dr-lvl1"><a href="#Paper.path" class="dr-method"><span>Paper.path()</span></a></li><li class="dr-lvl1"><a href="#Paper.raphael" class="dr-property"><span>Paper.raphael</span></a></li><li class="dr-lvl1"><a href="#Paper.rect" class="dr-method"><span>Paper.rect()</span></a></li><li class="dr-lvl1"><a href="#Paper.remove" class="dr-method"><span>Paper.remove()</span></a></li><li class="dr-lvl1"><a href="#Paper.renderfix" class="dr-method"><span>Paper.renderfix()</span></a></li><li class="dr-lvl1"><a href="#Paper.safari" class="dr-method"><span>Paper.safari()</span></a></li><li class="dr-lvl1"><a href="#Paper.set" class="dr-method"><span>Paper.set()</span></a></li><li class="dr-lvl1"><a href="#Paper.setFinish" class="dr-method"><span>Paper.setFinish()</span></a></li><li class="dr-lvl1"><a href="#Paper.setSize" class="dr-method"><span>Paper.setSize()</span></a></li><li class="dr-lvl1"><a href="#Paper.setStart" class="dr-method"><span>Paper.setStart()</span></a></li><li class="dr-lvl1"><a href="#Paper.setViewBox" class="dr-method"><span>Paper.setViewBox()</span></a></li><li class="dr-lvl1"><a href="#Paper.text" class="dr-method"><span>Paper.text()</span></a></li><li class="dr-lvl1"><a href="#Paper.top" class="dr-property"><span>Paper.top</span></a></li><li class="dr-lvl0"><a href="#Raphael" class="dr-method"><span>Raphael()</span></a></li><li class="dr-lvl1"><a href="#Raphael.angle" class="dr-method"><span>Raphael.angle()</span></a></li><li class="dr-lvl1"><a href="#Raphael.animation" class="dr-method"><span>Raphael.animation()</span></a></li><li class="dr-lvl1"><a href="#Raphael.color" class="dr-method"><span>Raphael.color()</span></a></li><li class="dr-lvl1"><a href="#Raphael.deg" class="dr-method"><span>Raphael.deg()</span></a></li><li class="dr-lvl1"><a href="#Raphael.easing_formulas" class="dr-property"><span>Raphael.easing_formulas</span></a></li><li class="dr-lvl1"><a href="#Raphael.el" class="dr-property"><span>Raphael.el</span></a></li><li class="dr-lvl1"><a href="#Raphael.findDotsAtSegment" class="dr-method"><span>Raphael.findDotsAtSegment()</span></a></li><li class="dr-lvl1"><a href="#Raphael.fn" class="dr-property"><span>Raphael.fn</span></a></li><li class="dr-lvl1"><a href="#Raphael.format" class="dr-method"><span>Raphael.format()</span></a></li><li class="dr-lvl1"><a href="#Raphael.fullfill" class="dr-method"><span>Raphael.fullfill()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getColor" class="dr-method"><span>Raphael.getColor()</span></a></li><li class="dr-lvl2"><a href="#Raphael.getColor.reset" class="dr-method"><span>Raphael.getColor.reset()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getPointAtLength" class="dr-method"><span>Raphael.getPointAtLength()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getRGB" class="dr-method"><span>Raphael.getRGB()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getSubpath" class="dr-method"><span>Raphael.getSubpath()</span></a></li><li class="dr-lvl1"><a href="#Raphael.getTotalLength" class="dr-method"><span>Raphael.getTotalLength()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsb" class="dr-method"><span>Raphael.hsb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsb2rgb" class="dr-method"><span>Raphael.hsb2rgb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsl" class="dr-method"><span>Raphael.hsl()</span></a></li><li class="dr-lvl1"><a href="#Raphael.hsl2rgb" class="dr-method"><span>Raphael.hsl2rgb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.is" class="dr-method"><span>Raphael.is()</span></a></li><li class="dr-lvl1"><a href="#Raphael.matrix" class="dr-method"><span>Raphael.matrix()</span></a></li><li class="dr-lvl1"><a href="#Raphael.ninja" class="dr-method"><span>Raphael.ninja()</span></a></li><li class="dr-lvl1"><a href="#Raphael.parsePathString" class="dr-method"><span>Raphael.parsePathString()</span></a></li><li class="dr-lvl1"><a href="#Raphael.parseTransformString" class="dr-method"><span>Raphael.parseTransformString()</span></a></li><li class="dr-lvl1"><a href="#Raphael.path2curve" class="dr-method"><span>Raphael.path2curve()</span></a></li><li class="dr-lvl1"><a href="#Raphael.pathToRelative" class="dr-method"><span>Raphael.pathToRelative()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rad" class="dr-method"><span>Raphael.rad()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rgb" class="dr-method"><span>Raphael.rgb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rgb2hsb" class="dr-method"><span>Raphael.rgb2hsb()</span></a></li><li class="dr-lvl1"><a href="#Raphael.rgb2hsl" class="dr-method"><span>Raphael.rgb2hsl()</span></a></li><li class="dr-lvl1"><a href="#Raphael.setWindow" class="dr-method"><span>Raphael.setWindow()</span></a></li><li class="dr-lvl1"><a href="#Raphael.snapTo" class="dr-method"><span>Raphael.snapTo()</span></a></li><li class="dr-lvl1"><a href="#Raphael.st" class="dr-property"><span>Raphael.st</span></a></li><li class="dr-lvl1"><a href="#Raphael.svg" class="dr-property"><span>Raphael.svg</span></a></li><li class="dr-lvl1"><a href="#Raphael.type" class="dr-property"><span>Raphael.type</span></a></li><li class="dr-lvl1"><a href="#Raphael.vml" class="dr-property"><span>Raphael.vml</span></a></li><li class="dr-lvl0"><a href="#Set" class="{clas}"><span>Set</span></a></li><li class="dr-lvl1"><a href="#Set.forEach" class="dr-method"><span>Set.forEach()</span></a></li><li class="dr-lvl1"><a href="#Set.pop" class="dr-method"><span>Set.pop()</span></a></li><li class="dr-lvl1"><a href="#Set.push" class="dr-method"><span>Set.push()</span></a></li><li class="dr-lvl0"><a href="#eve" class="dr-method"><span>eve()</span></a></li><li class="dr-lvl1"><a href="#eve.listeners" class="dr-method"><span>eve.listeners()</span></a></li><li class="dr-lvl1"><a href="#eve.nt" class="dr-method"><span>eve.nt()</span></a></li><li class="dr-lvl1"><a href="#eve.on" class="dr-method"><span>eve.on()</span></a></li><li class="dr-lvl1"><a href="#eve.stop" class="dr-method"><span>eve.stop()</span></a></li><li class="dr-lvl1"><a href="#eve.unbind" class="dr-method"><span>eve.unbind()</span></a></li><li class="dr-lvl1"><a href="#eve.version" class="dr-property"><span>eve.version</span></a></li></ol><div class="dr-doc"><h1>Raphaël 2.0 Reference</h1><h2 id="Animation" class="undefined"><i class="dr-trixie">&#160;</i>Animation<a href="#Animation" title="Link to this section" class="dr-hash">&#x2693;</a></h2>
+<h3 id="Animation.delay" class="dr-method"><i class="dr-trixie">&#160;</i>Animation.delay(delay)<a href="#Animation.delay" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3335 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3335">&#x27ad;</a></h3>
 <div class="dr-method"><p>Creates a copy of existing animation object with given delay.
 </p>
 <p class="header">Parameters
@@ -11,7 +11,7 @@
 <dd class="dr-description">number of ms to pass between animation start and actual animation</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">new altered Animation object</span></p>
-</div><h3 id="Animation.repeat" class="dr-method"><i class="dr-trixie">&#160;</i>Animation.repeat(repeat)<a href="#Animation.repeat" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5164">&#x27ad;</a></h3>
+</div><h3 id="Animation.repeat" class="dr-method"><i class="dr-trixie">&#160;</i>Animation.repeat(repeat)<a href="#Animation.repeat" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3353 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3353">&#x27ad;</a></h3>
 <div class="dr-method"><p>Creates a copy of existing animation object with given repetition.
 </p>
 <p class="header">Parameters
@@ -22,7 +22,7 @@
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">new altered Animation object</span></p>
 </div><h2 id="Element" class="undefined"><i class="dr-trixie">&#160;</i>Element<a href="#Element" title="Link to this section" class="dr-hash">&#x2693;</a></h2>
-<h3 id="Element.animate" class="dr-method"><i class="dr-trixie">&#160;</i>Element.animate(…)<a href="#Element.animate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5423">&#x27ad;</a></h3>
+<h3 id="Element.animate" class="dr-method"><i class="dr-trixie">&#160;</i>Element.animate(…)<a href="#Element.animate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3617 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3617">&#x27ad;</a></h3>
 <div class="dr-method"><p>Creates and starts animation for given element.
 </p>
 <p class="header">Parameters
@@ -49,7 +49,7 @@
 <dd class="dr-description">animation object, see <a href="#Raphael.animation" class="dr-link">Raphael.animation</a></dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element</span></p>
-</div><h3 id="Element.animateWith" class="dr-method"><i class="dr-trixie">&#160;</i>Element.animateWith(…)<a href="#Element.animateWith" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5051">&#x27ad;</a></h3>
+</div><h3 id="Element.animateWith" class="dr-method"><i class="dr-trixie">&#160;</i>Element.animateWith(…)<a href="#Element.animateWith" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3240 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3240">&#x27ad;</a></h3>
 <div class="dr-method"><p>Acts similar to <a href="#Element.animate" class="dr-link">Element.animate</a>, but ensure that given animation runs in sync with another given element.
 </p>
 <p class="header">Parameters
@@ -76,7 +76,7 @@
 <dd class="dr-description">animation object, see <a href="#Raphael.animation" class="dr-link">Raphael.animation</a></dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element</span></p>
-</div><h3 id="Element.attr" class="dr-method"><i class="dr-trixie">&#160;</i>Element.attr(…)<a href="#Element.attr" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2714">&#x27ad;</a></h3>
+</div><h3 id="Element.attr" class="dr-method"><i class="dr-trixie">&#160;</i>Element.attr(…)<a href="#Element.attr" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 972 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L972">&#x27ad;</a></h3>
 <div class="dr-method"><p>Sets the attributes of the element.
 </p>
 <p class="header">Parameters
@@ -177,9 +177,9 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
     <li>hsla(•••, •••, •••) — same as above, but with opacity</li>
     <li>Optionally for hsb and hsl you could specify hue as a degree: “<code>hsl(240deg,&nbsp;1,&nbsp;.5)</code>” or, if you want to go fancy, “<code>hsl(240°,&nbsp;1,&nbsp;.5)</code>”</li>
 </ul>
-</div><h3 id="Element.clone" class="dr-method"><i class="dr-trixie">&#160;</i>Element.clone()<a href="#Element.clone" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4579">&#x27ad;</a></h3>
+</div><h3 id="Element.clone" class="dr-method"><i class="dr-trixie">&#160;</i>Element.clone()<a href="#Element.clone" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2773 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2773">&#x27ad;</a></h3>
 <div class="dr-method"><p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">clone of a given element</span></p>
-</div><h3 id="Element.drag" class="dr-method"><i class="dr-trixie">&#160;</i>Element.drag(onmove, onstart, onend, [mcontext], [scontext], [econtext])<a href="#Element.drag" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4181">&#x27ad;</a></h3>
+</div><h3 id="Element.drag" class="dr-method"><i class="dr-trixie">&#160;</i>Element.drag(onmove, onstart, onend, [mcontext], [scontext], [econtext])<a href="#Element.drag" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2331 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2331">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds event handlers for drag of the element.
 </p>
 <p class="header">Parameters
@@ -229,7 +229,7 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
 <ol class="dr-json"><li><span class="dr-json-key">event</span><span class="dr-type"><em class="dr-type-object">object</em></span><span class="dr-json-description">DOM event object</span>
 </ol>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.getBBox" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getBBox(isWithoutTransform)<a href="#Element.getBBox" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4547">&#x27ad;</a></h3>
+</div><h3 id="Element.getBBox" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getBBox(isWithoutTransform)<a href="#Element.getBBox" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2741 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2741">&#x27ad;</a></h3>
 <div class="dr-method"><p>Return bounding box for a given element
 </p>
 <p class="header">Parameters
@@ -244,7 +244,7 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
 <li><span class="dr-json-key">width:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">width</span>
 <li><span class="dr-json-key">height:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">height</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Element.getPointAtLength" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getPointAtLength(length)<a href="#Element.getPointAtLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4800">&#x27ad;</a></h3>
+</div><h3 id="Element.getPointAtLength" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getPointAtLength(length)<a href="#Element.getPointAtLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2991 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2991">&#x27ad;</a></h3>
 <div class="dr-method"><p>Return coordinates of the point located at the given length on the given path. Only works for element of “path” type.
 </p>
 <p class="header">Parameters
@@ -258,7 +258,7 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
 <li><span class="dr-json-key">y:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">y coordinate</span>
 <li><span class="dr-json-key">alpha:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">angle of derivative</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Element.getSubpath" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getSubpath(from, to)<a href="#Element.getSubpath" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4817">&#x27ad;</a></h3>
+</div><h3 id="Element.getSubpath" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getSubpath(from, to)<a href="#Element.getSubpath" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3008 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3008">&#x27ad;</a></h3>
 <div class="dr-method"><p>Return subpath of a given element from given length to given length. Only works for element of “path” type.
 </p>
 <p class="header">Parameters
@@ -271,11 +271,11 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
 <dd class="dr-description">position of the end of the segment</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">pathstring for the segment</span></p>
-</div><h3 id="Element.getTotalLength" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getTotalLength()<a href="#Element.getTotalLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4776">&#x27ad;</a></h3>
+</div><h3 id="Element.getTotalLength" class="dr-method"><i class="dr-trixie">&#160;</i>Element.getTotalLength()<a href="#Element.getTotalLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2967 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2967">&#x27ad;</a></h3>
 <div class="dr-method"><p>Returns length of the path in pixels. Only works for element of “path” type.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">length.</span></p>
-</div><h3 id="Element.glow" class="dr-method"><i class="dr-trixie">&#160;</i>Element.glow([glow])<a href="#Element.glow" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4609">&#x27ad;</a></h3>
+</div><h3 id="Element.glow" class="dr-method"><i class="dr-trixie">&#160;</i>Element.glow([glow])<a href="#Element.glow" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2800 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2800">&#x27ad;</a></h3>
 <div class="dr-method"><p>Return set of elements that create glow-like effect around given element. See <a href="#Paper.set" class="dr-link">Paper.set</a>.
 </p>
 <p>Note: Glow is not connected to the element. If you change element attributes it won’t adjust itself.
@@ -289,13 +289,17 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
 </dl>
 <ol class="dr-json"><li>{<ol class="dr-json"><li><span class="dr-json-key">width</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">size of the glow, default is <code>10</code></span>
 <li><span class="dr-json-key">fill</span><span class="dr-type"><em class="dr-type-boolean">boolean</em></span><span class="dr-json-description">will it be filled, default is <code>false</code></span>
-<li>    opacity: opacity, default is `0.5`<li>    offsetx: horizontal offset, default is `0`<li>    offsety: vertical offset, default is `0`<li>    color: glow colour, default is `black`</ol></li><li>}</li></ol>
+<li><span class="dr-json-key">opacity</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">opacity, default is <code>0.5</code></span>
+<li><span class="dr-json-key">offsetx</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">horizontal offset, default is <code>0</code></span>
+<li><span class="dr-json-key">offsety</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">vertical offset, default is <code>0</code></span>
+<li><span class="dr-json-key">color</span><span class="dr-type"><em class="dr-type-string">string</em></span><span class="dr-json-description">glow colour, default is <code>black</code></span>
+</ol></li><li>}</li></ol>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Paper.set" class="dr-link">Paper.set</a> of elements that represents glow</span></p>
-</div><h3 id="Element.hide" class="dr-method"><i class="dr-trixie">&#160;</i>Element.hide()<a href="#Element.hide" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2584">&#x27ad;</a></h3>
+</div><h3 id="Element.hide" class="dr-method"><i class="dr-trixie">&#160;</i>Element.hide()<a href="#Element.hide" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 842 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L842">&#x27ad;</a></h3>
 <div class="dr-method"><p>Makes element invisible. See <a href="#Element.show" class="dr-link">Element.show</a>.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.hover" class="dr-method"><i class="dr-trixie">&#160;</i>Element.hover(f_in, f_out, [icontext], [ocontext])<a href="#Element.hover" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4135">&#x27ad;</a></h3>
+</div><h3 id="Element.hover" class="dr-method"><i class="dr-trixie">&#160;</i>Element.hover(f_in, f_out, [icontext], [ocontext])<a href="#Element.hover" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2285 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2285">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds event handlers for hover for the element.
 </p>
 <p class="header">Parameters
@@ -316,23 +320,24 @@ at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can o
 <dd class="dr-description">context for hover out handler</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.id" class="dr-property"><i class="dr-trixie">&#160;</i>Element.id<a href="#Element.id" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2387">&#x27ad;</a></h3>
+</div><h3 id="Element.id" class="dr-property"><i class="dr-trixie">&#160;</i>Element.id<a href="#Element.id" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 634 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L634">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-number">number</em><p>Unique id of the element. Especially usesful when you want to listen to events of the element, 
 because all events are fired in format <code>&lt;module>.&lt;action>.&lt;id></code>. Also useful for <a href="#Paper.getById" class="dr-link">Paper.getById</a> method.
 </p>
-</div><h3 id="Element.insertAfter" class="dr-method"><i class="dr-trixie">&#160;</i>Element.insertAfter()<a href="#Element.insertAfter" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2806">&#x27ad;</a></h3>
+</div><h3 id="Element.insertAfter" class="dr-method"><i class="dr-trixie">&#160;</i>Element.insertAfter()<a href="#Element.insertAfter" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1070 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1070">&#x27ad;</a></h3>
 <div class="dr-method"><p>Inserts current object after the given one.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.insertBefore" class="dr-method"><i class="dr-trixie">&#160;</i>Element.insertBefore()<a href="#Element.insertBefore" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2826">&#x27ad;</a></h3>
+</div><h3 id="Element.insertBefore" class="dr-method"><i class="dr-trixie">&#160;</i>Element.insertBefore()<a href="#Element.insertBefore" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1090 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1090">&#x27ad;</a></h3>
 <div class="dr-method"><p>Inserts current object before the given one.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.next" class="dr-property"><i class="dr-trixie">&#160;</i>Element.next<a href="#Element.next" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2430">&#x27ad;</a></h3>
+</div><h3 id="Element.next" class="dr-property"><i class="dr-trixie">&#160;</i>Element.next<a href="#Element.next" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 677 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L677">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>Reference to the next element in the hierarchy.
 </p>
-</div><h3 id="Element.node" class="dr-property"><i class="dr-trixie">&#160;</i>Element.node<a href="#Element.node" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2366">&#x27ad;</a></h3>
+</div><h3 id="Element.node" class="dr-property"><i class="dr-trixie">&#160;</i>Element.node<a href="#Element.node" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 613 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L613">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>Gives you a reference to the DOM object, so you can assign event handlers or just mess around.
+Note: Don’t mess with it.
 </p>
 <p class="header">Usage
 </p>
@@ -342,7 +347,7 @@ c.node.onclick<span class="s"> = </span><b>function</b> () {
     c.attr(<i>"fill"</i>, <i>"red"</i>);
 };
 </code></pre>
-</div><h3 id="Element.onDragOver" class="dr-method"><i class="dr-trixie">&#160;</i>Element.onDragOver(f)<a href="#Element.onDragOver" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4208">&#x27ad;</a></h3>
+</div><h3 id="Element.onDragOver" class="dr-method"><i class="dr-trixie">&#160;</i>Element.onDragOver(f)<a href="#Element.onDragOver" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2358 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2358">&#x27ad;</a></h3>
 <div class="dr-method"><p>Shortcut for assigning event handler for <code>drag.over.&lt;id></code> event, where id is id of the element (see <a href="#Element.id" class="dr-link">Element.id</a>).
 </p>
 <p class="header">Parameters
@@ -351,7 +356,7 @@ c.node.onclick<span class="s"> = </span><b>function</b> () {
 <dd class="dr-type"><em class="dr-type-function">function</em></dd>
 <dd class="dr-description">handler for event</dd>
 </dl>
-</div><h3 id="Element.paper" class="dr-property"><i class="dr-trixie">&#160;</i>Element.paper<a href="#Element.paper" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2403">&#x27ad;</a></h3>
+</div><h3 id="Element.paper" class="dr-property"><i class="dr-trixie">&#160;</i>Element.paper<a href="#Element.paper" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 650 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L650">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>Internal reference to “paper” where object drawn. Mainly for use in plugins and element extensions.
 </p>
 <p class="header">Usage
@@ -362,7 +367,7 @@ c.node.onclick<span class="s"> = </span><b>function</b> () {
         .attr({stroke: <i>"red"</i>});
 }
 </code></pre>
-</div><h3 id="Element.pause" class="dr-method"><i class="dr-trixie">&#160;</i>Element.pause([anim])<a href="#Element.pause" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5513">&#x27ad;</a></h3>
+</div><h3 id="Element.pause" class="dr-method"><i class="dr-trixie">&#160;</i>Element.pause([anim])<a href="#Element.pause" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3707 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3707">&#x27ad;</a></h3>
 <div class="dr-method"><p>Stops animation of the element with ability to resume it later on.
 </p>
 <p class="header">Parameters
@@ -373,10 +378,10 @@ c.node.onclick<span class="s"> = </span><b>function</b> () {
 <dd class="dr-description">animation object</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element</span></p>
-</div><h3 id="Element.prev" class="dr-property"><i class="dr-trixie">&#160;</i>Element.prev<a href="#Element.prev" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2421">&#x27ad;</a></h3>
+</div><h3 id="Element.prev" class="dr-property"><i class="dr-trixie">&#160;</i>Element.prev<a href="#Element.prev" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 668 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L668">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>Reference to the previous element in the hierarchy.
 </p>
-</div><h3 id="Element.raphael" class="dr-property"><i class="dr-trixie">&#160;</i>Element.raphael<a href="#Element.raphael" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2379">&#x27ad;</a></h3>
+</div><h3 id="Element.raphael" class="dr-property"><i class="dr-trixie">&#160;</i>Element.raphael<a href="#Element.raphael" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 626 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L626">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>Internal reference to <a href="#Raphael" class="dr-link">Raphael</a> object. In case it is not available.
 </p>
 <p class="header">Usage
@@ -387,10 +392,10 @@ c.node.onclick<span class="s"> = </span><b>function</b> () {
     <b>this</b>.attr({fill: <b>this</b>.paper.raphael.hsb2rgb(hsb).hex});
 }
 </code></pre>
-</div><h3 id="Element.remove" class="dr-method"><i class="dr-trixie">&#160;</i>Element.remove()<a href="#Element.remove" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2605">&#x27ad;</a></h3>
+</div><h3 id="Element.remove" class="dr-method"><i class="dr-trixie">&#160;</i>Element.remove()<a href="#Element.remove" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 863 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L863">&#x27ad;</a></h3>
 <div class="dr-method"><p>Removes element form the paper.
 </p>
-</div><h3 id="Element.resume" class="dr-method"><i class="dr-trixie">&#160;</i>Element.resume([anim])<a href="#Element.resume" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5533">&#x27ad;</a></h3>
+</div><h3 id="Element.resume" class="dr-method"><i class="dr-trixie">&#160;</i>Element.resume([anim])<a href="#Element.resume" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3727 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3727">&#x27ad;</a></h3>
 <div class="dr-method"><p>Resumes animation if it was paused with <a href="#Element.pause" class="dr-link">Element.pause</a> method.
 </p>
 <p class="header">Parameters
@@ -401,7 +406,7 @@ c.node.onclick<span class="s"> = </span><b>function</b> () {
 <dd class="dr-description">animation object</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element</span></p>
-</div><h3 id="Element.rotate" class="dr-method"><i class="dr-trixie">&#160;</i>Element.rotate(deg, [cx], [cy])<a href="#Element.rotate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2446">&#x27ad;</a></h3>
+</div><h3 id="Element.rotate" class="dr-method"><i class="dr-trixie">&#160;</i>Element.rotate(deg, [cx], [cy])<a href="#Element.rotate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 705 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L705">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds rotation by given angle around given point to the list of
 transformations of the element.
 </p>
@@ -422,7 +427,7 @@ transformations of the element.
 <p>If cx <em class="amp">&amp;</em> cy aren’t specified centre of the shape is used as a point of rotation.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.scale" class="dr-method"><i class="dr-trixie">&#160;</i>Element.scale(sx, sy, [cx], [cy])<a href="#Element.scale" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2479">&#x27ad;</a></h3>
+</div><h3 id="Element.scale" class="dr-method"><i class="dr-trixie">&#160;</i>Element.scale(sx, sy, [cx], [cy])<a href="#Element.scale" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 738 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L738">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds scale by given amount relative to given point to the list of
 transformations of the element.
 </p>
@@ -446,7 +451,7 @@ transformations of the element.
 <p>If cx <em class="amp">&amp;</em> cy aren’t specified centre of the shape is used instead.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.setTime" class="dr-method"><i class="dr-trixie">&#160;</i>Element.setTime(anim, value)<a href="#Element.setTime" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5449">&#x27ad;</a></h3>
+</div><h3 id="Element.setTime" class="dr-method"><i class="dr-trixie">&#160;</i>Element.setTime(anim, value)<a href="#Element.setTime" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3643 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3643">&#x27ad;</a></h3>
 <div class="dr-method"><p>Sets the status of animation of the element in milliseconds. Similar to <a href="#Element.status" class="dr-link">Element.status</a> method.
 </p>
 <p class="header">Parameters
@@ -463,11 +468,11 @@ transformations of the element.
 </p>
 <p>On each animation frame event <code>anim.frame.&lt;id></code>, on start <code>anim.start.&lt;id></code> and on end <code>anim.finish.&lt;id></code>.
 </p>
-</div><h3 id="Element.show" class="dr-method"><i class="dr-trixie">&#160;</i>Element.show()<a href="#Element.show" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2595">&#x27ad;</a></h3>
+</div><h3 id="Element.show" class="dr-method"><i class="dr-trixie">&#160;</i>Element.show()<a href="#Element.show" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 853 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L853">&#x27ad;</a></h3>
 <div class="dr-method"><p>Makes element visible. See <a href="#Element.hide" class="dr-link">Element.hide</a>.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.status" class="dr-method"><i class="dr-trixie">&#160;</i>Element.status([anim], [value])<a href="#Element.status" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5476">&#x27ad;</a></h3>
+</div><h3 id="Element.status" class="dr-method"><i class="dr-trixie">&#160;</i>Element.status([anim], [value])<a href="#Element.status" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3670 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3670">&#x27ad;</a></h3>
 <div class="dr-method"><p>Gets or sets the status of animation of the element.
 </p>
 <p class="header">Parameters
@@ -491,7 +496,7 @@ transformations of the element.
 <p>or
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element if <code>value</code> is specified</span></p>
-</div><h3 id="Element.stop" class="dr-method"><i class="dr-trixie">&#160;</i>Element.stop([anim])<a href="#Element.stop" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5555">&#x27ad;</a></h3>
+</div><h3 id="Element.stop" class="dr-method"><i class="dr-trixie">&#160;</i>Element.stop([anim])<a href="#Element.stop" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3749 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3749">&#x27ad;</a></h3>
 <div class="dr-method"><p>Stops animation of the element.
 </p>
 <p class="header">Parameters
@@ -502,15 +507,15 @@ transformations of the element.
 <dd class="dr-description">animation object</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element</span></p>
-</div><h3 id="Element.toBack" class="dr-method"><i class="dr-trixie">&#160;</i>Element.toBack()<a href="#Element.toBack" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2788">&#x27ad;</a></h3>
+</div><h3 id="Element.toBack" class="dr-method"><i class="dr-trixie">&#160;</i>Element.toBack()<a href="#Element.toBack" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1052 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1052">&#x27ad;</a></h3>
 <div class="dr-method"><p>Moves the element so it is the furthest from the viewer’s eyes, behind other elements.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.toFront" class="dr-method"><i class="dr-trixie">&#160;</i>Element.toFront()<a href="#Element.toFront" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2772">&#x27ad;</a></h3>
+</div><h3 id="Element.toFront" class="dr-method"><i class="dr-trixie">&#160;</i>Element.toFront()<a href="#Element.toFront" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1036 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1036">&#x27ad;</a></h3>
 <div class="dr-method"><p>Moves the element so it is the closest to the viewer’s eyes, on top of other elements.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.transform" class="dr-method"><i class="dr-trixie">&#160;</i>Element.transform([tstr])<a href="#Element.transform" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2558">&#x27ad;</a></h3>
+</div><h3 id="Element.transform" class="dr-method"><i class="dr-trixie">&#160;</i>Element.transform([tstr])<a href="#Element.transform" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 817 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L817">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds transformation to the element which is separate to other attributes,
 i.e. translation doesn’t change <code>x</code> or <code>y</code> of the rectange. The format
 of transformation string is similar to the path string syntax:
@@ -553,7 +558,7 @@ console.log(el.transform());
 <p>else
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.translate" class="dr-method"><i class="dr-trixie">&#160;</i>Element.translate(dx, dy)<a href="#Element.translate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L2510">&#x27ad;</a></h3>
+</div><h3 id="Element.translate" class="dr-method"><i class="dr-trixie">&#160;</i>Element.translate(dx, dy)<a href="#Element.translate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 769 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L769">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds translation by given amount to the list of transformations of the element.
 </p>
 <p class="header">Parameters
@@ -566,10 +571,10 @@ console.log(el.transform());
 <dd class="dr-description">vertical shift</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
-</div><h3 id="Element.undrag" class="dr-method"><i class="dr-trixie">&#160;</i>Element.undrag()<a href="#Element.undrag" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4217">&#x27ad;</a></h3>
+</div><h3 id="Element.undrag" class="dr-method"><i class="dr-trixie">&#160;</i>Element.undrag()<a href="#Element.undrag" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2367 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2367">&#x27ad;</a></h3>
 <div class="dr-method"><p>Removes all drag event handlers from given element.
 </p>
-</div><h3 id="Element.unhover" class="dr-method"><i class="dr-trixie">&#160;</i>Element.unhover(f_in, f_out)<a href="#Element.unhover" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4148">&#x27ad;</a></h3>
+</div><h3 id="Element.unhover" class="dr-method"><i class="dr-trixie">&#160;</i>Element.unhover(f_in, f_out)<a href="#Element.unhover" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2298 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2298">&#x27ad;</a></h3>
 <div class="dr-method"><p>Removes event handlers for hover for the element.
 </p>
 <p class="header">Parameters
@@ -582,11 +587,137 @@ console.log(el.transform());
 <dd class="dr-description">handler for hover out</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Element" class="dr-link">Element</a></span></p>
+</div><h2 id="Matrix" class="undefined"><i class="dr-trixie">&#160;</i>Matrix<a href="#Matrix" title="Link to this section" class="dr-hash">&#x2693;</a></h2>
+<h3 id="Matrix.add" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.add(a, b, c, d, e, f, matrix)<a href="#Matrix.add" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1888 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1888">&#x27ad;</a></h3>
+<div class="dr-method"><p>Adds given matrix to existing one.
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">a</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">b</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">c</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">d</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">e</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">f</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">matrix</dt>
+<dd class="dr-type"><em class="dr-type-object">object</em></dd>
+<dd class="dr-description"><a href="#Matrix" class="dr-link">Matrix</a></dd>
+</dl>
+</div><h3 id="Matrix.clone" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.clone()<a href="#Matrix.clone" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1933 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1933">&#x27ad;</a></h3>
+<div class="dr-method"><p>Returns copy of the matrix
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Matrix" class="dr-link">Matrix</a></span></p>
+</div><h3 id="Matrix.invert" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.invert()<a href="#Matrix.invert" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1921 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1921">&#x27ad;</a></h3>
+<div class="dr-method"><p>Returns inverted version of the matrix
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Matrix" class="dr-link">Matrix</a></span></p>
+</div><h3 id="Matrix.rotate" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.rotate(a, x, y)<a href="#Matrix.rotate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1975 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1975">&#x27ad;</a></h3>
+<div class="dr-method"><p>Rotates the matrix
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">a</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">x</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">y</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+</dl>
+</div><h3 id="Matrix.scale" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.scale(x, [y], [cx], [cy])<a href="#Matrix.scale" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1959 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1959">&#x27ad;</a></h3>
+<div class="dr-method"><p>Scales the matrix
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">x</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param optional">y</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param optional">cx</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param optional">cy</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+</dl>
+</div><h3 id="Matrix.split" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.split()<a href="#Matrix.split" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2048 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2048">&#x27ad;</a></h3>
+<div class="dr-method"><p>Splits matrix into primitive transformations
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">in format:</span></p>
+<ol class="dr-json"><li><span class="dr-json-key">dx</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">translation by x</span>
+<li><span class="dr-json-key">dy</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">translation by y</span>
+<li><span class="dr-json-key">scalex</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">scale by x</span>
+<li><span class="dr-json-key">scaley</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">scale by y</span>
+<li><span class="dr-json-key">shear</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">shear</span>
+<li><span class="dr-json-key">rotate</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">rotation in deg</span>
+<li><span class="dr-json-key">isSimple</span><span class="dr-type"><em class="dr-type-boolean">boolean</em></span><span class="dr-json-description">could it be represented via simple transformations</span>
+</ol>
+</div><h3 id="Matrix.toTransformString" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.toTransformString()<a href="#Matrix.toTransformString" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2090 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2090">&#x27ad;</a></h3>
+<div class="dr-method"><p>Return transform string that represents given matrix
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">transform string</span></p>
+</div><h3 id="Matrix.translate" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.translate(x, y)<a href="#Matrix.translate" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1945 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1945">&#x27ad;</a></h3>
+<div class="dr-method"><p>Translate the matrix
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">x</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">y</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+</dl>
+</div><h3 id="Matrix.x" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.x(x, y)<a href="#Matrix.x" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1994 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1994">&#x27ad;</a></h3>
+<div class="dr-method"><p>Return x coordinate for given point after transformation described by the matrix. See also <a href="#Matrix.y" class="dr-link">Matrix.y</a>
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">x</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">y</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">x</span></p>
+</div><h3 id="Matrix.y" class="dr-method"><i class="dr-trixie">&#160;</i>Matrix.y(x, y)<a href="#Matrix.y" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2007 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2007">&#x27ad;</a></h3>
+<div class="dr-method"><p>Return y coordinate for given point after transformation described by the matrix. See also <a href="#Matrix.x" class="dr-link">Matrix.x</a>
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">x</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">y</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">y</span></p>
 </div><h2 id="Paper" class="undefined"><i class="dr-trixie">&#160;</i>Paper<a href="#Paper" title="Link to this section" class="dr-hash">&#x2693;</a></h2>
-<h3 id="Paper.bottom" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.bottom<a href="#Paper.bottom" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4419">&#x27ad;</a></h3>
+<h3 id="Paper.bottom" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.bottom<a href="#Paper.bottom" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2613 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2613">&#x27ad;</a></h3>
 <div class="dr-property"><p>Points to the bottom element on the paper
 </p>
-</div><h3 id="Paper.circle" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.circle(x, y, r)<a href="#Paper.circle" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4242">&#x27ad;</a></h3>
+</div><h3 id="Paper.circle" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.circle(x, y, r)<a href="#Paper.circle" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2392 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2392">&#x27ad;</a></h3>
 <div class="dr-method"><p>Draws a circle.
 </p>
 <p class="header">Parameters
@@ -606,10 +737,10 @@ console.log(el.transform());
 </p>
 <pre class="javascript code"><code><b>var</b> c<span class="s"> = </span>paper.circle(<span class="d">50</span>, <span class="d">50</span>, <span class="d">40</span>);
 </code></pre>
-</div><h3 id="Paper.clear" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.clear()<a href="#Paper.clear" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L3024">&#x27ad;</a></h3>
+</div><h3 id="Paper.clear" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.clear()<a href="#Paper.clear" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1296 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1296">&#x27ad;</a></h3>
 <div class="dr-method"><p>Clears the paper, i.e. removes all the elements.
 </p>
-</div><h3 id="Paper.customAttributes" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.customAttributes<a href="#Paper.customAttributes" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L261">&#x27ad;</a></h3>
+</div><h3 id="Paper.customAttributes" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.customAttributes<a href="#Paper.customAttributes" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 361 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L361">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>If you have a set of attributes that you would like to represent
 as a function of some number you can do it easily with custom attributes:
 </p>
@@ -634,7 +765,7 @@ paper.customAttributes.hsb<span class="s"> = </span><b>function</b> (h, s, b) {
 c.attr({hsb: <i>"<span class="d">.5</span> <span class="d">.8</span> <span class="d">1</span>"</i>});
 c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span class="d">.5</span>"</i>}, <span class="d">1e3</span>);
 </code></pre>
-</div><h3 id="Paper.ellipse" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.ellipse(x, y, rx, ry)<a href="#Paper.ellipse" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4286">&#x27ad;</a></h3>
+</div><h3 id="Paper.ellipse" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.ellipse(x, y, rx, ry)<a href="#Paper.ellipse" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2440 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2440">&#x27ad;</a></h3>
 <div class="dr-method"><p>Draws an ellipse.
 </p>
 <p class="header">Parameters
@@ -657,7 +788,7 @@ c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span clas
 </p>
 <pre class="javascript code"><code><b>var</b> c<span class="s"> = </span>paper.ellipse(<span class="d">50</span>, <span class="d">50</span>, <span class="d">40</span>, <span class="d">20</span>);
 </code></pre>
-</div><h3 id="Paper.forEach" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.forEach(callback, thisArg)<a href="#Paper.forEach" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4514">&#x27ad;</a></h3>
+</div><h3 id="Paper.forEach" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.forEach(callback, thisArg)<a href="#Paper.forEach" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2708 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2708">&#x27ad;</a></h3>
 <div class="dr-method"><p>Executes given function for each element on the paper
 </p>
 <p>If callback function returns <code>false</code> it will stop loop running.
@@ -672,7 +803,7 @@ c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span clas
 <dd class="dr-description">context object for the callback</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Paper object</span></p>
-</div><h3 id="Paper.getById" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.getById(id)<a href="#Paper.getById" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4490">&#x27ad;</a></h3>
+</div><h3 id="Paper.getById" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.getById(id)<a href="#Paper.getById" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2684 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2684">&#x27ad;</a></h3>
 <div class="dr-method"><p>Returns you element by its internal ID.
 </p>
 <p class="header">Parameters
@@ -682,7 +813,7 @@ c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span clas
 <dd class="dr-description">id</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Raphaël element object</span></p>
-</div><h3 id="Paper.getElementByPoint" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.getElementByPoint(x, y)<a href="#Paper.getElementByPoint" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4454">&#x27ad;</a></h3>
+</div><h3 id="Paper.getElementByPoint" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.getElementByPoint(x, y)<a href="#Paper.getElementByPoint" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2648 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2648">&#x27ad;</a></h3>
 <div class="dr-method"><p>Returns you topmost element under given point.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Raphaël element object</span></p>
@@ -699,7 +830,7 @@ c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span clas
 </p>
 <pre class="javascript code"><code>paper.getElementByPoint(mouseX, mouseY).attr({stroke: <i>"#f00"</i>});
 </code></pre>
-</div><h3 id="Paper.image" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.image(src, x, y, width, height)<a href="#Paper.image" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4328">&#x27ad;</a></h3>
+</div><h3 id="Paper.image" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.image(src, x, y, width, height)<a href="#Paper.image" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2486 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2486">&#x27ad;</a></h3>
 <div class="dr-method"><p>Embeds an image into the surface.
 </p>
 <p class="header">Parameters
@@ -725,7 +856,7 @@ c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span clas
 </p>
 <pre class="javascript code"><code><b>var</b> c<span class="s"> = </span>paper.image(<i>"apple.png"</i>, <span class="d">10</span>, <span class="d">10</span>, <span class="d">80</span>, <span class="d">80</span>);
 </code></pre>
-</div><h3 id="Paper.path" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.path(pathString)<a href="#Paper.path" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4306">&#x27ad;</a></h3>
+</div><h3 id="Paper.path" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.path(pathString)<a href="#Paper.path" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2462 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2462">&#x27ad;</a></h3>
 <div class="dr-method"><p>Creates a path element by given path data string.
 </p>
 <p class="header">Parameters
@@ -734,7 +865,7 @@ c.animate({hsb: <i>"<span class="d">1</span> <span class="d">0</span> <span clas
 <dd class="dr-type"><em class="dr-type-string">string</em></dd>
 <dd class="dr-description">path data in SVG path string format.</dd>
 </dl>
-<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Raphaël element object with type “ellipse”</span></p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Raphaël element object with type “path”</span></p>
 Details of a path's data attribute's format are described in the <a href="http://www.w3.org/TR/SVG/paths.html#PathData">SVG specification</a>.
 <p class="header">Usage
 </p>
@@ -742,10 +873,10 @@ Details of a path's data attribute's format are described in the <a href="http:/
 <span class="c">// draw a diagonal line:</span>
 <span class="c">// move to <span class="d">10</span>,<span class="d">10</span>, line to <span class="d">90</span>,<span class="d">90</span></span>
 </code></pre>
-</div><h3 id="Paper.raphael" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.raphael<a href="#Paper.raphael" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4426">&#x27ad;</a></h3>
+</div><h3 id="Paper.raphael" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.raphael<a href="#Paper.raphael" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2620 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2620">&#x27ad;</a></h3>
 <div class="dr-property"><p>Points to the <a href="#Raphael" class="dr-link">Raphael</a> object/function
 </p>
-</div><h3 id="Paper.rect" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.rect(x, y, width, height, [r])<a href="#Paper.rect" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4266">&#x27ad;</a></h3>
+</div><h3 id="Paper.rect" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.rect(x, y, width, height, [r])<a href="#Paper.rect" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2418 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2418">&#x27ad;</a></h3>
 <div class="dr-method"><p></p>
 <p>Draws a rectangle.
 </p>
@@ -776,20 +907,20 @@ Details of a path's data attribute's format are described in the <a href="http:/
 <span class="c">// rectangle <b>with</b> rounded corners</span>
 <b>var</b> c<span class="s"> = </span>paper.rect(<span class="d">40</span>, <span class="d">40</span>, <span class="d">50</span>, <span class="d">50</span>, <span class="d">10</span>);
 </code></pre>
-</div><h3 id="Paper.remove" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.remove()<a href="#Paper.remove" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L3041">&#x27ad;</a></h3>
+</div><h3 id="Paper.remove" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.remove()<a href="#Paper.remove" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1313 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1313">&#x27ad;</a></h3>
 <div class="dr-method"><p>Removes the paper from the DOM.
 </p>
-</div><h3 id="Paper.renderfix" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.renderfix()<a href="#Paper.renderfix" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L3001">&#x27ad;</a></h3>
+</div><h3 id="Paper.renderfix" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.renderfix()<a href="#Paper.renderfix" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1273 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.svg.js#L1273">&#x27ad;</a></h3>
 <div class="dr-method"><p>Fixes the issue of Firefox and IE9 regarding subpixel rendering. If paper is dependant
 on other elements after reflow it could shift half pixel which cause for lines to lost their crispness.
 This method fixes the issue.
 </p>
-</div><h3 id="Paper.safari" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.safari()<a href="#Paper.safari" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L3986">&#x27ad;</a></h3>
+</div><h3 id="Paper.safari" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.safari()<a href="#Paper.safari" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2112 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2112">&#x27ad;</a></h3>
 <div class="dr-method"><p>There is an inconvenient rendering bug in Safari (WebKit):
 sometimes the rendering should be forced.
 This method should help with dealing with this bug.
 </p>
-</div><h3 id="Paper.set" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.set()<a href="#Paper.set" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4367">&#x27ad;</a></h3>
+</div><h3 id="Paper.set" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.set()<a href="#Paper.set" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2529 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2529">&#x27ad;</a></h3>
 <div class="dr-method"><p>Creates array-like object to keep and operate several elements at once.
 Warning: it doesn’t create any elements for itself in the page, it just groups existing elements.
 Sets act as pseudo elements — all methods available to an element can be used on a set.
@@ -802,9 +933,13 @@ st.push(
     paper.circle(<span class="d">10</span>, <span class="d">10</span>, <span class="d">5</span>),
     paper.circle(<span class="d">30</span>, <span class="d">10</span>, <span class="d">5</span>)
 );
-st.attr({fill: <i>"red"</i>});
+st.attr({fill: <i>"red"</i>}); <span class="c">// changes the fill of both circles</span>
 </code></pre>
-</div><h3 id="Paper.setSize" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.setSize(width, height)<a href="#Paper.setSize" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4389">&#x27ad;</a></h3>
+</div><h3 id="Paper.setFinish" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.setFinish()<a href="#Paper.setFinish" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2560 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2560">&#x27ad;</a></h3>
+<div class="dr-method"><p>See <a href="#Paper.setStart" class="dr-link">Paper.setStart</a>. This method finishes catching and returns resulting set.
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">set</span></p>
+</div><h3 id="Paper.setSize" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.setSize(width, height)<a href="#Paper.setSize" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2583 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2583">&#x27ad;</a></h3>
 <div class="dr-method"><p>If you need to change dimensions of the canvas call this method
 </p>
 <p class="header">Parameters
@@ -825,7 +960,19 @@ st.push(
 );
 st.attr({fill: <i>"red"</i>});
 </code></pre>
-</div><h3 id="Paper.setViewBox" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.setViewBox(x, y, w, h, fit)<a href="#Paper.setViewBox" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4406">&#x27ad;</a></h3>
+</div><h3 id="Paper.setStart" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.setStart()<a href="#Paper.setStart" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2549 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2549">&#x27ad;</a></h3>
+<div class="dr-method"><p>Creates <a href="#Paper.set" class="dr-link">Paper.set</a>. All elements that will be created after calling this method and before calling
+<a href="#Paper.setFinish" class="dr-link">Paper.setFinish</a> will be added to the set.
+</p>
+<p class="header">Usage
+</p>
+<pre class="javascript code"><code>paper.setStart();
+paper.circle(<span class="d">10</span>, <span class="d">10</span>, <span class="d">5</span>),
+paper.circle(<span class="d">30</span>, <span class="d">10</span>, <span class="d">5</span>)
+<b>var</b> st<span class="s"> = </span>paper.setFinish();
+st.attr({fill: <i>"red"</i>}); <span class="c">// changes the fill of both circles</span>
+</code></pre>
+</div><h3 id="Paper.setViewBox" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.setViewBox(x, y, w, h, fit)<a href="#Paper.setViewBox" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2600 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2600">&#x27ad;</a></h3>
 <div class="dr-method"><p>Sets the view box of the paper. Practically it gives you ability to zoom and pan whole paper surface by 
 specifying new boundaries.
 </p>
@@ -847,7 +994,7 @@ specifying new boundaries.
 <dd class="dr-type"><em class="dr-type-boolean">boolean</em></dd>
 <dd class="dr-description"><code>true</code> if you want graphics to fit into new boundary box</dd>
 </dl>
-</div><h3 id="Paper.text" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.text(x, y, text)<a href="#Paper.text" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4347">&#x27ad;</a></h3>
+</div><h3 id="Paper.text" class="dr-method"><i class="dr-trixie">&#160;</i>Paper.text(x, y, text)<a href="#Paper.text" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2507 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2507">&#x27ad;</a></h3>
 <div class="dr-method"><p>Draws a text string. If you need line breaks, put “\n” in the string.
 </p>
 <p class="header">Parameters
@@ -867,10 +1014,10 @@ specifying new boundaries.
 </p>
 <pre class="javascript code"><code><b>var</b> t<span class="s"> = </span>paper.text(<span class="d">50</span>, <span class="d">50</span>, <i>"Raphaël\nkicks\nbutt!"</i>);
 </code></pre>
-</div><h3 id="Paper.top" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.top<a href="#Paper.top" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4413">&#x27ad;</a></h3>
+</div><h3 id="Paper.top" class="dr-property"><i class="dr-trixie">&#160;</i>Paper.top<a href="#Paper.top" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2607 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2607">&#x27ad;</a></h3>
 <div class="dr-property"><p>Points to the topmost element on the paper
 </p>
-</div><h2 id="Raphael" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael(…)<a href="#Raphael" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L56">&#x27ad;</a></h2>
+</div><h2 id="Raphael" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael(…)<a href="#Raphael" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 59 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L59">&#x27ad;</a></h2>
 <div class="dr-method"><p>Creates a canvas object on which to draw.
 You must do this first, as all future calls to drawing methods
 from this instance will be bound to this canvas.
@@ -886,6 +1033,10 @@ from this instance will be bound to this canvas.
 <dt class="dr-param">height</dt>
 <dd class="dr-type"><em class="dr-type-number">number</em></dd>
 <dd class="dr-description">&#160;</dd>
+<dt class="dr-param optional">callback</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-function">function</em></dd>
+<dd class="dr-description">callback function which is going to be executed in the context of newly created paper</dd>
 </dl>
 <p>or
 </p>
@@ -901,12 +1052,20 @@ from this instance will be bound to this canvas.
 <dt class="dr-param">height</dt>
 <dd class="dr-type"><em class="dr-type-number">number</em></dd>
 <dd class="dr-description">&#160;</dd>
+<dt class="dr-param optional">callback</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-function">function</em></dd>
+<dd class="dr-description">callback function which is going to be executed in the context of newly created paper</dd>
 </dl>
 <p>or
 </p>
 <dl class="dr-parameters"><dt class="dr-param">all</dt>
 <dd class="dr-type"><em class="dr-type-array">array</em></dd>
 <dd class="dr-description">(first 3 or 4 elements in the array are equal to [containerID, width, height] or [x, y, width, height]. The rest are element descriptions in format {type: type, &lt;attributes>})</dd>
+<dt class="dr-param optional">callback</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-function">function</em></dd>
+<dd class="dr-description">callback function which is going to be executed in the context of newly created paper</dd>
 </dl>
 <p>or
 </p>
@@ -941,7 +1100,7 @@ from this instance will be bound to this canvas.
     text: <i>"Dump"</i>
 }]);
 </code></pre>
-</div><h3 id="Raphael.angle" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.angle(x1, y1, x2, y2, [x3], [y3])<a href="#Raphael.angle" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L325">&#x27ad;</a></h3>
+</div><h3 id="Raphael.angle" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.angle(x1, y1, x2, y2, [x3], [y3])<a href="#Raphael.angle" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 402 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L402">&#x27ad;</a></h3>
 <div class="dr-method"><p>Returns angle between two or three points
 </p>
 <p class="header">Parameters
@@ -968,7 +1127,7 @@ from this instance will be bound to this canvas.
 <dd class="dr-description">y coord of third point</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">angle in degrees.</span></p>
-</div><h3 id="Raphael.animation" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.animation(params, ms, [easing], [callback])<a href="#Raphael.animation" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5384">&#x27ad;</a></h3>
+</div><h3 id="Raphael.animation" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.animation(params, ms, [easing], [callback])<a href="#Raphael.animation" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3578 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3578">&#x27ad;</a></h3>
 <div class="dr-method"><p>Creates an animation object that can be passed to the <a href="#Element.animate" class="dr-link">Element.animate</a> or <a href="#Element.animateWith" class="dr-link">Element.animateWith</a> methods.
 See also <a href="#Animation.delay" class="dr-link">Animation.delay</a> and <a href="#Animation.repeat" class="dr-link">Animation.repeat</a> methods.
 </p>
@@ -990,7 +1149,27 @@ See also <a href="#Animation.delay" class="dr-link">Animation.delay</a> and <a h
 <dd class="dr-description">callback function. Will be called at the end of animation.</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Animation" class="dr-link">Animation</a></span></p>
-</div><h3 id="Raphael.deg" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.deg(deg)<a href="#Raphael.deg" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L358">&#x27ad;</a></h3>
+</div><h3 id="Raphael.color" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.color(clr)<a href="#Raphael.color" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 596 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L596">&#x27ad;</a></h3>
+<div class="dr-method"><p>Parses the color string and returns object with all values for the given color.
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">clr</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">color string in one of the supported formats (see <a href="#Raphael.getRGB" class="dr-link">Raphael.getRGB</a>)</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Combined RGB <em class="amp">&amp;</em> HSB object in format:</span></p>
+<ol class="dr-json"><li>{<ol class="dr-json"><li><span class="dr-json-key">r</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">red,</span>
+<li><span class="dr-json-key">g</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">green,</span>
+<li><span class="dr-json-key">b</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">blue,</span>
+<li><span class="dr-json-key">hex</span><span class="dr-type"><em class="dr-type-string">string</em></span><span class="dr-json-description">color in HTML/CSS format: #••••••,</span>
+<li><span class="dr-json-key">error</span><span class="dr-type"><em class="dr-type-boolean">boolean</em></span><span class="dr-json-description"><code>true</code> if string can’t be parsed,</span>
+<li><span class="dr-json-key">h</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">hue,</span>
+<li><span class="dr-json-key">s</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">saturation,</span>
+<li><span class="dr-json-key">v</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">value (brightness),</span>
+<li><span class="dr-json-key">l</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">lightness</span>
+</ol></li><li>}</li></ol>
+</div><h3 id="Raphael.deg" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.deg(deg)<a href="#Raphael.deg" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 435 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L435">&#x27ad;</a></h3>
 <div class="dr-method"><p>Transform angle to degrees
 </p>
 <p class="header">Parameters
@@ -1000,7 +1179,7 @@ See also <a href="#Animation.delay" class="dr-link">Animation.delay</a> and <a h
 <dd class="dr-description">angle in radians</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">angle in degrees.</span></p>
-</div><h3 id="Raphael.easing_formulas" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.easing_formulas<a href="#Raphael.easing_formulas" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4838">&#x27ad;</a></h3>
+</div><h3 id="Raphael.easing_formulas" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.easing_formulas<a href="#Raphael.easing_formulas" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3029 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3029">&#x27ad;</a></h3>
 <div class="dr-property"><p>Object that contains easing formulas for animation. You could extend it with your own. By default it has following list of easing:
 </p>
 <ul>
@@ -1014,7 +1193,7 @@ See also <a href="#Animation.delay" class="dr-link">Animation.delay</a> and <a h
     <li>“bounce”</li>
 </ul>
 <p>See also <a href="http://raphaeljs.com/easing.html">Easing demo</a>.</p>
-</div><h3 id="Raphael.el" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.el<a href="#Raphael.el" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5831">&#x27ad;</a></h3>
+</div><h3 id="Raphael.el" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.el<a href="#Raphael.el" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2249 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2249">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>You can add your own method to elements. This is usefull when you want to hack default functionality or
 want to wrap some common transformation or attributes in one method. In difference to canvas methods,
 you can redefine element method at any time. Expending element methods wouldn’t affect set.
@@ -1027,7 +1206,7 @@ you can redefine element method at any time. Expending element methods wouldn’
 <span class="c">// then use it</span>
 paper.circle(<span class="d">100</span>, <span class="d">100</span>, <span class="d">20</span>).red();
 </code></pre>
-</div><h3 id="Raphael.findDotsAtSegment" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t)<a href="#Raphael.findDotsAtSegment" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L967">&#x27ad;</a></h3>
+</div><h3 id="Raphael.findDotsAtSegment" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t)<a href="#Raphael.findDotsAtSegment" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1109 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1109">&#x27ad;</a></h3>
 <div class="dr-method"><p>Utility method
 Find dot coordinates on the given cubic bezier curve at the given t.
 </p>
@@ -1074,7 +1253,7 @@ Find dot coordinates on the given cubic bezier curve at the given t.
 <li><span class="dr-json-key">y:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">y coordinate of the end of the curve</span>
 </ol></li><li>    }</li><li><span class="dr-json-key">alpha:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">angle of the curve derivative at the point</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.fn" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.fn<a href="#Raphael.fn" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L289">&#x27ad;</a></h3>
+</div><h3 id="Raphael.fn" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.fn<a href="#Raphael.fn" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 334 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L334">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-object">object</em><p>You can add your own method to the canvas. For example if you want to draw a pie chart,
 you can create your own pie chart function and ship it as a Raphaël plugin. To do this
 you need to extend the <code>Raphael.fn</code> object. Please note that you can create your own namespaces
@@ -1098,7 +1277,55 @@ paper.arrow(<span class="d">10</span>, <span class="d">10</span>, <span class="d
 paper.mystuff.arrow();
 paper.mystuff.star();
 </code></pre>
-</div><h3 id="Raphael.getColor" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getColor([value])<a href="#Raphael.getColor" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L830">&#x27ad;</a></h3>
+</div><h3 id="Raphael.format" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.format(token, …)<a href="#Raphael.format" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 4031 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L4031">&#x27ad;</a></h3>
+<div class="dr-method"><p>Simple format function. Replaces construction of type “<code>{&lt;number>}</code>” to the corresponding argument.
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">token</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">string to format</dd>
+<dt class="dr-param">…</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">rest of arguments will be treated as parameters for replacement</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">formated string</span></p>
+<p class="header">Usage
+</p>
+<pre class="javascript code"><code><b>var</b> x<span class="s"> = </span><span class="d">10</span>,
+    y<span class="s"> = </span><span class="d">20</span>,
+    width<span class="s"> = </span><span class="d">40</span>,
+    height<span class="s"> = </span><span class="d">50</span>;
+<span class="c">// <b>this</b> will draw a rectangular shape equivalent to <i>"M10,20h40v50h-40z"</i></span>
+paper.path(Raphael.format(<i>"M{<span class="d">1</span>},{<span class="d">2</span>}h{<span class="d">3</span>}v{<span class="d">4</span>}h{<span class="d">5</span>}z"</i>, x, y, width, height, -width));
+</code></pre>
+</div><h3 id="Raphael.fullfill" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.fullfill(token, json)<a href="#Raphael.fullfill" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 4061 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L4061">&#x27ad;</a></h3>
+<div class="dr-method"><p>A little bit more advanced format function than <a href="#Raphael.format" class="dr-link">Raphael.format</a>. Replaces construction of type “<code>{&lt;name>}</code>” to the corresponding argument.
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">token</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">string to format</dd>
+<dt class="dr-param">json</dt>
+<dd class="dr-type"><em class="dr-type-object">object</em></dd>
+<dd class="dr-description">object which properties will be used as a replacement</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">formated string</span></p>
+<p class="header">Usage
+</p>
+<pre class="javascript code"><code><span class="c">// <b>this</b> will draw a rectangular shape equivalent to <i>"M10,20h40v50h-40z"</i></span>
+paper.path(Raphael.format(<i>"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z"</i>, {
+    x: <span class="d">10</span>,
+    y: <span class="d">20</span>,
+    dim: {
+        width: <span class="d">40</span>,
+        height: <span class="d">50</span>,
+        <i>"negative width"</i>: -<span class="d">40</span>
+    }
+}));
+</code></pre>
+</div><h3 id="Raphael.getColor" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getColor([value])<a href="#Raphael.getColor" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 972 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L972">&#x27ad;</a></h3>
 <div class="dr-method"><p>On each call returns next colour in the spectrum. To reset it back to red call <a href="#Raphael.getColor.reset" class="dr-link">Raphael.getColor.reset</a>
 </p>
 <p class="header">Parameters
@@ -1109,10 +1336,10 @@ paper.mystuff.star();
 <dd class="dr-description">brightness, default is <code>0.75</code></dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">hex representation of the colour.</span></p>
-</div><h4 id="Raphael.getColor.reset" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getColor.reset()<a href="#Raphael.getColor.reset" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L847">&#x27ad;</a></h4>
+</div><h4 id="Raphael.getColor.reset" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getColor.reset()<a href="#Raphael.getColor.reset" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 989 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L989">&#x27ad;</a></h4>
 <div class="dr-method"><p>Resets spectrum position for <a href="#Raphael.getColor" class="dr-link">Raphael.getColor</a> back to red.
 </p>
-</div><h3 id="Raphael.getPointAtLength" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getPointAtLength(path, length)<a href="#Raphael.getPointAtLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4747">&#x27ad;</a></h3>
+</div><h3 id="Raphael.getPointAtLength" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getPointAtLength(path, length)<a href="#Raphael.getPointAtLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2938 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2938">&#x27ad;</a></h3>
 <div class="dr-method"><p>Return coordinates of the point located at the given length on the given path.
 </p>
 <p class="header">Parameters
@@ -1129,7 +1356,7 @@ paper.mystuff.star();
 <li><span class="dr-json-key">y:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">y coordinate</span>
 <li><span class="dr-json-key">alpha:</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">angle of derivative</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.getRGB" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getRGB(colour)<a href="#Raphael.getRGB" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L708">&#x27ad;</a></h3>
+</div><h3 id="Raphael.getRGB" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getRGB(colour)<a href="#Raphael.getRGB" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 850 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L850">&#x27ad;</a></h3>
 <div class="dr-method"><p>Parses colour string as RGB object
 </p>
 <p class="header">Parameters
@@ -1156,7 +1383,7 @@ paper.mystuff.star();
 <li><span class="dr-json-key">hex</span><span class="dr-type"><em class="dr-type-string">string</em></span><span class="dr-json-description">color in HTML/CSS format: #••••••,</span>
 <li><span class="dr-json-key">error</span><span class="dr-type"><em class="dr-type-boolean">boolean</em></span><span class="dr-json-description">true if string can’t be parsed</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.getSubpath" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getSubpath(path, from, to)<a href="#Raphael.getSubpath" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4762">&#x27ad;</a></h3>
+</div><h3 id="Raphael.getSubpath" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getSubpath(path, from, to)<a href="#Raphael.getSubpath" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2953 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2953">&#x27ad;</a></h3>
 <div class="dr-method"><p>Return subpath of a given path from given length to given length.
 </p>
 <p class="header">Parameters
@@ -1172,7 +1399,7 @@ paper.mystuff.star();
 <dd class="dr-description">position of the end of the segment</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">pathstring for the segment</span></p>
-</div><h3 id="Raphael.getTotalLength" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getTotalLength(path)<a href="#Raphael.getTotalLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L4728">&#x27ad;</a></h3>
+</div><h3 id="Raphael.getTotalLength" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.getTotalLength(path)<a href="#Raphael.getTotalLength" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 2919 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L2919">&#x27ad;</a></h3>
 <div class="dr-method"><p>Returns length of the given path in pixels.
 </p>
 <p class="header">Parameters
@@ -1182,7 +1409,7 @@ paper.mystuff.star();
 <dd class="dr-description">SVG path string.</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">length.</span></p>
-</div><h3 id="Raphael.hsb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsb(h, s, b)<a href="#Raphael.hsb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L790">&#x27ad;</a></h3>
+</div><h3 id="Raphael.hsb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsb(h, s, b)<a href="#Raphael.hsb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 932 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L932">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts HSB values to hex representation of the colour.
 </p>
 <p class="header">Parameters
@@ -1198,7 +1425,7 @@ paper.mystuff.star();
 <dd class="dr-description">value or brightness</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">hex representation of the colour.</span></p>
-</div><h3 id="Raphael.hsb2rgb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsb2rgb(h, s, v)<a href="#Raphael.hsb2rgb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L515">&#x27ad;</a></h3>
+</div><h3 id="Raphael.hsb2rgb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsb2rgb(h, s, v)<a href="#Raphael.hsb2rgb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 646 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L646">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts HSB values to RGB object.
 </p>
 <p class="header">Parameters
@@ -1219,7 +1446,7 @@ paper.mystuff.star();
 <li><span class="dr-json-key">b</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">blue,</span>
 <li><span class="dr-json-key">hex</span><span class="dr-type"><em class="dr-type-string">string</em></span><span class="dr-json-description">color in HTML/CSS format: #••••••</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.hsl" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsl(h, s, l)<a href="#Raphael.hsl" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L804">&#x27ad;</a></h3>
+</div><h3 id="Raphael.hsl" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsl(h, s, l)<a href="#Raphael.hsl" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 946 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L946">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts HSL values to hex representation of the colour.
 </p>
 <p class="header">Parameters
@@ -1235,7 +1462,7 @@ paper.mystuff.star();
 <dd class="dr-description">luminosity</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">hex representation of the colour.</span></p>
-</div><h3 id="Raphael.hsl2rgb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsl2rgb(h, s, l)<a href="#Raphael.hsl2rgb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L552">&#x27ad;</a></h3>
+</div><h3 id="Raphael.hsl2rgb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.hsl2rgb(h, s, l)<a href="#Raphael.hsl2rgb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 683 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L683">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts HSL values to RGB object.
 </p>
 <p class="header">Parameters
@@ -1256,7 +1483,7 @@ paper.mystuff.star();
 <li><span class="dr-json-key">b</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">blue,</span>
 <li><span class="dr-json-key">hex</span><span class="dr-type"><em class="dr-type-string">string</em></span><span class="dr-json-description">color in HTML/CSS format: #••••••</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.is" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.is(o, type)<a href="#Raphael.is" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L300">&#x27ad;</a></h3>
+</div><h3 id="Raphael.is" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.is(o, type)<a href="#Raphael.is" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 374 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L374">&#x27ad;</a></h3>
 <div class="dr-method"><p>Handfull replacement for <code>typeof</code> operator.
 </p>
 <p class="header">Parameters
@@ -1269,7 +1496,45 @@ paper.mystuff.star();
 <dd class="dr-description">name of the type, i.e. “string”, “function”, “number”, etc.</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-boolean">boolean</em> <span class="dr-description">is given value is of given type</span></p>
-</div><h3 id="Raphael.parsePathString" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.parsePathString(pathString)<a href="#Raphael.parsePathString" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L862">&#x27ad;</a></h3>
+</div><h3 id="Raphael.matrix" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.matrix(a, b, c, d, e, f)<a href="#Raphael.matrix" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1852 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1852">&#x27ad;</a></h3>
+<div class="dr-method"><p>Utility method
+Returns matrix based on given parameters.
+</p>
+<p class="header">Parameters
+</p>
+<dl class="dr-parameters"><dt class="dr-param">a</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">b</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">c</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">d</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">e</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+<dt class="dr-param">f</dt>
+<dd class="dr-type"><em class="dr-type-number">number</em></dd>
+<dd class="dr-description">&#160;</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description"><a href="#Matrix" class="dr-link">Matrix</a></span></p>
+</div><h3 id="Raphael.ninja" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.ninja()<a href="#Raphael.ninja" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 4098 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L4098">&#x27ad;</a></h3>
+<div class="dr-method"><p>If you want to leave no trace of Raphaël (Well, Raphaël creates only one global variable <code>Raphael</code>, but anyway.) You can use <code>ninja</code> method.
+Beware, that in this case plugins could stop working, because they are depending on global variable existance.
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Raphael object</span></p>
+<p class="header">Usage
+</p>
+<pre class="javascript code"><code>(<b>function</b> (local_raphael) {
+    <b>var</b> paper<span class="s"> = </span>local_raphael(<span class="d">10</span>, <span class="d">10</span>, <span class="d">320</span>, <span class="d">200</span>);
+    …
+})(Raphael.ninja());
+</code></pre>
+</div><h3 id="Raphael.parsePathString" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.parsePathString(pathString)<a href="#Raphael.parsePathString" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1004 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1004">&#x27ad;</a></h3>
 <div class="dr-method"><p>Utility method
 Parses given path string into an array of arrays of path segments.
 </p>
@@ -1280,7 +1545,7 @@ Parses given path string into an array of arrays of path segments.
 <dd class="dr-description">path string or array of segments (in the last case it will be returned straight away)</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-array">array</em> <span class="dr-description">array of segments.</span></p>
-</div><h3 id="Raphael.parseTransformString" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.parseTransformString(TString)<a href="#Raphael.parseTransformString" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L905">&#x27ad;</a></h3>
+</div><h3 id="Raphael.parseTransformString" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.parseTransformString(TString)<a href="#Raphael.parseTransformString" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1047 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1047">&#x27ad;</a></h3>
 <div class="dr-method"><p>Utility method
 Parses given path string into an array of transformations.
 </p>
@@ -1291,7 +1556,7 @@ Parses given path string into an array of transformations.
 <dd class="dr-description">transform string or array of transformations (in the last case it will be returned straight away)</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-array">array</em> <span class="dr-description">array of transformations.</span></p>
-</div><h3 id="Raphael.path2curve" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.path2curve(pathString)<a href="#Raphael.path2curve" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L1684">&#x27ad;</a></h3>
+</div><h3 id="Raphael.path2curve" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.path2curve(pathString)<a href="#Raphael.path2curve" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1835 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1835">&#x27ad;</a></h3>
 <div class="dr-method"><p>Utility method
 Converts path to a new path where all segments are cubic bezier curves.
 </p>
@@ -1302,7 +1567,7 @@ Converts path to a new path where all segments are cubic bezier curves.
 <dd class="dr-description">path string or array of segments</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-array">array</em> <span class="dr-description">array of segments.</span></p>
-</div><h3 id="Raphael.pathToRelative" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.pathToRelative(pathString)<a href="#Raphael.pathToRelative" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L1672">&#x27ad;</a></h3>
+</div><h3 id="Raphael.pathToRelative" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.pathToRelative(pathString)<a href="#Raphael.pathToRelative" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 1822 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L1822">&#x27ad;</a></h3>
 <div class="dr-method"><p>Utility method
 Converts path to relative form
 </p>
@@ -1313,7 +1578,7 @@ Converts path to relative form
 <dd class="dr-description">path string or array of segments</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-array">array</em> <span class="dr-description">array of segments.</span></p>
-</div><h3 id="Raphael.rad" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rad(deg)<a href="#Raphael.rad" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L346">&#x27ad;</a></h3>
+</div><h3 id="Raphael.rad" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rad(deg)<a href="#Raphael.rad" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 423 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L423">&#x27ad;</a></h3>
 <div class="dr-method"><p>Transform angle to radians
 </p>
 <p class="header">Parameters
@@ -1323,7 +1588,7 @@ Converts path to relative form
 <dd class="dr-description">angle in degrees</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">angle in radians.</span></p>
-</div><h3 id="Raphael.rgb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rgb(r, g, b)<a href="#Raphael.rgb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L818">&#x27ad;</a></h3>
+</div><h3 id="Raphael.rgb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rgb(r, g, b)<a href="#Raphael.rgb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 960 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L960">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts RGB values to hex representation of the colour.
 </p>
 <p class="header">Parameters
@@ -1339,7 +1604,7 @@ Converts path to relative form
 <dd class="dr-description">blue</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">hex representation of the colour.</span></p>
-</div><h3 id="Raphael.rgb2hsb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rgb2hsb(r, g, b)<a href="#Raphael.rgb2hsb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L592">&#x27ad;</a></h3>
+</div><h3 id="Raphael.rgb2hsb" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rgb2hsb(r, g, b)<a href="#Raphael.rgb2hsb" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 723 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L723">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts RGB values to HSB object.
 </p>
 <p class="header">Parameters
@@ -1359,7 +1624,7 @@ Converts path to relative form
 <li><span class="dr-json-key">s</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">saturation</span>
 <li><span class="dr-json-key">b</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">brightness</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.rgb2hsl" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rgb2hsl(r, g, b)<a href="#Raphael.rgb2hsl" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L625">&#x27ad;</a></h3>
+</div><h3 id="Raphael.rgb2hsl" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.rgb2hsl(r, g, b)<a href="#Raphael.rgb2hsl" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 757 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L757">&#x27ad;</a></h3>
 <div class="dr-method"><p>Converts RGB values to HSL object.
 </p>
 <p class="header">Parameters
@@ -1379,7 +1644,7 @@ Converts path to relative form
 <li><span class="dr-json-key">s</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">saturation</span>
 <li><span class="dr-json-key">l</span><span class="dr-type"><em class="dr-type-number">number</em></span><span class="dr-json-description">luminosity</span>
 </ol></li><li>}</li></ol>
-</div><h3 id="Raphael.setWindow" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.setWindow(newwin)<a href="#Raphael.setWindow" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L410">&#x27ad;</a></h3>
+</div><h3 id="Raphael.setWindow" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.setWindow(newwin)<a href="#Raphael.setWindow" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 487 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L487">&#x27ad;</a></h3>
 <div class="dr-method"><p>Used when you need to draw in <code>&lt;iframe></code>. Switched window to the iframe one.
 </p>
 <p class="header">Parameters
@@ -1388,7 +1653,7 @@ Converts path to relative form
 <dd class="dr-type"><em class="dr-type-window">window</em></dd>
 <dd class="dr-description">new window object</dd>
 </dl>
-</div><h3 id="Raphael.snapTo" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.snapTo(values, value, [tolerance])<a href="#Raphael.snapTo" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L372">&#x27ad;</a></h3>
+</div><h3 id="Raphael.snapTo" class="dr-method"><i class="dr-trixie">&#160;</i>Raphael.snapTo(values, value, [tolerance])<a href="#Raphael.snapTo" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 449 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L449">&#x27ad;</a></h3>
 <div class="dr-method"><p>Snaps given value to given grid.
 </p>
 <p class="header">Parameters
@@ -1405,17 +1670,35 @@ Converts path to relative form
 <dd class="dr-description">tolerance for snapping. Default is <code>10</code>.</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-number">number</em> <span class="dr-description">adjusted value.</span></p>
-</div><h3 id="Raphael.svg" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.svg<a href="#Raphael.svg" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L227">&#x27ad;</a></h3>
+</div><h3 id="Raphael.st" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.st<a href="#Raphael.st" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 4122 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L4122">&#x27ad;</a></h3>
+<div class="dr-property"><em class="dr-type dr-type-object">object</em><p>You can add your own method to elements and sets. It is wise to add a set method for each element method
+you added, so you will be able to call the same method on sets too.
+See also <a href="#Raphael.el" class="dr-link">Raphael.el</a>.
+</p>
+<p class="header">Usage
+</p>
+<pre class="javascript code"><code>Raphael.el.red<span class="s"> = </span><b>function</b> () {
+    <b>this</b>.attr({fill: <i>"#f00"</i>});
+};
+Raphael.st.red<span class="s"> = </span><b>function</b> () {
+    <b>this</b>.forEach(<b>function</b> () {
+        <b>this</b>.red();
+    });
+};
+<span class="c">// then use it</span>
+paper.set(paper.circle(<span class="d">100</span>, <span class="d">100</span>, <span class="d">20</span>), paper.circle(<span class="d">110</span>, <span class="d">100</span>, <span class="d">20</span>)).red();
+</code></pre>
+</div><h3 id="Raphael.svg" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.svg<a href="#Raphael.svg" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 301 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L301">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-boolean">boolean</em><p><code>true</code> if browser supports SVG.
 </p>
-</div><h3 id="Raphael.type" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.type<a href="#Raphael.type" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L209">&#x27ad;</a></h3>
+</div><h3 id="Raphael.type" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.type<a href="#Raphael.type" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 283 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L283">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-string">string</em><p>Can be “SVG”, “VML” or empty, depending on browser support.
 </p>
-</div><h3 id="Raphael.vml" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.vml<a href="#Raphael.vml" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L233">&#x27ad;</a></h3>
+</div><h3 id="Raphael.vml" class="dr-property"><i class="dr-trixie">&#160;</i>Raphael.vml<a href="#Raphael.vml" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 307 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L307">&#x27ad;</a></h3>
 <div class="dr-property"><em class="dr-type dr-type-boolean">boolean</em><p><code>true</code> if browser supports VML.
 </p>
 </div><h2 id="Set" class="undefined"><i class="dr-trixie">&#160;</i>Set<a href="#Set" title="Link to this section" class="dr-hash">&#x2693;</a></h2>
-<h3 id="Set.forEach" class="dr-method"><i class="dr-trixie">&#160;</i>Set.forEach(callback, thisArg)<a href="#Set.forEach" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5627">&#x27ad;</a></h3>
+<h3 id="Set.forEach" class="dr-method"><i class="dr-trixie">&#160;</i>Set.forEach(callback, thisArg)<a href="#Set.forEach" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3821 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3821">&#x27ad;</a></h3>
 <div class="dr-method"><p>Executes given function for each element in the set.
 </p>
 <p>If function returns <code>false</code> it will stop loop running.
@@ -1430,12 +1713,98 @@ Converts path to relative form
 <dd class="dr-description">context object for the callback</dd>
 </dl>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">Set object</span></p>
-</div><h3 id="Set.pop" class="dr-method"><i class="dr-trixie">&#160;</i>Set.pop()<a href="#Set.pop" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5609">&#x27ad;</a></h3>
+</div><h3 id="Set.pop" class="dr-method"><i class="dr-trixie">&#160;</i>Set.pop()<a href="#Set.pop" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3803 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3803">&#x27ad;</a></h3>
 <div class="dr-method"><p>Removes last element and returns it.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">element</span></p>
-</div><h3 id="Set.push" class="dr-method"><i class="dr-trixie">&#160;</i>Set.push()<a href="#Set.push" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to source" href="raphael-src.html#L5589">&#x27ad;</a></h3>
+</div><h3 id="Set.push" class="dr-method"><i class="dr-trixie">&#160;</i>Set.push()<a href="#Set.push" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 3783 in the source" href="https://github.com/DmitryBaranovskiy/raphael/blob/2.0/raphael.core.js#L3783">&#x27ad;</a></h3>
 <div class="dr-method"><p>Adds each argument to the current set.
 </p>
 <p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-object">object</em> <span class="dr-description">original element</span></p>
+</div><h2 id="eve" class="dr-method"><i class="dr-trixie">&#160;</i>eve(name, scope, varargs)<a href="#eve" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 34 in the source" href="eve-src.html#L34">&#x27ad;</a></h2>
+<div class="dr-method"><p>Fires event with given <code>name</code>, given scope and other parameters.
+</p>
+<p class="header">Arguments
+</p>
+<dl class="dr-parameters"><dt class="dr-param">name</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">name of the event, dot (<code>.</code>) or slash (<code>/</code>) separated</dd>
+<dt class="dr-param">scope</dt>
+<dd class="dr-type"><em class="dr-type-object">object</em></dd>
+<dd class="dr-description">context for the event handlers</dd>
+<dt class="dr-param">varargs</dt>
+<dd class="dr-type"><em class="dr-type-...">...</em></dd>
+<dd class="dr-description">the rest of arguments will be sent to event handlers</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-boolean">boolean</em> <span class="dr-description"><code>false</code> if any of callbacks return false, <code>true</code> otherwise</span></p>
+</div><h3 id="eve.listeners" class="dr-method"><i class="dr-trixie">&#160;</i>eve.listeners(name)<a href="#eve.listeners" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 101 in the source" href="eve-src.html#L101">&#x27ad;</a></h3>
+<div class="dr-method"><p>Internal method which gives you array of all event handlers that will be triggered by the given <code>name</code>.
+</p>
+<p class="header">Arguments
+</p>
+<dl class="dr-parameters"><dt class="dr-param">name</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">name of the event, dot (<code>.</code>) or slash (<code>/</code>) separated</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-array">array</em> <span class="dr-description">array of event handlers</span></p>
+</div><h3 id="eve.nt" class="dr-method"><i class="dr-trixie">&#160;</i>eve.nt([subname])<a href="#eve.nt" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 198 in the source" href="eve-src.html#L198">&#x27ad;</a></h3>
+<div class="dr-method"><p>Could be used inside event handler to figure out actual name of the event.
+</p>
+<p class="header">Arguments
+</p>
+<dl class="dr-parameters"><dt class="dr-param optional">subname</dt>
+<dd class="dr-optional">optional</dd>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">subname of the event</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-string">string</em> <span class="dr-description">name of the event, if <code>subname</code> is not specified</span></p>
+<p>or
+</p>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-boolean">boolean</em> <span class="dr-description"><code>true</code>, if current event’s name contains <code>subname</code></span></p>
+</div><h3 id="eve.on" class="dr-method"><i class="dr-trixie">&#160;</i>eve.on(name, f)<a href="#eve.on" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 156 in the source" href="eve-src.html#L156">&#x27ad;</a></h3>
+<div class="dr-method"><p>Binds given event handler with a given name. You can use wildcards “<code>*</code>” for the names:
+</p>
+<pre class="javascript code"><code>eve.on(<i>"*.under.*"</i>, f);
+eve(<i>"mouse.under.floor"</i>); <span class="c">// triggers f</span>
+</code></pre>
+<p>Use <a href="#eve" class="dr-link">eve</a> to trigger the listener.
+</p>
+<p class="header">Arguments
+</p>
+<dl class="dr-parameters"><dt class="dr-param">name</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">name of the event, dot (<code>.</code>) or slash (<code>/</code>) separated, with optional wildcards</dd>
+<dt class="dr-param">f</dt>
+<dd class="dr-type"><em class="dr-type-function">function</em></dd>
+<dd class="dr-description">event handler function</dd>
+</dl>
+<p class="dr-returns"><strong class="dr-title">Returns:</strong> <em class="dr-type-function">function</em> <span class="dr-description">returned function accept one number parameter that represents z-index of the handler. It is optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. </span></p>
+<p class="header">Example:
+</p>
+<pre class="javascript code"><code>eve.on(<i>"mouse"</i>, eat)(<span class="d">2</span>);
+eve.on(<i>"mouse"</i>, scream);
+eve.on(<i>"mouse"</i>, <b>catch</b>)(<span class="d">1</span>);
+</code></pre>
+<p>This will ensure that <code>catch</code> function will be called before <code>eat</code>.
+If you want to put you hadler before not indexed handlers specify negative value.
+Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.
+</p>
+</div><h3 id="eve.stop" class="dr-method"><i class="dr-trixie">&#160;</i>eve.stop()<a href="#eve.stop" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 181 in the source" href="eve-src.html#L181">&#x27ad;</a></h3>
+<div class="dr-method"><p>Is used inside event handler to stop event
+</p>
+</div><h3 id="eve.unbind" class="dr-method"><i class="dr-trixie">&#160;</i>eve.unbind(name, f)<a href="#eve.unbind" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 215 in the source" href="eve-src.html#L215">&#x27ad;</a></h3>
+<div class="dr-method"><p>Removes given function from the list of event listeners assigned to given name.
+</p>
+<p class="header">Arguments
+</p>
+<dl class="dr-parameters"><dt class="dr-param">name</dt>
+<dd class="dr-type"><em class="dr-type-string">string</em></dd>
+<dd class="dr-description">name of the event, dot (<code>.</code>) or slash (<code>/</code>) separated, with optional wildcards</dd>
+<dt class="dr-param">f</dt>
+<dd class="dr-type"><em class="dr-type-function">function</em></dd>
+<dd class="dr-description">event handler function</dd>
+</dl>
+</div><h3 id="eve.version" class="dr-property"><i class="dr-trixie">&#160;</i>eve.version<a href="#eve.version" title="Link to this section" class="dr-hash">&#x2693;</a><a class="dr-sourceline" title="Go to line 272 in the source" href="eve-src.html#L272">&#x27ad;</a></h3>
+<div class="dr-property"><em class="dr-type dr-type-string">string</em><p>Current version of the library.
+</p>
 </div></div></div></body></html>
\ No newline at end of file