
if(!SAPO.Component||typeof(SAPO.Component)=='undefined'){SAPO.namespace('Component');}
(function(){var Css=SAPO.Dom.Css,Event=SAPO.Dom.Event,Dimensions=SAPO.Utility.Dimensions;SAPO.Component.Imagenote=function(options,init){this.init(options,init);};SAPO.Component.Imagenote.version='0.1';SAPO.Component.Imagenote.prototype={_options:false,_boundaries:false,_noteDragEvent:false,_init:false,_editing:false,_messageHeight:false,_setOptions:function(options){var element;if(typeof options.targetElement!="undefined"){element=options.targetElement;}else{element=options;options={};}
if(typeof options==="string"||typeof options.constructor===typeof document.createElement("IMG")){options={};}
if(typeof element==="string"){element=document.getElementById(element);}
options.targetElement=element;this._options=Object.extend({targetElement:false,defaultMessage:'',width:50,height:50,left:20,top:20,saveLabel:'Guardar',cancelLabel:'Cancelar',deleteLabel:'Apagar',noteClass:false,editableClass:false,publicClass:false,editable:true,saveCallback:false,deleteCallback:false,debug:false},options||{});},_defaultStyles:function(){var styles=document.getElementsByTagName("style");var style=false;var setStyle1=true;var setStyle2=true;for(var i=0;i<styles.length;i++){style=styles[i].innerHTML;if(style.indexOf("SAPO_Component_Imagenote_message")>=0){setStyle1=false;}
if(style.indexOf("SAPO_Component_Imagenote_tooltip")>=0){setStyle2=false;}}
var defStyle=document.createElement("STYLE");defStyle.media="screen";defStyle.type="text/css";var styleStr="";if(setStyle1){styleStr+=".SAPO_Component_Imagenote_message {";styleStr+="width: 210px;";styleStr+="height: 95px;";styleStr+="background-color: #ffffff;";styleStr+="border: 1px solid #000000;";styleStr+="padding: 3px;";styleStr+="} ";}
if(setStyle2){styleStr+=".SAPO_Component_Imagenote_tooltip {";styleStr+="background-color: #cccccc;";styleStr+="padding: 5px";styleStr+="}";}
if(typeof defStyle.styleSheet!=="undefined"){defStyle.styleSheet.cssText=styleStr;}else{defStyle.appendChild(document.createTextNode(styleStr));}
var head=document.getElementsByTagName("head")[0];var title=document.getElementsByTagName("title")[0];head.insertBefore(defStyle,title.nextSibling);},_updateMessageTop:function(message,noteTop,height){var mTop=noteTop+height+5;if(mTop+this._messageHeight>this._boundaries.bottom){mTop=noteTop-this._messageHeight-10;}
message.style.top=mTop+"px";},_createHandles:function(note,message){var noteObj=this;var bounds=this._boundaries;var resizeEvent=function(corner,direction){var borderWidth=parseInt(Css.getStyle(note,"borderWidth"),10)*2;var resizeCallback=function(event){var X=Event.pointerX(event);var Y=Event.pointerY(event);var noteTop=parseInt(this.style.top,10);var noteLeft=parseInt(this.style.left,10);var noteBottom=noteTop+parseInt(this.style.height,10);var noteRight=noteLeft+parseInt(this.style.width,10);var newTop=false;var newLeft=false;var newWidth=false;var newHeight=false;if(direction=='ne-resize'||direction=='nw-resize'){newHeight=noteBottom-Y;if(newHeight>12){newTop=noteBottom-newHeight;if(newHeight>=(noteBottom-bounds.top)){newHeight=noteBottom-bounds.top;newTop=bounds.top;}}else{newHeight=false;}}
if(direction=='sw-resize'||direction=='nw-resize'){newWidth=noteRight-X-borderWidth;if(newWidth>12){newLeft=noteRight-newWidth;if(newWidth>=(noteRight-bounds.left)){newWidth=noteRight-bounds.left;newLeft=bounds.left;}}else{newWidth=false;}}
if(direction=='se-resize'||direction=='sw-resize'){newHeight=Y-noteTop-borderWidth;if(newHeight>12){if(newHeight>=(bounds.bottom-noteTop)){newHeight=bounds.bottom-noteTop-borderWidth;}}else{newHeight=false;}}
if(direction=='ne-resize'||direction=='se-resize'){newWidth=X-noteLeft-borderWidth;if(newWidth>12){if(newWidth>=(bounds.right-noteLeft)){newWidth=bounds.right-noteLeft-borderWidth;}}else{newWidth=false;}}
if(newTop){this.style.top=newTop+'px';noteTop=newTop;}
if(newLeft){this.style.left=newLeft+'px';message.style.left=newLeft+'px';}
if(newWidth){this.style.width=newWidth+'px';}
if(newHeight){this.style.height=newHeight+'px';noteObj._updateMessageTop(message,noteTop,newHeight);}
noteObj._setIEFix(this);}.bindObjEvent(note,message);corner.style.cursor=direction;Event.observe(corner,'mousedown',function(event){Event.stop(event);Event.observe(document,'mousemove',resizeCallback);}.bindObjEvent(note));Event.observe(document,'mouseup',function(){try{Event.stopObserving(document,'mousemove',resizeCallback);}catch(e){}});};for(var i=0;i<4;i++){var corner=document.createElement("DIV");corner.style.position="absolute";corner.style.zIndex="1001";corner.style.width="6px";corner.style.height="6px";corner.style.fontSize="1px";corner.style.backgroundColor="#ffffff";corner.style.borderWidth="1px";corner.style.borderColor="#000000";corner.style.borderStyle="solid";if(i===0||i===1){corner.style.top="-2px";}
if(i===2||i===3){corner.style.bottom="-2px";}
if(i===0||i===2){corner.style.left="-2px";}
if(i===1||i===3){corner.style.right="-2px";}
if(i===0){resizeEvent(corner,"nw-resize");}
if(i===1){resizeEvent(corner,"ne-resize");}
if(i===2){resizeEvent(corner,"sw-resize");}
if(i===3){resizeEvent(corner,"se-resize");}
note.appendChild(corner);}},_createNoteElement:function(){var elementDims=Dimensions.elementDimensions(this._options.targetElement);var note=document.createElement("DIV");note.style.width=this._options.width+"px";note.style.height=this._options.height+"px";note.style.borderWidth="2px";note.style.borderStyle="dashed";note.style.borderColor="#000000";note.style.zIndex="1000";note.style.position="absolute";note.style.cursor="pointer";note.style.top=this._options.targetElement.offsetTop+
parseInt(this._options.top,10)+"px";note.style.left=this._options.targetElement.offsetLeft+
parseInt(this._options.left,10)+"px";if(this._options.noteClass){note.className=this._options.noteClass;}
this._setIEFix(note);var message=false;if(this._init===true){this._setNonEditable(note,this._options.defaultMessage);}else{var initialX,initialY;var deltaX=false;var deltaY=false;var width=false;var height=false;var borderWidth=parseInt(note.style.borderWidth,10)*2;this._boundaries={top:this._options.targetElement.offsetTop,left:this._options.targetElement.offsetLeft,bottom:this._options.targetElement.offsetTop+
elementDims[1],right:this._options.targetElement.offsetLeft+
elementDims[0]};var bounds=this._boundaries;message=this._createMessageField(note);this._createHandles(note,message);var dragCallback=function(event,noteObj,message){var X=Event.pointerX(event);var Y=Event.pointerY(event);var xPos=false;var yPos=false;xPos=X-deltaX;yPos=Y-deltaY;if(xPos<bounds.left){xPos=bounds.left;}
if(yPos<bounds.top){yPos=bounds.top;}
if((xPos+width+borderWidth)>bounds.right){xPos=bounds.right-width-borderWidth;}
if((yPos+height+borderWidth)>bounds.bottom){yPos=bounds.bottom-height-borderWidth;}
this.style.left=xPos+"px";message.style.left=xPos+"px";this.style.top=yPos+"px";noteObj._updateMessageTop(message,yPos,height);noteObj._setIEFix(note);}.bindObjEvent(note,this,message);this._noteDragEvent=function(event,targetElm){Event.stop(event);initialX=Event.pointerX(event);initialY=Event.pointerY(event);deltaX=initialX-parseInt(this.style.left,10);deltaY=initialY-parseInt(this.style.top,10);width=parseInt(note.style.width,10);height=parseInt(note.style.height,10);Event.observe(document,'mousemove',dragCallback);}.bindObjEvent(note,this._options.targetElement);Event.observe(note,'mousedown',this._noteDragEvent);Event.observe(document,'mouseup',function(){try{Event.stopObserving(document,'mousemove',dragCallback);}catch(e){}});}
return{note:note,message:message};},_setIEFix:function(element){if(SAPO.Browser.IE===true){var dummy;if(element.childNodes.length===0){dummy=document.createElement("IMG");dummy.src="/Assets/Images/Utilities/transparent_1px.gif";}else{dummy=element.childNodes[0];}
dummy.width=parseInt(element.style.width,10);dummy.height=parseInt(element.style.height,10);element.appendChild(dummy);}},_setNonEditable:function(note,text,message){if(typeof message!=="undefined"){message.parentNode.removeChild(message);}
this._editing=false;var childCount=note.childNodes.length;while(note.firstChild){note.removeChild(note.firstChild);}
try{Event.stopObserving(note,'mousedown',this._noteDragEvent);}catch(e){}
note.style.cursor="";note.style.borderStyle="solid";note.style.borderWidth="1px";var innerNote=document.createElement("DIV");innerNote.style.width=parseInt(note.style.width,10)-2+"px";innerNote.style.height=parseInt(note.style.height,10)-2+"px";innerNote.style.borderStyle="solid";innerNote.style.borderWidth="1px";innerNote.style.borderColor="#ffffff";this._setIEFix(innerNote);this._options.left=parseInt(note.style.left,10)-
this._options.targetElement.offsetLeft;this._options.top=parseInt(note.style.top,10)-
this._options.targetElement.offsetTop;this._options.width=parseInt(note.style.width,10);this._options.height=parseInt(note.style.height,10);note.appendChild(innerNote);var tooltip;if(text!==""){this._options.defaultMessage=text;tooltip=document.createElement("DIV");tooltip.style.position="absolute";tooltip.style.display="none";tooltip.style.top=parseInt(note.style.top,10)+
parseInt(note.style.height,10)+5+"px";tooltip.style.left=note.style.left;tooltip.className="SAPO_Component_Imagenote_tooltip";if(this._options.publicClass!==false){tooltip.className+=" "+this._options.publicClass;}
tooltip.innerHTML=text;Event.observe(note,"mouseover",function(){this.style.display="block";}.bindObjEvent(tooltip));Event.observe(note,"mouseout",function(){this.style.display="none";}.bindObjEvent(tooltip));setTimeout(function(){this.parentNode.appendChild(tooltip);}.bindObj(note),0);}
if(this._options.editable){Event.observe(note,"dblclick",function(event){this._editing=true;note.parentNode.removeChild(note);if(typeof tooltip!="undefined"){tooltip.parentNode.removeChild(tooltip);}
this.init(this._options);}.bindObjEvent(this,note,tooltip));}},_createMessageField:function(note){var message=document.createElement("DIV");message.className="SAPO_Component_Imagenote_message";if(this._options.editableClass!==false){message.className+=" "+this._options.editableClass;}
message.style.zIndex="1002";message.style.position="absolute";message.style.top=parseInt(note.style.top,10)+
parseInt(note.style.height,10)+5+"px";message.style.left=note.style.left;var form=document.createElement("FORM");form.method="POST";form.style.zIndex="1000";var textarea=document.createElement("TEXTAREA");textarea.name="message";textarea.rows=2;textarea.cols=10;textarea.style.width="160px";textarea.style.zIndex="1002";textarea.style.display="block";textarea.value=this._options.defaultMessage;setTimeout(function(){textarea.focus();},0);Event.observe(textarea,'mouseover',function(event){this.focus();}.bindObjEvent(textarea));form.appendChild(textarea);var submitButton=document.createElement("INPUT");submitButton.type="button";submitButton.name="save";submitButton.value=this._options.saveLabel;submitButton.style.zIndex="1002";var submitCallback=function(event,form,message,note){if(this._options.saveCallback){var top=parseInt(note.style.top,10)-
this._options.targetElement.offsetTop;var left=parseInt(note.style.left,10)-
this._options.targetElement.offsetLeft;var width=parseInt(note.style.width,10);var height=parseInt(note.style.height,10);var messageText=textarea.value;this._options.saveCallback.call(form,top,left,width,height,messageText);}
this._setNonEditable(note,textarea.value,message);}.bindObjEvent(this,form,message,note);Event.observe(submitButton,'click',submitCallback);form.appendChild(submitButton);var cancelButton=document.createElement("INPUT");cancelButton.type="reset";cancelButton.name="cancel";cancelButton.value=this._options.cancelLabel;cancelButton.style.zIndex="1002";Event.observe(cancelButton,'click',function(event,message,note){if(this._editing){this._setNonEditable(note,this._options.defaultMessage,message);}else{message.parentNode.removeChild(message);note.parentNode.removeChild(note);}}.bindObjEvent(this,message,note));form.appendChild(cancelButton);var deleteButton=document.createElement("INPUT");deleteButton.type="button";deleteButton.name="delete";deleteButton.value=this._options.deleteLabel;deleteButton.style.zIndex="1002";Event.observe(deleteButton,'click',function(event,message,note){if(this._options.deleteCallback){this._options.deleteCallback.call(note,message);}
message.parentNode.removeChild(message);note.parentNode.removeChild(note);this._editing=false;}.bindObjEvent(this,message,note));form.appendChild(deleteButton);message.appendChild(form);return message;},init:function(options,init){if(typeof init!="undefined"&&init===true){this._init=true;}
this._setOptions(options);this._defaultStyles();var note=this._createNoteElement();this._options.targetElement.parentNode.appendChild(note.note);if(note.message){note.note.parentNode.appendChild(note.message);this._messageHeight=parseInt(Css.getStyle(note.message,'height'),10);}
this._init=false;},debug:function(){}};}());
