(function(){var Filter,FilterGroup,FilterOptGroup;this.FilterGroup=FilterGroup=Spine.Model.setup("FilterGroup",['name','selected','value']);FilterGroup.extend({selected:function(){return this.select(function(item){if(item.selected){return item;}});}});this.FilterOptGroup=FilterOptGroup=Spine.Model.setup("FilterOptGroup",['name','group']);FilterOptGroup.extend({inGroup:function(group){return this.select(function(item){if(item.group.id===group.id){return item;}});}});this.Filter=Filter=Spine.Model.setup("Filter",['group','name','value','selected']);Filter.extend({inGroup:function(group){return this.select(function(item){if(item.group.id===group.id){return item;}});},selectedInGroup:function(group){return this.select(function(item){if(item.group.id===group.id&&item.selected){return item;}});}});}).call(this);(function(){var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};$(function(){var FilterController,FilterListController,FilterListItemController,FilterMenuItemController,OptGroupItemController;FilterController=Spine.Controller.create({el:$('#filter-holder'),proxied:['createMenuItem','createFilterList'],elements:{'div.filters':'filterToggle','form.filter-form':'form','div.filter-controls':'controls','ol.filter-menu':'menu','a.filter-dropdown':'filterButton','a.cancel':'cancelButton'},events:{'click a.filter-dropdown':'toggle','click a.submit-filter':'submitFilter','click a.cancel':'toggle'},init:function(){this.form.hide();this.filterToggle.show();FilterGroup.bind('create',this.createMenuItem);FilterGroup.bind('create',this.createFilterList);return this.form.find('select').each(__bind(function(i,select){var group,name,selected,value;name=this.$(select).attr('data-filter-name');value=this.$(select).attr('name');selected=i===0;return group=FilterGroup.create({name:name,selected:selected,value:value});},this));},toggle:function(){this.filterButton.toggleClass('active');this.controls.slideToggle('slow');return false;},submitFilter:function(){this.form.submit();return false;},createMenuItem:function(filterGroup){var rendered,view;view=FilterMenuItemController.init({item:filterGroup});rendered=view.render();return this.menu.append(rendered.el);},createFilterList:function(filterGroup){var controller,rendered;controller=FilterListController.init({item:filterGroup});rendered=controller.render();this.controls.append(rendered.el);return controller.addAll();}});FilterMenuItemController=Spine.Controller.create({tag:'li',proxied:['render'],events:{'click a':'select'},init:function(){return this.item.bind("update",this.render);},render:function(group){var elements,template;if(group!=null){this.item=group;}
template=$('#filterMenuItemTemplate');elements=template.tmpl(this.item);this.el.html(elements);if(this.item.selected){this.el.addClass('active');}else{this.el.removeClass('active');}
return this;},select:function(){$.each(FilterGroup.selected(),function(i,group){group.selected=false;return group.save();});this.item.selected=true;this.item.save();return false;}});FilterListController=Spine.Controller.create({proxied:['render','handleUpdate','addOne','addAll','addOptGroup'],init:function(){this.item.bind("update",this.handleUpdate);Filter.bind('create',this.addOne);return FilterOptGroup.bind('create',this.addOptGroup);},addAll:function(){var items,optgroups;optgroups=$("select[name='"+this.item.value+"']").find('optgroup');if(optgroups.length>0){return $.each(optgroups,__bind(function(i,optgroup){var group;return group=FilterOptGroup.create({group:this.item,name:$(optgroup).attr('label')});},this));}else{items=$("select[name='"+this.item.value+"']").find('option[value!=""]');return $.each(items,__bind(function(i,filterDom){return Filter.create({group:this.item,name:$(filterDom).text(),value:$(filterDom).attr('value'),selected:$(filterDom).attr('selected')==='selected'});},this));}},addOne:function(filter){var controller,rendered;if(filter.group.id!==this.item.id){return;}
controller=FilterListItemController.init({item:filter});rendered=controller.render();return this.list.append(rendered);},addOptGroup:function(optGroup){var controller,rendered;if(optGroup.group.id!==this.item.id){return;}
controller=OptGroupItemController.init({item:optGroup});rendered=controller.render();this.list.append(rendered);return controller.addAll();},sortFilter:function(a,b){return a.name>b.name;},render:function(group){if(group!=null){this.item=group;}
this.el.html('<ul class="filter-list"></ul>');this.list=this.el.find('ul');this.el.addClass('col2 wider');this.el.css({height:'400px','overflow-y':'auto'});if(this.item.selected){this.el.show();}else{this.el.hide();}
return this;},handleUpdate:function(item){if(item.selected){return this.el.show();}else{return this.el.hide();}}});OptGroupItemController=Spine.Controller.create({tag:'li',proxied:['render','addAll','addOne'],init:function(){this.item.bind('update',this.render);return Filter.bind('create',this.addOne);},render:function(filter){var elements,template;if(filter!=null){this.item=filter;}
template=$('#optGroupItemTemplate');elements=template.tmpl(this.item);this.el.html(elements);return this.el.addClass('title');},addAll:function(){var items;items=$("optgroup[label="+this.item.name+"]").find('option[value!=""]');return $.each(items,__bind(function(i,filterDom){return Filter.create({group:this.item,name:$(filterDom).text(),value:$(filterDom).attr('value'),selected:$(filterDom).attr('selected')==='selected'});},this));},addOne:function(filter){var controller,rendered;if(filter.group.id!==this.item.id){return;}
controller=FilterListItemController.init({item:filter});rendered=controller.render();return this.el.after(rendered);}});FilterListItemController=Spine.Controller.create({tag:'li',proxied:['render'],events:{'click a':'select'},init:function(){return this.item.bind('update',this.render);},render:function(filter){var elements,template;if(filter!=null){this.item=filter;}
template=$('#filterListItemTemplate');elements=template.tmpl(this.item);this.el.html(elements);if(this.item.selected){return this.el.addClass('active');}else{return this.el.removeClass('active');}},select:function(event){var option;this.item.selected=!this.item.selected;this.item.save();if(this.item.group.parent.name==='FilterGroup'){option=$("select[name='"+this.item.group.value+"']").find("option[value='"+this.item.value+"']");}else{option=$("select[name='"+this.item.group.group.value+"']").find("option[value='"+this.item.value+"']");}
if(this.item.selected){option.attr('selected','selected');}else{option.removeAttr('selected');}
return false;}});return FilterController.init();});}).call(this);
