/*
 * Jeditable - jQuery in place edit plugin
 *
 * Copyright (c) 2006-2007 Mika Tuupola, Dylan Verheul
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Revision: $Id: jquery.jeditable.js 261 2007-10-18 14:19:09Z tuupola $
 *
 */
 
(function($){$.fn.editable=function(target,options){var settings={target:target,name:"value",id:"id",type:"text",width:"auto",minWidth:"none",maxWidth:"none",height:"auto",event:"click",onblur:"cancel",loadtype:"GET",loadtext:"Loading...",placeholder:"Click to edit",loaddata:{},submitdata:{}};if(options){$.extend(settings,options)}var plugin=$.editable.types[settings.type].plugin||function(){};var submit=$.editable.types[settings.type].submit||function(){};var buttons=$.editable.types[settings.type].buttons||$.editable.types.defaults.buttons;var content=$.editable.types[settings.type].content||$.editable.types.defaults.content;var element=$.editable.types[settings.type].element||$.editable.types.defaults.element;var callback=settings.callback||function(){};$(this).attr("title",settings.tooltip);settings.autowidth="auto"==settings.width;settings.autoheight="auto"==settings.height;return this.each(function(){if(!$.trim($(this).html())){$(this).html(settings.placeholder)}$(this)[settings.event](function(e){var self=this;if(self.editing){return}if(settings.width!="none"){settings.width=settings.autowidth?$(self).width():settings.width}if(settings.minWidth!="none"){if(settings.width<settings.minWidth){settings.width=settings.minWidth}}if(settings.maxWidth!="none"){if(settings.width>settings.maxWidth){settings.width=settings.maxWidth}}if(settings.height!="none"){settings.height=settings.autoheight?$(self).height():settings.height}if($(this).html().toLowerCase().replace(/;/,"")==settings.placeholder.toLowerCase().replace(/;/,"")){$(this).html("")}self.editing=true;self.revert=$(self).html();$(self).html("");var form=$("<form/>");$(self).append(form);if(settings.cssclass){if("inherit"==settings.cssclass){form.attr("class",$(self).attr("class"))}else{form.attr("class",settings.cssclass)}}if(settings.style){if("inherit"==settings.style){form.attr("style",$(self).attr("style"));form.css("display",$(self).css("display"))}else{form.attr("style",settings.style)}}var input=element.apply(form,[settings,self]);var input_content;if(settings.loadurl){var t=setTimeout(function(){input.disabled=true;content.apply(form,[settings.loadtext,settings,self])},100);var loaddata={};loaddata[settings.id]=self.id;if($.isFunction(settings.loaddata)){$.extend(loaddata,settings.loaddata.apply(self,[self.revert,settings]))}else{$.extend(loaddata,settings.loaddata)}$.ajax({type:settings.loadtype,url:settings.loadurl,data:loaddata,async:false,success:function(result){window.clearTimeout(t);input_content=result;input.disabled=false}})}else{if(settings.data){input_content=settings.data;if($.isFunction(settings.data)){input_content=settings.data.apply(self,[self.revert,settings])}}else{input_content=self.revert}}content.apply(form,[input_content,settings,self]);input.attr("name",settings.name);buttons.apply(form,[settings,self]);if(settings.select){input.select()}plugin.apply(form,[settings,self]);$(":input:visible:enabled:first",form).focus();input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset()}});var t;if("cancel"==settings.onblur){input.blur(function(e){t=setTimeout(reset,500)})}else{if("submit"==settings.onblur){input.blur(function(e){form.submit()})}else{input.blur(function(e){})}}form.submit(function(e){if(t){clearTimeout(t)}e.preventDefault();submit.apply(form,[settings,self]);if($.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder)}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($.isFunction(settings.submitdata)){$.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]))}else{$.extend(submitdata,settings.submitdata)}$(self).html(settings.indicator);$.post(settings.target,submitdata,function(str){$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder)}})}return false});function reset(){$(self).html(self.revert);self.editing=false;if(!$.trim($(self).html())){$(self).html(settings.placeholder)}}})})};$.editable={types:{defaults:{element:function(settings,original){var input=$('<input type="hidden">');$(this).append(input);return(input)},content:function(string,settings,original){$(":input:first",this).val(string)},buttons:function(settings,original){if(settings.submit){var submit=$('<input type="submit">');submit.val(settings.submit);$(this).append(submit)}if(settings.cancel){var cancel=$('<input type="button">');cancel.val(settings.cancel);$(this).append(cancel);$(cancel).click(function(){$(original).html(original.revert);original.editing=false})}}},text:{element:function(settings,original){var input=$("<input>");if(settings.width!="none"){input.width(settings.width)}if(settings.height!="none"){input.height(settings.height)}input.attr("autocomplete","off");$(this).append(input);return(input)}},textarea:{element:function(settings,original){var textarea=$("<textarea>");if(settings.rows){textarea.attr("rows",settings.rows)}else{textarea.height(settings.height)}if(settings.cols){textarea.attr("cols",settings.cols)}else{textarea.width(settings.width)}$(this).append(textarea);return(textarea)}},select:{element:function(settings,original){var select=$("<select>");$(this).append(select);return(select)},content:function(string,settings,original){if(String==string.constructor){eval("var json = "+string);for(var key in json){if("selected"==key){continue}var option=$("<option>").val(key).append(json[key]);$("select",this).append(option)}}$("select",this).children().each(function(){if($(this).val()==json.selected){$(this).attr("selected","selected")}})}}},addInputType:function(name,input){$.editable.types[name]=input}}})(jQuery);

