
(function($){var R=$.rest={version:"1.0.2",useGetAndPost:function(){R.Create.type=R.Delete.type=R.Update.type="POST";R.Read.type="GET";},options:{dataType:"rest",onlyNest:true,setValues:true,getValues:true},Create:{type:"POST",process:true},Read:{type:"GET",process:false},Update:{type:"PUT",process:true},Delete:{type:"DELETE",process:false,onElement:function(){this.remove();}},data:null,toOpts:function(url,data,success,opts){if(arguments.length==1&&typeof url=="object"){opts=url;url=null;}else{if(!$.isFunction(success)){opts=success;success=null;}
if($.isFunction(data)){success=data;data=null;}}
var o=$.extend({},R.options,opts);if(this.jquery)o.target=this;else $.extend(o,R[this]);if(url)o.url=url;if(success)o.success=success;if(data)o.data=data;return o;},fillUrl:function(url,data,safe){if(!data)data=$.extend({},R.data);if(safe)data=$.extend({},data);var key,u,val;for(key in data){val=data[key];u=url.replace('{'+key+'}',val);if(u!=url){url=u;delete data[key];}}
return url;},prep:function(){var act=R[this],o=R.toOpts.apply(this,arguments);if(o.data||R.data)o.data=$.extend({},R.data,o.data);o.url=R.fillUrl(o.url,o.data);o.success=R.wrap(o.success,o.before,o.after,o.dataType,o);o.error=R.handle(o.error,o);if(o.process&&JSON)R.processOut(o);return o;},handle:function(error,o){return function(xhr,status){var fn=o[xhr.status]||error;if(fn!=error){o.handled=true;if(fn=='success')return o.success(null,status);}
R.wrap(fn,o.before,o.after,o)(xhr,status);};},wrap:function(callback,before,after,type,opts){return function(){var t=this,a=Array.prototype.slice.call(arguments);a[a.length]=opts;if(type=='rest')a[0]=R.processIn.apply(t,a);if(before)before.apply(t,a);if(callback)callback.apply(t,a);if(after)after.apply(t,a);};},processOut:function(o){o.processData=false;if(!o.contentType)o.contentType="application/json";if(typeof o.data!="string"){o.data=JSON.stringify(o.data||{});}},processIn:function(str){if((str||'').length==0)return null;if(str.charAt(0)=='<')return $(str);return JSON?JSON.parse(str):window.eval("("+str+")");},element:function(act,o){if(!o.data&&o.getValues&&$.values){o.data=this.values(o);}
var self=this,success=o.success;o.success=function(data){if(data&&o.setValues&&$.values)self.values(data,o);if(success)success.apply(this,arguments);if(o.onElement)o.onElement.apply(this,arguments);};$[act](o);},ajax:function(o){return o.xhr=$.ajax(o);}};$.each(['Create','Read','Update','Delete'],function(i,act){$[act]=function(){return R.ajax(R.prep.apply(act,arguments));};$.fn[act]=function(){var a=arguments;return this.each(function(){var t=$(this);R.element.call(t,act,R.toOpts.apply(t,a));});};});})(jQuery);
