/*
 * Javascriptfunktionalität für die Kategorieseite
 *
 * @requires Prototype
 * @author Hans-Rolf Harting
 *
 * Versteckt den "Filter" - Button auf der Kategorieseite und schickt den
 * Filter ab, sobald jemand etwas auswählt
 */

handler = {};
preise = [];
preiseExtend = [];
lastSortMode = '';
items = [];
itemsOrig = [];
sortDoesNotRun = true;
lastSorted = '';

aktiveTaschenTypen = [];
aktiveFitting = [];
aktiveGroessen = [];
aktiveFarben = [];
farbenToLoad = [];

generatedElements = [];

showFader = false;

isIE = !!(window.attachEvent && !window.opera);
isIE6 =  isIE && navigator.appVersion.indexOf("msie 6")!=-1 && navigator.appVersion.indexOf("msie 5")==-1;

inTransitionFarbe = 0;

opEffect = '';

function klapplinkOnclick()
{
	var what = this.getAttribute('triggers');

	$('kategorieFilter'+what+'Container').toggle();

	if( $('kategorieFilter'+what+'Container').style.display == 'none' ) {
		var action = 'zu';
		if( $('clear' + what + 'Filter').style.display == 'none' ) {
			this.select('span')[0].innerHTML = waehlen;
		}
	} else {
		var action = 'auf';
		this.select('span')[0].innerHTML = '';
	}

	ct(what,action);

}

function ct(bereich,aktion)
{
	new Ajax.Request('/ct.php', {
		asynchronous: true,
		method: 'post',
		parameters: {a: aktion,b: bereich}
	});
}

function setLoadingHintWatcher()
{
	if(typeof(Prototype) != 'undefined') {
		new PeriodicalExecuter(function(pe) {

			if(!$('aLKHC')){
				pe.stop();
				$('ajaxLoaderKringel').remove();
			}
			else
			{
				var dim = $('BodyCenter').getDimensions();
				dim.height = (dim.height > 34 ? dim.height - 34 : 500);
				$('aLKHC').style.height= dim.height+'px';
			}
		}, 0.3);
	} else {
		if(!document.getElementById('aLKHC')) {
			$('ajaxLoaderKringel').remove();
		} else {
			window.setTimeout('setLoadingHintWatcher()',300);
		}
	}
}

function loadingHint()
{
	if(typeof(Prototype) != 'undefined') {
		var dim = $('BodyCenter').getDimensions();
	} else {
		dim = {
			width: 996,
			height: 500
		};
	}

	var ajaxHintergrundContainer = new Element('div');
	ajaxHintergrundContainer.setAttribute('id','aLKHC');
	ajaxHintergrundContainer.style.height = (dim.height > 34 ? dim.height - 34 : 500)+'px';
	ajaxHintergrundContainer.style.position = 'absolute';
	ajaxHintergrundContainer.style.left = '0px';
	ajaxHintergrundContainer.style.marginTop = '4px';
	ajaxHintergrundContainer.style.width = '100%';
	ajaxHintergrundContainer.style.zIndex = 10000;

	var ajaxHintergrund = new Element('div');
	ajaxHintergrund.setAttribute('id','ajaxLoaderKringelHintergrund');
	ajaxHintergrund.addClassName('ShopWidth');
	ajaxHintergrund.style.width= dim.width+'px';
	ajaxHintergrund.style.height= '100%';
	ajaxHintergrund.style.margin= '0px auto';
	ajaxHintergrund.style.padding= '0px';
	ajaxHintergrund.style.backgroundColor= '#fff';
	ajaxHintergrund.style.filter = 'alpha(opacity=80)';
	ajaxHintergrund.style.mozOpacity = '0.8;';


	var ajaxKringel = new Element('img');
	ajaxKringel.setAttribute('id','ajaxLoaderKringel');
	ajaxKringel.setAttribute('src','bilder/loader.gif');
	ajaxKringel.style.position= 'absolute';
	ajaxKringel.style.left= '45%';
	ajaxKringel.style.top= '40%';
	ajaxKringel.style.zIndex= 11000;

	$('HeadContainer').insert({after: ajaxHintergrundContainer});
	$('aLKHC').insert({top: ajaxHintergrund});
	$('HeadContainer').insert({after: ajaxKringel});
	setLoadingHintWatcher();
	if(typeof(Scriptaculous) != 'undefined') {
		opEffect = new Effect.Opacity('ajaxLoaderKringelHintergrund',{from: 0.8, to: 0.4, duration: 10});
	}

}

//loadingHint();

/**
 * Sorter für Zahlen
 */
function Numsort (a, b) {
  return a - b;
}

/**
 * Setzt die beiden Preis-Inputs
 */
function setPreisBoxValues(values)
{
	var minBox = $('kategorieFilterPreisMin');
	var maxBox = $('kategorieFilterPreisMax');
	minBox.value = values[0];
	maxBox.value = values[1];
}

