/*########################################################################################*/
/* Programmierung: Objektbasiert                                                          */
/* Inhalt: KIOSK + CMS Funktionen                                                         */
/* Verwendung: gemischte funktionsverwendung fuer CMS und Projekte                         */
/*########################################################################################*/

/*########################################################################################*/
/* aenderungen dokumentieren:                                                              */
/* /js/cms_kiosk_functions_docu.txt                                                       */
/*########################################################################################*/


//On ERROR bestätigen aber nur wenn nicht im DEV System 
onerror = function()
{
	if(window.location.host.indexOf('cms-dev.com') == -1 && window.location.host.indexOf('fcsvrl01.facilion.local') == -1)
	{
		return true;
	}
}


function Scroll_Bereich(pOjektName, pLayerName)
{
	this.scroll_bereich_objekt				= pOjektName;
	this.scroll_bereich_width 				= 0;
	this.scroll_bereich_height 				= 0;
	this.scroll_bereich_xpos 					= 0;
	this.scroll_bereich_ypos 					= 0;
	this.scroll_content_xpos 					= 0;
	this.scroll_content_ypos 					= 0;
	this.scroll_bereich_move 					= true;        // Zustaendig dafuer ob der Contentlayer durchfaehrt oder Zeilenweise springt
	this.scroll_bereich_zeilensprung 	= 4;
	this.scroll_bereich_zeilenhohe 		= 15;
	this.scroll_bereich_speed 				= 2;
	this.scroll_bereich_content_layer = '';
	this.scroll_bereich_clip 					= 'rect(top right bottom left)';
	this.allow_scroll 								= false;
	this.scroll_auto 									= false;
	this.scroll_auto_delay						= 0;
	this.scrolltimeout								= '';
	this.save_y_pos										= false;			//Damit kann die Y Position wiederhergestellt werden wenn man aus einer Detailansicht zurückkommt
	this.scroll_y_pos									= 0;					//Speichert die Y Position ab
	this.max_y_pos										= 0;
	
	//Klassenfunktion die den Layer in den uebergebenen Layer schreibt inklusiv Style einstellungen und Buttonscrollfunktionen
	this.erzeuge_scroll_layer = function(pFunction)
	{
		//Nur anlegen wenn diese Struktur des Layerkonstruktes noch nicht besteht
		if(document.getElementById(pLayerName+'_content') == null)
		{
			//Scroll Content Bereich anlegen
			var tmpDivCont = document.createElement('DIV');
			tmpDivCont.id = pLayerName+'_container';
			tmpDivCont.style.width = this.scroll_bereich_width+'px';
			tmpDivCont.style.height = this.scroll_bereich_height+'px';
			tmpDivCont.style.top = this.scroll_bereich_ypos;
			tmpDivCont.style.left = this.scroll_bereich_xpos;
			this.scroll_bereich_clip = 'rect('+this.scroll_bereich_ypos+'px '+((this.scroll_bereich_width+5)-this.scroll_bereich_xpos)+'px '+(this.scroll_bereich_height-this.scroll_bereich_ypos)+'px '+this.scroll_bereich_xpos+'px)';
			tmpDivCont.style.clip = this.scroll_bereich_clip;
			tmpDivCont.style.position = 'absolute';
			tmpDivCont.style.zIndex = '888';
			
			//ScrollContent Layer anlegen
			var tmpDivContent = document.createElement('DIV');
			tmpDivContent.id = pLayerName+'_content';
			tmpDivContent.className = 'scroll_content';
			tmpDivContent.style.width = this.scroll_bereich_width+'px';
			tmpDivContent.style.top = this.scroll_content_ypos;
			tmpDivContent.style.left = this.scroll_content_xpos;
			tmpDivContent.style.position = 'absolute';

			//Wenn der Layer Auto Scroll hat brauchen keine Scrollbuttons angelegt werden
			if(this.scroll_auto == false)
			{
				//ScrollButton UP anlegen
				var tmpScrollUp = document.createElement('DIV');
				tmpScrollUp.id = tmpDivContent.id+'_scroll_up';
				tmpScrollUp.className = 'button_scroll_up_inactive';
				tmpScrollUp.setAttribute('onclick', pOjektName+'.scroll_up_down(1,this)');
				tmpScrollUp.innerHTML = '<img src="/images/space.gif" border="0">';

				//ScrollButton DOWN anlegen
				var tmpScrollDown = document.createElement('DIV');
				tmpScrollDown.id = tmpDivContent.id+'_scroll_down';
				tmpScrollDown.className = 'button_scroll_down_inactive';
				tmpScrollDown.setAttribute('onclick', pOjektName+'.scroll_up_down(-1,this)');
				tmpScrollDown.innerHTML = '<img src="/images/space.gif" border="0">';
			}
				
			//ScrollContainer den ScrollContent Layer anfuegen
			tmpDivCont.appendChild(tmpDivContent);
					

			//ScrollContent Layer Name an Objekt uebergeben fuer nachtraegliche Contentaenderungen
			this.scroll_bereich_content_layer = tmpDivContent.id;
			
			//Erzeugte Layers dem uebergeben Layer Obejekt anfuegen
			var tmpContent = document.getElementById(pLayerName).innerHTML;
			
			document.getElementById(pLayerName).innerHTML = ''; //Zur sicherheit zuvor den Inhalt des Layers leeren
			document.getElementById(pLayerName).appendChild(tmpDivCont);

			//Wenn der Layer Auto Scroll hat brauchen keine Scrollbuttons angelegt werden
			if(this.scroll_auto == false)
			{
				//Scrollbuttons dem Scrollbereich anhaengen
				document.getElementById(pLayerName).appendChild(tmpScrollUp);
				document.getElementById(pLayerName).appendChild(tmpScrollDown);
				//Sonderfall fuer IE Funktionalitaet
				tmpScrollUp.outerHTML = tmpScrollUp.outerHTML;
				tmpScrollDown.outerHTML = tmpScrollDown.outerHTML;
			}
						
			if(tmpContent != '') this.schreibe_scroll_content(tmpContent,false);
			if(tmpContent == '' && this.scroll_auto == true)
			{			
				window.setTimeout(this.refresh_function,this.scroll_auto_delay*1000);
			}
			
			this.max_y_pos = (document.getElementById(this.scroll_bereich_content_layer).offsetHeight-this.scroll_bereich_height)*-1;
		}
	}

	//pContent = der einzufuegende Content
	//pAdd = true oder false || true es wird mit += dem bestehenden Inhalt etwas hinzugefuegt
	this.schreibe_scroll_content = function(pContent,pAdd)
	{
		if(pAdd) document.getElementById(this.scroll_bereich_content_layer).innerHTML += pContent;
		else document.getElementById(this.scroll_bereich_content_layer).innerHTML = pContent;

		document.getElementById(this.scroll_bereich_content_layer).style.top = '0px';

		//ScrollButtons aktivieren
		
		if(document.getElementById(this.scroll_bereich_content_layer).offsetHeight>this.scroll_bereich_height && !this.scroll_auto)
		{
			document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down';
		}
		
		//Editor Scrollanzeige
		if(top.fc_editor_tools && !this.scroll_auto)
		{
			document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up';
			document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down';
		}
		
		//Automatisches Scrollen aktivieren oder nicht
		if(this.scroll_auto)
		{
			this.start_auto_scrolling();
		}
	}

	//Funktion übernimmt den automatischen Scrollaufruf lt. Konfiguration
	this.start_auto_scrolling = function()
	{
		tmpFunktion = pOjektName+'.scroll_up_down(-1)';
		window.setTimeout(tmpFunktion,this.scroll_auto_delay*1000);
	}
	
	//Scrollt den Contentn nach unten
	this.scroll_up_down = function(pRichtung,pButton)
	{
		//Richtungsunterscheidung
		var scroll_distanz;
		var maxScrollPos;

		if(pRichtung<0)
		{
			//if(pButton=='button_scroll_down') if(document.getElementById('button_scroll_up_inactive')) document.getElementById('button_scroll_up_inactive').id = 'button_scroll_up';
			scroll_distanz = (this.scroll_bereich_zeilenhohe*this.scroll_bereich_zeilensprung)*-1;
			maxScrollPos = (document.getElementById(this.scroll_bereich_content_layer).offsetHeight-this.scroll_bereich_height)*-1;
			if(this.scroll_bereich_speed>0) this.scroll_bereich_speed = (this.scroll_bereich_speed*-1);
		}
		else
		{
			//if(pItem=='button_scroll_up') if(document.getElementById('button_scroll_down_inactive')) document.getElementById('button_scroll_down_inactive').id = 'button_scroll_up';
			scroll_distanz = this.scroll_bereich_zeilenhohe*this.scroll_bereich_zeilensprung;
			maxScrollPos = 0;
			if(this.scroll_bereich_speed<0) this.scroll_bereich_speed = (this.scroll_bereich_speed*-1);
		}

		aktPos = document.getElementById(this.scroll_bereich_content_layer).style.top.replace('px','');
		aktPos = aktPos*1;

		if(this.allow_scroll == false)
		{
			this.allow_scroll = true;
			buttonKlick = true;
			newPosition = aktPos+scroll_distanz;

			//Richtungsunterscheidung fuer neu Positionsberechnung
			if(pRichtung<=0)
			{
				//Max Scroll Pos fuer nach oben
				if(newPosition-1<maxScrollPos)
				{
					newPosition = maxScrollPos;
					if(!this.scroll_auto) document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down_inactive';
					//if(document.getElementById('down_active')) document.getElementById('down_active').id = 'rdowninactive';
					
					//Refresh Funktion Autoscroller
					if(this.scroll_auto)
					{
						window.setTimeout(this.refresh_function,this.scroll_auto_delay*1000);
					}
				}
				else
				{
					//Automatischen Scrollen wieder aufrufen
					if(this.scroll_auto)
					{
						tmpFunktion = pOjektName+'.scroll_up_down(-1)';
						window.setTimeout(tmpFunktion,this.scroll_auto_delay*1000);
					}
				}
			}
			else
			{
				//Max Scroll Pos fuer nach unten
				if(newPosition+1>=maxScrollPos)
				{
					newPosition = maxScrollPos;
					if(!this.scroll_auto) document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up_inactive';
					//if(document.getElementById('up_active')) document.getElementById('up_active').id = 'rupinactive';
				}
			}			
		}

		if(aktPos>newPosition && this.allow_scroll == true && pRichtung<0)
		{
			if(!this.scroll_auto) document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up';
			if(this.scroll_bereich_move) document.getElementById(this.scroll_bereich_content_layer).style.top = (aktPos+this.scroll_bereich_speed)+'px';
			else
			{
				document.getElementById(this.scroll_bereich_content_layer).style.top = newPosition+'px';
				this.allow_scroll = false;
			}
		}
		else if(aktPos<newPosition && this.allow_scroll == true && pRichtung>0)
		{
			if(!this.scroll_auto) document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down';
			if(this.scroll_bereich_move) document.getElementById(this.scroll_bereich_content_layer).style.top = (aktPos+this.scroll_bereich_speed)+'px';
			else
			{
				document.getElementById(this.scroll_bereich_content_layer).style.top = newPosition+'px';
				this.allow_scroll = false;
			}
		}
		else
		{
			this.allow_scroll = false;
			buttonKlick = false;
		}
		if(this.allow_scroll) setTimeout(pOjektName+'.scroll_up_down(\''+pRichtung+'\',\''+pButton+'\')',1);
		
		//y Pos zwischenspeichern
		this.scroll_y_pos = document.getElementById(this.scroll_bereich_content_layer).style.top;
		this.scroll_y_pos = this.scroll_y_pos.replace('px','')*1;
		
		
		//Editor Scrollanzeige
		if(top.fc_editor_tools)
		{
			document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up';
			document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down';
		}
	}
	
	//Scroll Resetfunktion
	this.reset_scroll_layer = function()
	{
		
		document.getElementById(this.scroll_bereich_content_layer).style.top = 0+'px';
		
		if(!this.scroll_auto)
		{	
			if(this.scroll_bereich_height >= document.getElementById(this.scroll_bereich_content_layer).offsetHeight)
			{
				document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up_inactive';
				document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down_inactive';
			}
			else
			{
				document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up_inactive';
				document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down';
			}
			
			//Editor Scrollanzeige
			if(top.fc_editor_tools)
			{
				document.getElementById(this.scroll_bereich_content_layer+'_scroll_up').className = 'button_scroll_up';
				document.getElementById(this.scroll_bereich_content_layer+'_scroll_down').className = 'button_scroll_down';
			}
		}
	}
}

