//.==========================================================================
//. $RCSfile: functions_lymisc.js,v $
//.--------------------------------------------------------------------------
//. $Date: 2008/04/18 11:20:13 $ / $Revision: 1.3 $
//.==========================================================================

/**
 * Allgemeine JavaScript-Funktionen
 * @author ag
 * @version 0.8
 */
function ly_functions()
{
	var app = this;

	/* Quelle für addEvent und removeEvent: http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html */
	app.addEvent = function(obj, type, fn)
	{
		if (obj.addEventListener)
		{
			obj.addEventListener(type, fn, false);
		}
		else if (obj.attachEvent)
		{
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	}

	app.removeEvent = function(obj, type, fn)
	{
		if (obj.removeEventListener)
		{
			obj.removeEventListener(type, fn, false);
		}
		else if (obj.detachEvent)
		{
			obj.detachEvent("on"+type, obj[type+fn]);
			obj[type+fn] = null;
			obj["e"+type+fn] = null;
		}
	}

	app.removeClass = function(old, remove)
	{
		var classes;
		var i;
		var f = null;

		if (!old) old = '';
		classes = old.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i] == remove) f = i;
		}
		if (f != null) classes.splice(f, 1);
		return(classes.join(' '));
	}

	app.replaceClass = function(old, toreplace, newclass)
	{
		old = app.removeClass(old, toreplace);
		old = app.addClass(old, newclass);
		return(old);
	}

	app.__replaceClass = function(old, toreplace)
	{
		var classes;
		var i;
		var f = null;

		if (!old) old = '';
		classes = old.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i] == toreplace) f = i;
		}
		if (f != null) classes[f] = toreplace;
		return(classes.join(' '));
	}

	app.addClass = function(old, toadd)
	{
		var classes;
		var i;
		var f = null;

		if (!old) old = '';
		classes = old.split(' ');
		for (i = 0; i < classes.length; i++)
		{
			if (classes[i] == toadd) f = i;
		}
		if (f == null) classes.push(toadd);
		return(classes.join(' '));
	}

	app.hasClass = function(classname, classes)
	{
		var class_strings;
		var i;

		if (!classes) classes = '';
		class_strings = classes.split(' ');
		for (i = 0; i < class_strings.length; i++)
		{
			if (class_strings[i] == classname) return(true);
		}
		return(false);
	}

	app.replaceImage = function(elem_id, img_src)
	{
		if (document.getElementById)
		{
			var elem = document.getElementById(elem_id);
			if (elem)
			{
				elem.src = img_src;
			}
		}
	}

	app.toggleElemsByClassName = function(elemName, className, displayMode)
	{
		if (!elemName) return(false);
		if (!displayMode) displayMode = 'block';

		var rootNode = document.getElementsByTagName('BODY')[0];
		var childNodes;
		var e;
		var display = 'none';

		if (rootNode)
		{
			childNodes = app.filterChildNodesRecursive(rootNode, elemName, className);
			if (childNodes)
			{
				if (childNodes.length > 0)
				{
					//if (childNodes[0].style['display'] != displayMode) display = displayMode;
					if (!childNodes[0].style['display'] || childNodes[0].style['display'] == 'none') display = displayMode;
					for (var i = 0; i < childNodes.length; i++)
					{
						if (display == 'none')
						{
							childNodes[i].style['display'] = 'none';
						}
						else
						{
							try
							{
								childNodes[i].style['display'] = display;
							}
							catch (e)
							{
								childNodes[i].style['display'] = 'block';
							}
						}
					}
				}
			}
		}
		return(display != 'none');
	}

	app.hideElemsByClassName = function(elemName, className, mode)
	{
		if (!elemName) return(false);
		if (!mode) mode = false;

		var rootNode = document.getElementsByTagName('BODY')[0];
		var childNodes;
		var e;

		if (rootNode)
		{
			childNodes = app.filterChildNodesRecursive(rootNode, elemName, className);
			if (childNodes)
			{
				for (var i = 0; i < childNodes.length; i++)
				{
					if (mode == false)
					{
						childNodes[i].style['display'] = 'none';
					}
					else
					{
						try
						{
							childNodes[i].style['display'] = mode;
						}
						catch (e)
						{
							childNodes[i].style['display'] = 'block';
						}
					}
				}
			}
		}
		return(mode != false);
	}

	app.showElemsByClassName = function(elemName, className, mode)
	{
		if (!elemName) return(false);
		if (!mode) mode = 'block';

		return(app.hideElemsByClassName(elemName, className, mode));
	}

	app.hideElem = function(elemName)
	{
		var elem;
		if (document.getElementById)
		{
			elem = document.getElementById(elemName);
			if (elem) elem.style['display'] = 'none';
		}
	}

	app.disable_element = function(name, mode)
	{
		var elem;

		if (mode == null) mode = true;
		elem = document.getElementById(name);
		if (elem) elem.disabled = mode;

		if (mode == true && app.hasClass('text', elem.className))
			elem.className = app.addClass(elem.className, 'disabled');
		else
			elem.className = app.removeClass(elem.className, 'disabled');
	}

	app.str_replace = function (QuellText, SuchText, ErsatzText)
	{
		if ((QuellText == null) || (SuchText == null)) { return null; }
		if ((QuellText.length == 0) || (SuchText.length == 0)) { return QuellText; }

		if ((ErsatzText == null) || (ErsatzText.length == 0)) { ErsatzText = ""; }

		var LaengeSuchText = SuchText.length;
		var LaengeErsatzText = ErsatzText.length;
		var Pos = String(QuellText).indexOf(SuchText, 0);

		while (Pos >= 0)
		{
			QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
			Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
		}

		return QuellText;
	}

	app.parseFloat = function(value)
	{
		if (value)
		{
			value = app.str_replace(value, '.', '');
			value = app.str_replace(value, ',', '.');
			value = parseFloat(value);
		}
		return(value);
	}

	app.parseInt = function(value)
	{
		if (value)
		{
			value = app.str_replace(value, '.', '');
			value = app.str_replace(value, ',', '.');
			value = parseInt(value);
		}
		return(value);
	}

	app.intval = function(value)
	{
		if (!value) value = '';
		value = String(value);
		value.replace(/\./gi, '');
		value.replace(/\,/gi, '.');
		value = parseInt(value);
		if (isNaN(value)) value = 0;
		return(value);
	}

	// Number Format
	app.number_format = function (number, laenge, sep, th_sep)
	{
		var pre = "";

		if(number < 0)
		{
			pre = "-";
			number *= (-1)
		}

		number = Math.round( number * Math.pow(10, laenge) ) / Math.pow(10, laenge);
		var str_number = number+"";
		var arr_int = str_number.split(".");

		if(!arr_int[0]) arr_int[0] = "0";
		if(!arr_int[1]) arr_int[1] = "";
		if(arr_int[1].length < laenge)
		{
			nachkomma = arr_int[1];
			for(i=arr_int[1].length+1; i <= laenge; i++){	nachkomma += "0";	}
			arr_int[1] = nachkomma;
		}

		if(th_sep != "" && arr_int[0].length > 3)
		{
			var Begriff = arr_int[0];
			arr_int[0] = "";

			for(var j = 3; j < Begriff.length ; j+=3)
			{
				var Extrakt = Begriff.slice(Begriff.length - j, Begriff.length - j + 3);
				arr_int[0] = th_sep + Extrakt +  arr_int[0] + "";
			}

			var str_first = Begriff.substr(0, (Begriff.length % 3 == 0)?3:(Begriff.length % 3));
			arr_int[0] = str_first + arr_int[0];
		}

		return pre+arr_int[0]+sep+arr_int[1];
	}

	app.getOffsetTop = function(elem)
	{
		if (elem == null) return(null);
		if (elem.offsetParent == null)
			return(elem.offsetTop);
		else
			return(elem.offsetTop +app.getOffsetTop(elem.offsetParent));
	}

	app.getOffsetLeft = function(elem)
	{
		if (elem == null) return(null);
		if (elem.offsetParent == null)
			return(elem.offsetLeft);
		else
			return(elem.offsetLeft +app.getOffsetLeft(elem.offsetParent));
	}

	/**
	 * Filtert aus den übergebenen Nodes diejenigen heraus, dessen Tagnamen nodeName entspricht
	 * @param Array nodes
	 * @param String nodeName
	 * @return Array
	 */
	app.filterChildNodes = function(nodes, nodeName)
	{
		var treeNodes = new Array();
		var i;

		if (nodes && nodeName)
		{
			for (i = 0; i < nodes.length; i++)
			{
				if (nodes[i].nodeType == 1 && nodes[i].nodeName == nodeName) treeNodes.push(nodes[i]);
			}
		}

		return(treeNodes);
	}

	app.filterChildNodesRecursive = function(parentNode, nodeName, cName)
	{
		var nodes = new Array();
		var i;
		var dummy;

		if (parentNode && nodeName)
		{
			if (parentNode.hasChildNodes())
			{
				for (i = 0; i < parentNode.childNodes.length; i++)
				{
					if (parentNode.childNodes[i].nodeType == 1)
					//if (true)
					{
						if (parentNode.childNodes[i].nodeName == nodeName)
						{
							if (!cName || app.hasClass(cName, parentNode.childNodes[i].className))
							{
								nodes.push(parentNode.childNodes[i]);
							}
							if (parentNode.childNodes[i].hasChildNodes())
							{
								dummy = app.filterChildNodesRecursive(parentNode.childNodes[i], nodeName, cName);
								nodes = nodes.concat(dummy);
							}
						}
						else
						{
							if (parentNode.childNodes[i].hasChildNodes())
							{
								dummy = app.filterChildNodesRecursive(parentNode.childNodes[i], nodeName, cName);
								nodes = nodes.concat(dummy);
							}
						}
					}
				}
			}
		}
		return(nodes);
	}

	app.filterParentNode = function(childNode, nodeName)
	{
		var parent = null;
		var currentNode = childNode;

		while (parent == null && currentNode.parentNode != null)
		{
			currentNode = currentNode.parentNode;
			if (currentNode.nodeType == 1 && currentNode.nodeName == nodeName) parent = currentNode;
		}

		return(parent);
	}

	app.createCookie = function(name, value, days)
	{
		if (days)
		{
			var date = new Date();
			date.setTime(date.getTime() +(days *24 *60 *60 *1000));
			var expires = "; expires=" + date.toGMTString();
		}
		else
		{
			expires = "";
		}
		document.cookie = name + "=" + value + expires + "; path=/";
	}

	app.readCookie = function(name)
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for (var i = 0; i < ca.length; i++)
		{
			var c = ca[i];
			while (c.charAt(0) == ' ') c = c.substring(1, c.length);
			if (c.indexOf(nameEQ) == 0) return(c.substring(nameEQ.length, c.length));
		}
		return(null);
	}

	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, callback); } , delay);
		else if (callback)
			callback();
	}
}
