var layerPopup = null;
var layerShown = false;

var tableRowDisplayDefault = '';
var tableEvenInitial = true;

function getCookieValue(name) {
	out = '';
	
	if (document.cookie) {
		/*
		var searchPattern = name+'=([^;]*);';
		var s = document.cookie;
		var res = s.match(RegExp(searchPattern));
		alert(res);
		if (res && (res.length > 0)) {
			out = res[1];
		}
		*/
		
		var searchPattern = name+'=';
		var s = document.cookie;
		
		var posStart = s.indexOf(searchPattern) + searchPattern.length;
		if (posStart < 0) return out; // skip if not found
		
		var posEnd = s.indexOf(';', posStart+1);
		
		if (posEnd < 0) {
			out = s.substring(posStart);
		} else {
			out = s.substring(posStart, posEnd);
		}
	}
	
	return out;
}

function setCookieValue(name, value) {
	var cookieTimeout = 12 * 60 * 60 * 1000; // in milliseconds
	
	var now = new Date();
	var cookieContent = name+'='+value+'; expires='+(new Date(now.getTime() + cookieTimeout)).toGMTString()+';';
	document.cookie = cookieContent;
	
	//alert(cookieContent);
}

function popupLayerReady() {
	if (layerShown) return;
	layerShown = true;
	
	setCookieValue('layerShown', (layerShown ? '1' : '0'));
	
	layerPopup.css("top","250px");
	//layerPopup.css("left","235px");
	layerPopup.css("left",String(-layerPopup.width()-2)+"px");
	layerPopup.css("filter","");
	layerPopup.animate({"opacity":"0"}, 0.01);
	layerPopup.animate({"opacity":"1", "left": "235"}, 750);
}

function popupLayerClose() {
	layerPopup.animate({"opacity":"0"}, 750, 'swing', function(){ $(this).remove(); });
}

function popupLayerInit() {
	// initialize variables
	var layerClass = '';
	var layerHTML = jQuery('div#layer').html();
	
	// allow to override cookie
	var layerOverride = (window.location.hash == '#showPopup');
	
	// has the popup already been shown?
	layerShown = (getCookieValue('layerShown') == '1') && (!layerOverride);
	//alert('cookie: '+getCookieValue('layerShown'));
	//alert('override: '+layerOverride);
	if (layerShown) {
		// no need to continue
		return;
	}
	
	// remove old HTML or we will get doubled IDs
	jQuery('div#layer').remove();
	
	// don't show if popup is missing
	if (layerHTML == '') {
		return;
	}
	
	// wrap popup
	jQuery("body").prepend("<div id='layerPopup' style='top:-1000px;left:-1000px;filter:Alpha(opacity=0); opacity:0;' class='"+layerClass+"'><a href='#' onclick='this.blur();popupLayerClose();return false;' id='layerClose'>Fenster schlie&szlig;en</a><div id='layerHTML'>"+layerHTML+"</div></div>");
	layerPopup = jQuery("#layerPopup");

	var triggering = jQuery("img#layerMainImg", layerPopup);
	if (triggering.length == 0) {
		// could not find main image; take any other
		triggering = jQuery("img", layerPopup);
	}
	if (triggering.length == 0) {
		// still nothing that could trigger
		// we have to delay the animation or it may not be smooth since the browser may still be busy loading/rendering something else
		layerPopup.oneTime('2s',function(){
			popupLayerReady();
		});
	} else {
		// trigger on load
		triggering.each(function(){this.onload = popupLayerReady;}); // image still loads
	}
}