/**
 * Macht alle Effekte des Preisfilters rückgängig
 */
function clearPreisFilter()
{
	handler.setValue(preise[0],0);
	handler.setValue(preise[preise.length-1],1);
	setPreisBoxValues([preise[0],preise[preise.length-1]]);
	$('clearPreisFilter').hide();
	if( $('kategorieFilterPreisContainer').style.display == 'none' ) {
		$('kategorieFilterPreis').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}
	ct('preis','clear');
	return false;
}

/**
 * Schaltet den Saletrenner ein und aus, wenn er vorhanden ist
 */
function toggleSaleTrenner(mode) {

	if($('KategorieSaleTrennerTD')) {
		if(mode == 1) {
			$('KategorieSaleTrennerTD').setStyle({display: 'block'});
		} else {
			$('KategorieSaleTrennerTD').setStyle({display: 'none'});
		}
	}
}

/**
 * Sortiert die Produkte nach
 * PA: PreisAufsteigend
 * PD: Preis Absteigend
 */
function sortProdukte(mode) {

	if(mode != lastSortMode && sortDoesNotRun) {

		sortDoesNotRun = false;

		if(items.length == 0) {
			$('produkteContainer').select('div.produkte').each(function(p){
				itemsOrig.push(p.getAttribute('id'));
				index = Math.floor(parseFloat(p.getAttribute('preis')));
				if(items[index] == undefined) {
					items[index] = [];
				}
				items[index].push(p);
			});
		}

		if(mode == 'PA') {
			preiseExtend.reverse().each(function(e){
				if(items[e] != undefined) {
					(items[e]).each(function(p){
						$('produkteContainer').insert({top: p});
					});
				}
			});
			preiseExtend.reverse();
			$('kategorieFilterSortierungPreisASC').addClassName('active');
			$('kategorieFilterSortierungPreisDESC').removeClassName('active');
		} else if(mode=='PD') {
			preiseExtend.each(function(e){
				if(items[e] != undefined) {
					(items[e]).each(function(p){
						$('produkteContainer').insert({top: p});
					});
				}
			});
			$('kategorieFilterSortierungPreisASC').removeClassName('active');
			$('kategorieFilterSortierungPreisDESC').addClassName('active');
		}

		sortDoesNotRun = true;

		lastSortMode = mode;
		toggleSaleTrenner(0);

		$('clearSortierungFilter').show();

	}
	else
	{
		clearSortierung();
	}
	ct('sort','set');
	return false;
}

/**
 * Macht alle Effekte der Sortierung rückgängig
 */
function clearSortierung() {
	loadingHint();
	lastSorted = '';
	hadNoSaleBefore = true;
	itemsOrig.each(function(id){
		if( hadNoSaleBefore && $(id).hasClassName('sale')) {
			$('produkteContainer').insert({bottom: $('KategorieSaleTrennerTD')});
			hadNoSaleBefore = false;
		}
		$('produkteContainer').insert({bottom: $(id)});
	});
	$('clearSortierungFilter').hide();
	lastSortMode = '';
	toggleSaleTrenner(1);

	$('kategorieFilterSortierungContainer').select('a').each(function(e){
		e.removeClassName('active');
	});
	$('aLKHC').remove();
	if( $('kategorieFilterSortierungContainer').style.display == 'none' ) {
		$('kategorieFilterSortierung').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}
	ct('sort','clear');
	return false;
}

/**
 * Macht alle Effekte des Groessenfilters rückgängig
 */
function clearGroesseFilter()
{
	loadingHint();
	$$('.produkte').each(function(p){
		if(!p.hasClassName('filterPreis') && !p.hasClassName('filterFitting') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterFarbe')) {
			p.removeClassName('filterGroesse');
			if (!showFader) {
				p.appear({queue: { position: 'end', scope: p.id }});
			} else {
				p.show();
			}
		}
	});

	$('kategorieFilterGroesseContainer').select('ul.kategorieFilterListe a').each(function(e){
		e.removeClassName('active');
	});
	$('clearGroesseFilter').hide();

	if(lastSortMode == '') {
		toggleSaleTrenner(1);
	}

	aktiveGroessen = [];
	$('aLKHC').remove();
	if( $('kategorieFilterGroesseContainer').style.display == 'none' ) {
		$('kategorieFilterGroesse').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}
	ct('groesse','clear');
	return false;
}

/**
 * Macht alle Effekte des Fittingfilters rückgängig
 */
function clearFittingFilter()
{
	loadingHint();
	$$('.produkte').each(function(p){
		if(!p.hasClassName('filterPreis') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterGroesse') && !p.hasClassName('filterFarbe')) {
			p.removeClassName('filterFitting');
			if (!showFader) {
				p.appear({queue: { position: 'end', scope: p.id }});
			} else {
				p.show();
			}
		}
	});

	$('kategorieFilterFittingContainer').select('ul.kategorieFilterListe a').each(function(e){
		e.removeClassName('active');
	});
	$('clearFittingFilter').hide();

	if(lastSortMode == '') {
		toggleSaleTrenner(1);
	}

	aktiveFitting = [];
	$('aLKHC').remove();
	if( $('kategorieFilterFittingContainer').style.display == 'none' ) {
		$('kategorieFilterFitting').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}

	ct('fitting','clear');
	return false;
}

