(function($,window,undefined){"use strict";$.fn.dataRemote=function(opts){var defaults={url:null,data:{},debug:false,eventType:"load",dataType:"json",type:"GET",target:"",handlebars:false,template:"",placement:"html",loaderImg:null,oneAndDone:true,success:successCallback,error:errorCallback,complete:function($target){},before:function($target){}};var options=$.extend({},defaults,opts);function successCallback($target,options,response){var source;var template;var html;var $template;$target.find(".loader-image").hide();if(options.debug){$.fn.dataRemote.debug($target,response)}if(options.handlebars!==false||$target.find('[type="text/x-handlebars-template"]').length){$template=options.template?$(options.template):$target.find('[type="text/x-handlebars-template"]');source=$template.html();template=Handlebars.compile(source);html=template(response)}else{html=response}var validPlacements=["html","append","prepend","after","before"];var placementIsValid=validPlacements.indexOf(options.placement)!==-1;if(!placementIsValid){return}$target[options.placement](html)}function errorCallback($target,options,response,error){$target.find(".loader-image").hide();if(options.debug){$.fn.dataRemote.debug($target,response,error)}}function fetch(url,settings){var $element=settings.element;var $target=settings.target;var options=settings.options;if(options.loaderImg){$target.prepend(String()+'
'+'
'+"
")}$.ajax({url:url,data:options.data,type:options.type,dataType:options.dataType,cache:true,success:function(response){options.success.call($element,$target,options,response);options.complete.call($element,$target)},error:function(response,status,error){options.error.call($element,$target,options,response,error);options.complete.call($element,$target)}})}return this.each(function(idx,element){var $element=$(element);var _options=$.extend({},options);_options.dataType=$element.data("response-type")||options.dataType;_options.eventType=$element.data("event-type")||options.eventType;_options.type=$element.data("type")||options.type;_options.url=$element.data("url")||options.url;_options.data=$element.data("data")?$element.data("data"):options.data;_options.template=$element.data("template")||options.template;_options.placement=$element.data("response-placement")||options.placement;_options.target=$element.data("target")||options.target;_options.debug=element.hasAttribute("data-debug")?$element.data("debug"):options.debug;_options.oneAndDone=element.hasAttribute("data-one-and-done")?$element.data("one-and-done"):options.oneAndDone;_options.handlebars=element.hasAttribute("data-handlebars")?$element.data("handlebars"):options.handlebars;var $target=_options.target?$(_options.target):$element;if(_options.eventType==="load"){_options.before.call($element,$target);fetch(_options.url,{element:$element,target:$target,options:_options})}else{var method=_options.oneAndDone?"one":"on";$element[method](_options.eventType,function(e){e.preventDefault();_options.before.call($element,$target);fetch(_options.url,{element:$element,target:$target,options:_options})})}})};$.fn.dataRemote.debug=function(element,output,error){if(window.console&&window.console.log){window.console.log("Element: ");window.console.log(element);window.console.log("Response: ");window.console.log(output);if(error){window.console.log(" -> Error: ");window.console.log(error)}window.console.log("------------")}}})(jQuery,window);