﻿
(function($){function wwEditable(ctl,options){var _I=this;var _Ctl=ctl;if(typeof(ctl)=="string")
_Ctl=jQuery("#"+ctl)[0];this.callback=null;this.extraData=null;this.textMode="text";this.updatedColor=null;this.editClass=null;this.editMode="text";this.formattedLinks=true;this.origHtml=null;this.origText=null;this.enteredText=null;this.jcol=jQuery(_Ctl);this.jedit=null;_Ctl.wwEditable=true;if(options)
jQuery.extend(this,options);this.edit=function(callback)
{if(callback)
_I.callback=callback;var jctl=jQuery("#__editColumn");if(jctl.length>0)
return;_I.origHtml=_I.jcol.html();if(_I.editMode=="html")
_I.origText=_I.origHtml;else if(_I.editMode=="formatted")
{var txt=_I.origHtml.replace(/<br.*?>/gi,"#CRLF#");txt=$("<div>"+txt+"</div>").text().replace(/#CRLF#/g,"\r\n");_I.origText=txt;}
else
_I.origText=$.trim(_I.jcol.text());if(_I.textMode=="text")
_I.jcol.html("<"+"form action='javascript:void(0);'><input id='__editColumn' type='text' value='"+_I.origText+"'/></form>");else
_I.jcol.html("<"+"form action='javascript:void(0);'><textarea id='__editColumn'>"+_I.origText+"</textarea></form>");var jctl=$("#__editColumn");jctl.width(_I.jcol.width()-4);jctl.height(_I.jcol.height()-4);if(_I.editClass)
jctl.addClass(_I.editClass);var jctl=jQuery("#__editColumn");_I.jedit=jctl;setTimeout(function(){jctl[0].focus()},50);jctl.keydown(_I._keyDownHandler);_I._bindBlur();}
this.update=function(nomark){if(_I.jedit==null)
return;_I.jedit.remove();_I.jedit=null;if(_I.editMode=="formatted")
_I.enteredText=_I.enteredText.replace(/\n/g,"<br/>");if(_I.origHtml.toLowerCase().substr(0,2)=="<a"){_I.jcol.html(_I.origHtml);var c=_I.jcol.find("a");_I.jcol.find("a").text(_I.enteredText);}
else
_I.jcol.html(_I.enteredText);if((!nomark&&_I.updatedColor)||_I.origHtml.indexOf('__mark')>0)
_I.jcol.prepend("<div class='__mark' style='float: right; background:"+_I.updatedColor+";height: 5px; width: 5px;'></div>");_I.origHtml=_I.jcol.html();}
this.abort=function()
{_I.jedit.remove();_I.jedit==null;_I.jcol.html(_I.origHtml);}
this.nextColumn=function(jcols)
{if(!jcols)
jcols=_I.jcol.find("~td");if(jcols.length>0)
{for(var x=0;x<jcols.length;x++){var jitem=jQuery(jcols[x]);if(jitem[0].wwEditable){jitem.trigger("click");break;}}}
else{var row=_I.jcol.parent().find("+tr");if(row.length>0)
_I.nextColumn(row.find(">td"));}}
this._updateHandler=function(event)
{_I.enteredText=_I.jedit.val();var nomark=_I.enteredText==_I.origText;_I._bindBlur(true);var res=null;if(_I.callback){res=_I.callback(_I.enteredText,_I)
if(res==false)_I.abort();if(res)_I.update(nomark);}
else _I.update(nomark);_I._bindBlur();}
this._bindBlur=function(unbind)
{if(!_I.jedit)return;if(unbind)
_I.jedit.unbind("blur",_I._updateHandler);else
_I.jedit.bind("blur",_I._updateHandler);}
this._keyDownHandler=function(event)
{if(event.keyCode==27)
{_I.abort();return;}
if(event.keyCode==13){if(_I.textMode!="multiline"){_I._updateHandler();_I.nextColumn();return false;}}
if(event.keyCode==9&&event.shiftKey){_I._updateHandler();var prev=_I.jcol[0].previousSibling;if(prev)
jQuery(prev).trigger("click");return false;}
if(event.keyCode==9){_I._updateHandler();_I.nextColumn()
return false;}}}
jQuery.fn.makeEditable=function(options)
{if(this.length<0)
return this;this.each(function(index){var jitem=jQuery(this);this.wwEditable=true;jitem.click(function(event){new wwEditable(this,options).edit();return true;});});return this;}
jQuery.fn.makeTableEditable=function(options)
{if(this.length<1)
return this;this.find("td").makeEditable(options);return this;}})(jQuery);
