document.wafe_initialized = false;
var wafe = {
	// Initialisierung (JS-Handler setzen)
	init: function() {
		if (document.wafe_initialized !== false) { return; }
		document.wafe_initialized = true;
		// Filter-Items (für Reset)
		var filteroutput = $('filteroutput_content');
		if (filteroutput) {
			filteroutput.observe('click', wafe.filter_handleClick); 
		}
		var filterbox = $('filterbox_filter');
		// Kategoriebox: alle Links (Toggle UND Filter)
		if (filteroutput && filterbox) { 
			filterbox.observe('click', wafe.filter_handleClick);
			filterbox.observe('mouseover', wafe.filter_mouseover);
		}
		// "Reset All"
		var resetall = $('filteroutput_resetall');
		if (resetall) {
			resetall.observe('click', wafe.filter_resetAll);
		}
		// Anfangsbuchstaben-Filter
		var listing_startcharfilter = $('listing_startcharfilter');
		if (listing_startcharfilter) { 
			listing_startcharfilter.observe('click', wafe.filter_handleClick);
		}
		// Paging-Links
		var listing_paging_top = $('listing_paging_top');
		var listing_paging_bottom = $('listing_paging_bottom');
		if (listing_paging_top && listing_paging_bottom) { 
			listing_paging_top.observe('click', wafe.hrefToAjax);
			listing_paging_bottom.observe('click', wafe.hrefToAjax);
		}
		// Kategoriebox-Rollover-Anzeige mit der Maus mitbewegen
		var rollover = $('filterbox_rollover');
		if (rollover) {
			document.observe('mousemove', wafe.filter_mousemove);
		}
		// Autocomplete-Dropdown initialisieren
		if (document.autocompleteURL) {
			new Ajax.Autocompleter('filter_searchtext', 'filter_search_autocomplete', document.autocompleteURL, { paramName: 'tx_wafe[filter][text]', updateElement: wafe.filter_search_autocomplete, minChars: 2, frequency: 0.5 });
		}
		// Klick in Ergebnislisten: Merkliste-Anbindung
		var listing = $('listing_items');
		if (listing) {
			listing.observe('click', wafe.watchlist_handleClick);
		}
		// Merkliste auf Detail-Seiten
		var watchlistLinks = $$('a.watchlist_add');
		if (watchlistLinks) {
			watchlistLinks.invoke('observe', 'click',  wafe.watchlist_handleClick);
		}
	},
	// Allg. Click-Handling
	filter_handleClick: function(e) {
		e.stop();
		object = e.element();
		if (!object.href) { return; }
		// Parameter aus A-Tag auslesen
		params = wafe.filter_getFilterparams(object);
		// Kategoriebox: Toggle-Link
		if (object.hasClassName('filterbox_toggle') || (params.action != 'reset' && object.up().hasClassName('hassub'))) {
			wafe.filter_toggleBranch(object);
		}
		if (params.action == 'filter') {
			wafe.filter_add(params);
		} else if (params.action == 'reset') {
			wafe.filter_reset(params);
		}
	},
	filter_getFilterparams: function(object) {
		params = {
			href: object.href,
			action: null,
			key: null,
			value: null,
			display: object.innerHTML
		};
		if (object.href.indexOf('tx_wafe') == -1) { return params; }
		params.action = (object.href.indexOf('%5Bfilter%5D') != -1 ? 'filter' : (object.href.indexOf('%5Breset%5D') != -1 ? 'reset' : null));
		if (!params.action) { return params; }
		var tmpKeyStartPos = object.href.indexOf('%5B' + params.action + '%5D') + params.action.length + 9;
		var tmpKeyEndPos = object.href.indexOf('%5D', tmpKeyStartPos);
		params.key = object.href.substring(tmpKeyStartPos, tmpKeyEndPos);
		var tmpValueStartPos = object.href.indexOf('=', tmpKeyEndPos) + 1;
		var tmpValueEndPos = (object.href.indexOf('&', tmpValueStartPos) != -1 ? object.href.indexOf('&', tmpValueStartPos) : object.href.length);
		params.value = object.href.substring(tmpValueStartPos, tmpValueEndPos);
		return params;
	},
	// Kategoriebaum ein-/ausklappen
	filter_toggleBranch: function(object) {
		var ancestors = object.ancestors();
		var clickedNode = ancestors[0];
		// Zuerst alle offenen Knoten schließen, die nicht im aktuellen Zweig liegen
		var openedItems = $('filterbox_content').select('li.opened');
		for (var i = 0; i < openedItems.length; i++) {
			if (clickedNode == openedItems[i] || ancestors.indexOf(openedItems[i]) != -1) { continue; }
			openedItems[i].removeClassName('opened');
		}
		// Und dann auch den aktuellen Knoten öffnen/schließen
		if (clickedNode.hasClassName('opened')) {
			clickedNode.removeClassName('opened');
		} else {
			clickedNode.addClassName('opened');
		}	
	},
	// Rollover-Handling Kategoriebaum
	filter_mousemove: function(e) {
		$('filterbox_rollover').style.left = (Event.pointerX(e) + 10) + "px";
		$('filterbox_rollover').style.top = (Event.pointerY(e) - 18) + "px";
	},
	filter_mouseover: function(e) {
		e.stop();
		object = e.element();
		if (!object.href) { return; }
		params = wafe.filter_getFilterparams(object);
		// Wenn's den Filter nicht gibt, dann nix tun
		if (params.key && !document.filterConf[params.key]) { return; }
		var textDiv = $('filterbox_rollover').down();	
		// Text abhängig vom Status (ersetzen oder hinzufügen) setzen
		if (!params.key || !params.value) { 
			textDiv.update('Ein-/Ausklappen');
		} else if ($("filter_" + params.key + "_" + params.value)) { 
			textDiv.update('Filter bereits gesetzt');
		} else if ($("filter_" + params.key) && document.filterConf[params.key].unique !== false) {
			textDiv.update('<span>Filter ersetzen</span>');
		} else {
			textDiv.update('<span>Filter hinzuf&uuml;gen</span>');
		}
		$('filterbox_rollover').style.display = 'block';
		object.onmouseout = function() {
			$('filterbox_rollover').style.display = 'none';
		};
	},
	// Filter hinzufuegen
	filter_add: function(params) {
		// Falls der Filter in JS nicht konfiguriert ist, nichts machen
		if (!params.key || !document.filterConf[params.key]) { return; }
		// Falls Filter bereits gesetzt ist: nur gelb einfärben
		if ($("filter_" + params.key + "_" + params.value)) {
			if (navigator.appVersion.indexOf('MSIE 6') == -1) { new Effect.Highlight($("filter_" + params.key)); }
			return;
		}
		this.filter_add_display(params.key, params.value, params.display);
		this.filter_showHideMessages();
		this.makeAjaxCall(params.href);
	},
	filter_add_display: function(key, value, display) {
		// Falls der Filter in JS nicht konfiguriert ist, nichts machen
		if (!key || !document.filterConf[key]) { return; }
		// Falls der Filter NICHT mehrere Werte enthalten kann, dann einfach zuerst löschen
		filter_dl = $("filter_" + key);
		if (filter_dl && document.filterConf[key].unique !== false) {
			$("filter_" + key).remove();
			filter_dl = null;
		}
		var resetURL = document.filterURL.replace(/MODE/, "reset").replace(/KEY/, key).replace(/VALUE/, value);
		tmpFilter = '<dd id="filter_' + key + '_' + value + '"><span>' + display + '<a href="' + resetURL + '">x</a></span></dd>';
		if (!filter_dl) {
			// Herausfinden, an welcher Position der Filter eingefügt werden soll
			var tmpPrevSibling = null;
			for (prop in document.filterConf) {
				if (prop == key) { break; }
				var tmpFilter_dl = $("filter_" + prop);
				if (tmpFilter_dl) { tmpPrevSibling = tmpFilter_dl; }
			}
			// Filter gibt's überhaupt noch nicht -> DL anlegen
			tmpPrevSibling = (tmpPrevSibling ? tmpPrevSibling : $('filteroutput_nofilter'));
			tmpPrevSibling.insert({ after: '<dl id="filter_' + key + '" class="notdeleted">' + tmpFilter + '<dt>' + document.filterConf[key]["bezeichnung"] + '</dt>' });
			filter_dl = $("filter_" + key);
		} else {
			// nun DD hinzufügen
			filter_dl.down('dt').insert({ before: tmpFilter });
			if (navigator.appVersion.indexOf('MSIE 6') == -1) { new Effect.Highlight(filter_dl); }
		}
		
		// Andere Filter implizit setzen ...
		if (document.filterConf[key].set != null && !$("filter_" + document.filterConf[key].set[0] + "_" + document.filterConf[key].set[1])) {
			this.filter_add_display(document.filterConf[key].set[0], document.filterConf[key].set[1], document.filterConf[key].set[2]);
		}
		// ... bzw. entfernen			
		for (prop in document.filterConf) {
			if (!$("filter_" + prop)) { continue; }
			if (key == prop || document.filterConf[prop].set == null) { continue; }
			if (document.filterConf[key].set != null) {
				if (document.filterConf[prop].set[0] == document.filterConf[key].set[0] && document.filterConf[prop].set[1] == document.filterConf[key].set[1]) { continue; }
			} else {
				if (document.filterConf[prop].set[0] != key || document.filterConf[prop].set[1] == value) { continue; }
			}
			this.filter_reset_display(prop, null);
		}
	},	
	// Filter entfernen
	filter_reset: function(params) {
		if (!params.key) { return; }
		this.filter_reset_display(params.key, params.value);
		this.filter_showHideMessages();			   
		this.makeAjaxCall(params.href);
	},
	filter_reset_display: function(key, value) {
		object = $("filter_" + key);
		if (!key || !object) { return; }
		var tmpSubValues = $$("#filter_" + key + " dd");
		if (value && document.filterConf[key].unique === false && tmpSubValues.length > 1) {
			// nur den gewählten Eintrag entfernen
			if (navigator.appVersion.indexOf('MSIE 6') == -1) { new Effect.Highlight(object); }
			$("filter_" + key + "_" + value).remove();
		} else {
			// Gesamten Filtereintrag ausblenden
			object.removeClassName('notdeleted');
			this.fadeAndRemove(object);
			//object.id = 'deleted_' + object.id;
		}
		// andere Filter implizit entfernen
		for (prop in document.filterConf) {
			if (document.filterConf[prop].set == null || document.filterConf[prop].set[0] != key || document.filterConf[prop].set[1] != value) { continue; }
			if (!$("filter_" + prop)) { continue; }
			this.filter_reset_display(prop, null);
		}
	},
	filter_resetAll: function(e) {
		e.stop();
		object = e.element();
		if (!object.href) { return; }
		$$('#filteroutput_content dl').invoke('remove');
		wafe.filter_showHideMessages();
		wafe.makeAjaxCall(object.href);
	},
	// Helper Filterlogik
	filter_showHideMessages: function() {
		// Ggf. Hinweis zum Hinzufügen von Filtern und Reset-Link ein-/ausblenden
		var tmpFilterItems = $$('#filteroutput_content dl.notdeleted');
		$('filteroutput_nofilter').style.display = (tmpFilterItems.length > 0 ? 'none' : 'block');
		$('filteroutput_resetall').style.display = (tmpFilterItems.length > 0 ? 'inline' : 'none');			   
	},
	// Handling Ergebnis Autocomplete-Feld
	filter_search_autocomplete: function(li) {
		if (li.id) {
			document.location.href = li.id;		
		}
	},
	// AJAX-Calls und Response
	hrefToAjax: function(e) {
		e.stop();
		object = e.element();
		if (!object.href) { return; }
		if (object.href) { wafe.makeAjaxCall(object.href); }
	},
	makeAjaxCall: function(href) {
		if (!href) { return; }
		var posparams = href.indexOf("?");
		url = (posparams != -1 ? href.substr(0, posparams) : href);
		params = (posparams != -1 ? "&" + href.substr(posparams + 1) : "");
		var options = {
			method:		'post',
			parameters:	params + "&ajax=1",
			onSuccess:	function(xhr) { wafe.processAjaxResponse(xhr); },
			onFailure:	function(xhr) { wafe.showAjaxFailure(xhr); }
		};
		new Ajax.Request(url, options);
	},
	processAjaxResponse: function(xhr, json) {
		if (!json && xhr) {	json = eval('('+xhr.responseText+')'); }
		// Fallunterscheidung: welches Modul hat die Daten geschickt?
		if (json.type == 'listing') { 
			//$('dummy_sqlstatement').update(json.tmpWhere ? json.tmpWhere : '');
			if ($('listing_count')) {
				$('listing_count').down('span').update(json.resultcount ? json.resultcount + (json.resultcount != 1 ? ' Ergebnisse' : ' Ergebnis') : '');
			}
			if ($('listing_paging_top')) {
				$('listing_paging_top').update(json.paging ? json.paging : '');
			}
			if ($('listing_paging_bottom')) {
				$('listing_paging_bottom').update(json.paging ? json.paging : '');		
			}
			if ($('listing_items')) {
				$('listing_items').update(json.listing ? json.listing : '');
			}
		}
		if (json.scriptCall && json.scriptCall.length) { $A(json.scriptCall).each(function(value) { eval(value); }); }
	},
	showAjaxFailure: function(method, xhr) {
		alert('Error: '+xhr.status+"\n"+xhr.statusText);
	},
  	fadeAndRemove: function(element) {
		element.fade({ afterFinish: function() { element.remove(); } });
  	},
	displayFeedback: function(message) {
		var element = $('feedback');
		if (!element) { return; }
		element.update('<div class="infobox">' + message + '</div>');
		element.show();
		Effect.Fade.delay(3, element);
	},
	// Toggle Contentbox
	toggleBox: function(object) {
		var isClosed= false;
		if (object && object.blur) { object.blur(); }
		object = $(object).up('div.data_container');
		if (object.hasClassName('closed')) {
			// Ist aktuell geschlossen -> Klasse wegnehmen
			object.removeClassName('closed');
			isClosed = false;
		} else {
			// Ist aktuell ausgeklappt -> Klasse zum Ausblenden hinzufügen
			var ie6dummy = 'dasmussfuerdenie6hierstehen';
			object.addClassName('closed');
			isClosed = true;
		}
		var feedit = $(object).up('div.feedit');
			if (feedit) {
			var navuls = feedit.select('ul.ulnav');
			if (navuls && navuls.length > 0) {
				if (isClosed) {
					navuls.invoke('hide');
				} else {
					navuls.invoke('show');
				}
			}
		}
		return false;
	},
	toggleAll: function(show) {
		window.focus();
		var boxes = $$('div#content div.data_container');
		var navuls = $$('ul.ulnav');
		if (!boxes || boxes.length == 0) { return; }
		if (show) {
			boxes.invoke('removeClassName', 'closed');
			navuls.invoke('show');
		} else {		
			boxes.invoke('addClassName', 'closed');
			navuls.invoke('hide');
		}
		var headerul = $$('div.feedit_headerdiv ul.ulnav');
		if (headerul && headerul.length > 0) {
			headerul.invoke('show');
		}
	},
	// Ad-Handling
	ads_reload: function() {
		var element = window.frames['adloader'];
		if (!element || !element.document) { return; }
		element.document.location.reload(true);
	},
	ads_copy: function(adFrame) {
		if (!adFrame || !adFrame.document) { return; }
		wafe.ads_copy_single(adFrame.document, 'Top');
		wafe.ads_copy_single(adFrame.document, 'Left1');
		wafe.ads_copy_single(adFrame.document, 'Middle1');
		wafe.ads_copy_single(adFrame.document, 'Right1');
	},
	ads_copy_single: function(adDoc, position) {
		var element = $('ad_' + position);
		if (!element || (element.up('div') && element.up('div').getStyle('display') == 'none')) { return; }
		// Ggf. vorhandenen Inhalt zuerst löschen
		element.update('');
		var source = adDoc.getElementById('ad_' + position);
		if (!source) { return; }
		// Nun den Content auslesen
		var content = source.innerHTML;
		if (!content) { return; }
		// ... und checken, ob von Adverserve auch etwas geliefert wurde
		if (content.indexOf('noad_' + position) != -1) { return; }
		// ... und den Content übertragen
		element.innerHTML = '<div class="ad">' + content + '</div>';
		// Der rechte Banner ist position:absolute, daher dem Container die richtige Höhe geben, damit der Footer aufspannt
		if (position == 'Right1') {
			var tmpHeight = source.offsetHeight + 10;
			if (navigator.appVersion.indexOf('MSIE 6') == -1) {
				var container = $('container');	
				if (container && tmpHeight > parseInt(container.getStyle('minHeight'))) {
					container.setStyle({ minHeight: tmpHeight + 'px' });
				}
			} else {
				// Für den IE6 die Höhe setzen
				var container = $('content');	
				container.setStyle({ height: tmpHeight + 'px' });
				container.setStyle({ overflow: 'visible' });
			}
		}
	},
	// Merkliste - InPlaceEditor
	watchlist_rename: function(showForm) {
		var title = $('watchlist_title');
		var watchlist_links = $('watchlist_links');
		var form = $('watchlist_title_form');
		if (title && form && watchlist_links) {
			title.style.display = (showForm ? 'none' : 'block');
			watchlist_links.style.display = (showForm ? 'none' : 'block');
			form.style.display = (!showForm ? 'none' : 'block');
		}
	},
	watchlist_handleClick: function(e) {
		object = e.element().up('a.watchlist_add');
		if (!object || !object.href || object.onclick) { return; }
		e.stop();
		wafe.watchlist_loadDropdown(object);
	},
	watchlist_loadDropdown: function(object) {
		if (!object || !object.href) { return; }
		if (wafe.watchlist_linkClicked == object) {
			// Dropdown ist schon eingeblendet -> einfach wieder ausblenden
			wafe.watchlist_hideDropdown();
			return;
		}
		wafe.watchlist_hideDropdown();
		var url = object.href.replace(/add/, "getIconsAjax");
		// Bei "checked" die selektierten Einträge auslesen und in die URL schreiben
		if (object.href.indexOf('=checked') != -1) {
			wafe.watchlist_uidsSelected = $$('div#listing_items input:checked').pluck('value');
			if (!wafe.watchlist_uidsSelected || wafe.watchlist_uidsSelected.length == 0) { alert('Bitte w\u00e4hlen Sie min. einen Eintrag aus.'); return; }
			url = url.replace(/checked/, wafe.watchlist_uidsSelected.join(','));
		} else {
			var tmpParent = object.up('div.watchlist');
			if (tmpParent && tmpParent.id) { wafe.watchlist_uidsSelected = [tmpParent.id.replace(/watchlist_item_/, "")]; }
		}
		wafe.watchlist_linkClicked = object;
		wafe.watchlist_linkClicked.addClassName('active');
		wafe.watchlist_linkClicked.insert({ after: '<div id="watchlist_dropdown"><div id="preloader" /></div>' });
		if (object.href.endsWith('#')) {
			wafe.watchlist_showDropdown('<div class="data_logininfo"><h2>Nur f&uuml;r registrierte User</h2><p>Registrieren Sie sich jetzt kostenlos, um Merklisten nutzen zu k&ouml;nnen und freien Zugang zu allen Basisdaten zu erhalten.</p><a href="mein-werbealmanach/registrieren.html" class="data_loginbutton">Hier geht es zur kostenlosen Registrierung &gt;</a><div class="data_loginlink">oder <a href="mein-werbealmanach.html?redirect_url=' + escape(document.location.href) + '">Einloggen</a></div></div>');
			return;
		}		
		return wafe.makeAjaxCall(url);
	},
	watchlist_showDropdown: function(ulCode) {
		if (!wafe.watchlist_linkClicked || !ulCode) { return; }
		var dropDiv = $('watchlist_dropdown');
		if (!dropDiv) { return; }
		dropDiv.update(ulCode);
		document.observe('click', wafe.watchlist_hideDropdown);
	},
	watchlist_hideDropdown: function(e) {
		if (e && e.element().up('#watchlist_dropdown')) { return; }
		document.stopObserving('click', wafe.watchlist_hideDropdown);
		if ($('watchlist_dropdown')) { 
			$('watchlist_dropdown').remove();
			wafe.watchlist_linkClicked.removeClassName('active');
			wafe.watchlist_linkClicked = null;
			wafe.watchlist_uidsSelected = null;
		}
	},
	watchlist_addItem: function(object) {
		object = $(object);
		if (!object) { return; }
		if (object.tagName == 'INPUT') {
			form = object.up('form');
			if (!form) { return; }
			var tmpLink = form.action + '&' + form.serialize();
			wafe.makeAjaxCall(tmpLink);			
		} else {
			if (!object.href) { return; }
			wafe.makeAjaxCall(object.href);
		}
		if (wafe.watchlist_uidsSelected && wafe.watchlist_uidsSelected.length) {
			for (var i = 0; i < wafe.watchlist_uidsSelected.length; i++) {
				wafe.watchlist_addItem_highlight($('watchlist_item_' + wafe.watchlist_uidsSelected[i]));
			}
		}
		wafe.watchlist_hideDropdown();
	},
	watchlist_addItem_highlight: function(containerDiv) {
		if (!containerDiv) { return; }
		containerA = containerDiv.down('a.watchlist_add');
		if (containerA && !containerA.hasClassName('added')) {
			containerA.addClassName('added');
		}
		input = containerDiv.down('input:checked');
		if (input) { 
			input.checked = false;
		}		
		itemDiv = object.up('div.list_item');
		if (itemDiv) {
			if (navigator.appVersion.indexOf('MSIE 6') == -1) { new Effect.Highlight(itemDiv); }
		}
	},
	watchlist_linkClicked: null,
	watchlist_uidsSelected: null,
	dummy: false
};

// Nach Fertigladen der Seite JS-Code in Links einbauen
document.observe('dom:loaded', wafe.init);