// ajax navigation / verlinkung

var ajax_navigation = new Ajax_Navigation;

function Ajax_Navigation()
{
	this.history_object_name	 = ''; // wird hier ein objekt angegeben wird "objektname.add_history_item(p_anzeigedatei, p_sid, p_zusatzparameter)" aufgerufen
	this.afterload_object_name = ''; // wird hier ein objekt angegeben wird nach dem laden der neuen seite "objektname.afterload(p_anzeigedatei, p_sid, p_zusatzparameter)" aufgerufen
	this.aktive_sprache_id		 = 0;

	this.seitenwechsel = function(p_sid, p_anzeigedatei, p_zusatzparameter, p_seiten_aus_projekt, p_spezialaktion, p_template_neu_laden)
	{
		// p_sid 								... id der zu ladenden seite
		// p_anzeigedatei				... zu ladende datei
		// p_zusatzparameter		... zusätzliche parameter die an die zu ladende datei mitübergeben werden
		// p_seiten_aus_projekt	... seiten/dateien werden ausgelesen aus: '' -> aktuelles projekt, 'root' -> root projekt
		// p_spezialaktion			... zb: "direkt_ausfuehren" -> der seitenaufruf wird immer sofort ausgeführt (auch im editor)
		// p_template_neu_laden	... neu laden des templates erzwingen
		
		if(p_seiten_aus_projekt != 'root')
		{
			p_seiten_aus_projekt = '';
		}
		
		// ist die anzuzeigende datei eine editorseite?
		
		var filtern = p_anzeigedatei.substr(p_anzeigedatei.lastIndexOf('/') + 1, 3);
		
		// die anzeigedatei muss eine editorseite sein
		
		var ausfuehren = new Object();
		
		if(document.getElementById('ladebalken'))
		{
			ausfuehren.vordef = 'onReadyStateChange=ladebalken';
		}
		
		ausfuehren.onSuccess = function(req)
		{
			var rueckgabe = req.responseText.split('@!TCJB!@');

			var template_struktur_gleich			= rueckgabe[0];
			var template_css_js_gleich				= rueckgabe[1];
			var title_neu											= rueckgabe[2];
			var css_js_neu										= rueckgabe[3].replace(/<headscript/gi, '<script').replace(/<\/headscript>/gi, '<\/script>');
			var body_inhalt_neu								= rueckgabe[4];
			var templateangaben								= rueckgabe[5];
			var body_onload_function					= rueckgabe[6];
			var body_class										= rueckgabe[7];
			var ist_menuepunkt_id_zugeordnet	= rueckgabe[8];
			ajax_navigation.aktive_sprache_id	= rueckgabe[9];
			var bereichlogging_image					= rueckgabe[10]; // imagetag mit src, wird angehängt wenn ein templateswitch durchgeführt wird
			
			// temporären sicherungslayer erzeugen

			temp_layer = document.createElement('div');
			temp_layer.style.display	= 'none';

			document.body.parentNode.appendChild(temp_layer);

			// neuen title setzen
			
			document.title = title_neu;
			
			if(template_css_js_gleich == 'false')
			{
				var head_childnodes					= document.body.parentNode.firstChild.childNodes;
				var count										= head_childnodes.length;
				var head_elemente_loeschen	= new Array();
				var i_loeschen							= 0;
				
				// auszutauschende (oder komplett zu entfernende) script- und (css) linkelemente im head ermiteln

				for(i = 0; i < count; i++)
				{
					if(head_childnodes[i] && head_childnodes[i].tagName)
					{
						switch(head_childnodes[i].tagName.toLowerCase())
						{
							case 'script':
							case 'link':
								
								if(head_childnodes[i].href)
								{
									var script_link_include = new RegExp('<.*' + head_childnodes[i].href + '.*>', 'i');
								}
								else if(head_childnodes[i].src)
								{
									var script_link_include = new RegExp('<.*' + head_childnodes[i].src + '.*>', 'i');
								}
								
								if(css_js_neu.search(script_link_include, '') != -1)
								{
									// altes script oder alter link in css_js_neus vorhanden -> nicht neu laden (aus css_js_neu entfernen)
								
									var css_js_neu = css_js_neu.replace(script_link_include, '');
								}
								else
								{
									// altes script oder alter link in css_js_neus nicht vorhanden -> element löschen
								
									head_elemente_loeschen[i_loeschen] = head_childnodes[i];
									i_loeschen++;
								}

								break;
						}
					}
					else
					{
						head_elemente_loeschen[i_loeschen] = head_childnodes[i];
						i_loeschen++;
					}
				}

				if(document.body.outerHTML)
				{
					// ie bugfix

					document.body.style.backgroundColor = '#ffffff';
					document.body.style.backgroundColor = '';
				}
				
				// neue script- und linkelemente in den temp_layer schreiben

				temp_layer.innerHTML = '<br />' + css_js_neu.replace(/>\s/g, '><br />');
				
				// neue script- und linkelemente im head anhaengen

				var head_element								= document.body.parentNode.firstChild;
				var temp_layer_childnodes				= temp_layer.childNodes;
				var count_temp_layer_childnodes	= temp_layer_childnodes.length;

				for(i = 0; i < count_temp_layer_childnodes; i++)
				{
					if(temp_layer_childnodes[i] && temp_layer_childnodes[i].tagName)
					{
						switch(temp_layer_childnodes[i].tagName.toLowerCase())
						{
							case 'link':

								if(document.body.outerHTML)
								{
									// ie bugfix

									temp_layer_childnodes[i].disabled = true;
								}

							case 'script':
								
								head_element.appendChild(temp_layer_childnodes[i]);

								break;
						}
					}
				}

				// alte script- und linkelemente löschen

				for(i = 0; i < head_elemente_loeschen.length; i++)
				{
					head_elemente_loeschen[i].parentNode.removeChild(head_elemente_loeschen[i]);
				}

				// neue linkelemente aktivieren

				if(document.body.outerHTML)
				{
					// ie bugfix

					for(i = 0; i < head_childnodes.length; i++)
					{
						if(head_childnodes[i] && head_childnodes[i].tagName)
						{
							switch(head_childnodes[i].tagName.toLowerCase())
							{
								case 'link':

									head_childnodes[i].disabled = false;

									break;
							}
						}
					}
				}
			}
			
			if(template_struktur_gleich == 'false')
			{
				// struktur neu laden

				var layer					= document.getElementsByTagName('div');
				var keep_layer		= new Array();
				var i_keep_layer	= 0;

				for(i = 0; i < layer.length; i++)
				{
					if(layer[i].getAttribute('keep') == 'true')
					{
						// ein layer der nicht verändert werden soll wurde gefunden

						 keep_layer[i_keep_layer] = layer[i];

						 var anfang_index			= '<!-- keep id="' + keep_layer[i_keep_layer].id + '" -->';
						 var pos_keep_anfang	= body_inhalt_neu.indexOf(anfang_index);

						 if(pos_keep_anfang != -1 )
						 {
							var ende_index		= '<!-- keep id="' + keep_layer[i_keep_layer].id + '" end -->';
							var pos_keep_ende	= body_inhalt_neu.indexOf(ende_index);

							// layer inhalt aus dem layer entfernen um einen möglichen ladevorgang eines flashs zu verhindern

							body_inhalt_neu = body_inhalt_neu.replace(body_inhalt_neu.substring(pos_keep_anfang, pos_keep_ende + ende_index.length), '');
						 }

						 i_keep_layer++;
					}
				}
				
				temp_layer.innerHTML = body_inhalt_neu;

				// keep layer sichern

				for(i = 0; i < keep_layer.length; i++)
				{
					temp_layer.appendChild(keep_layer[i]);
				}

				document.body.innerHTML = body_inhalt_neu + bereichlogging_image + '<span id="templateangaben">' + templateangaben + '</span>';

				for(i = 0; i < keep_layer.length; i++)
				{
					var id_replace_element = keep_layer[i].id;

					// id ändern damit nicht diese id als "im neuen template existent" gefunden wird

					keep_layer[i].id += '_keep_layer_temp_id';

					// ist der layer auch im neuen template vorhanden?

					var replace_element = document.getElementById(id_replace_element);

					if(replace_element)
					{
						keep_layer[i].id = keep_layer[i].id.replace('_keep_layer_temp_id', '');

						replace_element.parentNode.replaceChild(keep_layer[i], replace_element);
					}
				}
			}
			else
			{
				// templateangaben aktualisieren
			
				var templateangaben_element = document.getElementById('templateangaben').firstChild;
				
				templateangaben_element.replaceData(11, templateangaben_element.nodeValue.indexOf(') tplxhtml') - 11, templateangaben.replace('<!-- tplxhtml (', '').replace(') tplxhtml -->', ''));
			
				// versionsblöcke werden durch '@!VB!@' getrennt ausgeliefert
				
				var edit_bereiche_array = ajax_navigation.elemente_nach_attribut_suchen(document.body, 'div', 'onkeydown', 'fc_editor_block=1;');

				var bloecke = body_inhalt_neu.split('@!VB!@');

				for(i = 0; i < edit_bereiche_array.length; i++)
				{
					if(edit_bereiche_array[i])
					{
						if(bloecke[i])
						{
							edit_bereiche_array[i].innerHTML = bloecke[i];
						}
						else
						{
							edit_bereiche_array[i].innerHTML = '';
						}
					}
				}
			}
			
			document.body.parentNode.removeChild(temp_layer);
			
			if(template_struktur_gleich == 'false')
			{
				if(body_onload_function != '')
				{
					var onload_function = Function(body_onload_function);
				
					onload = onload_function;
				}
				else
				{
					onload = null;
				}
				
				document.body.className = body_class;
			}
			
			// onload funktion des templates ausführen
			
			if(typeof(onload) == 'function')
			{
				var onload_function = onload;
			
				onload_function();
			}
			
			if(top.fc_editor_site)
			{
				var editor_content_location = String(top.fc_editor_site.location);
				
				editor_content_location = '/' + p_anzeigedatei + '?sid=' + p_sid;
				
				top.fc_editor_tools.fc_editor.init_editor(editor_content_location);
				
				// editor tasten event handler onkeyup
	
				top.fc_editor_tools.document.onkeyup = function()
				{
					top.fc_editor_tools.fc_edit.tasten_event_handler();
				}

				if(typeof(top.fc_editor_site.document.onkeyup) == 'function')
				{
					var onkeyup_original = String(top.fc_editor_site.document.onkeyup);
				
					if(onkeyup_original.search('top.fc_editor_tools.fc_edit.tasten_event_handler') == - 1)
					{
						// editor tasten event handler nicht gefunden -> bestehende funktion ergänzen
						
						onkeyup_original = onkeyup_original.replace(/^\s*function(\s|\w)*\(\)\s*\{/im, 'top.fc_editor_tools.fc_edit.tasten_event_handler();');
						onkeyup_original = onkeyup_original.replace(/\}\s*$/, '');
						
						top.fc_editor_site.document.onkeyup = Function(onkeyup_original);
					}
				}
				else
				{
					// keine onkeyup funktion gefunden -> editor tasten event handler als onkeyup funktion festlegen
				
					top.fc_editor_site.document.onkeyup = function()
					{
						top.fc_editor_tools.fc_edit.tasten_event_handler();
					}
				}
			}
			
			if(ist_menuepunkt_id_zugeordnet > 0 && p_spezialaktion != 'direkt_ausfuehren_menue')
			{
				var menuepunkt = document.getElementById('menuepunkt_id_' + ist_menuepunkt_id_zugeordnet);
				
				if(menuepunkt && menuepunkt.firstChild)
				{
					var menuepunkt_onclick	= String(menuepunkt.firstChild.onclick);
					menuepunkt_onclick			= menuepunkt_onclick.substring(0, menuepunkt_onclick.indexOf('ajax_navigation.seitenwechsel'));
					
					var document_onkeyup_position = menuepunkt_onclick.indexOf('document.onkeyup = \'\'');
					
					if(document_onkeyup_position == -1)
					{
						document_onkeyup_position = menuepunkt_onclick.indexOf('document.onkeyup = ""');
					}
					
					if(document_onkeyup_position != -1)
					{
						menuepunkt_onclick = menuepunkt_onclick.substr(document_onkeyup_position + 23);
					}
					
					menuepunkt_onclick = menuepunkt_onclick.replace(/this\./g, 'TTHHIISS.');
					menuepunkt_onclick = menuepunkt_onclick.replace(/this/g, 'document.getElementById(\'menuepunkt_id_' + ist_menuepunkt_id_zugeordnet + '\').firstChild');
					menuepunkt_onclick = menuepunkt_onclick.replace(/TTHHIISS\./g, 'this.');
					
					var menuepunkt_onclick_funktion = Function(menuepunkt_onclick);

					menuepunkt_onclick_funktion();
				}
			}
			
			if(ajax_navigation.afterload_object_name != '')
			{
				eval(ajax_navigation.afterload_object_name).afterload('/' + p_anzeigedatei, p_sid, p_zusatzparameter);
			}
		}
		
		var templateangaben = document.body.innerHTML.match(/<!-- tplxhtml \((\S*)\) tplxhtml -->/);
		
		if(templateangaben)
		{
			templateangaben = templateangaben[1];
		}
		else
		{
			templateangaben = '';
		}
		
		if(p_template_neu_laden)
		{
			templateangaben = '';
		}
		
		p_anzeigedatei = p_anzeigedatei.replace(/^\/?/, '');
			
		if(!top.fc_editor_tools || p_spezialaktion == 'direkt_ausfuehren_menue' || p_spezialaktion == 'direkt_ausfuehren' || p_spezialaktion == 'link_verfolgen')
		{
			if(this.history_object_name != '')
			{
				// history eintrag erzeugen falls ein history objekt angegeben wurde
			
				eval(this.history_object_name).add_history_item('/' + p_anzeigedatei, p_sid, p_zusatzparameter);
			}
			
			if(top.fc_editor_tools)
			{
				// link verfolgen icon ausblenden
			
				var link_verfolgen_icon = top.fc_editor_tools.document.getElementById('link_verfolgen_symbol');
			
				if(link_verfolgen_icon)
				{
					link_verfolgen_icon.style.display = 'none';
				}
				
				// editor_popup_window zerstören
				
				if(top.fc_editor_tools.editor_popup_window)
				{
					if(typeof(top.fc_editor_tools.editor_popup_window.popup_object) == 'object')
					{
						top.fc_editor_tools.editor_popup_window.popup_object.parentNode.removeChild(top.fc_editor_tools.editor_popup_window.popup_object);
					}
				}
			}
			
			ajax.send_load('/' + p_anzeigedatei + '?sid=' + p_sid + '&ajax=true&templateangaben=' + templateangaben + '&seiten_aus_projekt=' + p_seiten_aus_projekt + p_zusatzparameter, '', ausfuehren);
		}
		else
		{
			// link verfolgen icon einblenden und mit seitenwechsel-funktion belegen
		
			var link_verfolgen_icon = top.fc_editor_tools.document.getElementById('link_verfolgen_symbol');
			
			if(link_verfolgen_icon)
			{
				link_verfolgen_icon.style.display = 'block';
				link_verfolgen_icon.onclick = Function('ajax_navigation.seitenwechsel(' + p_sid + ', \'/' + p_anzeigedatei + '\', \'' + p_zusatzparameter + '\', \'' + p_seiten_aus_projekt + '\', \'link_verfolgen\');');
			}
		}
	}
	
	// elmente nach attribut suchen

	this.elemente_nach_attribut_suchen = function(p_element, p_tag_name, p_attribute_name, p_attribute_searchvalue)
	{
		var objects_array						 = p_element.getElementsByTagName(p_tag_name);
		var object_attr_search_value = (typeof(p_attribute_searchvalue) != 'undefined') ? RegExp('(^| )' + p_attribute_searchvalue + '($| )', 'm') : null;
		var objects_return_array		 = new Array();
		var check_object;
		var check_attribute;
		var check_attribute_string	 = '';
		
		for(i = 0; i < objects_array.length; i++)
		{
			check_object	= objects_array[i];
			check_attribute	= check_object.getAttribute(p_attribute_name);
			
			check_attribute_string = check_attribute ? String(check_attribute) : '';
			
			if(check_attribute && (object_attr_search_value == null || (object_attr_search_value.test(check_attribute_string))))
			{
				objects_return_array.push(check_object);
			}
		}

		return objects_return_array;
	}
}

