(function(){var u=this;var B=u.Backbone;var g=[];var D=g.push;var n=g.slice;var t=g.splice;var z;if(typeof exports!=="undefined"){z=exports}else{z=u.Backbone={}}z.VERSION="1.0.0";var L=u._;if(!L&&(typeof require!=="undefined")){L=require("underscore")}z.$=u.jQuery||u.Zepto||u.ender||u.$;z.noConflict=function(){u.Backbone=B;return this};z.emulateHTTP=false;z.emulateJSON=false;var J=z.Events={on:function(M,P,O){if(!x(this,"on",M,[P,O])||!P){return this}this._events||(this._events={});var N=this._events[M]||(this._events[M]=[]);N.push({callback:P,context:O,ctx:O||this});return this},once:function(N,Q,O){if(!x(this,"once",N,[Q,O])||!Q){return this}var M=this;var P=L.once(function(){M.off(N,P);Q.apply(this,arguments)});P._callback=Q;return this.on(N,P,O)},off:function(M,V,N){var T,U,W,S,R,O,Q,P;if(!this._events||!x(this,"off",M,[V,N])){return this}if(!M&&!V&&!N){this._events={};return this}S=M?[M]:L.keys(this._events);for(R=0,O=S.length;R").attr(M);this.setElement(N,false)}else{this.setElement(L.result(this,"el"),false)}}});z.sync=function(S,N,M){var P=j[S];L.defaults(M||(M={}),{emulateHTTP:z.emulateHTTP,emulateJSON:z.emulateJSON});var R={type:P,dataType:"json"};if(!M.url){R.url=L.result(N,"url")||r()}if(M.data==null&&N&&(S==="create"||S==="update"||S==="patch")){R.contentType="application/json";R.data=JSON.stringify(M.attrs||N.toJSON(M))}if(M.emulateJSON){R.contentType="application/x-www-form-urlencoded";R.data=R.data?{model:R.data}:{}}if(M.emulateHTTP&&(P==="PUT"||P==="DELETE"||P==="PATCH")){R.type="POST";if(M.emulateJSON){R.data._method=P}var O=M.beforeSend;M.beforeSend=function(T){T.setRequestHeader("X-HTTP-Method-Override",P);if(O){return O.apply(this,arguments)}}}if(R.type!=="GET"&&!M.emulateJSON){R.processData=false}if(R.type==="PATCH"&&window.ActiveXObject&&!(window.external&&window.external.msActiveXFilteringEnabled)){R.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var Q=M.xhr=z.ajax(L.extend(R,M));N.trigger("request",N,Q,M);return Q};var j={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};z.ajax=function(){return z.$.ajax.apply(z.$,arguments)};var p=z.Router=function(M){M||(M={});if(M.routes){this.routes=M.routes}this._bindRoutes();this.initialize.apply(this,arguments)};var q=/\((.*?)\)/g;var s=/(\(\?)?:\w+/g;var d=/\*\w+/g;var h=/[\-{}\[\]+?.,\\\^$|#\s]/g;L.extend(p.prototype,J,{initialize:function(){},route:function(N,O,P){if(!L.isRegExp(N)){N=this._routeToRegExp(N)}if(L.isFunction(O)){P=O;O=""}if(!P){P=this[O]}var M=this;z.history.route(N,function(R){var Q=M._extractParameters(N,R);P&&P.apply(M,Q);M.trigger.apply(M,["route:"+O].concat(Q));M.trigger("route",O,Q);z.history.trigger("route",M,O,Q)});return this},navigate:function(N,M){z.history.navigate(N,M);return this},_bindRoutes:function(){if(!this.routes){return}this.routes=L.result(this,"routes");var N,M=L.keys(this.routes);while((N=M.pop())!=null){this.route(N,this.routes[N])}},_routeToRegExp:function(M){M=M.replace(h,"\\$&").replace(q,"(?:$1)?").replace(s,function(O,N){return N?O:"([^/]+)"}).replace(d,"(.*?)");return new RegExp("^"+M+"$")},_extractParameters:function(M,N){var O=M.exec(N).slice(1);return L.map(O,function(P){return P?decodeURIComponent(P):null})}});var i=z.History=function(){this.handlers=[];L.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var A=/^[#\/]|\s+$/g;var f=/^\/+|\/+$/g;var I=/msie [\w.]+/;var m=/\/$/;i.started=false;L.extend(i.prototype,J,{interval:50,getHash:function(N){var M=(N||this).location.href.match(/#(.*)$/);return M?M[1]:""},getFragment:function(O,N){if(O==null){if(this._hasPushState||!this._wantsHashChange||N){O=this.location.pathname;var M=this.root.replace(m,"");if(!O.indexOf(M)){O=O.substr(M.length)}}else{O=this.getHash()}}return O.replace(A,"")},start:function(O){if(i.started){throw new Error("Backbone.history has already been started")}i.started=true;this.options=L.extend({},{root:"/"},this.options,O);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var N=this.getFragment();var M=document.documentMode;var Q=(I.exec(navigator.userAgent.toLowerCase())&&(!M||M<=7));this.root=("/"+this.root+"/").replace(f,"/");if(Q&&this._wantsHashChange){this.iframe=z.$('