
	/* +-------------------------------------------------------------------------+
	   | Jambo-Script 0.3.1 - 14.04.07
	   +-------------------------------------------------------------------------+
	   | Copyright (c) by Firma Noname Media www.nonamemedia.de
       | Developed by Andi Heinkelein, 24-Oct-2006
       +-------------------------------------------------------------------------+ */

		
	var devMode = (window.document.domain && window.document.domain == "localhost") ? true : false;
// 	devMode = false;
	
	if (typeof jambo == "undefined") {
	
		var jambo = {
		
			error1301: "unable to create requestObject",
			
			makeXMLRequestObject: function () {
			
				// Erzeuge XMLRequest Objekt
				// Bei Erfolg wird das Objekt zurckgegeben
				// ansonsten false
				
				var requestObject = null;
				
				try {
				
					requestObject = new XMLHttpRequest();
				}
				catch (Error) {
				
					try {
					
						requestObject = new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (Error) {
					
						try {
						
							requestObject = new ActiveXObject("MSXML2.XMLHTTP");
						}
						catch (Error) {
						
							requestObject = false;
						}
					}
				}
				
				return requestObject;
			},
		
			sendRequest: function (responseFunction, query) {
			
				// Funktion sendet eine Anfrage an den Server.
				// var requestObject muss definiert sein
				// Funktion erwartet einen Query
				// Bei Erfolg wird func handleResponse aufgerufen
				
				
				if (devMode) {
				
					this.developerMsg('<a href="' + query + '" target="_blank">Send Request (' + query + ')</a><br />');
				}
				
				//Erzeuge neues requestObject
				var requestObject = this.makeXMLRequestObject();
				
				if (requestObject) {
				
					requestObject.open("get", query, true);
					
					if (responseFunction) {
					
						requestObject.onreadystatechange = function () {
							
							jambo.requestError(requestObject);
							responseFunction(requestObject); 
						}
					}
					
					requestObject.send(null);
					
					var return_var = true;
				}
				else {
				
					var return_var = 1301;
				}
			},
			
			requestError: function (requestObject) {
			
				if (requestObject.readyState == 4 && requestObject.responseText.search(/<b>(Parse error|Fatal error|Warning|Notice)<\/b>/i) > -1) {
				
					jambo.developer.errMsg(requestObject.responseText);
				}
			},
			
			addEvent: function(eventName, eventFunction, eventObject) {
			
				//Ueberwacht eventName an eventObject und fuehrt eventFunction aus
				//Event Name ohne on Uebergeben (click, load, mouseover)
				
				if (eventObject.addEventListener) {
				
					eventObject.addEventListener(eventName, eventFunction, false);
					return true;
				}
				else if(eventObject.attachEvent) {
				
					eventObject.attachEvent("on" + eventName, eventFunction);
					return true;
				}
				else {
				
					return false;
				}
			},
			
			clearEvent: function(eventName, eventFunction, eventObject) {
			
				//Beendet die EventÃ¼berwachung zu einem Event
				//Event Name ohne on Ã¼bergeben (click, load, mouseover)
				
				if (eventObject.removeEventListener) {
				
					eventObject.removeEventListener(eventName, eventFunction, false);
					return true;
				}
				else if(eventObject.detachEvent) {
				
					eventObject.detachEvent("on" + eventName, eventFunction);
					return true;
				}
				else {
				
					return false;
				}
			},
			
			getParentElement: function(parElement, searchAttribute, searchValue) {
			
				/* DESCRIPTION Pruefe ob parElement oder parent von parElement
				searchAttribute mit searchValue hat. Gebebei Erfolg das Element
				zurueck
				
				AUFRUF obj jambo.getParentElement(parElement, searchAttribute, searchValue) */
			
				try {
				
					var i = 0;
					var searchResult = false;
				
					do {
					
						if (parElement.getAttribute(searchAttribute, 0) == searchValue) {
						
							searchResult = parElement;
							break;
						}
						
						parElement = parElement.parentNode;
						
						if (i++ > 200) {
						
							alert("Break");
							break;
						}
						
					} while (parElement && parElement.parentNode);
					
					return searchResult;
				}
				catch (e) {
				
					jambo.developer.errMsg(e);
				}
			},
			
			callUserMessage: function (message, msgObject, callObject, visibilityTime, posLeft, posTop) {
			
				//gebe User Message
				//Ist posLeft & posTop angegeben wird die Meldung auf den Bildschirm plaziert
				//Andernfalls springt die Seite nach oben und die Meldung wird ausgegeben
				//divObject ist der DIV Layer, die Message wird innerhalt von callObject
				
				try {
				
					if (typeof msgObject == "string") {
					
						msgObjectStr = msgObject;
						msgObject = document.getElementById(msgObject);
					}
					else {
					
						msgObjectStr = msgObject.getAttrbute("id");
					}
					
					if (typeof callObject == "string") {
					
						callObject = document.getElementById(callObject);
					}
				
					if (posLeft) {
					
						if (msgObject.currentStyle && msgObject.currentStyle.position != "fixed") {
						
							posLeft += this.scrollLeft();
							posTop += this.scrollTop();
						}
						
						msgObject.style.left = posLeft + "px";
						msgObject.style.top = posTop + "px";
					}
					else {
					
						window.scrollTo(0, 0);
					}
					
					//gebe Message aus
					callObject.innerHTML = message;
					msgObject.style.visibility = "visible";
					window.setTimeout("document.getElementById('" + msgObjectStr + "').style.visibility = 'hidden'", visibilityTime);
				}
				catch (e) {
				
					jambo.developer.errMsg(e);
				}
			},
			
			/* +----------------------------------- Developer Message ---------------------------+ */
			
			developerMsg: function(message) {
			
				if (devMode) {
				
					if (document.getElementsByTagName('body')[0]) {
					
						if (!document.getElementById('devModeOutput')) {
						
							document.getElementsByTagName('body')[0].innerHTML += '<div class="devModeOutput" id="devModeOutput">Developer Output:<br /></div>';
						}
						
						document.getElementById('devModeOutput').innerHTML += message + "<br />";
					}
					else {
					
						window.setTimeout("jambo.developerMsg('" + message + "')", 200);
					}
				}
			},
			
			/* +------------------------------------ Array Funktionen --------------------------+ */
			
			arrays: {
			
				inArray: function(searchStr, haystack) {
				
					try {
					
						/*	DESCRIPTION: Prüfe ob search in haystack vorkommt,
						
							AUFRUF: boolean jambo.arrays.inArray(search, haystack);
						*/
						
						var return_var = false;
						
						for (var i = 0; i < haystack.length; i++) {
						
							if (haystack[i] == searchStr) {
							
								var return_var = true;
								break;
							}
						}
						
						return return_var;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			developer: {
			
				errMsg: function(message) {
				
					// Gebe Fehlermeldung aus die durch Jambo-Script verursacht wurde
					// void jambo.developer.errMsg(str message)
				
					if (devMode) {
					
						if (document.getElementsByTagName('body')[0]) {
					
							if (!document.getElementById('devErrMsg')) {
							
								document.getElementsByTagName('body')[0].innerHTML += '<div style="white-space: pre" id="devErrMsg">Error Message:<br /></div>';
							}
							
							document.getElementById('devErrMsg').innerHTML += message + "<br />";
						}
						else {
						
							window.setTimeout("jambo.developer.errMsg('" + message + "')", 200);
						}
					}
				},
				
				printObjectArray: function(obj) {
				
					try {
					
						var str = "";
						for (var val in obj) {
						
							str += val + " = " + obj[val] + "<br />";
						}
						
						jambo.developerMsg(str);
					}
					catch(e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				printDOMArray: function(obj) {
				
					try {
					
						var str = "";
						
						for (var i = 0; i < obj.length; i++) {
						
							var curObj = obj[i];
							
							str += curObj.tagName;
							
							if (curObj.getAttribute("id", 0)) {
							
								str += " id=" + curObj.getAttribute("id", 0);
							}
							
							if (curObj.getAttribute("class", 0)) {
							
								str += " class=" + curObj.getAttribute("class", 0);
							}
							
							if (curObj.getAttribute("name", 0)) {
							
								str += " name=" + curObj.getAttribute("name", 0);
							}
							
							str += "<br />";
						}
						
						jambo.developerMsg(str);
					}
					catch(e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				printDOMObject: function(obj) {
				
					try {
					
						var str = "";
						
						
						var curObj = obj;
						
						str += curObj.tagName;
						
						if (curObj.getAttribute("id", 0)) {
						
							str += " id=" + curObj.getAttribute("id", 0);
						}
						
						if (curObj.getAttribute("class", 0)) {
						
							str += " class=" + curObj.getAttribute("class", 0);
						}
						
						if (curObj.getAttribute("name", 0)) {
						
							str += " name=" + curObj.getAttribute("name", 0);
						}
						
						str += "<br />";
						
						jambo.developerMsg(str);
					}
					catch(e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			layer: {
			
				open: function(elementId, posLeft, posTop, parentObj, autoClose) {
				
					/*  DESCRIPTION: öffne Layer elementId an posLeft + posTop.
						(Optional) parentObj gibt das Eltern Attribute an. Default ist window
						alternative kann statt posLeft und posTop auch eines der Schlüsselwörter 
						verwendet werden. 
						
						für posLeft: left|middle|right
						für posTop: top|top-middle|middle|middle-bottom|bottom
						
						AUFRUF: void jambo.layer.open(elementId, posLeft, posTop [,parentObj [,autoClose]]);
					
					*/
					
					try {
						
						if (!parentObj) {
						
							parentObj = window;
						}
						else if (typeof parentObj == "string") {
						
							parentObj = document.getElementById(parentObj);
						}
						
						switch (posLeft) {
						
							case "left":
								posLeft = jambo.client.pageScrollX();
								break;
								
							case "middle":
								posLeft = jambo.client.pageScrollX() + Math.round((document.body.offsetWidth - document.getElementById(elementId).offsetWidth) / 2);
								break;
								
							case "right":
								posLeft = jambo.client.pageScrollX() + Math.round(document.body.offsetWidth - document.getElementById(elementId).offsetWidth);
								break;
						}
						
						switch (posTop) {
						
							case "top":
								posTop = jambo.client.pageScrollY();
								break;
								
							case "top-middle":
								posTop = jambo.client.pageScrollY() + Math.round((jambo.client.pageSizeY() - document.getElementById(elementId).offsetHeight) / 3);
								break;
								
							case "middle":
								posTop = jambo.client.pageScrollY() + Math.round((jambo.client.pageSizeY() - document.getElementById(elementId).offsetHeight) / 2);
								break;
								
							case "middle-bottom":
								posTop = jambo.client.pageScrollY() + Math.round((jambo.client.pageSizeY() - document.getElementById(elementId).offsetHeight) / 3 * 2);
								break;
							
							case "bottom":
								posTop = jambo.client.pageScrollY() + Math.round(jambo.client.pageSizeY() - document.getElementById(elementId).offsetHeight);
								break;
						}
						
						jambo.developerMsg(jambo.client.pageScrollY() + "x" + document.body.offsetWidth);
						with (document.getElementById(elementId)) {
						
							style.left = posLeft + "px";
							style.top = posTop + "px";
							style.visibility = "visible";
						}
						
						//Auto Close
						if (autoClose) {
						
							//Überwache Klick Ereigniss
							jambo.addEvent("mousedown", jambo.layer.autoClose, document);
							LAYER_AUTO_CLOSE_OBJ = elementId;
						}
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				close: function(elementId) {
				
					/*  DESCRIPTION: schließe Layer elementId
					
						AUFRUF: void jambo.layer.close(elementId)
						
					*/
					
					try {
					
						document.getElementById(elementId).style.visibility = "hidden";
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				autoClose: function(ev) {
				
					/*  DESCRIPTION: Layer automatisch schließen wenn wo anders hingeklickt wird
					
						AUFRUF: void jambo.layer.autoClose(ev)
					
					*/
					
					try {
					
						if (!ev) {
						
							var ev = window.event;
						}
						
						var curElement = ev.srcElement ? ev.srcElement : ev.target;
						
						if (!jambo.getParentElement(curElement, 'id', LAYER_AUTO_CLOSE_OBJ)) {
						
							//klick ins leere
							jambo.clearEvent('mousedown', jambo.layer.autoClose, document);
							jambo.layer.close(LAYER_AUTO_CLOSE_OBJ);
							LAYER_AUTO_CLOSE_OBJ = null;
						}
					}
					catch(e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				openContex: function(layerId, objId, moveX, moveY) {
				
					/*  DESCRIPTION: Oeffne Contex Menü layerId an Unter/Oberhalb von objId
						verschiebe layerId um moveX x moveY Pixel wenn angegeben.
						Beim Klick ausserhalb von layerId wird das Kontex wieder geschlossen
					
						AUFRUF: jambo.layer.openContex(layerId, objId[, moveX[, moveY]]);
						
					*/
					
					try {
					
						//Ermittle Position
						var pos = jambo.nodes.getPosition(objId);
						
						if (!moveX) {
						
							var moveX = 0;
						}
						
						if (!moveY) {
						
							var moveY = 0;
						}
						
						//Contex positionieren
	// 					jambo.developerMsg(pos.left + "x" + pos.top);
	// 					jambo.developerMsg((jambo.client.pageSizeY() - (pos.top - jambo.client.pageScrollY())) + " < " + ((document.getElementById(layerId).offsetHeight * 1.3)));
						
						if (jambo.client.pageSizeX() - (pos.left - jambo.client.pageScrollX()) < (document.getElementById(layerId).offsetWidth + 50)) {
						
							//Oeffne Kontex nach rechts
							var posX = pos.left - document.getElementById(objId).offsetWidth;
						}
						else {
						
							var posX = pos.left;
						}
						
						if (jambo.client.pageSizeY() - (pos.top - jambo.client.pageScrollY()) < (document.getElementById(layerId).offsetHeight + 50)) {
						
							//Oeffne Kontex nach oben
							var posY = pos.top;
							posY += moveY;
							
							window.status = jambo.client.pageSizeY() + " " + posY;
							
							do {
							
								posY -= 20;
							} while (posY > jambo.client.pageSizeY());
							
							window.status += jambo.client.pageSizeY() + " " + posY;
						}
						else {
						
							var posY = pos.top + document.getElementById(objId).offsetHeight;
							posY += moveY;
						}
						
						//Oeffne Layer
						jambo.layer.open(layerId, posX + moveX, posY, null, true);
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			/* +-------------------------------- Unter Funktionen -------------------------------+ */
			
			//!Verschoben nach jambo.client.pageScrollX()
			
			scrollLeft: function() {
			
				return document.pageXoffset || document.documentElement.scrollLeft || document.body.scrollLeft;
			},
			
			//!Verschoben nach jambo.client.pageScrollY()
			
			scrollTop: function() {
			
				return document.pageYoffset || document.documentElement.scrollTop || document.body.scrollTop;
			},
			
			
			/* +-------------------------------- Client Informationen ---------------------------+ */
			
			client: {
			
				browserName: function() {
				
					if (window.opera) {
					
						return "Opera";
					}
					else if (window.clientInformation) {
					
						if (window.clientInformation.vendor) {
						
							return "Konqueror";
						}
						else {
						
							return "Internet Explorer";
						}
					}
					else {
					
						if (navigator.userAgent.indexOf("Safari") > -1) {
						
							return "Safari";
						}
						else if (navigator.userAgent.indexOf("Firefox") > -1) {
						
							return "Firefox";
						}
						else {
						
							return "undefined";
						}
					}
				},
				
				browserVersion: function() {
				
					if (window.opera) {
					
						return window.opera.version();
					}
					else if(navigator.userAgent) {
					
						var version = navigator.userAgent;
						var preg = version.match(/(KHTML|MSIE|Firefox).?(\d(\.\d+)*)/);
						
						if (preg && preg.length >= 2) {
						
							
							return preg[2];
						}
						else {
						
							var preg = version.match(/(rv).?(\d(\.\d+)*)/);
							
							if (preg && preg.length >= 2) {
						
							
								return preg[2];
							}
							else {
							
								return version;
							}
						}
					}
					else {
					
						return "undefined";
					}
				},
				
				browserLanguage: function() {
				
					//Ermittle Browser Sprache das Users
					if (navigator.language) {
					
						var language = navigator.language;
					}
					else if (navigator.userLanguage) {
					
						var language = navigator.userLanguage;
					}
					
					if (language) {
					
						var language = language.match(/[a-z]{2}/);
						return language[0];
					}
					else {
					
						return "undefined";
					}
				},
				
				osName: function() {
				
					if (navigator.platform) {
					
						if (navigator.platform == "Win32") {
						
							if (navigator.userAgent.indexOf("Windows NT 6.0") > -1) {
							
								return "Windows Vista";
							}
							else if (navigator.userAgent.indexOf("Windows NT 5.2") > -1) {
							
								return "Windows 2003";
							}
							else if (navigator.userAgent.indexOf("Windows NT 5.1") > -1) {
							
								return "Windows XP";
							}
							else if (navigator.userAgent.indexOf("Windows NT 5.0") > -1) {
							
								return "Windows 2000";
							}
							else if (navigator.userAgent.indexOf("Windows NT 4") > -1) {
							
								return "Windows NT";
							}
							else if (navigator.userAgent.indexOf("Windows ME") > -1) {
							
								return "Windows ME";
							}
							else if (navigator.userAgent.indexOf("Windows 98") > -1) {
							
								return "Windows 98";
							}
							else if (navigator.userAgent.indexOf("Windows 95") > -1) {
							
								return "Windows 95";
							}
							else if (navigator.userAgent.indexOf("Windows CE") > -1) {
							
								return "Windows CE";
							}
							else {
							
								return "undefined";
							}
						}
						else {
						
							var osName = navigator.platform.match("Linux|Mac Os|Sun");
							return osName[0];
						}
					}
					else {
					
						return "undefined";
					}
				},
				
				installedFlashVersion: function() {
				
					var flashVersion = null;
					var version = null;
					
					if (!window.ActiveXObject) {
					
						for (var i = 0; i < navigator.plugins.length; i++) {
					
							if (navigator.plugins[i].name.indexOf("Flash") >= -1) {
							
								version = navigator.plugins[i].description.match(/Shockwave Flash (\d+)(\.\d+)*/);
								
								if (!version) {
								
									version = navigator.plugins[i].name.match(/(\d+)(\.\d+)*/);
								}
								
								if (version && version[1]) {
								
									flashVersion = flashVersion ? jambo.string.versionCompare(flashVersion, version[1]) : version[1];
								}
							}
						}
					}
					else {
					
						for (var i = 10; i >= 5; i--) {
						
							try {
							
								if (new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i)) {
							
									flashVersion = i;
									break;
								}
							}
							catch (e) {
							
								jambo.developer.errMsg(e);
							}
						}
					}
					
					return flashVersion;
				},
				
				pageScrollX: function() {
				
					/*  DESCRIPTION: wieweit hat der User nach links gescrollt?
					
						AUFRUF: int jambo.client.pageScrollX()
						
					*/
			
					return document.pageXoffset || document.documentElement.scrollLeft || document.body.scrollLeft;
				},
			
				pageScrollY: function() {
			
					/*  DESCRIPTION: wieweit hat der Anwender nach unten gescrollt?
					
						AUFRUF: int jambo.client.pageScrollY()
						
					*/
					
					return document.pageYoffset || document.documentElement.scrollTop || document.body.scrollTop;
				},
				
				pageSizeX: function() {
			
					/*  DESCRIPTION: Gebe Inner Bildschirmgröße zurück?
					
						AUFRUF: int jambo.client.pageSizeX()
						
					*/
					
					return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
				},
				
				pageSizeY: function() {
			
					/*  DESCRIPTION: Gebe Inner Bildschirmgröße zurück?
					
						AUFRUF: int jambo.client.pageSizeY()
						
					*/
					
					return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
				}
			},
			
			/* +--------------------------------- HTML Elements ----------------------------+ */
			
			dhtml: {
			
				highlightTableLines: function(htmlTable) {
				
					/* DESCRIPTION: Highlighte die Zeilen bzw. tablebodys einer Tabelle.
						Es wird geprüft ob die Tabelle <tbody> Tags enthält. Ist dies der
						Fall wird der komplette <tbody> gehighlighted, andernfalls die <tr>
						Die Funktion erwartet als weitere Parameter den Klassen Name der zum
						Highlighten verwendet werden soll.
						
					AUFRUF: jambo.dhtml.highlightTableLines(htmlTable[, class1[, class2...]]);
					*/
					
					alert("ok");
					
					try {
					
						var classArr = jambo.dhtml.highlightTableLines.arguments.slice(1);
						
						if (typeof htmlTable == "string") {
						
							htmlTable = document.getElementById(htmlTable);
						}
						
						if (htmlTable) {
						
							if (htmlTable.tBodies && htmlTable.tBodies.length > 1) {
							
								var lines = htmlTable.tBodies;
							}
							else {
							
								var lines = htmlTable.rows;
							}
							
							var c = 0;
							for (var i = 0; i < lines.length; i++) {
							
								lines[i].className = classArr[c];
								window.status = lines[i].className;
								
								if (++c >= classArr.length) {
								
									c = 0;
								}
							}
						}
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			HTMLList: {
			
				highlightLine: function(htmlObject, lineId) {
				
					if (typeof htmlObject == "string") {
					
						htmlObject = document.getElementById(htmlObject);
					}
				
					var highlightClass = new Array();
					for (var i = 2; i < arguments.length; i++) {
					
						highlightClass[highlightClass.length] = arguments[i];
					}
					
					if (lineId == "all") {
					
						//Muster für alte Classe
						var pattern = new RegExp(" ?(" + highlightClass.join("|") + ") ?", "i");
						
						//Highlighte alle List Eintraege
						var c = 0;
						for (var i = 0; i < htmlObject.getElementsByTagName('li').length; i++) {
						
							//Entferne alte Classen
							htmlObject.getElementsByTagName('li')[i].className = htmlObject.getElementsByTagName('li')[i].className.replace(pattern, "");
							
							htmlObject.getElementsByTagName('li')[i].className += " " + highlightClass[c];
							
							if (++c >= highlightClass.length) {
							
								c = 0;
							}
						}
					}
				}
			},
			
			/* +------------------------------- String Funktionen -------------------------------+ */
			
			string: {
			
				versionCompare: function(version1, version2) {
				
					splitedVersion1 = version1.split(".");
					splitedVersion2 = version2.split(".");
					
					var return_var = version1;
					
					for (var i = 0; i < Math.max(version1.length, version2.length); i++) {
					
						if (!version2[i] || splitedVersion1[i] > splitedVersion2[i]) {
						
							return_var = version1;
							break;
						}
						else if (!version1[i] || splitedVersion1[i] < splitedVersion2[i]) {
						
							return_var = version2;
							break;
						}
					}
					
					return return_var;
				}
			},
			
			/* +----------------------------------- Formular Funktionen ---------------------------+ */
			
			formular: {
			
				setValue: function(formElement, formValue) {
				
					try {
				
	// 					jambo.developerMsg(formElement.type);
						
						if (typeof formElement.type == "string") {
						
							if (formElement.type == "text" || formElement.type == "textarea" || formElement.type == "password" || formElement.type == "hidden") {
						
								formElement.value = formValue;
							}
							else if (formElement.type == "select-one") {
							
								for (var i = 0; i < formElement.options.length; i++) {
								
									if (formElement.options[i].value == formValue) {
									
										formElement.options[i].selected = true;
									}
									else {
									
										formElement.options[i].selected = false;
									}
								}
							}
							else if (formElement.type == "checkbox") {
							
								if (formElement.value == formValue) {
									
									formElement.checked = true;
								}
								else {
								
									formElement.checked = false;
								}
							}
						}
						else if (typeof formElement[0].type == "string") {
						
							if (formElement[0].type == "radio") {
						
								for (var i = 0; i < formElement.length; i++) {
								
									if (formElement[i].value == formValue) {
									
										formElement[i].checked = true;
									}
									else {
									
										formElement[i].checked = false;
									}
								}
							}
							else if (formElement[0].type == "checkbox") {
						
								for (var i = 0; i < formElement.length; i++) {
								
									if (jambo.arrays.inArray(formElement[i].value, formValue)) {
									
										formElement[i].checked = true;
									}
									else {
									
										formElement[i].checked = false;
									}
								}
							}
						}
						
						return true;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			/* +--------------------------------- Drag&Drop --------------------------------+ */
			
			dragdrop: {
			
				drag: function(ev) {
				
					try {
					
						//Leite eine Drag&Drop Funktion ein
						
						if (!ev) {
						
							var ev = window.event;
						}
						
						var curObject = ev.srcElement ? ev.srcElement : ev.target;
						var pos = jambo.nodes.pagePosition(ev);
						var posX = pos.left;
						var posY = pos.top;
						
						DRAGDROP_START_POS = [posX, posY];
						DRAGDROP_MOVE_OBJ = curObject;
						
						//Schalte Mouse Up Ueberwachung ein
						jambo.addEvent("mouseup", jambo.dragdrop.drop, document);
						
						//DragDrop Anzeige
						if (DRAGDROP_MOVE_FUNC) {
						
							DRAGDROP_MOVE_FUNC(ev);
							jambo.addEvent("mousemove", DRAGDROP_MOVE_FUNC, document);
						}
						
						var posX = curObject.offsetLeft;
						var posY = curObject.offsetTop;
						
						//Kopiere Drag Objekt
						var dragCopy = curObject.cloneNode(true);
						
						if (typeof DRAGDROP_OBJID == "undefined") {
						
							DRAGDROP_OBJID = 0;
						}
						
						DRAGDROP_OBJID++;
						
						dragCopy.setAttribute("id", "id" + DRAGDROP_OBJID);
						
						var parentObj = curObject.parentNode;
						
						//Fuege Kopie ein
						parentObj.insertBefore(dragCopy, curObject);
						
						//Wenn Kopie verschoben werden soll
						document.getElementById("id" + DRAGDROP_OBJID).onmousedown = jambo.dragdrop.drag;
	// 					alert(document.body.innerHTML);
						
						with(curObject) {
						
							style.position = "absolute";
							style.left = posX + "px";
							style.top = posY + "px";
						}
						
						if (DRAGDROP_MOVE_DISPLAY) {
						
							//Ersetze Layer durch Move Display Layer
							var displayNode = document.getElementById(DRAGDROP_MOVE_DISPLAY).cloneNode(true);
							parentObj.replaceChild(displayNode, curObject);
							
							DRAGDROP_MOVE_OBJ = displayNode;
						}
						
						
						//Zeige Move Cursor
						document.getElementsByTagName('body')[0].style.cursor = DRAGDROP_CURSOR;
						
						return false;
						
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				move: function(ev) {
				
					try {
					
						if (!ev) {
						
							var ev = window.ev;
						}
						
						var curObject = DRAGDROP_MOVE_OBJ;
						
						var pos = jambo.nodes.pagePosition(ev);
						pos.left = Math.round(pos.left - (curObject.offsetWidth / 2));
						pos.top = Math.round(pos.top - (curObject.offsetHeight / 2));
						
						with (curObject) {
						
							style.left = pos.left + "px";
							style.top = pos.top + "px";
						}
						
						if (DRAGDROP_MOVE_DISPLAY) {
						
							curObject.style.visibility = "visible";
						}
						
	// 					window.status = pos.left + "x" + pos.top;
						
						return false;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				moveStop: function(ev) {
				
					try {
					
						document.getElementById('dragDropDisplay').style.visibility = "hidden";
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				drop: function(ev) {
				
					try {
					
						if (!ev) {
						
							var ev = window.event;
						}
						
						
						var curObject = ev.srcElement ? ev.srcElement : ev.target;
						var pos = jambo.nodes.pagePosition(ev);
						var posX = pos.left;
						var posY = pos.top;
						
						DRAGDROP_START_OBJ = jambo.nodes.getObjectByPosition(DRAGDROP_START_POS[0], DRAGDROP_START_POS[1], DRAGDROP_DRAG_TAGNAME, DRAGDROP_DRAG_ATTRNAME, DRAGDROP_DRAG_ATTRVALUE);
						DRAGDROP_STOP_OBJ = jambo.nodes.getObjectByPosition(posX, posY, DRAGDROP_DROP_TAGNAME, DRAGDROP_DROP_ATTRNAME, DRAGDROP_DROP_ATTRVALUE);
	// 					jambo.developer.printDOMObject(DRAGDROP_STOP_OBJ);
	
						//Loesche Temporaeren Move Layer
						DRAGDROP_MOVE_OBJ.parentNode.removeChild(DRAGDROP_MOVE_OBJ);
						
						//Beende Mouse Up Uebberwachung
						jambo.clearEvent("mouseup", jambo.dragdrop.drop, document);
						if (DRAGDROP_MOVE_FUNC) {
						
							jambo.clearEvent("mousemove", DRAGDROP_MOVE_FUNC, document);
						}
						
						if (DRAGDROP_MOVE_STOP_FUNC) {
						
							DRAGDROP_MOVE_STOP_FUNC();
						}
						
						//DD Anzeige weg
	// 					document.getElementById('dragDropDisplay').style.visibility = "hidden";
						
						//Zeige default Cursor
						document.getElementsByTagName('body')[0].style.cursor = "default";
						
						//Rufe Funktion auf
						DRAGDROP_STOP_FUNC(DRAGDROP_START_OBJ, DRAGDROP_STOP_OBJ);
						
						return false;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			/* +--------------------------------- Nodes ---------------------------------------+ */
			
			nodes: {
			
				moveNodes: function(nodeA, nodeB) {
				
					//Knoten Verschieben.
					//nodeA wird an position von nodeB verschoben
					//nodeB wird je nach Richtung in die verschoben wird, vor
					//oder hinter nodeA gesetzt
					
					try {
					
						if ((nodeA && nodeB) && nodeA != nodeB) {
						
							var parNode = nodeA.parentNode;
							
							//Ermittle Knoten Position
							for (var i = 0; i < parNode.childNodes.length; i++) {
							
								if (parNode.childNodes[i] == nodeA) {
								
									//verschiebe nach unten
									var moveDirection = "down";
									break;
								}
								else if (parNode.childNodes[i] == nodeB) {
								
									var moveDirection = "up";
									break;
								}
							}
							
							var moveNode = parNode.removeChild(nodeA);
							
							if (moveDirection == "down") {
							
								if (nodeB.nextSibling) {
								
									parNode.insertBefore(moveNode, nodeB.nextSibling);
								}
								else {
								
									parNode.appendChild(moveNode);
								}
							}
							else {
							
								parNode.insertBefore(moveNode, nodeB);
							}
						}
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				getObjectByPosition: function (posX, posY, searchTag, searchAttribute, searchValue) {
						
					//Ermittle welches Objekt sich an posX + posY befindet.
					//ist searchTag angegeben wird dur nach diesem Tags gesucht.
					//ist searchAttribute angegeben wird Ueberprueft ob das Attribute vorhanden ist
					//ist searchValue angegeben wird der Wer Ueberprueft
					//Es wird das Erste gefundenen Objekt an posX + posY zurueckgegeben
					
					var time = new Date();
					time = time.getTime();
					
					try {
					
						if (!searchTag) {
						
							var searchTag = "*";
						}
						
						var objArray = document.getElementsByTagName(searchTag);
						var resultArray = new Array();
						
						for (var objName in objArray) {
						
							var curObj = objArray[objName];
							
			// 				window.status += curObj.nodeType;
							
							if (curObj.tagName) {
							
								if (curObj.tagName.toLowerCase() == "body" || curObj.tagName.toLowerCase() == "html") {
								
									//Objekte koennen ausgelassen werden
									continue;
								}
							
								//Attribute
								if (searchAttribute) {
								
									if (searchValue) {
									
											if (curObj.getAttribute(searchAttribute, 0) != searchValue) {
										
											//Attribute nicht vorhanden, neuer Durchlauf
											continue;
										}
									}
									else {
									
										if (curObj.getAttribute(searchAttribute, 0) == "") {
										
											//Attribute nicht vorhanden, neuer Durchlauf
											continue;
										}
									}
								}
								
								//Pruefe Position
								var pos = jambo.nodes.getPosition(curObj);
								
								if (pos.top <= posY && (pos.top + curObj.offsetHeight) >= posY) {
								
									if (pos.left <= posX && (pos.left + curObj.offsetWidth) >= posX) {
									
										//koennte Objekt sein
										resultArray[resultArray.length] = curObj;
	// 									jambo.developerMsg(posX + "x" + posY + " - " + pos.left + "x" + pos.top + " - " + (pos.left + curObj.offsetWidth) + "x" + (pos.top + curObj.offsetHeight));
									}
								}
							}
						}
						
	// 					jambo.developer.printDOMArray(resultArray);
			
						var time2 = new Date();
						time2 = time2.getTime() - time;
	// 					alert(time2);
						
						return resultArray[resultArray.length - 1];
						
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				getPosition: function(curObject) {
				
					/* DESCRIPTION Ermittle Position von curObject absolut zum Dokument
					
					AUFRUF obj getPosition(curObject);
					
					*/
					
					try {
					
						if (typeof curObject == "string") {
						
							curObject = document.getElementById(curObject);
						}
						
						var pos = {left: curObject.offsetLeft, top: curObject.offsetTop};
						
						var i = 0;
						
						while (curObject = curObject.offsetParent) {
						
							pos.left += curObject.offsetLeft;
							pos.top += curObject.offsetTop;
							
							if (++i > 50) {
							
								alert("Dauerschleife");
								break;
							}
						}
						
	// 					jambo.developerMsg(pos.left + " " + pos.top + " - " + curObject);
						
						return pos;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				pagePosition: function(ev) {
				
					//Ermittle Maus Position relativ zum Dokument
					
					try {
					
						var pos = {left: 0, top: 0};
						
						if (ev.pageX) {
						
							pos.left = ev.pageX;
							pos.top = ev.pageY;
						}
						else {
						
							if (document.body && typeof document.body.scrollLeft != "undefined") {
							
								pos.left = ev.clientX + document.body.scrollLeft;
								pos.top = ev.clientY + document.body.scrollTop;
							}
							else {
							
								pos.left = ev.clientX + document.documentElement.scrollLeft;
								pos.top = ev.clientY + document.documentElement.scrollTop;
							}
						}
						
						return pos;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				getByAttribute: function(attributeName, attributeValue, searchTagName) {
				
					try {
					
						/*	DESCRIPTION: Ermittle Node Objekt anhang von Attributen
							Ist tagName angegeben werden nur diese Tags durchsucht, andernfalls alle.
							
							AUFRUF: obj jambo.nodes.getByAttribute(attributeName, attributeValue [,searchTagName])
						*/
						
						if (!searchTagName) {
						
							var searchTagName = "*";
						}
						
						var tagArray = new Array();
						for (var i = 0; i < document.getElementsByTagName(searchTagName).length; i++) {
						
							if (document.getElementsByTagName(searchTagName)[i].getAttribute(attributeName) && document.getElementsByTagName(searchTagName)[i].getAttribute(attributeName) == attributeValue) {
							
								tagArray[tagArray.length] = document.getElementsByTagName(searchTagName)[i];
							}
						}
						
						return tagArray;
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				}
			}
		}
	}
	else {
	
		jambo.developerMsg("Jambo Script erneut eingebunden");
	}