// CMS_Menu

function CMS_Menu()
{
	this.history = new Array();
	
	this.ids_menue_layer										= new Array();
	this.classnames_menu_item_layer					= new Array();
	this.classname_menu_item_inactive				= 'menuepunkt_inaktiv';
	this.classname_submenu_container				= 'sub_block';
	this.last_activated_menu_item						= ''; // wichtig um nach temporärem aktivieren eines menüpunktes (zb: beim mouseover event) den original aktivierten menüpunkt wiederherstellen zu können
	this.hide_menu_item_timer								= '';
	this.hide_menu_item_timeout							= 500;
	this.submenu_animation_timer						= '';
	this.submenu_animation_delay						= 20;
	this.submenu_animation_p_element				= '';
	this.submenu_animation_steps						= 10;
	this.submenu_animation_stepsize					= 10;
	this.submenu_animation_direction				= 'right';
	this.submenu_animation_startpos_offset	= 0;
	this.submenu_animation_maxheight_offset	= 0;
	this.submenu_animation_maxwidth_offset	= 0;
	this.submenu_animation_startpos					= -1;
	this.submenu_animation_maxsize					= -1;
	
	// init bei der erzeugung des objektes aufrufen
	
	this.init = function()
	{
		this.last_activated_menu_item = this.search_menu_item();
	}
	
	this.activate_menu_item = function(p_element, p_activate_temp, p_animation_starten)
	{
		// letzten aktivierten menüpunkt speichern
		
		this.last_activated_menu_item = p_activate_temp ? this.last_activated_menu_item : p_element;
		
		clearTimeout(this.hide_menu_item_timer);
		
		// menüpunkt ebene ermitteln
		
		var menu_item_class	= '';
	
		for(var i = 0; i < this.classnames_menu_item_layer.length; i++)
		{
			if(typeof p_element == 'object' && typeof p_element.parentNode == 'object' && p_element.parentNode.className && p_element.parentNode.className.search(this.classnames_menu_item_layer[i]) > -1)
			{
				menu_item_class	= this.classnames_menu_item_layer[i];
				
				break;
			}
		}
		
		if(menu_item_class != '')
		{
			var container						= new Array();
			var activate_menu_items	= new Array();
			
			// erste menüebenen aller menüs deaktivieren
			
			for(var i_layer = 0; i_layer < this.ids_menue_layer.length; i_layer++)
			{
				container.push(document.getElementById(this.ids_menue_layer[i_layer]));
			}
			
			// zu aktivierende menüpunkte ermitteln
			
			var activate_menu_search_item = p_element.lastChild;
			
			do
			{
				activate_menu_search_item = activate_menu_search_item.parentNode.parentNode;
				
				activate_menu_items.push(activate_menu_search_item);
				
				if(activate_menu_search_item.className.indexOf(this.classnames_menu_item_layer[0]) == -1)
				{
					container.push(activate_menu_search_item.parentNode);
				}
				
				container.push(activate_menu_search_item.lastChild);
			}
			while(activate_menu_search_item.className.indexOf(this.classnames_menu_item_layer[0]) == -1);
			
			// alle menüpunkte in den ausgewählten containern deaktivieren
			
			for(var i_container = 0; i_container < container.length; i_container++)
			{
				ebene_container = container[i_container];
				
				for(var i = 0; i < ebene_container.childNodes.length; i++)
				{
					if(ebene_container.childNodes[i].tagName && ebene_container.childNodes[i].tagName.search(/div/i) != -1)
					{
						ebene_container.childNodes[i].className = ebene_container.childNodes[i].className.replace(' ' + this.classname_menu_item_inactive, '') + ' ' + this.classname_menu_item_inactive;
						ebene_container.childNodes[i].lastChild.style.display = 'none';
					}
				}
			}
			
			// alle gewählten menüpunkte aktivieren (inaktiv classname entfernen)
			
			for(var i = 0; i < activate_menu_items.length; i++)
			{
				activate_menu_items[i].className = activate_menu_items[i].className.replace(' ' + this.classname_menu_item_inactive, '');
				
				if(activate_menu_items[i].lastChild.hasChildNodes())
				{
					activate_menu_items[i].lastChild.style.display = 'block'; // nur anwenden wenn nicht die tiefste menüebene ausgewählt wurde
				}
			}
		}
		
		// animation starten?
		
		if(p_animation_starten)
		{
			if(this.submenu_animation_p_element != p_element)
			{
				this.submenu_animation_clear();
				
				this.displaystyle_temp = p_element.parentNode.lastChild.style.display;
				p_element.parentNode.lastChild.style.display = 'none';
				
				this.submenu_animation_counter	 = 0;
				this.submenu_animation_p_element = p_element;
				
				if(p_element.parentNode.lastChild.hasChildNodes())
				{
					this.submenu_animation_timer = setInterval('cms_menu.submenu_animation()', this.submenu_animation_delay);
					this.submenu_animation();
				}
				else
				{
					p_element.parentNode.lastChild.style.display = this.displaystyle_temp;
				}
			}
		}
		else
		{
			this.submenu_animation_clear();
		}
	}
	
	this.afterload = function(p_anzeigedatei, p_sid, p_zusatzparameter)
	{
		// zu aktivierenden menüpunkt suchen
		
		var activate_menu_item = this.search_menu_item(p_sid);
		
		if(typeof activate_menu_item == 'object')
		{
			this.activate_menu_item(activate_menu_item);
		}
	}
	
	this.search_menu_item = function(p_sid)
	{
		var menu_item = false;
		
		for(var i_mc = 0; i_mc < this.ids_menue_layer.length; i_mc++)
		{
			if(document.getElementById(this.ids_menue_layer[i_mc]))
			{
				var menu_container			= document.getElementById(this.ids_menue_layer[i_mc]);
				var menu_container_divs = menu_container.getElementsByTagName('div');
				
				for(i = 0; i < menu_container_divs.length; i++)
				{
					if(menu_container_divs[i].id.indexOf('menuepunkt_id') != -1)
					{
						if(p_sid)
						{
							// nach dem menüpunkt suchen an den die übergebene seiten-id (p_sid) angehängt ist
							
							if(String(menu_container_divs[i].firstChild.onclick).indexOf('ajax_navigation.seitenwechsel(' + p_sid + ',') != -1)
							{
								menu_item = menu_container_divs[i].firstChild;
							}
						}
						else
						{
							// nach dem momentan aktiven menüpunkt suchen (der von der ebene her "tiefste" menüpunkt)
							
							if(String(menu_container_divs[i].firstChild.className).indexOf('menuepunkt_inaktiv') == -1)
							{
								menu_item = menu_container_divs[i].firstChild;
							}
						}
					}
				}
			}
		}
		
		return menu_item;
	}
	
	this.activate_last_menu_item = function()
	{
		this.hide_menu_item_timer = setTimeout('cms_menu.activate_menu_item(cms_menu.last_activated_menu_item);', this.hide_menu_item_timeout);
	}
	
	this.submenu_animation = function()
	{
		this.submenu_animation_p_element.parentNode.lastChild.style.overflow = 'hidden';
		
		this.submenu_animation_p_element.parentNode.lastChild.scrollLeft = this.submenu_animation_direction == 'right' ? this.submenu_animation_p_element.parentNode.lastChild.firstChild.offsetWidth : 0;
		this.submenu_animation_p_element.parentNode.lastChild.scrollTop	 = this.submenu_animation_direction == 'down' ? this.submenu_animation_p_element.parentNode.lastChild.offsetHeight : 0;
		
		this.submenu_animation_p_element.parentNode.lastChild.style.display = this.displaystyle_temp;
		
		if(this.submenu_animation_counter < this.submenu_animation_steps)
		{
			this.submenu_animation_counter++;
			
			var nextsize = this.submenu_animation_counter * this.submenu_animation_stepsize;
			
			switch(this.submenu_animation_direction)
			{
				case 'left':
					
					if(this.submenu_animation_startpos == -1)
					{
						this.submenu_animation_startpos = this.submenu_animation_p_element.parentNode.lastChild.offsetLeft + this.submenu_animation_p_element.parentNode.lastChild.offsetWidth + this.submenu_animation_startpos_offset;
					}
					
					var nextsize = this.submenu_animation_counter * this.submenu_animation_stepsize;
					
					this.submenu_animation_p_element.parentNode.lastChild.style.left = this.submenu_animation_maxsize > nextsize ? (this.submenu_animation_startpos - nextsize) + 'px' : (this.submenu_animation_startpos - this.submenu_animation_maxsize) + 'px';
				
				case 'right':
					
					if(this.submenu_animation_maxsize == -1)
					{
						this.submenu_animation_maxsize = this.submenu_animation_p_element.parentNode.lastChild.offsetWidth + this.submenu_animation_maxwidth_offset;
					}
					
					this.submenu_animation_p_element.parentNode.lastChild.style.width = this.submenu_animation_maxsize > nextsize ? nextsize + 'px' : this.submenu_animation_maxsize + 'px';
					
					break;
				
				case 'up':
					
					if(this.submenu_animation_startpos == -1)
					{
						this.submenu_animation_maxsize = this.submenu_animation_p_element.parentNode.lastChild.offsetHeight + this.submenu_animation_maxheight_offset;
						
						this.submenu_animation_startpos = this.submenu_animation_p_element.parentNode.lastChild.offsetTop + this.submenu_animation_p_element.parentNode.lastChild.offsetHeight + this.submenu_animation_p_element.parentNode.offsetHeight + this.submenu_animation_startpos_offset;
					}
					
					var nextsize = this.submenu_animation_counter * this.submenu_animation_stepsize;
					
					this.submenu_animation_p_element.parentNode.lastChild.style.top = this.submenu_animation_maxsize > nextsize ? (this.submenu_animation_startpos - nextsize) + 'px' : (this.submenu_animation_startpos - this.submenu_animation_maxsize) + 'px';
				
				case 'down':
					
					if(this.submenu_animation_maxsize == -1)
					{
						this.submenu_animation_maxsize = this.submenu_animation_p_element.parentNode.lastChild.offsetHeight + this.submenu_animation_maxheight_offset;
					}
					
					this.submenu_animation_p_element.parentNode.lastChild.style.height = this.submenu_animation_maxsize > nextsize ? nextsize + 'px' : this.submenu_animation_maxsize + 'px';
					
					break;
			}
			
			if(this.submenu_animation_maxsize > 0 && this.submenu_animation_maxsize < nextsize)
			{
				this.submenu_animation_clear();
			}
		}
		else
		{
			this.submenu_animation_clear();
		}
	}
	
	this.submenu_animation_clear = function()
	{
		clearInterval(this.submenu_animation_timer);
		
		this.submenu_animation_startpos	= -1;
		this.submenu_animation_maxsize	= -1;
		
		if(typeof this.submenu_animation_p_element == 'object')
		{
			this.submenu_animation_p_element.parentNode.lastChild.style.width		 = '';
			this.submenu_animation_p_element.parentNode.lastChild.style.height	 = '';
			this.submenu_animation_p_element.parentNode.lastChild.style.left		 = '';
			this.submenu_animation_p_element.parentNode.lastChild.style.top			 = '';
			this.submenu_animation_p_element.parentNode.lastChild.style.overflow = '';
		}
	}
	
	this.add_history_item = function(p_file, p_sid, p_params)
	{
		this.history.push(p_file + '@#@' + p_sid + '@#@' + p_params);
	}
	
	this.history_back = function()
	{
		if(this.history.length > 1)
		{
			this.history.pop();
			
			var last_page_info		= this.history.pop();
			var last_page_details	= last_page_info.split('@#@');
			
			var file	 = last_page_details[0];
			var sid		 = last_page_details[1];
			var params = last_page_details[2];

			ajax_navigation.seitenwechsel(sid, file, params, '', 'direkt_ausfuehren');
		}
	}
}