/**
 * Macht alle Effekte des FittingTopfilters rückgängig
 */
function clearFittingTopFilter()
{
	loadingHint();
	$$('.produkte').each(function(p){
		if(!p.hasClassName('filterPreis') && !p.hasClassName('filterGroesse') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterFarbe')) {
			p.removeClassName('filterFitting');
			if (!showFader) {
				p.appear({queue: { position: 'end', scope: p.id }});
			} else {
				p.show();
			}
		}
	});

	$('kategorieFilterFittingTopContainer').select('ul.kategorieFilterListe a').each(function(e){
		e.removeClassName('active');
	});
	//$('clearFittingTopFilter').hide();

	if(lastSortMode == '') {
		toggleSaleTrenner(1);
	}

	aktiveFitting = [];
	$('aLKHC').remove();
	if( $('kategorieFilterFittingTopContainer').style.display == 'none' ) {
		$('kategorieFilterFittingTop').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}
	ct('fittingTop','clear');
	return false;
}

/**
 * Macht alle Effekte des TaschenTypTopfilters rückgängig
 */
function clearTaschenTypTopFilter()
{
	loadingHint();
	$$('.produkte').each(function(p){
		if(!p.hasClassName('filterPreis') && !p.hasClassName('filterGroesse') && !p.hasClassName('filterFitting') && !p.hasClassName('filterFarbe')) {
			p.removeClassName('filterTaschenTyp');
			if (!showFader) {
				p.appear({queue: { position: 'end', scope: p.id }});
			} else {
				p.show();
			}
		}
	});

	$('kategorieFilterTaschenTypTopContainer').select('ul.kategorieFilterListe a').each(function(e){
		e.removeClassName('active');
	});
	//$('clearTaschenTypTopFilter').hide();

	if(lastSortMode == '') {
		toggleSaleTrenner(1);
	}

	aktiveFitting = [];
	$('aLKHC').remove();
	if( $('kategorieFilterTaschenTypTopContainer').style.display == 'none' ) {
		$('kategorieFilterTaschenTypTop').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}
	ct('taschenTypTop','clear');
	return false;
}

/**
 * Macht alle Effekte des Farbfilters rückgängig
 */
function clearFarbeFilter()
{
	loadingHint();
	generatedElements.each(function(p){
		if($(p.id)) {
			p.remove();
		}
	});

	$$('.produkte').each(function(p){
		if(!p.hasClassName('filterPreis') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterFitting') && !p.hasClassName('filterGroesse')) {
			p.removeClassName('filterFarbe');
			if (!showFader) {
				p.appear({queue: { position: 'end', scope: p.id }});
			} else {
				p.show();
			}

		}

	});

	$('kategorieFilterFarbeContainer').select('ul.kategorieFilterListe a').each(function(e){
		e.removeClassName('active');
	});
	$('clearFarbeFilter').hide();

	if(lastSortMode == '') {
		toggleSaleTrenner(1);
	}

	aktiveFarben = [];
	$('aLKHC').remove();
	if( $('kategorieFilterFarbeContainer').style.display == 'none' ) {
		$('kategorieFilterFarbe').select('div.klappLinkLinks span')[0].innerHTML = waehlen;
	}
	ct('farbe','clear');
	return false;
}

/**
 * Bereitet die Menülinks vor
 */
