/*! HTML5 Finder - v1.0.2 - 2014-05-05 * https://github.com/jgerigmeyer/jquery-html5finder * Copyright (c) 2014 Jonny Gerig Meyer; Licensed MIT */ !function(a){"use strict";var b={},c={init:function(b){var d=a.extend({},a.fn.html5finder.defaults,b),e=a(this),f=e.find(d.finderSelector),g=f.find(d.sectionSelector).length||1;return c.updateNumberCols(f,g),c.markSelected(f,b),c.attachHandler(e,f,b),e},markSelected:function(b,c){var d=a.extend({},a.fn.html5finder.defaults,c);b.find(d.itemSelector).filter(d.selected).attr({"data-selected":!0,checked:"checked"}).data("selected",!0),b.find(d.itemSelector).filter(d.notSelected).removeAttr("checked data-selected").data("selected",!1)},updateNumberCols:function(a,b){a.data("cols",b).attr("data-cols",b)},horzScroll:function(b,c,d,e){var f=a.extend({},a.fn.html5finder.defaults,d),g=a.Deferred();if(f.horizontalScroll){var h=0,i=c.scrollLeft(),j=b.find(f.sectionSelector+".focus"),k=j.prev(f.sectionSelector);k.length&&(h=i+k.position().left,e&&(h-=c.innerWidth()-j.outerWidth()-k.outerWidth())),i===h?g.resolve():a.when(c.animate({scrollLeft:h},"fast")).done(function(){g.resolve()})}else g.resolve();return g.promise()},addItems:function(b,d,e,f,g,h){var i,j=a.extend({},a.fn.html5finder.defaults,h),k=f.find(j.scrollContainer);b.colname=d,i=j.itemTplFn(b),e.find(j.sectionContentSelector).html(i),c.horzScroll(g,k,h),j.itemsAddedCallback&&j.itemsAddedCallback(i)},attachHandler:function(b,d,e){var f=a.extend({},a.fn.html5finder.defaults,e),g=b.find(f.scrollContainer);d.on("click",f.itemSelector,function(){c.itemClick(b,d,a(this),e)}),d.on("click",f.labelSelector,function(b){var h=a(this),i=h.closest(f.sectionSelector);i.find("#"+h.attr("for")).is(":disabled")&&(i.addClass("focus").siblings(f.sectionSelector).removeClass("focus"),c.horzScroll(d,g,e)),b.stopPropagation()}),d.on("click",f.sectionSelector,function(b){var h=a(this);a(b.target).is("input, label")||(h.addClass("focus").siblings(f.sectionSelector).removeClass("focus"),c.horzScroll(d,g,e))})},itemClick:function(d,e,f,g){var h,i,j,k=a.extend({},a.fn.html5finder.defaults,g),l=d.find(k.scrollContainer),m=f.closest(k.sectionSelector),n=k.getAjaxUrl(f),o=m.next(k.sectionSelector);if(f.data("selected")===!0)m.hasClass("focus")?o.addClass("focus").siblings(k.sectionSelector).removeClass("focus"):m.addClass("focus").siblings(k.sectionSelector).removeClass("focus"),o.nextAll(k.sectionSelector).empty(),o.find(k.itemSelector).filter(k.selected).removeAttr("checked data-selected").data("selected",!1),a.when(c.horzScroll(e,l,g)).done(function(){o.nextAll(k.sectionSelector).remove(),j=e.find(k.sectionSelector).length,c.updateNumberCols(e,j)}),f.data("children")&&k.itemSelectedCallback&&k.itemSelectedCallback(f);else{if(f.data("children")){var p=function(){if(j=m.prevAll(k.sectionSelector).addBack().removeClass("focus").length+1,c.updateNumberCols(e,j),h="col"+j.toString(),i=k.columnTplFn({colname:h}),o.length?(o.nextAll(k.sectionSelector).remove(),o.replaceWith(i)):m.after(i),k.cache&&b[n]){var f=b[n];c.addItems(f,h,i,d,e,g)}else k.loading&&i.loadingOverlay(),a.when(a.get(n)).done(function(a){k.cache&&(b[n]=a),c.addItems(a,h,i,d,e,g)}).always(function(){k.loading&&i.loadingOverlay("remove")})};o.length&&!o.hasClass("focus")?(o.nextAll(k.sectionSelector).addBack().empty(),o.addClass("focus").siblings(k.sectionSelector).removeClass("focus"),a.when(c.horzScroll(e,l,g,!0)).done(function(){p()})):p(),k.itemSelectedCallback&&k.itemSelectedCallback(f)}else m.addClass("focus").siblings(k.sectionSelector).removeClass("focus"),a.when(c.horzScroll(e,l,g,!0)).done(function(){m.nextAll(k.sectionSelector).remove(),j=e.find(k.sectionSelector).length,c.updateNumberCols(e,j)}),k.lastChildSelectedCallback&&k.lastChildSelectedCallback(f);c.markSelected(e,g)}},exposeMethods:function(){return c}};a.fn.html5finder=function(b){return c[b]?c[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist on jQuery.html5finder"):c.init.apply(this,arguments)},a.fn.html5finder.defaults={itemTplFn:null,columnTplFn:null,loading:!1,horizontalScroll:!1,scrollContainer:null,selected:"input:checked",notSelected:"input:not(:checked)",finderSelector:".finder-body",sectionSelector:null,sectionContentSelector:null,itemSelector:".finderinput",labelSelector:".finderselect",itemSelectedCallback:null,lastChildSelectedCallback:null,itemsAddedCallback:null,cache:!0,getAjaxUrl:function(a){return a.data("url")}}}(jQuery);