/*
 *  Klasa filtrujaca produkty w listingu
 *  inicjalizacja: setFilter
 *  parametry:
 *    - controller, action, id, page, switched_colors
 *    na tej podstawie mozemy dla kazdego widoku (controller + actio + id) stworzyc osobny filtr
 *  po stronie kontrolera filtr jest zapisywany do sesji
 */

window.addEvent ("domready", function () {
	filter = new Filter();
});

var Filter = new Class ({
	unselected_color: '#444444', //kolor nie zaznaczonego selecta
	selected_color: '#017F00', //kolor zaznaczonego selecta	
	
	//inicjalizuje komunikaty jezykowe
	init_lang: function (lang) {
		this.lang = lang;
	},	
	
	
	//inicjalizuje filtrowanie
	setFilter: function(controller, action, id, page, switched_colors, switched_materials, switched_categories, word) {
		try {
			switched_colors = JSON.decode(switched_colors)
			switched_materials = JSON.decode (switched_materials);
			switched_categories  = JSON.decode (switched_categories);
		} catch (e) {}
		
			
//-------------/* Kiedy klikniemy myszka poza rozwijalna lista wkonaj zadanie */----------------//
		var destroy = function (event) {

			event = (!event) ? window.event : event;

			if (!(event.target == multiselect_color_content || event.target == multiselect_color || event.target.parentNode == multiselect_color_content) &&
			    !(event.target == multiselect_material_content || event.target == multiselect_material || event.target.parentNode == multiselect_material_content) &&
				!(event.target == multiselect_category_content || event.target == multiselect_category || event.target.parentNode == multiselect_category_content)) {
				try {
					multiselect_color_content.setStyle('visibility', 'hidden');
					multiselect_material_content.setStyle('visibility', 'hidden');
					multiselect_category_content.setStyle('visibility', 'hidden');
				} catch (e) {}
				
				document.removeEvent('click', destroy);
				if (selected_colors == 0 && selected_colors_stored) {
					selected_colors_stored = false
					return;
				}
				if (selected_materials == 0 && selected_materials_stored) {
					selected_materials_stored = false
					return;
				}		
				if (selected_categories == 0 && selected_categories_stored) {
					selected_categories_stored = false
					return;
				}					
						
				/* Pobierz kolory */
				var colors = '';
				multiselect_color_content.getElements('input[name=colors]').each (function (item){
					if (item.checked) {
						colors += item.value + ',';
					}
				})	
				colors = colors.substr(0, colors.length - 1)				
				
				/* Pobierz materialy */
				var materials = '';
				multiselect_material_content.getElements('input[name=materials]').each (function (item){
					if (item.checked) {
						materials += item.value + ',';
					}
				})	
				materials = materials.substr(0, materials.length - 1)					
				
				/* Pobierz kategories */
				var categories = '';
				try {
					multiselect_category_content.getElements('input[name=categories]').each(function(item){
						if (item.checked) {
							categories += item.value + ',';
						}
					})
					categories = categories.substr(0, categories.length - 1)
				} catch (e) { }			
				
				/* Pobierz cene */
				var filter = new Hash ({
					colors: colors,
					price_from: price_from.value,
					price_to: price_to.value,
					materials: materials,
					categories: categories
				})
				
				
				
				
				request_filter (controller, action, id, page, word, filter)//request.js
				
			}
		}
		
//-----------// KOLORY //--------------//
		if (switched_colors) {
			if (switched_colors.colors) {
				switched_colors = switched_colors.colors.split(',');
			}
		}
		
		
		var price_from = $(controller + '_' + action + '_' + id +'_price_from');
		var price_to = $(controller + '_' + action + '_' + id +'_price_to');
		
		//zawezanie wedlug koloru
		var multiselect_color = $(controller + '_' + action + '_' + id +'_color');
		var multiselect_color_content = $(controller + '_' + action + '_' + id +'_color_content')
		var selected_colors = 0;
		var selected_colors_stored = false;

		if (multiselect_color) multiselect_color.addEvent('click', function () {
			try {
				multiselect_material_content.setStyle('visibility', 'hidden')
				multiselect_category_content.setStyle('visibility', 'hidden')				
			} catch (e) { }
			
			if (multiselect_color_content.getStyle('visibility') == 'visible') {
				multiselect_color_content.setStyle('visibility', 'hidden')
				if (selected_colors == 0 && selected_colors_stored) {
					document.removeEvent('click', destroy);
				}
			} else {
				multiselect_color_content.setStyle('visibility', 'visible');
				if (selected_colors == 0) {
					selected_colors_stored = true
				}
				document.addEvent('click', destroy)
				
			}
		}.bind(this))

		
		multiselect_color_content.getElements('input').each (function (item) {
			item.addEvent('click', function () {
				selected_colors = this.setColor (item, 'color',multiselect_color, selected_colors )
			}.bind(this))
		}.bind(this))
		
		multiselect_color_content.getElements('.search_color').each (function (item, i) {
			var checkbox = item.getPrevious();	
			
			if (switched_colors && switched_colors.each) {
					switched_colors.each(function(col){
						if (checkbox.value == col) {
							checkbox.checked = true;
							selected_colors = this.setColor(checkbox, 'color', multiselect_color, selected_colors);
						}
					}.bind(this))
			}
				
			item.addEvent('click', function () {
				if (checkbox.checked) {
					checkbox.checked = false;
					selected_colors = this.setColor(checkbox, 'color', multiselect_color, selected_colors);
				} else {
					checkbox.checked = true;		
					selected_colors = this.setColor(checkbox, 'color', multiselect_color, selected_colors);					
				}
			}.bind(this))
		}.bind(this))		
		
//-----------// MATERIALY //--------------//			
		if (switched_materials) {

			if (switched_materials.materials) {
				switched_materials = switched_materials.materials.split(',');
			}
		}
		
		
		//zawezanie wedlug koloru
		var multiselect_material = $(controller + '_' + action + '_' + id +'_material');
		var multiselect_material_content = $(controller + '_' + action + '_' + id +'_material_content')
		var selected_materials = 0;
		var selected_materials_stored = false;

		multiselect_material.addEvent('click', function () {
			try {
				multiselect_color_content.setStyle('visibility', 'hidden')
				multiselect_category_content.setStyle('visibility', 'hidden')
			} catch (e) { }
			
			if (multiselect_material_content.getStyle('visibility') == 'visible') {				
				multiselect_material_content.setStyle('visibility', 'hidden')
				if (selected_materials == 0 && selected_materials_stored) {
					document.removeEvent('click', destroy);
				}				
			} else {
				multiselect_material_content.setStyle('visibility', 'visible');
				if (selected_materials == 0) {
					selected_materials_stored = true
				}				
				document.addEvent('click', destroy)
			}
		}.bind(this))

		
		multiselect_material_content.getElements('input').each (function (item) {
			item.addEvent('click', function () {
				selected_materials = this.setColor (item, 'material',multiselect_material, selected_materials )
			}.bind(this))
		}.bind(this))
		
		multiselect_material_content.getElements('.search_material').each (function (item, i) {
			var checkbox = item.getPrevious();	
			
			if (switched_materials && switched_materials.each) {
					switched_materials.each(function(col){
						if (checkbox.value == col) {
							checkbox.checked = true;
							selected_materials = this.setColor(checkbox, 'color', multiselect_material, selected_materials);
						}
					}.bind(this));
			}
				
			item.addEvent('click', function () {
				if (checkbox.checked) {
					checkbox.checked = false;
					selected_materials = this.setColor(checkbox, 'color', multiselect_material, selected_materials);
				} else {
					checkbox.checked = true;		
					selected_materials = this.setColor(checkbox, 'color', multiselect_material, selected_materials);					
				}
			}.bind(this))
		}.bind(this))	
		
		
//-----------// KATEGORIE (TYLKO DLA WYBRANYCH WIDOKOW) //--------------//
		if (switched_categories) {
			if (switched_categories.categories) {
				switched_categories = switched_categories.categories.split(',');
			}
		}
		
		try {
			//zawezanie wedlug koloru
			var multiselect_category = $(controller + '_' + action + '_' + id + '_category');
			var multiselect_category_content = $(controller + '_' + action + '_' + id + '_category_content')
			var selected_categories = 0;
			var selected_categories_stored = false;
			
			if (multiselect_category) multiselect_category.addEvent('click', function(){
				try {
					multiselect_color_content.setStyle('visibility', 'hidden')
					multiselect_material_content.setStyle('visibility', 'hidden')
				} 
				catch (e) {
				}
				
				if (multiselect_category_content.getStyle('visibility') == 'visible') {
					multiselect_category_content.setStyle('visibility', 'hidden')
					if (selected_categories == 0 && selected_categories_stored) {
						document.removeEvent('click', destroy);
					}
				}
				else {
					multiselect_category_content.setStyle('visibility', 'visible');
					if (selected_categories == 0) {
						selected_categories_stored = true
					}
					document.addEvent('click', destroy)
					
				}
			}.bind(this))
			
			
			if (multiselect_category_content) multiselect_category_content.getElements('input').each(function(item){
				item.addEvent('click', function(){
					selected_categories = this.setColor(item, 'category', multiselect_category, selected_categories)
				}.bind(this))
			}.bind(this))
			
			if (multiselect_category_content) multiselect_category_content.getElements('.search_cat').each(function(item, i){
				var checkbox = item.getPrevious();
				
				if (switched_categories && switched_categories.each) {
						switched_categories.each(function(col){
							if (checkbox.value == col) {
								checkbox.checked = true;
								selected_categories = this.setColor(checkbox, 'category', multiselect_category, selected_categories);
							}
						}.bind(this))
				}
				
				item.addEvent('click', function(){
					if (checkbox.checked) {
						checkbox.checked = false;
						selected_categories = this.setColor(checkbox, 'category', multiselect_category, selected_categories);
					}
					else {
						checkbox.checked = true;
						selected_categories = this.setColor(checkbox, 'category', multiselect_category, selected_categories);
					}
				}.bind(this))
			}.bind(this))
		} catch (e) {}		
		
		
		 $(controller + '_' + action + '_' + id + '_price_submit').addEvent('click', function () {
try {
					multiselect_color_content.setStyle('visibility', 'hidden');
					multiselect_material_content.setStyle('visibility', 'hidden');
					multiselect_category_content.setStyle('visibility', 'hidden');
				} catch (e) {}
				
				document.removeEvent('click', destroy);
				if (selected_colors == 0 && selected_colors_stored) {
					selected_colors_stored = false
					return;
				}
				if (selected_materials == 0 && selected_materials_stored) {
					selected_materials_stored = false
					return;
				}		
				if (selected_categories == 0 && selected_categories_stored) {
					selected_categories_stored = false
					return;
				}					
						
				/* Pobierz kolory */
				var colors = '';
				multiselect_color_content.getElements('input[name=colors]').each (function (item){
					if (item.checked) {
						colors += item.value + ',';
					}
				})	
				colors = colors.substr(0, colors.length - 1)				
				
				/* Pobierz materialy */
				var materials = '';
				multiselect_material_content.getElements('input[name=materials]').each (function (item){
					if (item.checked) {
						materials += item.value + ',';
					}
				})	
				materials = materials.substr(0, materials.length - 1)					
				
				/* Pobierz kategories */
				var categories = '';
				try {
					multiselect_category_content.getElements('input[name=categories]').each(function(item){
						if (item.checked) {
							categories += item.value + ',';
						}
					})
					categories = categories.substr(0, categories.length - 1)
				} catch (e) { }			
				
				/* Pobierz cene */
				var filter = new Hash ({
					colors: colors,
					price_from: price_from.value,
					price_to: price_to.value,
					materials: materials,
					categories: categories
				})

				request_filter (controller, action, id, page, word, filter)//request.js
		 })		
	},
	
	/* ustawia kolor zaznaczonych lub odznaczonych itemow */
	setColor: function (checkbox, type,ms_c, s_c) {

		if (checkbox.checked) {
			checkbox.getNext().setStyle ('color', this.selected_color);
		} else {
			checkbox.getNext().setStyle ('color', this.unselected_color)
		}
		
		switch (type) {
			case "category":
				s_c = this.setCategoryChoosen(checkbox.checked, ms_c, s_c);					
				break;
			case "color":
				s_c = this.setColorChoosen(checkbox.checked, ms_c, s_c);
				break;
			case "material":
				s_c = this.setMaterialChoosen(checkbox.checked,  ms_c, s_c);
				break;				
				
		}
		
		return s_c;

	},
	
	/* w glownym selecie pokazuje ile itemow jest zaznaczonych */
	setColorChoosen: function (checked, multiselect_color, selected_colors ) {
		if (checked) {
			selected_colors++;
		} else {
			selected_colors --;
		}

		if (selected_colors > 0) {
			multiselect_color.set('html', this.lang.wybrano + ' - ' + selected_colors);
		} else {
			multiselect_color.set('html', this.lang.wybierz);			
		}
		
		return selected_colors;
	},	
	
	
	/* w glownym selecie pokazuje ile itemow jest zaznaczonych */
	setMaterialChoosen: function (checked,  multiselect_material, selected_materials ) {
		if (checked) {
			selected_materials++;
		} else {
			selected_materials--;
		}
		
		if (selected_materials > 0) {
			multiselect_material.set('html', this.lang.wybrano + ' - ' + selected_materials);
		} else {
			multiselect_material.set('html', this.lang.wybierz);			
		}
		
		return selected_materials;
	}	,
	
	
	/* w glownym selecie pokazuje ile itemow jest zaznaczonych */
	setCategoryChoosen: function (checked,  multiselect_category, selected_categories ) {
		if (checked) {
			selected_categories++;
		} else {
			selected_categories--;
		}
		
		if (selected_categories > 0) {
			multiselect_category.set('html', this.lang.wybrano + ' - ' + selected_categories);
		} else {
			multiselect_category.set('html', this.lang.wybierz);			
		}
		
		return selected_categories;
	}	
})

