var __pack = '';
var partnerBoxFilter = {
	package:			new Object(),
	partnerList:		new Object(),
	views: 				new Object(),
	towns: 				new Object(),
	categories:			new Object(),
	ptypes:				new Object(),
	categoryNumber:		new Object(),
	typeNumber:			new Object(),
	townNumber:			new Object(),
	viewNumber:			new Object(),
	typeIndecies:		new Object(),
	categoryIndecies:	new Object(),
	viewIndecies:		new Object(),
	inited:				new Object(),
	
	// Init the filter handler
	init: function( package, list, views, towns, categories, ptypes, open ) {
		this.package[package]			= package;
		this.partnerList[package]		= list;
		this.views[package]				= views;
		this.towns[package]				= towns;
		this.categories[package]		= categories;
		this.ptypes[package]			= ptypes;

		this.typeIndecies[package]		= new Array();
		this.categoryIndecies[package]	= new Array();
		this.viewIndecies[package]		= new Array();

		this.refreshViewFilter(package);
		if(open) {
			this.open(package);
		}
		//this.filterIndecies(package);
		//this.refreshFilters(package);
	},
	
	open: function( package ) {
		if(package) {
			if(!this.inited[package]) {
				this.filterIndecies(package);
				this.refreshFilters(package);
				this.inited[package] = true;	
			}
		}
	},
	
	// Switch on/off the selected view in filter
	clear: function(package) {
		this.views[package]			= new Array();
		this.towns[package]			= new Array();
		this.categories[package]	= new Array();
		this.ptypes[package]		= new Array();
		if($('filter_'+package+'_name')) {
			$('filter_'+package+'_name').value = '';
		}
		if($('filter_'+package+'_room')) {
			$('filter_'+package+'_room').selectedIndex = 0;
		}

		this.filterIndecies(package);
		this.refreshFilters(package);
	},
	
	switchView: function(cbox,package) {
		var value = cbox.options[cbox.selectedIndex].value;
		if(value=='-') {
			this.views[package] = new Array();
		}
		else {
			var views = new Array(value);
			views = views.concat( viewHandler.getSubviewIds(value));
			for(var i=0;i<views.length;i++) {
				var idx = this.views[package].indexOf(views[i]);
				if(idx==-1) {
					this.views[package].splice(this.views[package].length,1,views[i]);
				}
				else {
					this.views[package].splice(idx,1);
				}
			}
		}
		this.towns[package]			= new Array();
		this.categories[package]	= new Array();
		this.ptypes[package]		= new Array();

		this.filterIndecies(package);
		this.refreshFilters(package);
	},
	
	// Switch on/off the selected town in filter
	switchTown: function(cbox,package) {
		var value = cbox.options[cbox.selectedIndex].value;
		if(value=='-') {
			this.towns[package] = new Array();
		}
		else {
			this.towns[package] = new Array( value );
		}		
		this.categories[package]	= new Array();
		this.ptypes[package]		= new Array();
		this.filterIndecies(package);
		this.refreshFilters(package);
	},

	// Switch on/off the selected type in filter
	switchType: function(cbox,package) {
		var value = cbox.options[cbox.selectedIndex].value;
		if(value=='-') {
			this.ptypes[package] = new Array();
		}
		else {
			this.ptypes[package] = new Array( value );
		}		
		this.filterIndecies(package);
		this.refreshFilters(package);
	},

	switchDate: function(package) {
		this.filterIndecies(package);
		this.refreshFilters(package);
	},

	// Switch on/off the selected category in filter
	switchCategory: function(cbox,package) {
		var value = cbox.options[cbox.selectedIndex].value;
		if(value=='-') {
			this.categories[package] = new Array();
		}
		else {
			this.categories[package] = new Array( value );
		}		
		this.filterIndecies(package);
		this.refreshFilters(package);
	},

	// Filter partners by the selected filters
	filterIndecies: function(package) {
		this.townNumber[package] = new Object();
		this.typeNumber[package] = new Object();
		this.categoryNumber[package] = new Object();

		this.viewIndecies[package] = new Array();
		this.typeIndecies[package] = new Array();
		this.categoryIndecies[package] = new Array();
		
		for(var i=0;i<this.partnerList[package].length;i++) {
			// Check partner views
			var datefilter = true;
			if(package=='EVT') {
				var f = new Date($('filter_'+package+'_from').value);
				var from = f.getTime()/1000;
				var t = new Date($('filter_'+package+'_to').value);
				var to = t.getTime()/1000;
				datefilter = !(this.partnerList[package][i].to<from || this.partnerList[package][i].from>to);
			}
			
			var viewfilter = this.views[package].length==0;
			if(this.partnerList[package][i].views) {
				for(var j=0;j<this.partnerList[package][i].views.length;j++) {
					if(this.views[package].indexOf(this.partnerList[package][i].views[j])>-1) {
						viewfilter = true;
						break;
					}
				}
			}
			// Check partner town
			var townfilter = this.towns[package].length==0;
			if(this.towns[package].indexOf(this.partnerList[package][i].town)>-1) {
				townfilter = true;
			}
			
			// Check partner type
			var typefilter = this.ptypes[package].length==0;
			if(this.partnerList[package][i].types) {
				for(var j=0;j<this.partnerList[package][i].types.length;j++) {
					if(this.ptypes[package].indexOf(this.partnerList[package][i].types[j])>-1) {
						typefilter = true;
						break;
					}
				}
			}

			// Check partner category
			var categoryfilter = this.categories[package].length==0;
			if(this.partnerList[package][i].categories) {
				for(var j=0;j<this.partnerList[package][i].categories.length;j++) {
					if(this.categories[package].indexOf(this.partnerList[package][i].categories[j])>-1) {
						categoryfilter = true;
						break;
					}
				}
			}

			// Count possible results for types
			if(datefilter && viewfilter&&townfilter && this.partnerList[package][i].types) {
				if(this.partnerList[package][i].types.length>0) {
					for(var j=0;j<this.partnerList[package][i].types.length;j++) {
						if(this.typeIndecies[package].indexOf(this.partnerList[package][i].types[j])==-1) {
							this.typeIndecies[package].push(this.partnerList[package][i].types[j]);
						}
					}
					if(categoryfilter) {
						for(var j=0;j<this.partnerList[package][i].types.length;j++) {
							if(!this.typeNumber[package][this.partnerList[package][i].types[j]]) {
								this.typeNumber[package][this.partnerList[package][i].types[j]] = 0;
							}
							this.typeNumber[package][this.partnerList[package][i].types[j]]++;
						}
					}
				}
			}

			// Count possible results for categories
			if(datefilter && viewfilter&&townfilter && this.partnerList[package][i].categories) {
				if(this.partnerList[package][i].categories.length>0) {
					for(var j=0;j<this.partnerList[package][i].categories.length;j++) {
						if(this.categoryIndecies[package].indexOf(this.partnerList[package][i].categories[j])==-1) {
							this.categoryIndecies[package].push(this.partnerList[package][i].categories[j]);
						}
					}
//					this.categoryIndecies[package].splice(this.categoryIndecies[package].length,1,i);
					if(typefilter) {
						for(var j=0;j<this.partnerList[package][i].categories.length;j++) {
							if(!this.categoryNumber[package][this.partnerList[package][i].categories[j]]) {
								this.categoryNumber[package][this.partnerList[package][i].categories[j]] = 0;
							}
							this.categoryNumber[package][this.partnerList[package][i].categories[j]]++;
						}
					}
				}
			}

			// Count possible results for town
			if(datefilter && viewfilter) {
				if(this.partnerList[package][i].town!='' && this.partnerList[package][i].town!=null) {
					if(this.viewIndecies[package].indexOf(this.partnerList[package][i].town)==-1) {
						this.viewIndecies[package].push(this.partnerList[package][i].town);
					}
					if(typefilter&&categoryfilter) {
						if(!this.townNumber[package][this.partnerList[package][i].town]) {
							this.townNumber[package][this.partnerList[package][i].town] = 0;
						}
						this.townNumber[package][this.partnerList[package][i].town]++;
					}
				}
			}

		}
	},
	
	// Refresh all filters
	refreshFilters: function(package) {
		this.refreshViewFilter(package);
		this.refreshTownFilter(package);
		this.refreshTypeFilter(package);
		this.refreshCategoryFilter(package);
	},
	
	// Refresh response number of view filters
	refreshViewFilter: function(package) {
		if(!$('partner_fastsearch_'+package+'_view')) {
			return;
		}
		var viewDiv = new StringBuffer();
		try {
			if(ViewList.length>1) {
				viewDiv.append('<label>');
				viewDiv.append(jsLabels.txtView);
				viewDiv.append('</label>');
				viewDiv.append('<select name="filter_view[]" onchange="partnerBoxFilter.switchView(this,\'');
				viewDiv.append(package);
				viewDiv.append('\');">');
				viewDiv.append('<option value="-" ');
				viewDiv.append(this.views[package].length==0 ? 'selected="selected"' : '');
				viewDiv.append('>');
				viewDiv.append(jsLabels.txtAll);
				viewDiv.append('</option>');
				//ViewList = ViewList.sortBy(function(s) { return s.name; });
				for(var i=0; i<ViewList.length; i++) {
					var view = ViewList[i];
					viewDiv.append('<option value="'+view.id+'" '+(this.views[package].indexOf(view.id)>-1 ? 'selected="selected"' : '')+'>'+view.name+'</option>');
				}
				viewDiv.append('</select>');
			}
		}
		catch(e) {}
		$('partner_fastsearch_'+package+'_view').innerHTML = viewDiv.toString();
	},

	refreshTownFilter: function(package) {
		if(!$('partner_fastsearch_'+package+'_town')) {
			return;		
		}
		var towns = this.viewIndecies[package];
		//towns = towns.concat(this.towns[package]);
		var townDiv = new StringBuffer();
		try {
			if(towns.length>0) {
				townDiv.append('<label>');
				townDiv.append(jsLabels.txtTown);
				townDiv.append('</label>');
				townDiv.append('<select name="filter_town[]" onchange="partnerBoxFilter.switchTown(this,\'');
				townDiv.append(package);
				townDiv.append('\');">');
				townDiv.append('<option value="-" ');
				townDiv.append(this.towns[package].length==0 ? 'selected="selected"' : '');
				townDiv.append('>');
				townDiv.append(jsLabels.txtAll);
				townDiv.append('</option>');
				
				for(var i=0;i<TownList.length;i++) {
					if(towns.indexOf(TownList[i].id)>-1) {
						townDiv.append('<option value="');
						townDiv.append(TownList[i].id);
						townDiv.append('" ');
						townDiv.append(this.towns[package].indexOf(TownList[i].id)>-1 ? 'selected="selected"' : '');
						townDiv.append('>');
						townDiv.append(TownList[i].name);
						townDiv.append(' ( ');
						townDiv.append(this.townNumber[package][TownList[i].id]>0?this.townNumber[package][TownList[i].id]:'-');
						townDiv.append(' )</option>');
					}
				}
				townDiv.append('</select>');
			}
		}
		catch(e) {}
		$('partner_fastsearch_'+package+'_town').innerHTML = townDiv.toString();
	},

	refreshTypeFilter: function(package) {		
		if(!$('partner_fastsearch_'+package+'_type')) {
			return;
		}
		var ptypes = this.typeIndecies[package];
		//ptypes = ptypes.concat(this.ptypes[package]);
		__pack = package;
		if(package=='BOOK'||package=='STD') {
			ptypes = ptypes.sortBy(function(s) {return s; });
		}
		else {
			ptypes = ptypes.sortBy(function(s) {var t = tinHandler.getTin(__pack,s);return t ? t.name : ''; });
		}
		var typeDiv = new StringBuffer();
		if(ptypes.length>0) {
			var code = ptypes[0];
			var tc = code.substr(0,5);
			var title = tinHandler.getTin(package,tc+'.000.000.000'); 
			if(title!=null) {
				typeDiv.append('<label>');
				typeDiv.append(title.name);
				typeDiv.append('</label>');
				typeDiv.append('<select name="filter_type[]" onchange="partnerBoxFilter.switchType(this,\'');
				typeDiv.append(package);
				typeDiv.append('\');">');
				typeDiv.append('<option value="-" ')
				typeDiv.append(this.ptypes[package].length==0 ? 'selected="selected"' : '');
				typeDiv.append('>');
				typeDiv.append(jsLabels.txtAll);
				typeDiv.append('</option>');
				for(var i=0; i<ptypes.length; i++) {
					var type = tinHandler.getTin(package,ptypes[i]);
					if(type!=null) {
						typeDiv.append('<option value="');
						typeDiv.append(type.id);
						typeDiv.append('" ');
						typeDiv.append(this.ptypes[package].indexOf(type.id)>-1 ? 'selected="selected"' : '');
						typeDiv.append('>');
						typeDiv.append(type.name);
						typeDiv.append(' ( ');
						typeDiv.append(this.typeNumber[package][type.id]>0?this.typeNumber[package][type.id]:'-');
						typeDiv.append(' )</option>');
					}
				}
				typeDiv.append('</select>');
			}
		}
		$('partner_fastsearch_'+package+'_type').innerHTML = typeDiv.toString();
	},

	refreshCategoryFilter: function(package) {
		if(!$('partner_fastsearch_'+package+'_category')) {
			return;
		}
		var categories = this.categoryIndecies[package];
		//for(var i=0;i<this.categoryIndecies[package].length;i++) {
			//categories = categories.concat(this.partnerList[package][this.categoryIndecies[package][i]].categories);
		//}
		//categories = categories.concat(this.categories[package]);
		//categories = categories.uniq();
		__pack = package;
		categories = categories.sortBy(function(s) { var t = tinHandler.getTin(__pack,s);return t ? t.name : ''; });
		//categories = categories.sortBy(function(s) { return s });
		
		var categoryDiv = new StringBuffer();
		if(categories.length>0) {
			var code = categories[0];
			var tc = code.substr(0,5);
			var title = tinHandler.getTin(package,tc+'.000.000.000'); 
			if(title!=null) {
				categoryDiv.append('<label>');
				categoryDiv.append(title.name);
				categoryDiv.append('</label>');
				categoryDiv.append('<select name="filter_category[]" onchange="partnerBoxFilter.switchCategory(this,\'');
				categoryDiv.append(package);
				categoryDiv.append('\');">');
				categoryDiv.append('<option value="-" ');
				categoryDiv.append(this.categories[package].length==0 ? 'selected="selected"' : '');
				categoryDiv.append('>');
				categoryDiv.append(jsLabels.txtAll);
				categoryDiv.append('</option>');
				for(var i=0; i<categories.length; i++) {
					var category = tinHandler.getTin(package,categories[i]);
					if(category!=null) {
						categoryDiv.append('<option value="');
						categoryDiv.append(category.id);
						categoryDiv.append('" ');
						categoryDiv.append(this.categories[package].indexOf(category.id)>-1 ? 'selected="selected"' : '');
						categoryDiv.append('>');
						categoryDiv.append(category.name);
						categoryDiv.append(' ( ');
						categoryDiv.append(this.categoryNumber[package][category.id]>0?this.categoryNumber[package][category.id]:'-');
						categoryDiv.append(' )</option>');
					}
				}
				categoryDiv.append('</select>');
			}
		}
		$('partner_fastsearch_'+package+'_category').innerHTML = categoryDiv.toString();
	}

}
