
/* - ++resource++seantis.dir.base.javascripts/filter.js - */
// http://www.aenb.ch/portal_javascripts/++resource++seantis.dir.base.javascripts/filter.js?original=1
(function($){var Filter=function(elements){var UNSELECTED='';this.categories=elements;this.query=function(terms,callback){$.getJSON(seantis.get_filter_url(),terms,callback)};this.update=function(eventindex,callback){this.cache_all();var first=this.first();if(!first){this.reset_from_cache();return}
var terms=this.terms(eventindex);var that=this;this.query(terms, function(data){$.each(data, function(key,value){var index=that.index(key);var selected=that.selected(index);if(index===first)
that.options(index,that.category_cache(index));if(index>eventindex)
that.options(index,value);if(!selected)
that.select(index,UNSELECTED);else
that.select(index,selected)});if(typeof callback!=='undefined'){callback(eventindex)}})};this.initialize=function(){var selections=[];for(var i=1;i<=4;i++){var category=this.category(i);selections.push(category&&category.val()||null)}
for(i=1;i<=4;i++){if(selections[i-1]){var that=this;this.update(i, function(index){var oldsel=selections[index-1];if(oldsel){var newsel=that.closest(that.options(index),oldsel);that.select(index,newsel);console.log(newsel)}})}}};this.closest=function(list,value){var normalize=function(text){return text.substring(0,text.indexOf('('))};var normal=normalize(value);var result=false;$.each(list, function(index,item){if(normal==normalize(item)){result=item;return}});return result};this.terms=function(lastindex,index,terms){lastindex=typeof(lastindex)!=='undefined'?lastindex:4;index=typeof(index)!=='undefined'?index:this.first();terms=typeof(terms)!=='undefined'?terms:{};if(!this.selected(index))
return null;var name=this.name(index);var category=this.category(index);terms[name]=category.val();if(index<lastindex){this.terms(lastindex,index+1,terms)}
return terms};this.category=function(ix){ix=ix-1;if(ix>=this.categories.length)
return null;return $(this.categories[ix])};this.name=function(index){return 'cat'+index};this.index=function(name){var ix=parseInt(name.substring(3),10);if(isNaN(ix)){return 0}
return ix};this.exists=function(index){return this.category(index)!==null};this.selected=function(index){if(!this.exists(index))
return false;var value=this.category(index).val();if(value===UNSELECTED)
return false;return value};this.select=function(index,value){var category=this.category(index);if(category!==null)
this.category(index).val(value)};this.first=function(){for(var index=1;index<=this.categories.length;index++){if(this.selected(index))
return index}
return 0};this.unselect=function(index){if(!this.exists(index))
return;this.category(index).val(UNSELECTED);this.unselect(index+1)};this.options=function(index,values){if(typeof values==='undefined')
return this.get_options(index);else
return this.set_options(index,values)};this.get_options=function(index){options=[];this.category(index).find('option').each(function(){options.push($(this).val())});return options};this.set_options=function(index,values){var category=this.category(index);if(category){category.find('option').remove();if($.inArray(UNSELECTED,values)===-1){category.append('<option>'+UNSELECTED+'</option>')}
$.each(values, function(index,value){category.append('<option>'+value+'</option>')})}};this.cache_all=function(){for(var ix=1;ix<=this.categories.length;ix++){if(!this.category_cached(ix)){this.cache_category(ix)}}};this.cache_category=function(index){this.category(index).data('cache',this.options(index))};this.category_cache=function(index){return this.category(index).data('cache')};this.category_cached=function(index){var data=this.category(index).data('cache');return typeof data!=='undefined'};this.reset_from_cache=function(){for(var ix=1;ix<=this.categories.length;ix++){this.options(ix,this.category_cache(ix))}}};$(document).ready(function(){var filter=new Filter($('.seantis-directory-category'));$(filter.categories).change(function(){var index=filter.index($(this).attr('name'));if(isNaN(index))
console.log('Error parsing element');else{filter.unselect(index+1);filter.update(index)}});if(filter.categories.length>0&&seantis.filtered())
filter.initialize()})})(jQuery);

