(function($Jq){$Jq.fn.editable=function(target,options){if('disable'==target){$Jq(this).data('disabled.editable',true);return}if('enable'==target){$Jq(this).data('disabled.editable',false);return}if('destroy'==target){$Jq(this).unbind($Jq(this).data('event.editable')).removeData('disabled.editable').removeData('event.editable');return}var settings=$Jq.extend({},$Jq.fn.editable.defaults,{target:target},options);var plugin=$Jq.editable.types[settings.type].plugin||function(){};var submit=$Jq.editable.types[settings.type].submit||function(){};var buttons=$Jq.editable.types[settings.type].buttons||$Jq.editable.types['defaults'].buttons;var content=$Jq.editable.types[settings.type].content||$Jq.editable.types['defaults'].content;var element=$Jq.editable.types[settings.type].element||$Jq.editable.types['defaults'].element;var reset=$Jq.editable.types[settings.type].reset||$Jq.editable.types['defaults'].reset;var callback=settings.callback||function(){};var onedit=settings.onedit||function(){};var onsubmit=settings.onsubmit||function(){};var onreset=settings.onreset||function(){};var onerror=settings.onerror||reset;if(settings.tooltip){$Jq(this).attr('title',settings.tooltip)}settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){var self=this;var savedwidth=$Jq(self).width();var savedheight=$Jq(self).height();$Jq(this).data('event.editable',settings.event);if(!$Jq.trim($Jq(this).html())){$Jq(this).html(settings.placeholder)}$Jq(this).bind(settings.event,function(e){if(true===$Jq(this).data('disabled.editable')){return}if(self.editing){return}if(false===onedit.apply(this,[settings,self])){return}if($Jq(this).html().toLowerCase()==settings.indicator){return}e.preventDefault();e.stopPropagation();if(settings.tooltip){$Jq(self).removeAttr('title')}if(0==$Jq(self).width()){settings.width=savedwidth;settings.height=savedheight}else{if(settings.width!='none'){settings.width=settings.autowidth?$Jq(self).width():settings.width}if(settings.height!='none'){settings.height=settings.autoheight?$Jq(self).height():settings.height}}if($Jq(this).html().toLowerCase().replace(/(;|")/g,'')==settings.placeholder.toLowerCase().replace(/(;|")/g,'')){$Jq(this).html('')}self.editing=true;self.revert=$Jq(self).html();$Jq(self).html('');var form=$Jq('<form />');if(settings.cssclass){if('inherit'==settings.cssclass){form.attr('class',$Jq(self).attr('class'))}else{form.attr('class',settings.cssclass)}}if(settings.style){if('inherit'==settings.style){form.attr('style',$Jq(self).attr('style'));form.css('display',$Jq(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($Jq.isFunction(settings.loaddata)){$Jq.extend(loaddata,settings.loaddata.apply(self,[self.revert,settings]))}else{$Jq.extend(loaddata,settings.loaddata)}$Jq.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($Jq.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]);$Jq(self).append(form);plugin.apply(form,[settings,self]);$Jq(':input:visible:enabled:first',form).focus();if(settings.select){input.select()}input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset.apply(form,[settings,self])}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(function(){reset.apply(form,[settings,self])},500)})}else if('submit'==settings.onblur){input.blur(function(e){t=setTimeout(function(){form.submit()},200)})}else if($Jq.isFunction(settings.onblur)){input.blur(function(e){settings.onblur.apply(self,[input.val(),settings])})}else{input.blur(function(e){})}form.submit(function(e){if(t){clearTimeout(t)}e.preventDefault();if(false!==onsubmit.apply(form,[settings,self])){if(false!==submit.apply(form,[settings,self])){if($Jq.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$Jq(self).html(settings.indicator);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$Jq.trim($Jq(self).html())){$Jq(self).html(settings.placeholder)}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($Jq.isFunction(settings.submitdata)){$Jq.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]))}else{$Jq.extend(submitdata,settings.submitdata)}if('PUT'==settings.method){submitdata['_method']='put'}$Jq(self).html(settings.indicator);var ajaxoptions={type:'POST',data:submitdata,dataType:'html',url:settings.target,success:function(result,status){if(ajaxoptions.dataType=='html'){$Jq(self).html(result)}self.editing=false;callback.apply(self,[result,settings]);if(!$Jq.trim($Jq(self).html())){$Jq(self).html(settings.placeholder)}},error:function(xhr,status,error){onerror.apply(form,[settings,self,xhr])}};$Jq.extend(ajaxoptions,settings.ajaxoptions);$Jq.ajax(ajaxoptions)}}}$Jq(self).attr('title',settings.tooltip);return false})});this.reset=function(form){if(this.editing){if(false!==onreset.apply(form,[settings,self])){$Jq(self).html(self.revert);self.editing=false;if(!$Jq.trim($Jq(self).html())){$Jq(self).html(settings.placeholder)}if(settings.tooltip){$Jq(self).attr('title',settings.tooltip)}}}}})};$Jq.editable={types:{defaults:{element:function(settings,original){var input=$Jq('<input type="hidden"></input>');$Jq(this).append(input);return(input)},content:function(string,settings,original){$Jq(':input:first',this).val(string)},reset:function(settings,original){original.reset(this)},buttons:function(settings,original){var form=this;if(settings.submit){if(settings.submit.match(/>$/)){var submit=$Jq(settings.submit).click(function(){if(submit.attr("type")!="submit"){form.submit()}})}else{var submit=$Jq('<button type="submit" />');submit.html(settings.submit)}$Jq(this).append(submit)}if(settings.cancel){if(settings.cancel.match(/>$/)){var cancel=$Jq(settings.cancel)}else{var cancel=$Jq('<button type="cancel" />');cancel.html(settings.cancel)}$Jq(this).append(cancel);$Jq(cancel).click(function(event){if($Jq.isFunction($Jq.editable.types[settings.type].reset)){var reset=$Jq.editable.types[settings.type].reset}else{var reset=$Jq.editable.types['defaults'].reset}reset.apply(form,[settings,original]);return false})}}},text:{element:function(settings,original){var input=$Jq('<input />');if(settings.width!='none'){input.width(settings.width)}if(settings.height!='none'){input.height(settings.height)}input.attr('autocomplete','off');$Jq(this).append(input);return(input)}},textarea:{element:function(settings,original){var textarea=$Jq('<textarea />');if(settings.rows){textarea.attr('rows',settings.rows)}else if(settings.height!="none"){textarea.height(settings.height)}if(settings.cols){textarea.attr('cols',settings.cols)}else if(settings.width!="none"){textarea.width(settings.width)}$Jq(this).append(textarea);return(textarea)}},select:{element:function(settings,original){var select=$Jq('<select />');$Jq(this).append(select);return(select)},content:function(data,settings,original){if(String==data.constructor){eval('var json = '+data)}else{var json=data}for(var key in json){if(!json.hasOwnProperty(key)){continue}if('selected'==key){continue}var option=$Jq('<option />').val(key).append(json[key]);$Jq('select',this).append(option)}$Jq('select',this).children().each(function(){if($Jq(this).val()==json['selected']||$Jq(this).text()==$Jq.trim(original.revert)){$Jq(this).attr('selected','selected')}})}}},addInputType:function(name,input){$Jq.editable.types[name]=input}};$Jq.fn.editable.defaults={name:'value',id:'id',type:'text',width:'auto',height:'auto',event:'click.editable',onblur:'cancel',loadtype:'GET',loadtext:'Loading...',placeholder:'Click to edit',loaddata:{},submitdata:{},ajaxoptions:{}}})(jQuery);$Jq.editable.addInputType("multipleselect",{element:function(settings,original){var select=$Jq('<select multiple="multiple">');$Jq(this).append(select);return(select)},content:function(data,settings,original){if(String==data.constructor){eval('var json = '+data)}else{var json=data}for(var key in json){if(!json.hasOwnProperty(key)){continue}if('selected'==key){continue}var option=$Jq('<option />').val(key).append(json[key]);$Jq('select',this).append(option)}var which=json['selected'];var selected_arr=which.split('/');$Jq('select',this).children().each(function(){for(i=0;i<selected_arr.length;i++){if($Jq(this).val()==selected_arr[i]){$Jq(this).attr('selected','selected')}}})}});
