function main_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)

	{

		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.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, className)

	{

		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 (parentNode.childNodes[i].nodeName == nodeName)

						{

							if (!className || app.hasClass(className, parentNode.childNodes[i].className))

								nodes.push(parentNode.childNodes[i]);

						}

						else

						{

							if (parentNode.childNodes[i].hasChildNodes())

							{

								dummy = app.filterChildNodesRecursive(parentNode.childNodes[i], nodeName, className);

								nodes = nodes.concat(dummy);

							}

						}

					}

				}

			}

		}

		return(nodes);

	}

}
