
	/* +-------------------------------------------------------------------------+
	   | Jambo-Script 0.3.4 - 05.06.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;
// 	var devMode = false;
	
	
	if (typeof jambo == "undefined") {
	
		var jambo = {
		
			error1301: "unable to create requestObject",
			
			//Pfade
			jamboDirPath: function() {
			
				//Pfad zum Jambo Script Ordner
				if (typeof JAMBO_DIR_PATH == "undefined") {
				
					for (var i = 0; i < document.getElementsByTagName('script').length; i++) {
					
						if (document.getElementsByTagName('script')[i].src.indexOf('jambo-script') > -1) {
						
							JAMBO_DIR_PATH = document.getElementsByTagName('script')[i].src.match(/(^.+\/)jambo-script.js/i, "$1");
							JAMBO_DIR_PATH = JAMBO_DIR_PATH[1];
							break;
						}
					}
				}
			},
			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, async, postData) {
			
				// *Funktion sendet eine Anfrage an den Server.
				// Funktion erwartet einen Query
				// Bei Erfolg wird func handleResponse aufgerufen
				
				
				if (devMode) {
				
					this.developerMsg('<a href="' + query + '" target="_blank">Send Request (' + query + ')</a><br />');
					
					if (postData) {
					
						this.developerMsg('POST:' + postData + '<br />');
					}
				}
				
				if (typeof async == "undefined") {
				
					async = true;
				}

				//Erzeuge neues requestObject
				var requestObject = this.makeXMLRequestObject();
				
				if (requestObject) {
				
					if (typeof postData == "string") {
					
						sendMethod = "post";
					}
					else {
					
						sendMethod = "get";
						postData = null;
					}
					
					requestObject.open(sendMethod, query, async);
					
					if (responseFunction) {
					
						requestObject.onreadystatechange = function () {
							
							jambo.requestError(requestObject);
							responseFunction(requestObject); 
						}
					}
					
					requestObject.send(postData);
					
					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 Eventueberwachung zu einem Event
				//Event Name ohne on Uebergeben (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. Gibt bei 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 {
					
						alert("Jambo Developer Message:\n\n" + message);
					}
				}
			},
			
			browserHacks: {
			
				pngAlpha4IE: function(imgId) {
				
					/* Ermöglicht transparente PNG's im IE */
					
					try {
					
						jambo.jamboDirPath();
						
						if (window.clipboardData && !window.XMLHttpRequest) {
					
							if (imgId) {
								
								var imgSrc = document.getElementById('imgId').src;
								with (document.getElementById('imgId')) {
								
									src = JAMBO_DIR_PATH + "images/empty.gif";
									style.backgroundImage = "url(" + imgSrc + ")";
									style.backgroundRepeat = "no-repeat";
									style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + imgSrc + ")";
								}
							}
							else {
							
								for (var i = 0; i < document.getElementsByTagName('img').length; i++) {
								
									var imgSrc = document.getElementsByTagName('img')[i].src;
									var imgWidth = document.getElementsByTagName('img')[i].offsetWidth;
									var imgHeight = document.getElementsByTagName('img')[i].offsetHeight;
									
									with (document.getElementsByTagName('img')[i]) {
									
										src = JAMBO_DIR_PATH + "images/empty.gif";
										style.width = imgWidth + "px";
										style.height = imgHeight + "px";
										style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + imgSrc + "', sizingMethod='scale')";
										style.background = "none";
									}
								}
							}
						}
					}
					catch(e) {
					
						jambo.developer.errMsg(e);
					}
				}
			},
			
			/* +------------------------------------ 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: oeffne 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. 
						
						fuer posLeft: left|middle|right
						fuer 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);
						}
						
						if (parentObj == window) {
						
							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;
							}
						}
						else {
						
							switch (posLeft) {
							
								case "left":
									posLeft = jambo.client.pageScrollX();
									break;
									
								case "middle":
									posLeft = Math.round((parentObj.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 = Math.round((parentObj.offsetHeight - 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;
							}
						}
						
						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 Bildschirmgroesse zurueck?
					
						AUFRUF: int jambo.client.pageSizeY()
						
					*/
					
					return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
				}
			},
			
			/* +--------------------------------- HTML Elements ----------------------------+ */
			
			dhtml: {
			
				statusBar: function(divId, imgId, percent, cronBarDisplay1, cronBarDisplay2) {
				
					/*  DESCRIPTION: Zeige Statusbar imgId innerhalb divId um percent als breite an.
						Verwende dabei CSS clip()
						cronBarDisplay1 & cronBarDisplay2 enthalten die ID des Objektes das den Prozentsatz
						erhalten soll.
						
						AUFRUF: jambo.dhtml.statusBar(STR divId, STR imgId, NUM percent[, cronBarDisplay1, cronBarDisplay2]) */
						
					try {
					
						
						var imgObj = document.getElementById(imgId);
						var divObj = document.getElementById(divId);
						
						var clipWidth = imgObj.offsetWidth;
						clipWidth = (Math.round(clipWidth / 100 * percent));
						var clipHeight = imgObj.offsetHeight;
						
						imgObj.style.clip = "rect(0 " + clipWidth + "px " + clipHeight + "px 0)";
						window.status = imgObj.style.clip;
						
						if (cronBarDisplay1 && cronBarDisplay2) {
						
							document.getElementById(cronBarDisplay1).innerHTML = percent + "%";
							document.getElementById(cronBarDisplay2).innerHTML = percent + "%";
						}
						
						
					}
					catch(e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				openListMenue: function(listId, openerId, openDirectionX, openDirectionY) {
				
					/* DESCRIPTION: Oeffne ein Listen Menue das vorher mit jambo.dhtml.makeListMenue()
						erzeugt wurde. Das Menue listId wird an openerId geoeffnet. Der dritte & vierte Optionale
						Parameter gibt die Position an. DEFAULT ist auto. Das Menue oeffnet sich je nach Position
						nach oben oder unten.
						
						AUFRUF: jambo.dhtml.openListMenue(listObj, openerObj[, openDirection[, openDirectionY]])
						
					*/
					
					try {
					
						//Erzeuge Objekte
						listObj = document.getElementById(listId);
						openerObj = document.getElementById(openerId);
						
						//Positioniere Menue
						posX = 0;
						posY = 0;
						
						var openerPos = jambo.nodes.getPosition(openerObj, true);
						var openerWidth = openerObj.offsetWidth;
						var openerHeight = openerObj.offsetHeight;
						
						//Ermittle Richtung zum Oeffnen
						
						if (!openDirectionX) {
						
							//Oeffne Menue automatisch
							if ((openerPos.left + listObj.offsetWidth + 20) > jambo.client.pageSizeX()) {
							
								openDirectionX = "left";
							}
							else {
							
								openDirectionX = "right";
							}
						}
						
						if (openDirectionY == "down") {
						
							//Oeffne Menue nach unten
							var posX = openerPos.left;
							var posY = openerPos.top + openerHeight;
						}
						else {
						
							//Oeffne Menue nach oben
							var posX = openerPos.left;
							var posY = openerPos.top - listObj.offsetHeight;
						}
						
						if (!openDirectionY) {
						
							//Oeffne Menue automatisch
							if ((openerPos.top + openerHeight) > (jambo.client.pageSizeY() / 3 * 2)) {
							
								openDirectionY = "up";
							}
							else {
							
								openDirectionY = "down";
							}
						}
						
						
						//Setze Pos X&Y
						
						if (openDirectionX == "left") {
						
							//Oeffne Menue nach rechts
							var posX = openerPos.left + openerWidth - listObj.offsetWidth;
// 							var posY = openerPos.top + openerHeight;
						}
						else {
						
							//Oeffne Menue nach oben
							var posX = openerPos.left;
// 							var posY = openerPos.top - listObj.offsetHeight;
						}
						
						if (openDirectionY == "down") {
						
							//Oeffne Menue nach unten
// 							var posX = openerPos.left;
							var posY = openerPos.top + openerHeight;
						}
						else {
						
							//Oeffne Menue nach oben
// 							var posX = openerPos.left;
							var posY = openerPos.top - listObj.offsetHeight;
						}
						
						jambo.developerMsg(openerPos.top + " - " + listObj.offsetHeight);
						
						
						//Oeffne Menue
						jambo.layer.open(listId, posX, posY, document, true);
						
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				makeListMenue: function(listId, moveInto, openDirection) {
				
					/* DESCRIPTION: Erzeuge ein Menue aus <ul>. listObj gibt das <ul> an.
					
						AUFRUF: jambo.dhtml.makeListMenue(listObj)
						
					*/
					
					try {
					
						//Erzeuge Objekte
						listObj = document.getElementById(listId);
						
						if (typeof moveInto == "undefined") {
						
							moveInto = 0;
						}
						
						for (var i = 0; i < listObj.getElementsByTagName('ul').length; i++) {
						
							var parListObj = listObj.getElementsByTagName('ul')[i].parentNode.getElementsByTagName('a')[0];
							var curListObj = listObj.getElementsByTagName('ul')[i];
							
// 							alert(parListObj.outerHTML);
							
							parListObj.style.position = "relative";
							curListObj.style.position = "absolute";
							
							//positioniere Menue
							curListObj.style.left = (curListObj.offsetWidth - moveInto) + "px";
							curListObj.style.top = "0px";
							
							//Event zum oeffnen
// 							alert("open: " + curListObj.outerHTML);
// 								alert("open an: " + parListObj.outerHTML);
// 							jambo.addEvent('mouseover', function() {
// 							
// 								jambo.dhtml.openListSubMenue(curListObj, parListObj, moveInto);
// 								
// 							}, parListObj);
// 							
// 							//Event zum schliessen
// 							jambo.addEvent('mouseout', function() {
// 							
// 								curListObj.style.visibility = "hidden";
// // 								jambo.developerMsg("Close");
// 							}, parListObj);
						}
						
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
				},
				
				openListSubMenue: function(curListObj, parListObj, moveInto) {
			
					/*  DESCRIPTION: Oeffnet ein Listen Untermenue. Wird automatisch von
						jambo.makeListMenue() per Mouseover geöffnet
						
						AUFRUF: jambo.openListSubMenue(obj curListObj, obj parListObj, int moveInto)
						
					*/
					
					jambo.developerMsg(curListObj + " " + parListObj);
					
					try {
					
						if (typeof curListObj == "string") {
						
							curListObj = document.getElementById(curListObj);
						}
						
						if (typeof parListObj == "string") {
						
							parListObj = document.getElementById(parListObj);
						}
						
						jambo.developerMsg(curListObj.getAttribute("id") + " " + parListObj);
						
						var subMenueWidth = curListObj.offsetWidth;
						var subMenueHeight = curListObj.offsetHeight;
						
						var parMenueWidth = parListObj.offsetWidth;
						var parMenueHeight = parListObj.offsetHeight;
						var parMenuePos = jambo.nodes.getPosition(parListObj, true);
						
						//Positioniere Menue auf der X Achse
						if ((jambo.client.pageSizeX() - parMenuePos.left - parMenueWidth - subMenueWidth - 20) > 0) {
						
							//Menue nach rechts Oeffnen
							var posX = parMenueWidth - moveInto;
						}
						else {
						
							//Menue nach links Oeffnen
							var posX = moveInto;
						}
						
						//Position auf der Y Achse
// 						jambo.developerMsg("(" + parMenuePos.top + " - " + jambo.client.pageScrollY() + " - " + subMenueHeight + " - 20) > 0");
						if((parMenuePos.top - jambo.client.pageScrollY() - 20) > 0) {
						
							//Oeffne Menue nach unten
							var posY = parMenuePos.top;
						}
						else {
						
							var posY = (parMenueHeight - subMenueHeight);
						}
						
						//Positioniere Menue
// 						alert(posX + "x" + posY + " " + curListObj.outerHTML);
						
						curListObj.style.left = posX + "px";
						curListObj.style.top = posY + "px";
						
						//Zeige Menue an.
						curListObj.style.visibility = "visible";
					}
					catch (e) {
					
						jambo.developer.errMsg(e);
					}
					
				},
				
				highlightTableLines: function(htmlTable) {
				
					/* *DESCRIPTION: Highlighte die Zeilen bzw. tablebodys einer Tabelle.
						Es wird geprueft 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...]]);
					*/
					
					try {
					
						var classArr = new Array();
						for (var i = 1; i < jambo.dhtml.highlightTableLines.arguments.length; i++) {
						
							classArr.push(jambo.dhtml.highlightTableLines.arguments[i]);
						}
						
						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 nur 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, screenPosition) {
				
					/* DESCRIPTION Ermittle Position von curObject absolut zum Dokument
						Ist der Optionale Parameter screenPosition true wird die Position
						absolut zum Fenster zurückgegeben.
					
					AUFRUF obj jambo.nodes.getPosition(curObject [, screenPosition]);
					
					*/
					
					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;
							}
						}
						
						if (screenPosition) {
						
							pos.left = pos.left - jambo.client.pageScrollX();
							pos.top = pos.top - jambo.client.pageScrollY();
						}
						
// 						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");
	}