function prepareJsLink(a) {

	var params = a.getAttribute('href').toQueryParams();

	if($('clearPreisFilter').getStyle('display') == 'none') {

		if(params.preisMin != undefined) {
			params.preisMin = '';
		}
		if(params.preisMax != undefined) {
			params.preisMax = '';
		}
	} else {
		params.preisMin = $F('kategorieFilterPreisMin');
		params.preisMax = $F('kategorieFilterPreisMax');
	}

	if($('clearTaschenTypFilter').getStyle('display') == 'none') {
		if(params.taschenTyp != undefined) {
			params.taschenTyp = '';
		}
	} else {
		params.taschenTyp = aktivetaschenTypen.join(";").replace(/\//g,"$");
	}

	if($('clearFittingFilter').getStyle('display') == 'none') {
		if(params.fitting != undefined) {
			params.fitting = '';
		}
	} else {
		params.fitting = aktiveFitting.join(";").replace(/\//g,"$");
	}

	if($('clearGroesseFilter').getStyle('display') == 'none') {
		if(params.groesse != undefined) {
			params.groesse = '';
		}
	} else {
		params.groesse = aktiveGroessen.join(";").replace(/\//g,"$");
	}

	if($('clearSortierungFilter').getStyle('display') == 'none') {
		if(params.order != undefined) {
			params.order = '';
		}
	} else {
		params.order = lastSortMode;
	}

	checkToggledMenus = [ 'Preis', 'Farbe', 'Groesse', 'Fitting', 'TaschenTyp', 'Sortierung' ];

	checkToggledMenus.each(function(m){
		if($('kategorieFilter'+m+'Container').getStyle('display') != 'none') {
			checkToggledMenus = checkToggledMenus.without(m);
		}
	});

	if(checkToggledMenus != undefined){
		params.switchOff = checkToggledMenus.join(";");
	}
	else
	{
		params.switchOff = '';
	}

	if(params.go != undefined) {
		var newHref = '/?go=' + params.go;
	} else {
		var newHref = '/?view=' + params.view;
	}

	rewrite = [ 'switchOff','preisMin','preisMax','fitting','taschenTyp','groesse','order' ];

	for(var i in params) {
		if(i.startsWith('js_')) {

			params[i] = '';
			i = i.substr(3);

		} else if(i != 'go' && i != 's' && params[i] != '') {

			if(rewrite.indexOf(i) != -1) {
				newHref = newHref + '&js_' + i + '=' + params[i];
			} else {
				newHref = newHref + '&' + i + '=' + params[i];
			}

		}
	}

	newHref = newHref + '&s=' + params.s;

	window.location.href = newHref;

	return false;

}

/**
 * Bereitet alle Funktionen für die Filter vor
 */
function prepareKategorieFilter()
{
	/**
	 * Preis-Slider
	 */
	var slider = $('kategorieFilterPreisSlider');

	var produkte = $A($$('.produkte'));

	for(var i=0;i<produkte.length;i++)
	{
		preise.push(produkte[i].getAttribute('preis'));
	}

	preise.sort(Numsort);
	preiseExtend = preise.map(parseFloat).map(Math.floor).uniq();
	preise = $A(preiseExtend);

	setPreisBoxValues([preise[0],preise[preise.length-1]]);

//	$('kategorieFilterContainer').select('div.klappLinkLinks').concat($('kategorieFilterTopContainer').select('div.klappLinkLinks')).each(function(p){

	$('kategorieFilterContainer').select('div.klappLinkLinks').each(function(p){
		Event.observe(p,'click',klapplinkOnclick.bind(p));
	});


	handler = new Control.Slider(slider.select('.kategorieFilterPreisHandle'), slider, {
		range: $R(preise[0],preise[preise.length-1]),
		values: preise,
		sliderValue: [preise[0], preise[preise.length-1]],
		onSlide: function(values) {
			setPreisBoxValues(values);
		},
		onChange: function(values) {
			if( values[1] < values[0] )
			{
				var tmp = values[0];
				values[0] = values[1];
				values[1] = tmp;
				handler.setValue(values[0],0);
				handler.setValue(values[1],1);
				setPreisBoxValues(values);
			}

			hasSale = false;
			loadingHint();
			produkte.each(function(e){

				if(!e.hasClassName('filterGroesse') && !e.hasClassName('filterFitting') && !e.hasClassName('filterTaschenTyp') && !e.hasClassName('filterFarbe')) {

					var preis = Math.floor(parseFloat(e.getAttribute('preis')));
					if( preis >= values[0] && preis <= values[1] )
					{
						if (!showFader) {
							e.appear({queue: { position: 'end', scope: e.id }});
						} else {
							e.show();
						}
						e.removeClassName('filterPreis');
						if( !hasSale && e.hasClassName('sale')) {
							hasSale = true;
						}
					}
					else
					{
						if (!showFader) {
							e.fade({queue: { position: 'end', scope: e.id }});
						} else {
							e.hide();
						}
						e.addClassName('filterPreis');
					}

				}
			});
			$('aLKHC').remove();
			if(!hasSale || lastSortMode != '') {
				toggleSaleTrenner(0);
			} else {
				toggleSaleTrenner(1);
			}

			if( values[1] != preise[preise.length-1] || values[0] != preise[0])
			{
				$('clearPreisFilter').show();
			}
			else
			{
				$('clearPreisFilter').hide();
			}
			$('kategorieFilterPreisSlider').hide();
			$('kategorieFilterPreisSlider').show();
			ct('preis','set');
		}
	});
	$('kategorieFilterPreisContainer').hide();

	$('kategorieFilterPreisMin').onkeyup = function(){
		this.value = this.value.replace(/[^0-9]/g,"");
		handler.setValue(this.value,0);
		ct('preis','set');
	}

	$('kategorieFilterPreisMax').onkeyup = function(){
		this.value = this.value.replace(/[^0-9]/g,"");
		handler.setValue(this.value,1);
		ct('preis','set');

	}

	/**
	 * Groessenfilter
	 */
	$('kategorieFilterGroesseContainer').select('a').each(function(e){
		Event.observe(e,'click', function(event){
			loadingHint();
			if(e.hasClassName('active')) {
				e.removeClassName('active');
			} else {
				e.addClassName('active');
			}

			aktiveGroessen = [];

			$('kategorieFilterGroesseContainer').select('a.active').each(function(l){
				aktiveGroessen.push(l.getAttribute('groesse'));
			});

			hasSale = false;
			produkte.each(function(p){

				if(!p.hasClassName('filterPreis') && !p.hasClassName('filterFitting') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterFarbe')) {

					if(aktiveGroessen.length == 0) {
							if (!showFader) {
								p.appear({queue: { position: 'end', scope: p.id }});
							} else {
								p.show();
							}
							p.removeClassName('filterGroesse');
							if( !hasSale && p.hasClassName('sale')) {
								hasSale = true;
							}
					} else {

						setShow = false;

						aktiveGroessen.each(function(g){
							if(p.getAttribute('groessen').split(',').indexOf(g) != -1) {
								setShow = true;
							}
						});
						if( setShow )
						{
							if (!showFader) {
								p.appear({queue: { position: 'end', scope: p.id }});
							} else {
								p.show();
							}
							p.removeClassName('filterGroesse');
							if( !hasSale && p.hasClassName('sale')) {
								hasSale = true;
							}
						}
						else
						{
							if (!showFader) {
								p.fade({queue: { position: 'end', scope: p.id }});
							} else {
								p.hide();
							}
							p.addClassName('filterGroesse');
						}
					}
				}
			});

			if(!hasSale || lastSortMode != '') {
				toggleSaleTrenner(0);
			} else {
				toggleSaleTrenner(1);
			}

			if(aktiveGroessen.length > 0) {
				$('clearGroesseFilter').show();
			} else {
				$('clearGroesseFilter').hide();
			}
			$('aLKHC').remove();
			ct('groesse','set');

			event.stop();

		}.bind(e));
	});

	if( $('kategorieFilterTaschenTypTopContainer') != null && $('kategorieFilterTaschenTypTopContainer').getAttribute('clear_pretaschenTyp') != 'true' )
	{

		/**
		 * Taschenfilter
		 */
	//	$('kategorieFilterFittingContainer').select('a').concat($('kategorieFilterFittingTopContainer').select('a')).each(function(e){
		$('kategorieFilterTaschenTypTopContainer').select('a').each(function(e){
			Event.observe(e,'click', function(event ) {
				loadingHint();

				$('kategorieFilterTaschenTypTopContainer').select('a.active').each(function(l){
					l.removeClassName('active');
				});

				aktivetaschenTypen = [];
				aktivetaschenTypen.push(e.getAttribute('taschentyp'));

				e.addClassName('active');

				hasSale = false;
				produkte.each(function(p){

					if(!p.hasClassName('filterPreis') && !p.hasClassName('filterGroesse') && !p.hasClassName('filterFitting') && !p.hasClassName('filterFarbe')) {

						if(aktivetaschenTypen.length == 0) {
								if (!showFader) {
									p.appear({queue: { position: 'end', scope: p.id }});
								} else {
									p.show();
								}
								p.removeClassName('filterTaschenTyp');
								if( !hasSale && p.hasClassName('sale')) {
									hasSale = true;
								}
						} else {

							setShow = false;

							aktivetaschenTypen.each(function(g){
								if(p.getAttribute('taschentyp').split(',').indexOf(g) != -1) {
									setShow = true;
								}
							});
							if( setShow )
							{
								if (!showFader) {
									p.appear({queue: { position: 'end', scope: p.id }});
								} else {
									p.show();
								}
								p.removeClassName('filtertaschenTyp');
								if( !hasSale && p.hasClassName('sale')) {
									hasSale = true;
								}
							}
							else
							{
								if (!showFader) {
									p.fade({queue: { position: 'end', scope: p.id }});
								} else {
									p.hide();
								}
								p.addClassName('filtertaschenTyp');
							}
						}
					}
				});

				if(!hasSale || lastSortMode != '') {
					toggleSaleTrenner(0);
				} else {
					toggleSaleTrenner(1);
				}

				if(aktivetaschenTypen.length > 0) {
					//$('clearFittingFilter').show();
					$('clearTaschenTypTopFilter').show();
				} else {
					//$('clearFittingFilter').hide();
					//$('clearTaschenTypTopFilter').hide();
				}
				$('aLKHC').remove();
				ct('taschenTyp','set');

				event.stop();

			}.bind(e));
		});

		$('kategorieFilterTaschenTypBannerMap').select('area').each(function(e){
			Event.observe(e,'click', function(event) {
				Event.simulate($('kategorieFilterTaschenTypTopContainer').select('a[taschentyp="'+e.getAttribute('taschentyp')+'"]')[0], ('click'));
				event.stop();
			}.bind(e));
		});
	}


	if( $('kategorieFilterFittingTopContainer') != null && $('kategorieFilterFittingTopContainer').getAttribute('clear_prefitting') != 'true' )
	{
		/**
		 * Fittingfilter
		 */
	//	$('kategorieFilterFittingContainer').select('a').concat($('kategorieFilterFittingTopContainer').select('a')).each(function(e){
		$('kategorieFilterFittingTopContainer').select('a').each(function(e){
			Event.observe(e,'click', function(event) {
				loadingHint();

				$('kategorieFilterFittingTopContainer').select('a.active').each(function(l){
					l.removeClassName('active');
				});

				aktiveFitting = [];
				aktiveFitting.push(e.getAttribute('fitting'));

				e.addClassName('active');

				hasSale = false;
				produkte.each(function(p){

					if(!p.hasClassName('filterPreis') && !p.hasClassName('filterGroesse') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterFarbe')) {

						if(aktiveFitting.length == 0) {
								if (!showFader) {
									p.appear({queue: { position: 'end', scope: p.id }});
								} else {
									p.show();
								}
								p.removeClassName('filterFitting');
								if( !hasSale && p.hasClassName('sale')) {
									hasSale = true;
								}
						} else {

							setShow = false;

							aktiveFitting.each(function(g){
								if(p.getAttribute('fitting').split(',').indexOf(g) != -1) {
									setShow = true;
								}
							});
							if( setShow )
							{
								if (!showFader) {
									p.appear({queue: { position: 'end', scope: p.id }});
								} else {
									p.show();
								}
								p.removeClassName('filterFitting');
								if( !hasSale && p.hasClassName('sale')) {
									hasSale = true;
								}
							}
							else
							{
								if (!showFader) {
									p.fade({queue: { position: 'end', scope: p.id }});
								} else {
									p.hide();
								}
								p.addClassName('filterFitting');
							}
						}
					}
				});

				if(!hasSale || lastSortMode != '') {
					toggleSaleTrenner(0);
				} else {
					toggleSaleTrenner(1);
				}

				if(aktiveFitting.length > 0) {
					//$('clearFittingFilter').show();
					$('clearFittingTopFilter').show();
				} else {
					//$('clearFittingFilter').hide();
					$('clearFittingTopFilter').show();
				}
				$('aLKHC').remove();
				ct('fitting','set');

				event.stop();

			}.bind(e));
		});
	}


	/**
	 * Farbfilter
	 */
	$('kategorieFilterFarbeContainer').select('a').each(function(e) {
		Event.observe(e,'click', function(event) {
			loadingHint();
			if(inTransitionFarbe == 0) {
				inTransitionFarbe = 1;
			}

			if(e.hasClassName('active')) {
				e.removeClassName('active');
			} else {
				e.addClassName('active');
			}

			aktiveFarben = [];

			$('kategorieFilterFarbeContainer').select('a.active').each(function(l){
				aktiveFarben.push(l.getAttribute('farbnummer'));
			});

			hasSale = false;
			farbenToLoad = new Hash();
			produkte.each(function(p){

				if(!p.hasClassName('filterPreis') && !p.hasClassName('filterFitting') && !p.hasClassName('filterTaschenTyp') && !p.hasClassName('filterGroesse')) {

					if(aktiveFarben.length == 0) {
							if (!showFader) {
								p.appear({queue: { position: 'end', scope: p.id }});
							} else {
								p.show();
							}
							p.removeClassName('filterFarbe');
							if( !hasSale && p.hasClassName('sale')) {
								hasSale = true;
							}
							inTransitionFarbe = 0;
					} else {

						setShow = false;

						aktiveFarben.each(function(g) {
							if(p.getAttribute('farben').split(',').indexOf(g) != -1) {
								setShow = true;
								if(p.getAttribute('farbnummer') != g)
								{
									if( !p.getAttribute('farbWechsel') ) {// && !p.getAttribute('farbWechselSperre') ) {
										p.setAttribute('farbWechsel',1,1);
									}
									if(farbenToLoad.get('farbe_'+g) == undefined) {
										farbenToLoad.set('farbe_'+g,p.getAttribute('artikelid'));
									} else {
										farbenToLoad.set('farbe_'+g, farbenToLoad.get('farbe_'+g)+','+p.getAttribute('artikelid'));
									}
								}
								else
								{
									inTransitionFarbe = 0;
								}
								/*
								else
								{
									p.setAttribute('farbWechselSperre',1,1);
									if(p.getAttribute('farbWechsel') != undefined) {
										p.removeAttribute('farbWechsel');
									}
								}
								*/
							}
						});
						if( setShow )
						{
							if (!showFader) {
								p.appear({queue: { position: 'end', scope: p.id }});
							} else {
								p.show();
							}
							p.removeClassName('filterFarbe');
							if( !hasSale && p.hasClassName('sale')) {
								hasSale = true;
							}
						}
						else
						{
							if (!showFader) {
								p.fade({queue: { position: 'end', scope: p.id }});
							} else {
								p.hide();
							}
							p.addClassName('filterFarbe');
						}
					}
				}
			});
			ct('farbe','set');
			if(farbenToLoad.keys().length > 0) {

				inTransitionFarbe = 2;
				farbenToLoad.set('s', sessionId);
				farbenToLoad.set('view', 'kategorie_bild_loader');
				farbenToLoad.set('grosseAnsicht', $('produkteContainer').getAttribute('grosseAnsicht'));
				if($('produkteContainer').getAttribute('rueckBilder') != 'undefined') {
					farbenToLoad.set('rueckBilder', 1);
				}

				new Ajax.Request('/index.php', {
					asynchronous: false,
					method: 'post',
					parameters: farbenToLoad.toObject(),
					evalJS: false,
					evalJSON: true,
					onException: function() {
						return true;
					},
					onFailure: function() {
						return true;
					},
					onComplete: function(transport) {
						if(transport.responseJSON != '')
						{
							transport.responseJSON.each(function(j) {
								$$('div#produkteContainer div.produkte[artikelid='+j.artikelid+']').each(function(conti) {
									//conti.removeAttribute('farbWechselSperre');
									if(conti.getAttribute('farbWechsel') == "1")
									{
										newE = conti;
										newE.select("a.bildlink")[0].href = newE.select("a.bildlink")[0].href.replace('farbnummer='+newE.getAttribute('farbnummer'),'farbnummer='+j.farbnummer);
										newE.select('.grossesBild')[0].alt = newE.select('.grossesBild')[0].alt.replace(/ in .*/,' in '+$$('div#kategorieFilterFarbeContainer a[farbnummer='+j.farbnummer+'] span.farbBeschreibung')[0].innerHTML);
										newE.select('.grossesBild')[0].title = newE.select('.grossesBild')[0].title.replace(/ in .*/,' in '+$$('div#kategorieFilterFarbeContainer a[farbnummer='+j.farbnummer+'] span.farbBeschreibung')[0].innerHTML);
										newE.setAttribute('farbnummer', j.farbnummer),1;
										newE.removeAttribute('farbWechsel');
										newE.addClassName('filterFarbe');

									}
									/*
									else
									{
										var copyIt = true;
										$$('div#produkteContainer div.produkte[artikelid='+j.artikelid+']').each(function(conti) {
											if(conti.getAttribute('farbnummer') == j.farbnummer) {
												copyIt = false;
												return;
											}
										});

										if(copyIt) {
											var newE = new Element('div');
											newE.setAttribute('id', conti.getAttribute('id') + j.farbnummer,1);
											newE.setAttribute('class', 'produkte',1);
											if(conti.hasClassName('sale'))
											{
												newE.addClassName('sale');
											}
											newE.setAttribute('artikelid',j.artikelid,1);
											newE.setAttribute('preis', conti.getAttribute('preis'),1);
											newE.setAttribute('groessen', conti.getAttribute('groessen'),1);
											newE.setAttribute('farben', conti.getAttribute('farben'),1);
											newE.setAttribute('farbnummer', j.farbnummer,1);
											newE.addClassName('filterFarbe');
											//newE.innerHTML = conti.innerHTML;
											generatedElements.push(newE);
											Element.insert(conti,{after: newE});
										}
										else
										{
											return;
										}
									}
									*/
									var img = newE.select('.grossesBild')[0];
									var zusaetze = j.zusatz.split(',');
									var uuids = j.uuid.split(',');

									for(var zahl=0; zahl < $A(zusaetze).length; zahl++)
									{
										if(zusaetze[zahl] == 'n') {
											img.setAttribute('zusatzn',uuids[zahl],1);
											img.onmouseover = function() {
												this.src = 'bilder/produktbilderIM/n/'+this.getAttribute('zusatzn')+'.jpg';
											}
										} else {
											img.setAttribute('zusatz',uuids[zahl],1);
											img.src = 'bilder/produktbilderIM/'+zusaetze[zahl]+'/'+uuids[zahl]+'.jpg';
											if( farbenToLoad.get('rueckBilder') != 'undefined' ) {
												img.onmouseout = function() {
													this.src = 'bilder/produktbilderIM/'+$('produkteContainer').getAttribute('grosseAnsicht')+'/'+this.getAttribute('zusatz')+'.jpg';
												}
											}
										}
									};
								});
							});
						inTransitionFarbe = 0;
						}
					}
				});

			}
			else if( inTransitionFarbe == 1)
			{
				if($('aLKHC')) {
					$('aLKHC').remove();
				}
				return prepareJsLink(e);
			}

			if(!hasSale || lastSortMode != '') {
				toggleSaleTrenner(0);
			} else {
				toggleSaleTrenner(1);
			}

			if(aktiveFarben.length > 0) {
				$('clearFarbeFilter').show();
			} else {
				$('clearFarbeFilter').hide();
			}
			if($('aLKHC')) {
				$('aLKHC').remove();
			}

			event.stop();

		}.bind(e));
	});

	/**
	 * Menülinks
	 */
	/*
	$('SeitenmenueListe').select('li a').each(prepareJsLink);
	$('HeadMenue').select('a').each(prepareJsLink);
	*/

	/**
	 * Vorbereiten der Aufrufparameter der Seite
	 */

	urlParams = window.location.href.toQueryParams();

	if(urlParams.js_preisMin != undefined) {
		$('kategorieFilterPreisMin').value = urlParams.js_preisMin;
		$('kategorieFilterPreisMin').onkeyup();
	}

	if(urlParams.js_preisMax != undefined) {
		$('kategorieFilterPreisMax').value = urlParams.js_preisMax;
		$('kategorieFilterPreisMax').onkeyup();
	}

/*
	if(urlParams.js_fitting != undefined) {
		urlParams.js_fitting.replace(/\$/g,"/").split(";").each(function(g){
			$('kategorieFilterFittingContainer').select('a[fitting='+g+']').each(function(l){
				l.onclick();
			});
		});
	}

	if(urlParams.js_taschenTyp != undefined) {
		urlParams.js_taschenTyp.replace(/\$/g,"/").split(";").each(function(g){
			$('kategorieFilterTaschenTypTopContainer').select('a[fitting='+g+']').each(function(l){
				l.onclick();
			});
		});
	}

	if(urlParams.js_fitting != undefined) {
		urlParams.js_fitting.replace(/\$/g,"/").split(";").each(function(g){
			$('kategorieFilterFittingTopContainer').select('a[fitting='+g+']').each(function(l){
				l.onclick();
			});
		});
	}

	if(urlParams.js_groesse != undefined) {
		urlParams.js_groesse.replace(/\$/g,"/").split(";").each(function(g){
			$('kategorieFilterGroesseContainer').select('a[groesse='+g+']').each(function(l){
				l.onclick();
			});
		});
	}

	if(urlParams.js_farbe != undefined) {
		urlParams.js_farbe.replace(/\$/g,"/").split(";").each(function(g){
			$('kategorieFilterFarbeContainer').select('a[farbnummer='+g+']').each(function(l){
				l.onclick();
			});
		});
	}

	if(urlParams.js_order != undefined) {
		if(urlParams.js_order == 'PA') {
			$('kategorieFilterSortierungPreisASC').onclick();
		} else if(urlParams.js_order == 'PD') {
			$('kategorieFilterSortierungPreisDESC').onclick();
		}
	}

	if(urlParams.js_switchOff != undefined) {

		$('kategorieFilterPreisContainer').show();
		$('kategorieFilterFarbeContainer').show();
		$('kategorieFilterGroesseContainer').show();
//		$('kategorieFilterFittingContainer').show();
		if( $('kategorieFilterFittingTopContainer') != null )
		{
			$('kategorieFilterFittingTopContainer').show();
		}
		if( $('kategorieFilterTaschenTypTopContainer') != null )
		{
			$('kategorieFilterTaschenTypTopContainer').show();
		}
		$('kategorieFilterSortierungContainer').show();

		urlParams.js_switchOff.split(";").each(function(m){
			if($('kategorieFilter'+m+'Container') != undefined) {
				$('kategorieFilter'+m+'Container').setStyle({display:'none'});
			}
		});
	}
*/

	if($('aLKHC')) {
		$('aLKHC').remove();
	}

}


/*
 * Eventlistener window.onload für die Funktionalität
 */
Event.observe(window, 'load', function() {
	prepareKategorieFilter();

	/**
	* Event.simulate(@element, eventName[, options]) -> Element
	*
	* - @element: element to fire event on
	* - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported)
	* - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc.
	*
	* $('foo').simulate('click'); // => fires "click" event on an element with id=foo
	*
	**/
	(function(){

	  var eventMatchers = {
		'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
		'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/
	  }
	  var defaultOptions = {
		pointerX: 0,
		pointerY: 0,
		button: 0,
		ctrlKey: false,
		altKey: false,
		shiftKey: false,
		metaKey: false,
		bubbles: true,
		cancelable: true
	  }

	  Event.simulate = function(element, eventName) {
		var options = Object.extend(defaultOptions, arguments[2] || { });
		var oEvent, eventType = null;

		element = $(element);

		for (var name in eventMatchers) {
		  if (eventMatchers[name].test(eventName)) { eventType = name; break; }
		}

		if (!eventType)
		  throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');

		if (document.createEvent) {
		  oEvent = document.createEvent(eventType);
		  if (eventType == 'HTMLEvents') {
			oEvent.initEvent(eventName, options.bubbles, options.cancelable);
		  }
		  else {
			oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView,
			  options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
			  options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
		  }
		  element.dispatchEvent(oEvent);
		}
		else {
		  options.clientX = options.pointerX;
		  options.clientY = options.pointerY;
		  oEvent = Object.extend(document.createEventObject(), options);
		  element.fireEvent('on' + eventName, oEvent);
		}
		return element;
	  }

	  Element.addMethods({ simulate: Event.simulate });
	})()

});
