//copyright 2007 boxily inc
function temp_line(startdiv,startdiv_loc){this.startdiv=startdiv;this.startdiv_loc=startdiv_loc;this.canvas=workspacecanvas;this.canvas.setStroke(2);this.canvas.setColor("black");this.startx=$(this.startdiv).offsetLeft-$('workspace').offsetLeft;this.starty=$(this.startdiv).offsetTop-$('workspace').offsetTop;this.draw=function(x,y){var dimensions=Element.getDimensions($(this.startdiv+'pic_img'));this.canvas.clear();var startx=this.startx;var starty=this.starty;switch(this.startdiv_loc){case'_top':var halfy=(starty-y)/2+y;this.canvas.drawLine(startx+dimensions.width/2,starty,startx+dimensions.width/2,halfy);this.canvas.drawLine(startx+dimensions.width/2,halfy,x,halfy);this.canvas.drawLine(x,halfy,x,y);break;case'_bot':var halfy=((starty+dimensions.height)-y)/2+y;this.canvas.drawLine(startx+dimensions.width/2,starty+dimensions.height,startx+dimensions.width/2,halfy);this.canvas.drawLine(startx+dimensions.width/2,halfy,x,halfy);this.canvas.drawLine(x,halfy,x,y);break;case'_left':var halfx=(startx-x)/2+x;this.canvas.drawLine(startx,starty+dimensions.height/2,halfx,starty+dimensions.height/2);this.canvas.drawLine(halfx,starty+dimensions.height/2,halfx,y);this.canvas.drawLine(halfx,y,x,y);break;case'_right':var halfx=((startx+dimensions.width)-x)/2+x;this.canvas.drawLine(startx+dimensions.width,starty+dimensions.height/2,halfx,starty+dimensions.height/2);this.canvas.drawLine(halfx,starty+dimensions.height/2,halfx,y);this.canvas.drawLine(halfx,y,x,y);break;}
this.canvas.paint();}}
function line(firstdiv,seconddiv,line_id,delta,color,width){this.id=line_id;this.name="line"+this.id;this.firstdiv=firstdiv[0];this.firstdiv_location=firstdiv[1];blocks[this.firstdiv].options.blocklines.push(this.name);this.seconddiv=seconddiv[0];this.seconddiv_location=seconddiv[1];blocks[this.seconddiv].options.blocklines.push(this.name);this.insert1=new Insertion.Bottom('superspace','<div class="linecanvas" id=\"'+this.name+'\"></div>');$(this.name).style.cursor="pointer";this.canvas=new jsGraphics(this.name);this.delta=delta;this.handle_id=this.name+'_handle';new Insertion.Top('superspace','<div class="line_handle" id=\"'+this.handle_id+'\">&nbsp;</div>');Event.observe(this.handle_id,'mousedown',function(e){dialog_contents('',true);divname=Event.element(e).id.replace('_handle','');unselect_blocks(true);mylinecolor=lines[divname].color;colors=["#000000","#FF0000","#FF8800","#FFFF00","#009900","#0000FF","#8800FF"]
color_index=colors.indexOf(mylinecolor);$('line_formatter_color').selectedIndex=color_index;$('line_formatter_width').selectedIndex=lines[divname].stroke-1;Element.show('line_formatter');selected_line=lines[divname];lines.each(function(line){$(line.name+'_handle').style.backgroundColor='#009900';});$(divname+'_handle').style.backgroundColor='#0000ff';});this.handle=new Draggable(this.handle_id,{onDrag:function(line_handle){dragging=true;line_name=line_handle.element.id.split('_')[0];var dimensions1=Element.getDimensions($(lines[line_name].firstdiv+"pic_img"));var dimensions2=Element.getDimensions($(lines[line_name].seconddiv+"pic_img"));startx=$(lines[line_name].firstdiv).offsetLeft;starty=$(lines[line_name].firstdiv).offsetTop;endx=$(lines[line_name].seconddiv).offsetLeft;endy=$(lines[line_name].seconddiv).offsetTop;var pos=Position.cumulativeOffset(line_handle.element);x1=startx+dimensions1.width/2-1;x2=endx+dimensions2.width/2-1;y1=starty+dimensions1.height/2-1;y2=endy+dimensions2.height/2-1;halfx=(x2-x1)/2+x1;halfy=(y2-y1)/2+y1;if(lines[line_name].firstdiv_location==lines[line_name].seconddiv_location){if(lines[line_name].firstdiv_location=='left'){lines[line_name].delta=pos[0]-halfx+(dimensions1.width/2+dimensions2.width/2)/2+(5-lines[line_name].stroke/2);}
else if(lines[line_name].firstdiv_location=='right'){lines[line_name].delta=pos[0]-halfx-(dimensions1.width/2+dimensions2.width/2)/2+(5-lines[line_name].stroke/2);}
else if(lines[line_name].firstdiv_location=='top'){lines[line_name].delta=pos[1]-halfy+(dimensions1.height/2+dimensions2.height/2)/2+(5-lines[line_name].stroke/2);}
else{lines[line_name].delta=pos[1]-halfy-(dimensions1.height/2+dimensions2.height/2)/2+(5-lines[line_name].stroke/2);}}
else{if(lines[line_name].firstdiv_location=='left'){lines[line_name].delta=pos[0]-halfx+(dimensions1.width/2-dimensions2.width/2)/2+(5-lines[line_name].stroke/2);}
else if(lines[line_name].firstdiv_location=='right'){lines[line_name].delta=pos[0]-halfx-(dimensions1.width/2-dimensions2.width/2)/2+(5-lines[line_name].stroke/2);}
else if(lines[line_name].firstdiv_location=='top'){lines[line_name].delta=pos[1]-halfy+(dimensions1.height/2-dimensions2.height/2)/2+(5-lines[line_name].stroke/2);}
else{lines[line_name].delta=pos[1]-halfy-(dimensions1.height/2-dimensions2.height/2)/2+(5-lines[line_name].stroke/2);}}
lines[line_name].draw();},onEnd:function(line_handle){dragging=false;line_name=line_handle.element.id.split('_')[0];lines[line_name].draw(true);lines[line_name].save();}});Element.hide(this.handle_id);this.handle.options.starteffect=false;this.handle.options.endeffect=false;this.stroke=width;this.color=color;this.canvas.setStroke(width);this.canvas.setColor(this.color);this.unselect=function(){Element.hide(this.handle_id);Element.hide('line_formatter');this.draw();}
Event.observe(this.name,'mousedown',select_line);this.draw=function(move_handle_position){this.canvas.clear();var dimensions1=Element.getDimensions($(this.firstdiv+"pic_img"));var dimensions2=Element.getDimensions($(this.seconddiv+"pic_img"));startx=$(this.firstdiv).offsetLeft;starty=$(this.firstdiv).offsetTop;endx=$(this.seconddiv).offsetLeft;endy=$(this.seconddiv).offsetTop;switch(this.firstdiv_location){case"bot":x1=startx+dimensions1.width/2-1;y1=starty+dimensions1.height;break;case"top":x1=startx+dimensions1.width/2-1;y1=starty;break;case"left":x1=startx;y1=starty+dimensions1.height/2-1;break;case"right":x1=startx+dimensions1.width;y1=starty+dimensions1.height/2-1;break;}
switch(this.seconddiv_location){case"bot":x2=endx+dimensions2.width/2-1;y2=endy+dimensions2.height;break;case"top":x2=endx+dimensions2.width/2-1;y2=endy;break;case"left":x2=endx;y2=endy+dimensions2.height/2-1;break;case"right":x2=endx+dimensions2.width;y2=endy+dimensions2.height/2-1;break;}
var positions=["top","right","bot","left"];var angle_diff=positions.indexOf(this.seconddiv_location)-positions.indexOf(this.firstdiv_location);switch(Math.abs(angle_diff%2)){case 0:if((this.firstdiv_location=="left")||(this.firstdiv_location=="right")){var delta=this.delta;halfx=(x2-x1)/2+x1+delta;this.handle.options.snap=function(x,y){return[x,(y1+y2)/2];};this.canvas.drawLine(x1,y1,halfx,y1);this.canvas.drawLine(halfx,y1,halfx,y2);this.canvas.drawLine(halfx,y2,x2,y2);if(move_handle_position){$(this.handle_id).style.top=(y1+y2)/2;$(this.handle_id).style.left=halfx-4;}}
else{var delta=this.delta;halfy=(y2-y1)/2+y1+delta;this.handle.options.snap=function(x,y){return[(x1+x2)/2,y];};this.canvas.drawLine(x1,y1,x1,halfy);this.canvas.drawLine(x1,halfy,x2,halfy);this.canvas.drawLine(x2,halfy,x2,y2);if(move_handle_position){$(this.handle_id).style.top=halfy-4;$(this.handle_id).style.left=(x1+x2)/2;}}
this.canvas.paint();break;case 1:if((this.firstdiv_location=="top")||(this.firstdiv_location=="bot")){if(move_handle_position){$(this.handle_id).style.top=y2-5;$(this.handle_id).style.left=x1-5;}
this.handle.destroy();this.canvas.drawLine(x1,y1,x1,y2);this.canvas.drawLine(x1,y2,x2,y2);}
else{if(move_handle_position){$(this.handle_id).style.top=y1-5;$(this.handle_id).style.left=x2-5;}
this.handle.destroy();this.canvas.drawLine(x1,y1,x2,y1);this.canvas.drawLine(x2,y1,x2,y2);}
this.canvas.paint();break;}};this.save=function(){var pars='project_id='+project_id+'&id='+this.id+'&firstdiv='+this.firstdiv.replace("block","")+'&seconddiv='+this.seconddiv.replace("block","")+'&delta='+this.delta+'&color='+escape(this.color)+'&width='+this.stroke;new Ajax.Request('/demo_num',{asynchronous:true,parameters:pars,evalScripts:true,onFailure:connection_down,onException:connection_down});};this.delete_line=function(){Element.hide('line_formatter');this.canvas.clear();Element.remove(this.handle_id);Element.remove(this.name);var name=this.name;var lineid=this.id;var pars='line_id='+lineid+'&project_id='+project_id;new Ajax.Request('/demo_num',{asynchronous:true,parameters:pars,onFailure:connection_down,onException:connection_down});lines=lines.without(this);lines.each(function(line){lines[line.name]=lines[lines.indexOf(line)];});if(blocks[this.firstdiv].options.blocklines.indexOf(name)>-1)
{blocks[this.firstdiv].options.blocklines=blocks[this.firstdiv].options.blocklines.without(name);}
if(blocks[this.seconddiv].options.blocklines.indexOf(name)>-1)
{blocks[this.seconddiv].options.blocklines=blocks[this.seconddiv].options.blocklines.without(name);}};this.reindex=function(){for(var i=0;i<lines.length;i++){lines[lines[i].name]=lines[i];}};this.draw(true);undo_array.push(function(){lines["line"+line_id].delete_line();});}
function select_line(e){dialog_contents("",false);divname=Event.element(e).parentNode.id;unselect_blocks(true);Element.show('line_formatter');Element.show(divname+'_handle');$(divname+'_handle').style.backgroundColor="#0000ff";mylinecolor=lines[divname].color;colors=["#000000","#FF0000","#FF8800","#FFFF00","#009900","#0000FF","#8800FF"]
color_index=colors.indexOf(mylinecolor);$('line_formatter_color').selectedIndex=color_index;$('line_formatter_width').selectedIndex=lines[divname].stroke-1;selected_line=lines[divname];}
function restore_line(){dialog_contents("",true);blocks.each(function(block){var positions=['_top','_bot','_left','_right'];positions.each(function(position){if($(block.name+position)){Element.hide(block.name+position);$(block.name+position).style.backgroundColor="#009900";}});});lines.each(function(line){$(line.name+'_handle').style.backgroundColor="#009900";});}
function line_color(color){if(selected_line){selected_line.color=color;selected_line.canvas.setColor(color);selected_line.draw();selected_line.save();}}
function line_width(pixels){if(selected_line){selected_line.stroke=pixels;selected_line.canvas.setStroke(pixels);selected_line.draw();selected_line.save();}}
