(function(h){var d=[];var g=0;var f={};function i(p){var o=[];h.extend(this,{width:p.width,height:p.height,ctx:p.getContext("2d"),save:function(){this.ctx.save();o.push({width:this.width,height:this.height})},restore:function(){this.ctx.restore();h.extend(this,o.pop())}})}var m=(function(){var o=function(q,p){q.ctx.translate(p,p);q.width-=2*p;q.height-=2*p};return{action:{paint:function(){}},shrink:o,defaultShrink:o,setAction:function(p){this.action=p}}})();function l(p,o){return h.extend({},m,p,{opts:o,savedOpts:o})}function n(o){return l({paint:function(p){p.save();this.action.opts=h.extend(true,this.action.savedOpts);h.each(o,function(){this.paint(p)});p.restore()},setAction:function(p){this.action=p;h.each(o,function(){this.action=p})}})}var c=n;function a(o,q){var p=f[o];if(!p){throw"Unknown plugin: "+o}q=h.extend({},p.defaultOpts||{},q);return l(p,q)}function e(z){z+=" ";var t=0;function q(s){msg=s+" at "+t+": ..."+z.substring(t)+"\nin "+z;alert(msg);throw msg}function p(){return z.charAt(t)}function C(){if(t>z.length){throw ("Unexpected end")}return z.charAt(t+1)}function w(){return z.charAt(t++)}function F(){while(/\s/.exec(p())){w()}}function G(J){F();for(var s=0;s<J.length;++s){if(p()!=J.charAt(s)){q("Expected '"+J.charAt(s)+"' found '"+p()+"'")}w()}}function I(){F();for(var s=[];/\w/.exec(p());s.push(w())){}return s.join("")}function v(){F();for(var s=[];/\d/.exec(p());s.push(w())){}return parseInt(s.join(""))}function u(){F();var J=[],K=p();if(/[^\'\"]/.exec(K)){q("String expected")}w();while(p()!=K){if(p()=="\\"){J.eat()}J.push(w())}G(K);return J.join("")}function E(){F();for(var J=[];/[^;}]/.exec(p());J.push(w())){}return J.join("")}function D(){F();if(/\d/.exec(p())){return v()}if(/['"]/.exec(p())){return u()}return E()}function B(){G("{");F();var J={};while(p()!="}"){var s=I();G(":");J[s]=D();F();if(p()=="}"){break}G(";")}G("}");return J}function x(){var s=I();F();opts=p()=="{"?B():{};return a(s,opts)}function y(){G("[");F();var s=[];while(p()!="]"){s.push(x());F()}G("]");return n(s)}function r(){F();return p()=="["?y():x()}function o(){var s;F();if(p()=="("){w();s=A();G(")")}else{s=x()}return s}function H(){var s=r();G("=>");var J=o();s.setAction(J);return s}function A(){var s=[];while(true){s.push(H());F();if(p()!=","){break}G(",")}return c(s)}return A()}function b(o,q){var x=h(o);var s=x.data("liquid-canvas");if(!s){return}var r=s.canvas;var u=h(r);var v=x.outerWidth();var t=x.outerHeight();if(q||r.width!=v||r.height!=t||r.offsetTop!=o.offsetTop||r.offsetLeft!=o.offsetLeft){g=100;u.css({left:o.offsetLeft+"px",top:o.offsetTop+"px"});r.width=v;r.height=t;var p=new i(r);p.save();s.paint(p);p.restore()}}function j(o){h.each(d,function(){b(this,o)})}function k(){j();g--;if(g<0){g=0;setTimeout(k,1000)}else{setTimeout(k,1000/60)}}jQuery.fn.extend({liquidCanvas:function(o){this.each(function(){var p;if(window.G_vmlCanvasManager){h(this).before('<div width="0" height="0" style="position:absolute; top:0px; left:0px;"></div>');p=G_vmlCanvasManager.initElement(h(this).prev("div").get(0))}else{h(this).before('<canvas width="0" height="0" style="position:absolute; top:0px; left:0px;"></canvas>');p=h(this).prev("canvas").get(0)}var r;if(h.isFunction(o)){r=o}else{var q=e(o);r=function(s){q.paint(s)}}h(this).data("liquid-canvas",{canvas:p,paint:r});h(this).css({background:"transparent"});if(h(this).css("position")!="absolute"){h(this).css({position:"relative"})}d.push(this);b(this,true)})}});jQuery.extend({registerLiquidCanvasPlugin:function(o){f[o.name]=h.extend({},m,o)}});h(document).ready(j);k()})(jQuery);

(function(a){a.registerLiquidCanvasPlugin({name:"rect",paint:function(b){b.ctx.beginPath();b.ctx.rect(0,0,b.width,b.height);b.ctx.closePath();if(this.action){this.action.paint(b)}}});a.registerLiquidCanvasPlugin({name:"roundedRect",defaultOpts:{radius:20},paint:function(d){var b=d.ctx;var c=this.opts;b.beginPath();b.moveTo(0,c.radius);b.lineTo(0,d.height-c.radius);b.quadraticCurveTo(0,d.height,c.radius,d.height);b.lineTo(d.width-c.radius,d.height);b.quadraticCurveTo(d.width,d.height,d.width,d.height-c.radius);b.lineTo(d.width,c.radius);b.quadraticCurveTo(d.width,0,d.width-c.radius,0);b.lineTo(c.radius,0);b.quadraticCurveTo(0,0,0,c.radius);b.closePath();if(this.action){this.action.paint(d)}},shrink:function(c,b){this.defaultShrink(c,b);this.opts.radius-=b}});a.registerLiquidCanvasPlugin({name:"fill",defaultOpts:{color:"#aaa"},paint:function(b){b.ctx.fillStyle=this.opts.color;this.action.paint(b);b.ctx.fill()}});a.registerLiquidCanvasPlugin({name:"image",defaultOpts:{url:"http://www.ruzee.com/files/liquid-canvas-image.png"},paint:function(b){var c=new Image();c.src=this.opts.url;c.onload=function(){b.ctx.drawImage(this,0,0)}}});a.registerLiquidCanvasPlugin({name:"gradient",defaultOpts:{from:"#fff",to:"#666"},paint:function(b){var c=b.ctx.createLinearGradient(0,0,0,b.height);c.addColorStop(0,this.opts.from);c.addColorStop(1,this.opts.to);b.ctx.fillStyle=c;this.action.paint(b);b.ctx.fill()}});a.registerLiquidCanvasPlugin({name:"shadow",defaultOpts:{width:3,color:"#000",shift:2},paint:function(d){var b=this.opts.width;d.ctx.fillStyle=this.opts.color;d.ctx.globalAlpha=1/b;for(var c=0;c<b;++c){this.action.paint(d);d.ctx.fill();this.action.shrink(d,1)}d.ctx.globalAlpha=1;d.ctx.translate(0,-this.opts.shift)}});a.registerLiquidCanvasPlugin({name:"border",defaultOpts:{color:"#8f4",width:3},paint:function(b){var c=this.opts.width;b.ctx.strokeStyle=this.opts.color;b.ctx.lineWidth=c;this.action.shrink(b,c/2);this.action.paint(b);b.ctx.stroke();this.action.shrink(b,c/2)}})})(jQuery);

$(window).load(function() {
		$("#container").liquidCanvas(
			"[shadow{color:#c8c8c8;width:2;shift:1;} fill{color:#f7f7f7}] => roundedRect{radius:40}");
	});
