
/*
	"Hemi" JavaScript Framework
	Engine for Web Applications 3.1
	Composite file "hemi.comp.js" release: 3.1.9
	Copyright 2002 - 2010. All Rights Reserved.
	Author: Stephen W. Cote
	Email: sw.cote@gmail.com
	Project: http://www.whitefrost.com/Hemi/
	BSD License: http://www.whitefrost.com/Hemi.license.txt
*/
(function(){if(!D.TU(document.attachEvent)){if(!H.isImported("excanvas")){H.include("excanvas","3rdParty/");if(typeof G_vmlCanvasManager!="undefined")G_vmlCanvasManager.init_(document);}}H.include("hemi.event");H.include("hemi.transaction");H.include("hemi.util.logger");H.namespace("graphics.canvas",H,{newInstance:
function(oContainer){var n=H.newObject("canvas","3.1.9");n.p={MouseTrackLeft:0,MouseTrackTop:0,MouseTrackDown:0,MouseOffsetX:0,MouseOffsetY:0,DefaultShapeRadius:20,DefaultShapeVerticalSpacing:15,DefaultShapeHorizontalSpacing:15,DefaultShapeGridUnit:(20*2)+(15*2),TransactionName:"canvas",PacketId:0,IERasterMode:0};n.o={container:oContainer,canvas:0,canvas_2d:0,temp_canvas:0,temp_canvas_2d:0,shapes:[],temp_shapes:[],shape_track_map:[],ShapeDecorators:[],CurrentShape:0,MouseDropShape:0};n.sigterm=function(){this.destroy();};n.destroy=function(){if(this.r!=5){this.r=5;this.Clear();var _p=this.o,_e=H.event.removeEventListener;_e(_p.temp_canvas,'mousedown',this._prehandle_canvas_mouse);_e(_p.temp_canvas,'mousemove',this._prehandle_canvas_mouse);_e(_p.temp_canvas,'mouseup',this._prehandle_canvas_mouse);_p.canvas.parentNode.removeChild(_p.canvas);_p.temp_canvas.parentNode.removeChild(_p.temp_canvas);}};n.getContainer=function(){return this.o.container;};n.Initialize=function(){var oC=this.getContainer(),oT,_t=H.transaction.service,oP,_p=this.p,_o=this.o,_e=H.event.addEventListener;if(oC.nodeName.toLowerCase()!="canvas"){oC=document.createElement("canvas");this.getContainer().appendChild(oC);}_o.canvas=oC;if(typeof oC.getContext=="undefined"){if(typeof G_vmlCanvasManager!="undefined"){_p.IERasterMode=1;G_vmlCanvasManager.initElement(oC);}if(typeof oC.getContext=="undefined"){this.serveTransaction("canvas_available",this);H.message.service.S("Browser does not support canvas","200.4");return;}}oC.parentNode.style.position="relative";_o.canvas_2d=oC.getContext("2d");oT=document.createElement("canvas");oT.style.cssText="position:absolute;top:"+oC.offsetTop+"px;left:"+oC.offsetLeft+"px;";oT.width=oC.clientWidth;oT.height=oC.clientHeight;oC.parentNode.appendChild(oT);if(typeof oT.getContext=="undefined"&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(oT);}_o.temp_canvas=oT;_o.temp_canvas_2d=oT.getContext("2d");this.scopeHandler("canvas_mouse",0,0,1);_e(oT,'mousedown',this._prehandle_canvas_mouse);_e(oT,'mousemove',this._prehandle_canvas_mouse);_e(oT,'mouseup',this._prehandle_canvas_mouse);if(this.getContainer().getAttribute("height")){this.Resize(this.getContainer().getAttribute("width"),this.getContainer().getAttribute("height"));}_p.canvas_supported=1;H.object.addObjectAccessor(this,"config");this.addNewConfig(this.getContextConfig(),"default");this.joinTransactionPacket();this.serveTransaction("canvas_available",this);};n._handle_canvas_impl_available=function(ts,tp){tp.data.src.SetCanvasComponent(this);};n.newContextConfig=function(z,a,b,c,d,e,f,g,h,i,j,k,l,m,n){var y={stroke:a,fill:b,alpha:c,lineWidth:d,lineCap:e,lineJoin:f,miterLimit:g,shadowOffsetX:h,shadowOffsetY:i,shadowColor:j,globalComposite:k,font:l,textAlign:m,textBaseline:n};this.addNewConfig(y,z);return y;};n.setTemporaryContextConfig=function(c){this.setContextConfig(c,this.getTemporaryContext());};n.setContextConfig=function(c,o){if(!o)o=this.getContext();if(typeof c=="string")c=this.getConfigByName(c);if(!c||!o)return;o.save();for(var i in c){if(D.TU(c[i]))continue;o[i]=c[i];}};n.getContextConfig=function(c){if(!c)c=this.getContext();var o=this.newContextConfig();for(var i in o){o[i]=c[i];}return o;};n.getContext=function(){return this.o.canvas_2d;};n.getTemporaryContext=function(){return this.o.temp_canvas_2d;};n.AddShapeDecorator=function(o){this.o.ShapeDecorators.push(o);};n.Clear=function(){this.ClearTempCanvas();this.ClearCanvas();};n.ClearTempCanvas=function(){var _p=this.o;_p.temp_shapes=[];_p.temp_canvas_2d.clearRect(0,0,_p.canvas.clientWidth,_p.canvas.clientHeight);};n.ClearCanvas=function(){var _p=this.o,a,i;_p.shape_track_map=[];_p.canvas_2d.clearRect(0,0,_p.canvas.clientWidth,_p.canvas.clientHeight);_p.shapes=[];a=_p.canvas.parentNode.getElementsByTagName("span");for(i=a.length-1;i>=0;i--){_p.canvas.parentNode.removeChild(a[i]);}};n.Draw=function(o,b,x){var _p=this.o;if(typeof o!="object"||typeof o.type!="string")return;switch(o.type){case "Triangle":case "Polygon":if(!o.rendered){_p.temp_shapes.push(o);o.rendered=1;}this.DrawPolygon(o);break;case "RoundedRect":if(!o.rendered){_p.temp_shapes.push(o);o.rendered=1;}this.DrawRoundedRect(o);break;case "Ellipse":if(!o.rendered){_p.temp_shapes.push(o);o.rendered=1;}this.DrawEllipse(o);break;case "Arc":if(!o.rendered){_p.temp_shapes.push(o);o.rendered=1;}this.DrawArc(o);break;case "Rect":if(!o.rendered){_p.temp_shapes.push(o);o.rendered=1;}this.DrawRect(o);break;case "Text":if(!o.rendered){_p.temp_shapes.push(o);o.rendered=1;}var bType=this.DrawText(o);if(bType==2)o.is_html=1;break;default:alert("Unknown shape:"+o.type);}};n.DrawPolygon=function(o){var _p=this.o,tc2,aP=o.points,oP,oLP=0;tc2=_p.temp_canvas_2d;tc2.beginPath();if(o.fillStyle)tc2.fillStyle=o.fillStyle;if(o.strokeStyle)tc2.strokeStyle=o.strokeStyle;for(var p=0;p<aP.length;p++){oP=aP[p];if(p==0){oLP=oP;tc2.moveTo(oP.x,oP.y);}else{tc2.lineTo(oP.x,oP.y);}}if(oLP&&o.closePath){tc2.lineTo(oLP.x,oLP.y);}if(o.fillStyle)tc2.fill();if(o.strokeStyle)tc2.stroke();tc2.closePath();};n.DrawRoundedRect=function(o){if(!o.type=="RoundedRect")return;var x1=o.x,x2=o.x+o.width,y1=o.y,y2=o.y+o.height,dx,dy,_p=this.o,tc2;tc2=_p.temp_canvas_2d;dx=Math.abs(x2-x1);dy=Math.abs(y2-y1);var dmin=(dx<dy)?dx:dy;var cornersize=(dmin / 2>=15)?15:dmin / 2;var xdir=(x2>x1)?cornersize:-1*cornersize;var ydir=(y2>y1)?cornersize:-1*cornersize;tc2.beginPath();tc2.fillStyle=o.fillStyle;tc2.strokeStyle=o.strokeStyle;tc2.moveTo(x1,y1+ydir);tc2.quadraticCurveTo(x1,y1,x1+xdir,y1);tc2.lineTo(x2-xdir,y1);tc2.quadraticCurveTo(x2,y1,x2,y1+ydir);tc2.lineTo(x2,y2-ydir);tc2.quadraticCurveTo(x2,y2,x2-xdir,y2);tc2.lineTo(x1+xdir,y2);tc2.quadraticCurveTo(x1,y2,x1,y2-ydir);tc2.fill();tc2.stroke();tc2.closePath();};n.DrawEllipse=function(o){if(!o.type=="Ellipse")return;var x1=o.x,x2=o.x2,y1=o.y,y2=o.y2,kappa=o.kappa,rx,ry,cx,cy,_p=this.o,tc2;tc2=_p.temp_canvas_2d;rx=(x2-x1)/ 2;ry=(y2-y1)/ 2;cx=x1+rx;cy=y1+ry;tc2.beginPath();tc2.fillStyle=o.fillStyle;tc2.strokeStyle=o.strokeStyle;tc2.moveTo(cx,cy-ry);tc2.bezierCurveTo(cx+(kappa*rx),cy-ry,cx+rx,cy-(kappa*ry),cx+rx,cy);tc2.bezierCurveTo(cx+rx,cy+(kappa*ry),cx+(kappa*rx),cy+ry,cx,cy+ry);tc2.bezierCurveTo(cx-(kappa*rx),cy+ry,cx-rx,cy+(kappa*ry),cx-rx,cy);tc2.bezierCurveTo(cx-rx,cy-(kappa*ry),cx-(kappa*rx),cy-ry,cx,cy-ry);tc2.fill();tc2.stroke();tc2.closePath();};n.DrawArc=function(o){var _p=this.o,tc2,f=o.fillStyle,c=o.strokeStyle;tc2=_p.temp_canvas_2d;tc2.beginPath();if(f)tc2.fillStyle=f;if(c)tc2.strokeStyle=c;tc2.arc(o.x,o.y,o.radius,o.startAngle,o.endAngle,false);if(o.slice)tc2.lineTo(o.x,o.y);tc2.closePath();if(c)tc2.stroke();if(f)tc2.fill();};n.DrawRect=function(o){var _p=this.o,tc2,x=o.x,y=o.y,w=o.width,h=o.height,b=0,f=o.fillStyle,c=o.strokeStyle;tc2=_p.temp_canvas_2d;if(!f)f=tc2.fillStyle;if(!c)c=f;tc2.fillStyle=f;tc2.strokeStyle=c;if(f)tc2.fillRect(x,y,w,h);if(c)tc2.strokeRect(x,y,w,h);};n.DrawText=function(o){var x=o.text,vX=o.x,vY=o.y,sColor=o.fillStyle,iH=0,_o=this.o,sF=(o.size?o.size:"10px")+" "+(o.font?o.font:"Courier");;iH=_o.canvas.clientHeight;if(!sColor)sColor="#000000";if(typeof _o.canvas_2d.measureText!="undefined"){_o.temp_canvas_2d.font=sF;_o.temp_canvas_2d.fillStyle=sColor;if(vX=="center"){var iW=_o.canvas.width;var iTW=_o.canvas_2d.measureText(x).width;if(iTW<iW)vX=(iW / 2)-(iTW / 2);else vX=0;}vY+=10;_o.temp_canvas_2d.fillText(x,vX,vY);return 1;}else{var oT=document.createElement("span");oT.appendChild(document.createTextNode(x));oT.style.csx="font:normal "+sF+";color:"+sColor+";position:absolute;top:"+vY+"px;left:"+vX+"px;";_o.canvas.parentNode.appendChild(oT);return 2;}};n.ConnectShapes=function(o1,o2,sT){var _p=this.o,tc2,x1=o1.x,x2=o2.x,y1=o1.y,y2=o2.y,w1=o1.width,w2=o2.width,h1=o1.height,h2=o2.height,yM=1,xM=1;tc2=_p.temp_canvas_2d;if(!sT)sT="elbow";if(o1.type.match(/Rect/)){if(x2>=x1&&x2<(x1+w1)){if((y2-h2 / 2)<y1){this.log("top center:"+"("+y2+"+"+h2+" / 2)<"+y1);x1+=parseInt(w1 / 2);}else if((y2+h2 / 2)>y1){this.log("bottom center:"+"("+y2+"+"+h2+" / 2)>"+y1);x1+=parseInt(w1 / 2);y1+=h1;}else{this.log("right center");x1+=w1;}}else{this.log("left center 1");if(x2>x1)x1+=w1;y1=parseInt(h1 / 2);}if((y2+h2)<y1){this.log("bottom center 2");yM=-1;y2+=h2;x2+=parseInt(w2 / 2);}else{this.log("left center 2");y2+=parseInt(h2 / 2);}}if(sT=="line"){tc2.beginPath();tc2.moveTo(o1.x,o1.y);tc2.lineTo(o2.x,o2.y);tc2.stroke();tc2.closePath();}else if(sT=="elbow"){tc2.beginPath();tc2.fillStyle="#FF0000";tc2.strokeStyle="#FF0000";var iMod=0;iMod=parseInt(o1.width / 2);tc2.moveTo(o1.x+iMod,o1.y+o1.height);tc2.lineTo(o1.x+iMod,o1.y+o1.height+10);tc2.lineTo(o2.x+iMod,o1.y+o1.height+10);tc2.lineTo(o2.x+iMod,o2.y);tc2.stroke();tc2.closePath();}},n.Rasterize=function(){var _p=this.o;_p.canvas_2d.drawImage(_p.temp_canvas,0,0);this.ClearTempCanvas();};n.Ellipse=function(x,y,x2,y2,f,b){var o=this.NewEllipse(x,y,x2,y2,f,b);this.Draw(o);return o;};n.Circle=function(x,y,r,f,b){var o=this.NewCircle(x,y,r,f,b);this.Draw(o);return o;};n.RoundedRect=function(x,y,w,h,f,b){var o=this.NewRoundedRect(x,y,w,h,f,b);this.Draw(o);return o;};n.Triangle=function(x,y,w,h,f,b){var o=this.NewTriangle(x,y,w,h,f,b);this.Draw(o);return o;};n.Rect=function(x,y,w,h,f,b){var o=this.NewRect(x,y,w,h,f,b);this.Draw(o);return o;};n.Text=function(e,x,y,f,s,sFz,sFf){var o=this.NewText(e,x,y,f,s,sFz,sFf);this.Draw(o);return o;};n.Arc=function(x,y,r,s,e,b,f,k){var o=this.NewArc(x,y,r,s,e,b,f,k);this.Draw(o);return o;};n.NewEllipse=function(x,y,x2,y2,f,s){var i=this.o.shapes.length;return this.o.shapes[i]=this.Merge(this.NewShape(i,"Ellipse",f,s),{x:x,y:y,x2:x2,y2:y2,kappa:4*((Math.sqrt(2)-1)/ 3)});};n.NewArc=function(x,y,r,s,e,b,f,k){var i=this.o.shapes.length,v=(Math.PI / 180);return this.o.shapes[i]=this.Merge(this.NewShape(i,"Arc",f,k),{x:x,y:y,radius:r,startAngle:s*v,endAngle:e*v,slice:b});};n.NewCircle=function(x,y,r,f,s){var i=this.o.shapes.length;return this.o.shapes[i]=this.Merge(this.NewShape(i,"Arc",f,s),{x:x,y:y,radius:r,startAngle:0,endAngle:Math.PI*2});};n.NewText=function(e,x,y,f,s,sFz,sFf){var i=this.o.shapes.length;return this.o.shapes[i]=this.Merge(this.NewShape(i,"Text",f,s),{x:x,y:y,text:e,size:sFz,font:sFf});};n.NewRoundedRect=function(x,y,w,h,f,s){var o=this.NewRect(x,y,w,h,f,s);o.type="RoundedRect";return o;};n.NewPoint=function(iX,iY){return{x:iX,y:iY};};n.NewTriangle=function(x,y,w,h,f,s){var iT=parseInt(y-h / 2),aP=[];aP.push(this.NewPoint(x,parseInt(y-h / 2)));aP.push(this.NewPoint(parseInt(x-w / 2),parseInt(y+h / 2)));aP.push(this.NewPoint(parseInt(x+w / 2),parseInt(y+h / 2)));var o=this.NewPolygon(aP,f,s);o.type="Triangle";o.closeShape=1;return o;};n.NewPolygon=function(aP,f,s){var i=this.o.shapes.length;return this.o.shapes[i]=this.Merge(this.NewShape(i,"Polygon",f,s),{points:aP,closeShape:0});};n.NewRect=function(x,y,w,h,f,s){var i=this.o.shapes.length;return this.o.shapes[i]=this.Merge(this.NewShape(i,"Rect",f,s),{x:x,y:y,height:h,width:w});};n.NewShape=function(i,y,f,s){return{index:i,type:y,layerIndex:0,fillStyle:f,strokeStyle:s,id:null,rendered:0,children:[],parent:0,is_html:0,reference_id:-1,selectable:1};};n.Merge=function(s,t){for(var i in s){if(typeof t[i]=="undefined")t[i]=s[i];}return t;};n.ShapeAt=function(x,y){var _p=this.o;if(typeof _p.shape_track_map[x]=="object"&&typeof _p.shape_track_map[x][y]=="number"){return _p.shapes[_p.shape_track_map[x][y]];}var oS=this.FindShapeAt(x,y);if(oS){if(typeof _p.shape_track_map[x]!="object")_p.shape_track_map[x]=[];_p.shape_track_map[x][y]=oS.index;}return oS;};n.FindShapeAt=function(x,y){var oShape,oMatch=0,_p=this.o;for(var i=0;i<_p.shapes.length;i++){if(!(oShape=_p.shapes[i])||!oShape.selectable)continue;switch(oShape.type){case "Arc":if(x>=oShape.x&&x<=(oShape.x+(oShape.radius*2))&&y>=oShape.y&&y<=(oShape.y+(oShape.radius*2)))oMatch=oShape;break;case "Rect":if(x>=oShape.x&&x<=(oShape.x+oShape.width)&&y>=oShape.y&&y<=(oShape.y+oShape.height))oMatch=oShape;break;default:break;}if(oMatch)break;}return oMatch;};n.handle_canvas_mousemove=function(e){this.o.MouseDropShape=this.ShapeAt(this.p.MouseTrackLeft,this.p.MouseTrackTop);this.dispatch_decorators(e);};n.handle_canvas_mouseup=function(e){var _s=this.p;this.dispatch_decorators(e);_s.MouseTrackDown=0;this.o.CurrentShape=0;this.o.MouseDropShape=0;_s.MouseTrackChoose=0;_s.MouseOffsetX=0;_s.MouseOffsetY=0;_s.MouseTrackLeft=0;_s.MouseTrackTop=0;};n.dispatch_decorators=function(e){var aD=this.o.ShapeDecorators;for(var i=0;i<aD.length;i++){if(typeof aD[i]["handle_canvas_"+e.type]=="function")aD[i]["handle_canvas_"+e.type](this,e);}};n.handle_canvas_mousedown=function(e){var _s=this.p;_s.MouseTrackDown=1;var oShape=this.ShapeAt(_s.MouseTrackLeft,_s.MouseTrackTop);if(oShape){this.o.CurrentShape=oShape;_s.MouseTrackChoose=1;_s.MouseOffsetX=_s.MouseTrackLeft-oShape.x;_s.MouseOffsetY=_s.MouseTrackTop-oShape.y;}this.dispatch_decorators(e);};n._handle_canvas_mouse=function(e){e=H.event.getEvent(e);var sHandler="handle_canvas_"+e.type;this.p.MouseTrackLeft=(typeof e.layerX=="number"?e.layerX:e.offsetX);this.p.MouseTrackTop=(typeof e.layerY=="number"?e.layerY:e.offsetY);if(typeof this[sHandler]=="function")this[sHandler](e);};n.Resize=function(x,y){var _p=this.o;this.getContainer().style.width=x;this.getContainer().style.height=y;_p.canvas.setAttribute("height",y);_p.canvas.setAttribute("width",x);_p.temp_canvas.setAttribute("height",y);_p.temp_canvas.setAttribute("width",x);_p.temp_canvas.style.cssText="position:absolute;top:"+_p.canvas.offsetTop+"px;left:"+_p.canvas.offsetLeft+"px;";};H.event.addScopeBuffer(n);H.registry.service.addObject(n);H.transaction.service.register(n,1);H.util.logger.addLogger(n,"Canvas Instance","Canvas Instance",230);n.r=4;n.Initialize();return n;}});}());
/* End Hemi Framework 3.1 */

