(function() {
	YAHOO.namespace('filt');
	
	/* Allgemeine Variablen, IDs der Splidekomponenten */
	var Event = YAHOO.util.Event;
	var Dom   = YAHOO.util.Dom;
	var lang  = YAHOO.lang;
	var slider;
	var bg="price-slider-bg";
	var min_thumb="price-slider-thumb-min";
	var max_thumb="price-slider-thumb-max";
	var valuearea="price-slider-value";
	var textfield="price-slider-converted-value";
	var power_slider;
	var power_bg="power-slider-bg";
	var power_min_thumb="power-slider-thumb-min";
	var power_max_thumb="power-slider-thumb-max";
	var power_valuearea="power-slider-value";
	var power_textfield="power-slider-converted-value";
	
	var range = 192;
	var keyIncrement = 24;	
	var tickSize = 24;
	var initValues = [0,192]; 
	
	var minThumbDistance = 10;
	
	var power_minThumbDistance = 20;
	var power_range = 155;
	var power_keyIncrement = 31;	
	var power_tickSize = 31;
	var power_initValues = [0,155]; 
	
	var tablearr = null;
	var cacheflag = false;
	
	/* Variablen fuer die Listenfilterung */
	var color = "multicolor";
	var white = new Array('white', 'weiß', 'warmweiß', 'warmwhite', 'neutralweiß', 'neutralwhite');
	
	/* Variablen fuer die Spotfilterung */
	var bulbfitting = "mr16";
	var bulbfittingarray = new Array('mr16', 'gu10', 'e27', 'other');

	/* Skalierungen fuer Listenfilterung (Preis) */
	var list_price_convert = function (val) {
		if(val < 10) {
			return "0";
		} else if (val < 25) {
			return "0,10";
		} else if(val < 50) {
			return "0,50";
		} else if(val < 75) {
			return "1";
		} else if(val < 100) {
			return "2";
		} else if(val < 125) {
			return "5";
		} else if(val < 150) {
			return "10";
		} else if(val < 175) {
			return "20";
		} else if(val < 200) {
			return "&#8734;";
		}
		
		return "0";
	}; 
	
	/* Skalierung fuer die Spotfilterung (Preis) */
	var spot_price_convert = function (val) {
		if(val < 10) {
			return "0";
		} else if (val < 25) {
			return "5";
		} else if(val < 50) {
			return "10";
		} else if(val < 75) {
			return "20";
		} else if(val < 100) {
			return "30";
		} else if(val < 125) {
			return "40";
		} else if(val < 150) {
			return "50";
		} else if(val < 175) {
			return "60";
		} else if(val < 200) {
			return "&#8734;";
		}
		
		return "0";
	}; 
	
	/* Skalierung fuer Listen und Spotfilterung (Leistung) */
	var power_convert = function (val) {
		if(val < 10) {
			return "0";
		} else if (val < 35) {
			return "0,5";
		} else if(val < 65) {
			return "1";
		} else if(val < 100) {
			return "3";
		} else if(val < 125) {
			return "5";
		} else if(val < 160) {
			return "&#8734;";
		}
		
		return "0";
	}; 
	
	/* Funktion ueberprueft, ob sich ein Element in einem Array befindet */
	var in_array = function(item,arr) {
		for(p=0;p<arr.length;p++) if (item == arr[p]) return true;
		return false;
	};
	
	/* Registriert die Aenderungen im Listenslider und wertet diese aus */
	var list_change = function(min, max, pmin, pmax) {
		var table = document.getElementById("list-table");
		var trs = table.getElementsByTagName("tr");
		var classn = "odd";
		var showncolumns = 0;
		
		if(isNaN(pmax)) {
			pmax = 100;
		}
		if(isNaN(max)) {
			max = 5000;
		}
		
		if(tablearr == null) {
			tablearr = new Array(trs.length);
		}
		
		for(var i = 1; i < trs.length; i++) {
			var columns = trs[i].childNodes;
			var column, pcolumn;
			var cont = 0;
			if(!cacheflag) {
				tablearr[i-1] = new Array(3);
				for(var j = 0; j < columns.length; j++) {
					if(columns[j].id == "powerValue") {
						pcolumn = columns[j];
						if(cont == 2) {
							j = columns.length;
						} else {
							cont++;
						}
					}
					if(columns[j].id == "colorValue") {
						ccolumn = columns[j];
						if(cont == 2) {
							j = columns.length;
						} else {
							cont++;
						}
					}
					if(columns[j].id == "priceValue") {
						column = columns[j];
						if(cont == 2) {
							j = columns.length;
						} else {
							cont++;
						}					
					}
				}
				
				/* HOTFIX
				 */
				var realvalue = parseFloat(column.innerHTML.replace(/,/, "."));
				tablearr[i-1][0] = realvalue;
				
				var watts = pcolumn.innerHTML.split(" ");
				var wattvalue = parseFloat(watts[0].replace(/,/, "."));
				tablearr[i-1][1] = wattvalue;
				
				var colorcell = ccolumn.innerHTML;
				tablearr[i-1][2] = colorcell;
			} else {
				var colorcell = tablearr[i-1][2];
				var wattvalue = tablearr[i-1][1];
				var realvalue = tablearr[i-1][0];
			}
			
			
			
			if(color == "color") {			
				if(((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax))) && min < realvalue && realvalue < max && colorcell > 25) {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
			} else if(color == "white") {
				if(((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax))) && min < realvalue && realvalue < max && colorcell <= 25) {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
			} else {
				if(((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax))) && min < realvalue && realvalue < max) {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
			}

			if(trs[i].style.display == "none") {
			} else {
				showncolumns++;
				if(classn == "odd") {
					trs[i].className = "list-product odd";
					classn = "even";
				} else {
					trs[i].className = "list-product even";
					classn = "odd";
				}
			}			
		}
		
		cacheflag = true;		
		
		var shown = document.getElementsByTagName("STRONG");
		if(showncolumns == 0) {
			for(var l = 0; l < shown.length; l++) {
				if(shown[l].id == "firstcolumncount") {
					shown[l].innerHTML = "0";
				}
			}
		} else {
			for(var l = 0; l < shown.length; l++) {
				if(shown[l].id == "firstcolumncount") {
					shown[l].innerHTML = "1";
				}
			}
		}
		
		for(var l = 0; l < shown.length; l++) {
			if(shown[l].id == "columncount") {
				shown[l].innerHTML = showncolumns;
			}
		}
		
	}
	
	/* Registriert die Aenderungen im Spotslider und wertet diese aus */
	var spot_change = function(min, max, pmin, pmax) {
		var table = document.getElementById("list-table");
		var trs = table.getElementsByTagName("tr");
		var classn = "odd";
		var showncolumns = 0;
		
		if(isNaN(pmax)) {
			pmax = 100;
		}
		if(isNaN(max)) {
			max = 5000;
		}
		
		if(tablearr == null) {
			tablearr = new Array(trs.length);
		}
		
		var newtable = '<table><colgroup><col width="33%"><col width="34%"><col width="33%"></colgroup><tbody>';
		var tableI = 0;
		
		for(var i = 1; i < trs.length; i++) {
		
			if((tableI % 3) == 0) {
				newtable += "<tr>";
			}
		
			var columns = trs[i].childNodes;
			var column, pcolumn;
			if(!cacheflag) {
				tablearr[i-1] = new Array(3);
				for(var j = 0; j < columns.length; j++) {
					if(columns[j].id == "powerValue") {
						pcolumn = columns[j];
					}
					if(columns[j].id == "nameValue") {
						ccolumn = "other";
						temp = columns[j].innerHTML.search(/MR16/i);
						if(temp != -1) {
							ccolumn = "mr16";
						}
						temp = columns[j].innerHTML.search(/GU10/i);
						if(temp != -1) {
							ccolumn = "gu10";
						}
						temp = columns[j].innerHTML.search(/E27/i);
						if(temp != -1) {
							ccolumn = "e27";
						}
					}
					if(columns[j].id == "price-td") {
						column = columns[j];			
					}
				}
				
				var cns = column.childNodes;
				for(var k = 0; k < cns.length; k++) {
					if(cns[k].id == "price") {
						var pricevalue = cns[k].title;
						k = cns.length;
					}
				}
				var realvalue = parseFloat(pricevalue.replace(/,/, "."));
				
				if(isNaN(realvalue)) {

					/* HOTFIX ab&nbsp;19,30
					 */
					var tmpval = pricevalue.replace(/[^0-9,.]/g, '');
					realvalue = parseFloat(tmpval.replace(/,/, "."));
				}
				tablearr[i-1][0] = realvalue;
				
				var watts = pcolumn.innerHTML.split(" ");
				var wattvalue = parseFloat(watts[0]);

				tablearr[i-1][1] = wattvalue;
				
				var bulbcell = ccolumn;
				tablearr[i-1][2] = bulbcell;
			} else {
				var bulbcell = tablearr[i-1][2];
				var wattvalue = tablearr[i-1][1];
				var realvalue = tablearr[i-1][0];
			}
			
			
			notdoneflag = true;
			if(in_array("mr16",bulbfittingarray)) {
				if(((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax))) && min < realvalue && realvalue < max && bulbcell == "mr16") {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
				if(bulbcell == "mr16") {
					notdoneflag = false;
				}
			}
			if(in_array("gu10",bulbfittingarray) && notdoneflag) {
				if(((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax))) && min < realvalue && realvalue < max && bulbcell == "gu10") {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
				if(bulbcell == "gu10") {
					notdoneflag = false;
				}
			} 
			if(in_array("e27",bulbfittingarray) && notdoneflag) {
				if(((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax))) && min < realvalue && realvalue < max && bulbcell == "e27") {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
				if(bulbcell == "e27") {
					notdoneflag = false;
				}
			} 
			if(in_array("other",bulbfittingarray) && notdoneflag) {
				if(bulbcell == "other" && min < realvalue && realvalue < max && ((pmin < wattvalue && wattvalue < pmax) || (isNaN(wattvalue) && ((pmax - pmin) == pmax)))) {
					trs[i].style.display = "";
				} else {
					trs[i].style.display = "none";
				}
			}
			if(bulbfittingarray.length < 1) {
				trs[i].style.display = "none";
			}

			if(trs[i].style.display == "none") {
			
				newtable += '<td id="'+ trs[i].title +'" class="glist-product iglist-product list-product" style="display: none;">';
				newtable += document.getElementById(trs[i].title).innerHTML;
				newtable += '</td>';
				
			} else {
				
				if ((tableI) % 3 == 0 && tableI > 2) {
					newtable += '<td colspan="3"><div class="glist-row-separator"><span></span></div></td></tr><tr>';
				}
			
				newtable += '<td id="'+ trs[i].title +'" class="glist-product iglist-product list-product">';
				newtable += document.getElementById(trs[i].title).innerHTML;
				newtable += '</td>';
			
				tableI++;
				if((tableI % 3) == 0) {
					newtable += '</tr>';
				}
				

			
				showncolumns++;
				if(classn == "odd") {
					trs[i].className = "list-product odd";
					classn = "even";
				} else {
					trs[i].className = "list-product even";
					classn = "odd";
				}
			}			
		}
		newtable += '</tbody></table>';
		
		cacheflag = true;
		
		document.getElementById("igListDiv").innerHTML = newtable;
		
		
		/* @warning Die Klassenvergleiche sind so nicht korrekt, da sie
		 *     davon ausgehen, dass das Element nur genau die eine
		 *     Klasse besitzt. Allerdings waren es davor id-Vergleiche
		 *     vor mehrfach auftretenden ids m(
		 *
		 *     Da dieser Code sowieso deprecated ist, genuegt dieser
		 *     HOTFIX
		 */
		var shown = document.getElementsByTagName("STRONG");
		if(showncolumns == 0) {
			for(var l = 0; l < shown.length; l++) {
				if(shown[l].className == "locator-from-article") {
					shown[l].innerHTML = "0";
				}
			}
		} else {
			for(var l = 0; l < shown.length; l++) {
				if(shown[l].className == "locator-from-article") {
					shown[l].innerHTML = "1";
				}
			}
		}
		
		for(var l = 0; l < shown.length; l++) {
			if(		(shown[l].className == "locator-to-article")
				||	(shown[l].className == "locator-article-count")) {

				shown[l].innerHTML = showncolumns;
			}
		}
		
	}

	Event.onDOMReady(function() {

		slider = YAHOO.widget.Slider.getHorizDualSlider(bg, min_thumb, max_thumb, range, tickSize, initValues);
		power_slider = YAHOO.widget.Slider.getHorizDualSlider(power_bg, power_min_thumb, power_max_thumb, power_range, power_tickSize, power_initValues);
						 
		//power_slider = YAHOO.widget.Slider.getHorizSlider(power_bg, power_thumb, power_topConstraint, power_bottomConstraint, power_tickSize);

		slider.minRange = minThumbDistance;
		power_slider.minRange = power_minThumbDistance;


		var updateUI = function () {
			
			try {
				var min = list_price_convert(slider.minVal),
				max = list_price_convert(slider.maxVal);
			} catch(e) {
				var min = spot_price_convert(slider.minVal),
				max = spot_price_convert(slider.maxVal);
			}	

			var valnode = Dom.get(valuearea);

			valnode.innerHTML = min + " - " + max + " Euro";
		};
		
		var updateUI_filter = function () {

			var list = document.getElementById('list_marker');
			if(list) {
				var min = list_price_convert(slider.minVal),
					max = list_price_convert(slider.maxVal);
			} else {
				var min = spot_price_convert(slider.minVal),
					max = spot_price_convert(slider.maxVal);
			}

			var pmin = power_convert(power_slider.minVal),
			pmax = power_convert(power_slider.maxVal);

			var valnode = Dom.get(valuearea);

			valnode.innerHTML = min + " - " + max + " Euro";
			
			if(list) {
				list_change(parseFloat(min.replace(/,/, ".")), parseFloat(max.replace(/,/, ".")), parseFloat(pmin.replace(/,/, ".")), parseFloat(pmax.replace(/,/, ".")));
			} else {
				spot_change(parseFloat(min.replace(/,/, ".")), parseFloat(max.replace(/,/, ".")), parseFloat(pmin.replace(/,/, ".")), parseFloat(pmax.replace(/,/, ".")));
			}
		};
		
		var power_updateUI = function () {

			var min = power_convert(power_slider.minVal),
			max = power_convert(power_slider.maxVal);

			var valnode = Dom.get(power_valuearea);

			valnode.innerHTML = min + " - " + max + " Watt";
			
		};
		
		var changeColor = function() {

			color = this.value;
		
			var min = list_price_convert(slider.minVal),
			max = list_price_convert(slider.maxVal);

			var pmin = power_convert(power_slider.minVal),
			pmax = power_convert(power_slider.maxVal);

			
			list_change(parseFloat(min.replace(/,/, ".")), parseFloat(max.replace(/,/, ".")), parseFloat(pmin.replace(/,/, ".")), parseFloat(pmax.replace(/,/, ".")));
		
		};
		
		var changeBulb = function() {

			bulbfitting = this.value;
			
			bulbfittingarray = new Array();
			var testbulb = document.getElementsByName("checkboxcolor[]");
			for(var i = 0; i < testbulb.length; i++) {
				if(testbulb[i].checked) {
					bulbfittingarray.push(testbulb[i].value);
				}
			}
			
		
			var min = spot_price_convert(slider.minVal),
				max = spot_price_convert(slider.maxVal);
				
			var pmin = power_convert(power_slider.minVal),
				pmax = power_convert(power_slider.maxVal);

			
			spot_change(parseFloat(min.replace(/,/, ".")), parseFloat(max.replace(/,/, ".")), parseFloat(pmin.replace(/,/, ".")), parseFloat(pmax.replace(/,/, ".")));
		
		};
		
		var power_updateUI_filter = function () {

			var list = document.getElementById('list_marker');
			if(list) {
				var min = list_price_convert(slider.minVal),
					max = list_price_convert(slider.maxVal);
			} else {
				var min = spot_price_convert(slider.minVal),
					max = spot_price_convert(slider.maxVal);
			}
		
			var pmin = power_convert(power_slider.minVal),
			pmax = power_convert(power_slider.maxVal);

			var valnode = Dom.get(power_valuearea);

			valnode.innerHTML = pmin + " - " + pmax + " Watt";
			
			if(list) {
				list_change(parseFloat(min.replace(/,/, ".")), parseFloat(max.replace(/,/, ".")), parseFloat(pmin.replace(/,/, ".")), parseFloat(pmax.replace(/,/, ".")));
			} else {
				spot_change(parseFloat(min.replace(/,/, ".")), parseFloat(max.replace(/,/, ".")), parseFloat(pmin.replace(/,/, ".")), parseFloat(pmax.replace(/,/, ".")));
			}
		};

		// Subscribe to the dual thumb slider's change and ready events to
		// report the state.
		slider.subscribe('ready', updateUI);
		slider.subscribe('change', updateUI_filter);
		
		power_slider.subscribe('ready', power_updateUI);
		power_slider.subscribe('change', power_updateUI_filter);
		
		YAHOO.util.Event.on('radio-white','click', changeColor);
		
		YAHOO.util.Event.on('radio-color','click', changeColor);
		
		YAHOO.util.Event.on('radio-multi','click', changeColor);
		
		
		
		YAHOO.util.Event.on('checkbox-mr16','click', changeBulb);
		
		YAHOO.util.Event.on('checkbox-gu10','click', changeBulb);
		
		YAHOO.util.Event.on('checkbox-e27','click', changeBulb);
		
		YAHOO.util.Event.on('checkbox-other','click', changeBulb);

	});
})();

var VALID_CAC_PAGE = "VALID-CAC-PAGE";
var VALID_LED_PAGE = "VALID-LED-PAGE";