//AJAX LOAD DATA
function Auto_Refresh_Ajax_Load_Data(pObjektName)
{
	//XML Datei laden	
	this.ausfuehren 													= new Object();
	this.ausfuehren.objektName								= pObjektName;
	this.ausfuehren.datei_pfad								= '';									//Dateipfad für die zu ladenden Daten
	this.ausfuehren.onsuccess_funktion				= '';									//Funktion die nach erfolgreichen laden ausgeführt werden soll
	this.ausfuehren.onerror_funktion					= '';									//Funktion die nach fehlerhaften laden ausgeführt werden soll
	this.ausfuehren.onerror_timeout						= 1;									//Timeout für die Ausführung der Errorfunktion
	this.ausfuehren.refresh_daten_timeout			= 0;									//Timeout für das refreshen der Daten im Objekt 0 == nicht refreshen; jeder andere Wert bestimmt den Timeout für das ausführen
	this.ausfuehren.daten_aktualisieren				= true;								//Variable kann von externen Funktionen in diesem Objekt steuern ob das XML aktuell überschrieben werden darf z.B.: Es werden gerade Infos aus dem XML Objekt glesen dann darf das Objekt nicht aktualisiert werden erst wenn es wieder freigegeben wurde
		
	//Successfunktion erfolgreich geladen
	this.ausfuehren.onSuccess = function(req) 
	{
		this.xml_data = req.responseXML;
		this.xml_text = req.responseText;
		
		//Refresh aktivieren
		if(this.refresh_daten_timeout>0)
		{
			tmpFunktion = this.objektName+'.load_daten()';
			setTimeout(tmpFunktion,this.refresh_daten_timeout);
		}
		
		//Successfunktion wenn gesetzt ausführen
		if(this.onsuccess_funktion != '') eval(this.onsuccess_funktion);
	}
	
	//Errofunktion fehlerhaft geladen 
	this.ausfuehren.onError = function()
	{
		//alert('ERROR LOAD\n\n'+this.onerror_funktion);
		//Errorfunktion wenn gesetzt ausführen
		if(this.onerror_funktion != '') setTimeout(this.onerror_funktion,this.onerror_timeout);
	}
	
	//Loadfunktion zum laden der Daten
	this.load_daten = function()
	{
		//Aufruf zum laden der übergebenen Datei
		ajax.send_load(this.ausfuehren.datei_pfad, '', this.ausfuehren);
	}
}

//Funktion zum löschen der Body Load funktion aus Flash für automatisches Steuern der länge für die Schaltung
function killBodyLoad(pValue)
{	
	clearTimeout(timeoutvariable);
	onload = function()
	{
	
	}
}