jQuery.fn.formFilter=function(options){list=jQuery(this);defaults={attributeList:$(list.find("li > ul"))};var settings=$.extend(defaults,options);var rows=list.children('li');if(list.length){$(options).html('<form id="formFilter-filter"></form>');var filterForm=$("#formFilter-filter");buildForm();$("input",filterForm).bind("change, click",filter);filterForm.bind("submit",filter);}
return this;function buildForm(){var attributes=$(settings.attributeList.filter(":first"));attributes.children("li").each(function(){var attribute=$(this),els=$("li."+attribute.attr("class")+" li"),vals=new Array();var tempstr="";$(els).each(function(){el=$(this);tempstr=el.text().replace(/_/," ");el.text(tempstr);if(jQuery.inArray(tempstr,vals)<0){if(el.text()!=""){vals.push(tempstr);}}});vals.sort();if(vals.length>1){makeFieldset(attribute,vals,attribute.children("h4").text());}});}
function filter(){var terms=$(":checked",filterForm);$("#formFilter-no-results").remove();if(!terms.length){list.show();rows.removeClass("hidden");}else{list.hide();rows.removeClass("hidden");$("fieldset",filterForm).each(function(){fieldset=$(this);terms=$(":checked",fieldset).map(function(){return $("label[for="+$(this).attr("id")+"]");});if(terms.length){rows.each(function(i){row=rows[i];var hidden=true;terms.each(function(){var filter=this.text(),corrispondingAttributes=$(row).find("li."+fieldset.attr("class")+" ul li");corrispondingAttributes.each(function(){if($(this).text()==filter){hidden=false;}});});if(hidden){$(row).addClass("hidden");}});}});if(list.children("li.hidden").size()==list.children("li").size()){list.before('<p id="formFilter-no-results">There are no results under the current filter options. <a href="#">See all results</a></p>');$("p#formFilter-no-results a").bind("click",function(){$("input",filterForm).each(function(){this.checked=false;});filter();return false;});}
else{list.show();}}
return true;}
function makeFieldset(attribute,vals,legend){filterForm.append('<h4>'+legend+'</h4><fieldset class="'+attribute.attr("class")+'"><legend>'+legend+'</legend><ul></ul></fieldset>');for(i=0;i<vals.length;i++){$("fieldset."+attribute.attr("class")+" ul").append('<li><input type="checkbox" value="" name="filter-'+attribute.attr("class")+'" id="'+attribute.attr("class")+'-'+i+'" /><label for="'+attribute.attr("class")+'-'+i+'">'+vals[i]+'</label></li>');}}};