//copyright 2007 boxily inc
var snap="off";var dragging=false;Block=Draggable;Block.prototype.save=function(){var pos=Position.cumulativeOffset(this.element);var name=this.name;var editor=$(this.name+"text");var pars='id='+this.idnum+'&x='+pos[0]+'&y='+pos[1]+'&w='+$(this.name+'pic_img').width+'&h='+$(this.name+'pic_img').height+'&bgcolor='+this.bgColor+'&text_y='+editor.style.top+'&text_x='+editor.style.left+'&text_data='+escape(editor.innerHTML)+'&project_id='+project_id+'&imagefile='+this.imagefile+'&text_size='+parseInt(editor.style.fontSize);new Ajax.Request('/save_block',{asynchronous:true,parameters:pars,evalScripts:true,onFailure:connection_down,onException:connection_down});};Block.prototype.delete_block=function(){var idnum=this.idnum;var name=this.name;var pars='project_id='+project_id+'&block_id='+idnum;new Ajax.Request('/delete_block',{asynchronous:true,parameters:pars,onComplete:function(request){new Element.remove($(name));dialog_contents("Block deleted",true);},onFailure:connection_down,onException:connection_down});this.options.blocklines.each(function(linename){if(lines[linename]){lines[linename].delete_line();}});blocks=blocks.without(this);blocks.each(function(block){blocks[block.name]=blocks[blocks.indexOf(block)];});};Block.prototype.rotate_block=function(){blockdivname=this.name;$(blockdivname+'pic_img').width=blocks[blockdivname].h;$(blockdivname+'pic_img').height=blocks[blockdivname].w;temph=blocks[blockdivname].h;blocks[blockdivname].h=blocks[blockdivname].w;blocks[blockdivname].w=temph;unselect_blocks();select_block(true,blockdivname);pars='method=rotate&idnum='+this.idnum+'&delta=90';new Ajax.Request('/transform_block',{asynchronous:true,evalScripts:true,parameters:pars,onSuccess:function(request){blocks[blockdivname].change_picture(request.responseText.replace(new RegExp("\\n"),""));naturalwidth=$(blockdivname+'pic_img').naturalWidth;naturalheight=$(blockdivname+'pic_img').naturalHeight;blocks[blockdivname].save();},onFailure:connection_down});}
Block.prototype.change_picture=function(img_url){this.imagefile=img_url;this.updateimage();}
Block.prototype.updateimage=function(){$(this.name+'pic_img').src=this.imagefile;}
function snap_grid_off(x,y,draggable){var workspace=$('workspace');var dragpic_element=$(draggable.name+"pic_img");return[x<(workspace.offsetWidth+workspace.offsetLeft-dragpic_element.offsetWidth)?(x>workspace.offsetLeft?x:workspace.offsetLeft):workspace.offsetWidth+workspace.offsetLeft-dragpic_element.offsetWidth,y<(workspace.offsetHeight+workspace.offsetTop-dragpic_element.offsetHeight)?(y>workspace.offsetTop?y:workspace.offsetTop):workspace.offsetHeight+workspace.offsetTop-dragpic_element.offsetHeight];};function snap_grid_on(x,y,draggable){var workspace=$('workspace');var dragpic_element=$(draggable.name+"pic_img");return[x<(workspace.offsetWidth+workspace.offsetLeft-dragpic_element.offsetWidth)?(x>workspace.offsetLeft?Math.round(x*.05)/.05:workspace.offsetLeft):workspace.offsetWidth+workspace.offsetLeft-dragpic_element.offsetWidth,y<(workspace.offsetHeight+workspace.offsetTop-dragpic_element.offsetHeight)?(y>workspace.offsetTop?Math.round(y*.05)/.05:workspace.offsetTop):workspace.offsetHeight+workspace.offsetTop-dragpic_element.offsetHeight];};function createBox(filename,idnum,width,height,text,text_y,text_x,x,y,text_size){idnum=idnum.toString().replace(new RegExp("\\n"),"");blockname="block"+idnum;new Insertion.Top('superspace','<div id=\"'+blockname+'\" class=\'block\' ></div>');index=blocks.push(new Block(blockname))-1;new Insertion.Top(blockname,"<div class=\"block_canvas\" id=\""+blockname+"canvas\"></div>");new Insertion.Top(blockname,"<div style=\"z-index: 10;\"id=\""+blockname+"pic\"><img id=\""+blockname+"pic_img\" class=\"block_pic_img\" src=\""+filename+"\" alt=\""+blockname+"\"/></div>");new Insertion.Top(blockname,'<div id=\"'+blockname+'text\" class=\"block_text\" style=\"top:'+text_y+'; left:'+text_x+';\"></div>');$(blockname+'text').innerHTML=text;new TextEditor(blockname+"text");$(blockname).style.top=y;$(blockname).style.left=x;blocks[blockname]=blocks[index];blocks[blockname].imagefile=filename;blocks[blockname].name=blockname;blocks[blockname].idnum=idnum;(snap=="off")?blocks[blockname].options.snap=snap_grid_off:blocks[blockname].options.snap=snap_grid_on;blocks[blockname].options.blocklines=[];blocks[blockname].options.starteffect=false;blocks[blockname].options.endeffect=false;blocks[blockname].options.onStart=function(block){var dragging=true;var pos=Position.cumulativeOffset(block.element);undo_array.push(function(){new Effect.Move(block.name,{duration:.3,x:pos[0],y:pos[1],mode:'absolute',afterUpdate:function(){block.options.onDrag(block)},afterFinish:function(){block.options.onEnd(block)}});})
block.x=pos[0];block.y=pos[1];}
blocks[blockname].options.onDrag=function(block){this.blocklines.each(function(linename){lines[linename].draw(true)});var pos=Position.cumulativeOffset(block.element);var deltax=pos[0]-block.x;var deltay=pos[1]-block.y;block.x=pos[0];block.y=pos[1];selected.without(block).each(function(selblock){new Effect.MoveBy(selblock.element,deltay,deltax,{mode:'relative',duration:0});selblock.options.blocklines.each(function(linename){lines[linename].draw(true)});});}
blocks[blockname].options.onEnd=function(block){var dragging=false;this.blocklines.each(function(linename){lines[linename].draw()});block.save();selected.without(block).each(function(selblock){selblock.options.blocklines.each(function(linename){lines[linename].draw(true)});selblock.save();});}
blocks[blockname].canvas=new jsGraphics(blockname+"canvas");blocks[blockname].w=width;blocks[blockname].h=height;blocks[blockname].x=x;blocks[blockname].y=y;$(blockname+'pic_img').width=width;$(blockname+'pic_img').height=height;Event.observe(blockname+'pic_img','mousedown',select_block);blocks[blockname].editor=$(blockname+"text");if(text.length>0){$(blockname+"text").style.fontSize=text_size+"px";$(blockname+"text").style.width=text.length*(text_size/2);}
left_div="<div id=\""+blockname+"_left\" class=\"line_handle\" style=\"top: "+(blocks[blockname].h/2-5)+";left: -5px;\">&nbsp</div>";right_div="<div id=\""+blockname+"_right\" class=\"line_handle\" style=\"top: "+(blocks[blockname].h/2-5)+";left: "+(blocks[blockname].w-5)+";\">&nbsp</div>";top_div="<div id=\""+blockname+"_top\" class=\"line_handle\" style=\"top: -5px; left:"+(blocks[blockname].w/2-5)+";\">&nbsp</div>";bot_div="<div id=\""+blockname+"_bot\" class=\"line_handle\" style=\"top: "+(blocks[blockname].h-5)+";left:"+(blocks[blockname].w/2-5)+";\">&nbsp</div>";new Insertion.Top($(blockname),left_div+right_div+top_div+bot_div);var locations=['_left','_right','_top','_bot'];locations.each(function(loc){Element.hide(blockname+loc);new Draggable(blockname+loc,{revert:true,starteffect:false,endeffect:false,reverteffect:function(element,top_offset,left_offset){new Effect.Move(element,{x:-left_offset,y:-top_offset,duration:0,queue:{scope:'_draggable',position:'end'}})},onStart:function(draggable){dragging=true;blockdiv=draggable.element.id.split('_')[0];Element.hide(blockdiv+'resize');draggable.templine=new temp_line(blockdiv,loc);locations3=['_left','_right','_top','_bot'];locations3.without(loc).each(function(loc3){Element.hide(blockdiv+loc3);});Event.stopObserving('workspace','mouseover',clear_handles);draggable.snap_blocks=[];blocks.without(blocks[blockdiv]).each(function(block){var block_pos=Position.cumulativeOffset(block.element);locations2=['_left','_right','_top','_bot'];locations2.each(function(loc2){Element.show(block.name+loc2);draggable.snap_blocks.push([block_pos[0]+$(block.name+loc2).offsetLeft,block_pos[1]+$(block.name+loc2).offsetTop])
$(block.name+loc2).style.backgroundColor="#0000ff";});});draggable.options.snap=function(x,y,draggable){var pos=Position.cumulativeOffset(draggable.element.parentNode);var newx=x;var newy=y;draggable.snap_blocks.each(function(snap_block){if((Math.abs((snap_block[0]-(pos[0]+x)))<5)&&(Math.abs((snap_block[1]-(pos[1]+y)))<5)){newx=snap_block[0]-pos[0];newy=snap_block[1]-pos[1];}});return[newx,newy]}},onDrag:function(draggable){var pos=Position.cumulativeOffset(draggable.element);draggable.templine.draw(pos[0]-$('workspace').offsetLeft,pos[1]-$('workspace').offsetTop);},onEnd:function(draggable){dragging=false;draggable.templine.canvas.clear();blockname=draggable.element.id.split('_')[0];restore_line();}});Droppables.add(blockname+loc,{accept:'line_handle',onDrop:function(line_handle,drop_element){var block1=drop_element.id.split('_');var block2=line_handle.id.split('_');blockname=block1[0];new Ajax.Request('/add_line',{parameters:'project_id='+project_id+'&firstdiv='+blocks[block1[0]].idnum+'&firstdivpos='+block1[1]+'&seconddiv='+blocks[block2[0]].idnum+'&seconddivpos='+block2[1],onSuccess:function(request){lines.push(new line(drop_element.id.split('_'),line_handle.id.split('_'),request.responseText.replace(new RegExp("\\n"),""),0,'#000000',2));lines[0].reindex();dialog_contents("Line Added",true);},onFailure:connection_down,onException:connection_down});}});});image_div=$(blockname+'pic_img');new Insertion.Top(blockname,"<div id=\""+blockname+"resize\" style=\"top: "+(image_div.height-10)+"px; left: "+(image_div.width-10)+"px\" class=\"block_resize\">&nbsp;</div>");new Draggable(blockname+'resize',{onStart:function(resizer,e){Event.stopObserving('workspace','mouseover',clear_handles);var blockname=resizer.element.id.replace('resize','')
var imageid=$(blockname+'pic_img');resizer.slope=(imageid.height)/(imageid.width);dragging=true;},onDrag:function(resizer,e){var blockname=resizer.element.id.replace('resize','')
var imageid=$(blockname+'pic_img');if(e.shiftKey){resizer.options.snap=function(x,y,draggable){return[x,x*(resizer.slope)]};}
else{resizer.options.snap=false;};blocks[blockname].options.blocklines.each(function(linename){lines[linename].draw(true);});var pos=Position.positionedOffset(resizer.element);imageid.width=pos[0]+10;imageid.height=pos[1]+10;blocks[blockname].w=pos[0]+10;blocks[blockname].h=pos[1]+10;if(selected.length>0){unselect_blocks();select_block(true,blockname);}
$(blockname+'_left').style.top=blocks[blockname].h/2-5;$(blockname+'_right').style.top=(blocks[blockname].h/2-5);$(blockname+'_right').style.left=(blocks[blockname].w-5);$(blockname+'_top').style.left=(blocks[blockname].w/2-5);$(blockname+'_bot').style.top=(blocks[blockname].h-5);$(blockname+'_bot').style.left=(blocks[blockname].w/2-5);},onEnd:function(resizer){Event.observe('workspace','mouseover',clear_handles);resizer.options.snap=false;var blockdivname=resizer.element.id.replace('resize','');blocks[blockdivname].options.blocklines.each(function(linename){lines[linename].draw();});var pos=Position.positionedOffset(resizer.element);blocks[blockdivname].w=pos[0]+10;blocks[blockdivname].h=pos[1]+10;pars='method=resize&idnum='+blocks[blockdivname].idnum+'&width='+(pos[0]+10)+'&height='+(pos[1]+10);new Ajax.Request('/transform_block',{asynchronous:true,evalScripts:true,parameters:pars,onSuccess:function(request){blocks[blockdivname].change_picture(request.responseText.replace(new RegExp("\\n"),""));blocks[blockdivname].updateimage();blocks[blockdivname].save();},onFailure:connection_down});dragging=false;}});Element.hide(blockname+'resize');Event.observe(blockname+'pic_img','mouseover',function(e){try{blockelement=Event.element(e).id.replace("pic_img","");$(blockelement+'_left').style.top=blocks[blockelement].h/2-5;$(blockelement+'_left').style.left=-5;$(blockelement+'_right').style.top=(blocks[blockelement].h/2-5);$(blockelement+'_right').style.left=(blocks[blockelement].w-5);$(blockelement+'_top').style.top=-5;$(blockelement+'_top').style.left=(blocks[blockelement].w/2-5);$(blockelement+'_bot').style.top=(blocks[blockelement].h-5);$(blockelement+'_bot').style.left=(blocks[blockelement].w/2-5);$(blockelement+'resize').style.top=(blocks[blockelement].h-10);$(blockelement+'resize').style.left=(blocks[blockelement].w-10);locations=['_left','_right','_top','_bot'];Element.show(blockelement+'resize');locations.each(function(loc){Event.observe(blockelement+loc,'mousedown',function(){Event.stopObserving('workspace','mouseover',clear_handles)});Element.show(blockelement+loc);});Event.observe(blockelement+'resize','mousedown',function(){Event.stopObserving('workspace','mouseover',clear_handles)});Event.observe('workspace','mouseover',clear_handles);}
catch(e){1+1}});return blockname;}
function clear_handles(e){if(!dragging){Event.stopObserving('workspace','mouseover',clear_handles);blocks.each(function(block){locations=['_left','_right','_top','_bot'];locations.each(function(loc){Element.hide(block.name+loc);});Element.hide(block.name+'resize');});}}
function TextEditor(elementid){this.block=new Draggable(elementid);this.block.options.starteffect=false;this.block.options.endeffect=false;this.block.options.onEnd=function(text_div){blocks[text_div.element.id.replace("text","")].save();};this.name=elementid;$(elementid).style.fontSize=16;if($(elementid).innerHTML==''){Element.hide(elementid);}
Event.observe(this.name,'dblclick',show_textarea);}
function show_textarea(e){div=Event.element(e);fontsize=div.style.fontSize;div.innerHTML="<textarea id=\""+div.id+"_tarea\">"+div.innerHTML+"</textarea><button id=\""+div.id+"_okbutton\">ok</button>";$(div.id+'_tarea').style.fontSize=fontsize;Event.observe(div.id+"_okbutton",'click',function(e){hide_textarea(div.id);});Event.stopObserving(div.id,'dblclick',show_textarea);dialog_contents('',true);$('text_formatter_size').value=parseInt(div.style.fontSize);Element.show('text_formatter');text_edit_block=blocks[div.id.replace('text','')];Event.observe('font_size_up','click',onfontsize_up);Event.observe('font_size_down','click',onfontsize_down);Event.observe('text_formatter_size','change',onfontsize_change);Event.observe('text_formatter_size','blur',onfontsize_change);}
function hide_textarea(div){text_edit_block=false;Element.hide('text_formatter');if($F(div+"_tarea")=='')Element.hide(div);$(div).innerHTML=$F(div+"_tarea");fontsize=parseInt($(div).style.fontSize);$(div).style.width=$(div).innerHTML.length*(fontsize/2);blocks[$(div).parentNode.id].save();Event.observe(div,'dblclick',show_textarea);Event.stopObserving('font_size_up','click',onfontsize_up);Event.stopObserving('font_size_down','click',onfontsize_down);Event.stopObserving('text_formatter_size','change',onfontsize_change);Event.stopObserving('text_formatter_size','blur',onfontsize_change);}
function block_text(){selected.each(function(block){if($(block.name+"text").innerHTML==""){Element.show(block.name+"text");$(block.name+"text").innerHTML="double click to edit";}});}
function delete_blocks(){dialog_contents('Deleting...',true);selected.each(function(block){block.delete_block();});if(selected_line){selected_line.delete_line();selected_line=false;}}
function rotate_blocks(){selected.each(function(block){block.rotate_block();});}
function select_block(e,divname){if(!divname){divname=Event.element(e).id.replace("pic_img","");if(!e.ctrlKey&&((selected.length<2)||selected.indexOf(blocks[divname])==-1)){unselect_blocks();}}
if(blocks[divname]){blocks[divname].canvas.setStroke(2);blocks[divname].canvas.setColor("#0000ff");blocks[divname].canvas.drawRect(-1,-1,$(divname+"pic_img").width,$(divname+"pic_img").height);blocks[divname].canvas.paint();if(selected.indexOf(blocks[divname])==-1)selected.push(blocks[divname]);lines.each(function(line){Element.hide(line.handle_id);});blocks[divname].options.blocklines.each(function(linename){lines[linename].draw(true);Element.show(lines[linename].handle_id);});}}
function unselect_blocks(keep_handles){if(selected.length>0){blocks.each(function(block){block.canvas.clear();if(!keep_handles){block.options.blocklines.each(function(linename){Element.hide(lines[linename].handle_id);});}});}
selected=[];if(selected_line&&!keep_handles){$(selected_line.name+'_handle').style.backgroundColor="#009900";selected_line.unselect();selected_line=false;}}
function onfontsize_up(e){current_value=parseInt($('text_formatter_size').value);if(current_value>=8&&current_value<50)current_value=current_value+1;change_fontsize(current_value);}
function onfontsize_down(e){current_value=parseInt($('text_formatter_size').value);if(current_value>8&&current_value<51)current_value=current_value-1;change_fontsize(current_value);}
function onfontsize_change(e){current_value=parseInt($('text_formatter_size').value);if(!(current_value>=8&&current_value<51)){$('text_formatter_size').value=16;current_value=16;}
change_fontsize(current_value);}
function change_fontsize(new_value){if(text_edit_block){$('text_formatter_size').value=current_value;$(text_edit_block.name+'text').style.fontSize=current_value;$(text_edit_block.name+'text_tarea').style.fontSize=current_value;}}
