/**
 * JavaScript-Funktionen für die Filialnetzkarte
 * @author ag
 */
function hb_filialnetzkarte()
{
	var app = this;
	app.functions = new ly_functions();
	app.timer = null;

	app.setEventHandlers = function()
	{
		var elem;
		var nodes;
		var id;
		var layer;
		var aNodes;

		// Event-Handler auf die Radio Buttons legen
		elem = document.getElementById('fk_selection');
		if (elem)
		{
			nodes = app.functions.filterChildNodesRecursive(elem, 'INPUT');
			for (var i = 0; i < nodes.length; i++)
			{
				app.functions.addEvent(nodes[i], 'click', function()
																		{
																			app.toggleAllLayers(false);
																			app.toggleLayer(this);
																		} );

				// Zugehörigen Layer ausblenden, wenn nicht ausgewählt
				id = nodes[i].getAttribute('id');
				id = id.replace(/radio/, 'fk');
				layer = document.getElementById(id);
				if (layer)
				{
					if (nodes[i].checked == true)
						layer.className = app.functions.removeClass(layer.className, 'hidden');
					else
						layer.className = app.functions.addClass(layer.className, 'hidden');

					// Enthaltene Links mit EventHandlern versehen
					aNodes = app.functions.filterChildNodesRecursive(layer, 'A');
					for (var k = 0; k < aNodes.length; k++)
					{
						app.functions.addEvent(aNodes[k], 'mouseover', function()
																						{
																							var childNode = this.firstChild;
																							if (app.timer) window.clearTimeout(app.timer);

																							if (childNode)
																							{
																								var dummy = childNode.className.split('_');
																								if (dummy.length > 1) app.timer = window.setTimeout( function() { app.showDetails(parseInt(dummy[1])); }, 200);
																							}
																						} );

						app.functions.addEvent(aNodes[k], 'mouseout', function()
																						{
																							var childNode = this.firstChild;
																							if (app.timer) window.clearTimeout(app.timer);

																							if (childNode)
																							{
																								var dummy = childNode.className.split('_');
																								if (dummy.length > 1) app.closeDetails(parseInt(dummy[1]));
																							}
																						} );
					}
				}

			}
		}
	}

	app.toggleAllLayers = function(hidden)
	{
		var elem;
		var nodes;
		
		if (!hidden) hidden = false;

		elem = document.getElementById('fk_frame');
		if (elem)
		{
			nodes = app.functions.filterChildNodesRecursive(elem, 'DIV', 'fk_layer');
			for (var i = 0; i < nodes.length; i++)
			{
				if (!hidden)
				{
					if (!app.functions.hasClass('hidden', nodes[i].className)) nodes[i].className = app.functions.addClass(nodes[i].className, 'hidden');
				}
				else
				{
					if (app.functions.hasClass('hidden', nodes[i].className)) nodes[i].className = app.functions.removeClass(nodes[i].className, 'hidden');
				}
			}
		}
	}

	app.toggleLayer = function(inputElem, hidden)
	{
		if (!hidden) hidden = false;

		if (inputElem)
		{
			var id = inputElem.getAttribute('id');
			id = id.replace(/radio/, 'fk');
			
			var layer = document.getElementById(id);
			if (layer)
			{
				if (!hidden)
					layer.className = app.functions.removeClass(layer.className, 'hidden');
				else
					layer.className = app.functions.addClass(layer.className, 'hidden');
			}
		}
	}

	app.showDetails = function(fid)
	{
		var elem = document.getElementById('fk_details_' + String(parseInt(fid)));
		if (elem)
		{
			elem.className = app.functions.removeClass(elem.className, 'hidden');
			app.fadeElem(elem, 0, 80, 20, 50, function() { alert('!'); } );
		}
	}

	app.closeDetails = function(fid)
	{
		var elem = document.getElementById('fk_details_' + String(parseInt(fid)));
		if (elem)
		{
			elem.className = app.functions.addClass(elem.className, 'hidden');
		}
	}

	app.fadeElem = function(elem, start, stop, step, delay, callback)
	{
		if (!elem) return(false);

		start = (typeof start == 'undefined' || start < 0)? start = 0 : parseInt(start);
		stop = (typeof stop == 'undefined' || stop < 0)? stop = 100 : parseInt(stop);
		step = (typeof step == 'undefined')? step = 10 : step = parseInt(step);
		delay = (typeof delay == 'undefined' || delay < 0)? delay = 50 : parseInt(delay);

		if (start > 100) start = 100;
		if (stop > 100) stop = 100;
		if (delay < 1) delay = 50;
		if (step == 0) step = 100;
		if (start < stop && step < 0) step = -step;
		else if (stop < start && step > 0) step = -step;
		

		// Blendwert ändern
		if ((step > 0 && start <= stop)
			|| (step < 0 && start >= stop))
		{
			start += step;
			if (step > 0 && start > stop) start = stop;
			if (step < 0 && start < stop) start = stop;
		}

		// Styles anwenden
		elem.style['opacity'] = String(start /100);
		elem.style['-moz-opacity'] = String(start /100);
		elem.style['filter'] = 'Alpha(opacity=' + String(start) + ',finishopacity=' + String(start) + ',style=1)';

		if (start != stop)
			window.setTimeout(function() { app.fadeElem(elem, start, stop, step, delay); } , delay);
		else if (callback)
			callback();
	}
}

var fk;
fk = new hb_filialnetzkarte();
fk.functions.addEvent(window, 'load', function() { fk.setEventHandlers(); } );