function tableFilterInit() {
	jQuery('.fcetablefilter').each(function(){
		var jThis = jQuery(this);
		
		// inject form
		jThis.html('<form action="#"><fieldset><div class="abfallart"><span>Abfallart</span><select><option>Alle Arten</option></select></div><div class="buchstabe"><span>Buchstabe</span><select><option>Alle</option></select></div><div class="button"><button>Auswahl ansehen</button></div></fieldset></form>');
		
		// get elements from form
		var jAbfallart = jQuery('div.abfallart select', jThis);
		var jBuchstabe = jQuery('div.buchstabe select', jThis);
		var jButton = jQuery('div.button button', jThis);
		
		// get table
		var jTable = jThis.parent().parent().find('table');
		
		// get browser's default CSS display value for table rows
		tableRowDisplayDefault = jTable.find('tr').css('display');
		
		// is table's default setting for first row zebra table even?
		tableEvenInitial = jTable.find('tr:eq(1)').hasClass('even');
		
		// catch clicks to button
		jButton.click(function(){
			// get selection
			var filterAbfallart = jAbfallart.val();
			var filterBuchstabe = jBuchstabe.val();
			
			// clear old placeholder rows
			jTable.find('tr.removeOnFilter').remove();
			
			// filter all table rows
			var jRows = jTable.find('tr');
			var even = tableEvenInitial;
			var numDisplayed = 0;
			for (var i=1; i<jRows.length; i++) { // exclude table head
				var jRow = jQuery(jRows[i]);
				
				// get row data
				var jColumns = jRow.find('td');
				var abfall = jQuery(jColumns[0]).text();
				var abfallart = jQuery(jColumns[1]).text();
				var abfallUpper = abfall.toUpperCase();
				
				// apply filter criteria
				var shouldDisplay = true;
				shouldDisplay &= ((abfallUpper[0] == filterBuchstabe) || (filterBuchstabe == 'Alle'));
				shouldDisplay &= ((abfallart == filterAbfallart) || (filterAbfallart == 'Alle Arten'));
				
				// set CSS display property and
				// continue only if the row is to be displayed
				if (shouldDisplay) {
					jRow.css('display', tableRowDisplayDefault);
					numDisplayed++;
				} else {
					jRow.css('display', 'none');
					continue;
				}
				
				// remove old even/odd class
				jRow.removeClass('even');
				jRow.removeClass('odd');
				
				// set row's even/odd class
				if (even) {
					jRow.addClass('even');
				} else {
					jRow.addClass('odd');
				}
				
				// toggle even bit
				even = !even;
			}
			
			// add notice if result is empty
			if (numDisplayed == 0) {
				jTable.append('<tr class="removeOnFilter"><td colspan="3">Kein Eintrag vorhanden.</td></tr>');
			}
			
			return false;
		});
		
		// fill selects with all available options from table
		// - get all values first
		var dictAbfallarten = {};
		var dictBuchstaben = {};
		jTable.find('tr').each(function(){
			var jRow = jQuery(this);
			var jColumns = jRow.find('td');
			
			var abfall = jQuery(jColumns[0]).text();
			var abfallart = jQuery(jColumns[1]).text();
			
			// skip empty rows
			if (abfall == '') return;
			
			// copy data as keys
			dictAbfallarten[abfallart] = '';
			var abfallUpper = abfall.toUpperCase();
			dictBuchstaben[abfallUpper[0]] = '';
		});
		
		// - get flat arrays of all keys
		var abfallarten = new Array();
		var buchstaben = new Array();
		for (var abfallart in dictAbfallarten) {
			abfallarten.push(abfallart);
		}
		for (var buchstabe in dictBuchstaben) {
			buchstaben.push(buchstabe);
		}
		
		// - sort arrays
		abfallarten.sort();
		buchstaben.sort();
		
		// - copy data from arrays to select as option elements
		for (var i=0; i<abfallarten.length; i++) {
			jAbfallart.append('<option>'+abfallarten[i]+'</option>');
		}
		for (var i=0; i<buchstaben.length; i++) {
			jBuchstabe.append('<option>'+buchstaben[i]+'</option>');
		}
	});
}

function searchSubmitLinkInit() {
	jQuery('#toolmenu a.searchsubmit').click(function(){
		jQuery('#toolmenu .searchform input[type=submit]').click();
	});
}

function initPNGFix() {
    jQuery(document).pngFix();
} 

function initHoverWorkaround() {
	jQuery('#mainmenu a').hover(
		function(){
			jQuery(this).addClass('hover');
		},
		
		function(){
			jQuery(this).removeClass('hover');
		}
	);
}

function initMain() {
	popupLayerInit();
	tableFilterInit();
	searchSubmitLinkInit();
	//initPNGFix();
	initHoverWorkaround();
}

jQuery(document).ready(initMain);
