/*Allgemeine Funktionen, Copyright Benedikt Morschheuser 2009*/
//globale Variablen
var pageLoadManager = null; //globales Objekt
var activeSubmitButton = ""; //globale Variable
var changed = false; //globale Variable

//Allgemeine - globale Funktionen
//Neuere Version davon mit targetElement, egal was für eins und Eventübergabe
function general_function_load_Ajax_to_Element(targetElement, urlStr, sendMethod, sendParameter, doEventAfterLoadedContent, confirmChanges, doReloadManager){//doReloadManager normal null, if not null-> kein Reload
		if(confirmChanges){
			if (unloadWithAjax()){//User bestätigt -> ajaxload ausführen
				general_function_load_Ajax_to_Element(targetElement, urlStr, sendMethod, sendParameter, doEventAfterLoadedContent, false, doReloadManager);
			}
		}else{
			if(targetElement){
				general_function_buildLoadingAnimation(targetElement);
			}
			var HTML_Request = new Request({
					url: urlStr,
					method: sendMethod,
					onSuccess: function() {
						if(targetElement){
							general_function_destroyLoadingAnimation(targetElement);
							if(doEventAfterLoadedContent&&doEventAfterLoadedContent!=''){
								//übergebenes Event ausführen, dieses kümmert sich um html einbau und pageLoadManager!!!
								targetElement.fireEvent(doEventAfterLoadedContent,HTML_Request.response.text.toString());
							}else{//sonst
								targetElement.set('html',HTML_Request.response.text.toString());
								//domready ausführen
								if(doReloadManager==null){
									if(pageLoadManager!=null){
										pageLoadManager.initialize();
									}else{
										pageLoadManager = new PageLoadManager();
									}
								}
							}
						}
					},
					onFailure: function() {
						alert('Fehler, kann keinen HTML-Request senden, versuchen Sie es noch einmal oder kontaktieren Sie den Administrator!');
					}
			});
			HTML_Request.send(sendParameter);//mache request
		}
}
function general_function_JSONRequest(ausloeser_element,urlStr, sendParameter, doEventAfterLoadedContent, loadingAni){//loadingAni normal = true, falls false, dann ohne
			if(ausloeser_element&&loadingAni!=false){
				general_function_buildLoadingAnimation(ausloeser_element);
			}
			var request = new Request.JSON({
					url: urlStr,										   
					method: 'get', 
					onSuccess: function(jsonObj,jsonString) {
						if(ausloeser_element){
							if(loadingAni!=false){
								general_function_destroyLoadingAnimation(ausloeser_element);
							}
							if(doEventAfterLoadedContent&&doEventAfterLoadedContent!=''){
								ausloeser_element.fireEvent(doEventAfterLoadedContent,jsonObj);
							}
						}
					},
					onFailure: function() {
						alert('Fehler, kann keinen JSON-Request senden, versuchen Sie es noch einmal oder kontaktieren Sie den Administrator!');
					}
			});
			request.send(sendParameter+"&json=true");	
}

var gespeicherteBackgroundColor;
var gespeichertesPadding;
var gespeicherterContent;
function general_function_buildLoadingAnimation(zielDiv){
	if(zielDiv){
		gespeicherterContent = zielDiv.get('html');
		gespeicherteBackgroundColor = zielDiv.getStyle('background-color');
		gespeichertesPadding = zielDiv.getStyle('padding');
		zielDiv.addClass('ajaxLoading');	
		var elementHohe =  zielDiv.offsetHeight-14;
		var elementWidth =  zielDiv.offsetWidth-8;		
		if(elementHohe<10||elementHohe==null||isNaN(elementHohe)){
			elementHohe=10;
		}
		if(elementWidth<10||elementWidth==null||isNaN(elementWidth)){
			elementWidth=10;
		}
		zielDiv.setStyle('padding', '0px 0px '+elementHohe.toString()+'px'+' '+elementWidth.toString()+'px');//height führt zu Problemen im IE 7
		zielDiv.set('html','&nbsp;');//leeren, aber padding geht bei empty nicht
	}
}
function general_function_destroyLoadingAnimation(zielDiv){
	if(zielDiv){
		zielDiv.removeClass('ajaxLoading');
		zielDiv.setStyle('background-color',gespeicherteBackgroundColor);
		zielDiv.setStyle('padding',gespeichertesPadding);
		zielDiv.set('html',gespeicherterContent);
	}
}
function general_function_numsort (a, b) {//zum sortieren von Nummerischen Arrays
  return a - b;
}

//Asset um zusätzliche JS einzbinden by Benedikt Morschheuser 2009, normale Asset.javascript überschreiben von
/*Script: Assets.js Authors: Valerio Proietti*/
//selbst geschrieben, da normale Asset Funktion keine Überprüfung ob schon geladen
Asset.javascript = function(source, properties){
		properties = $extend({
			onload: $empty,
			document: document,
			check: $lambda(true)
		}, properties);
		//Erzeugt Element
		var script = new Element('script', {src: source, type: 'text/javascript'});
		
		var load = properties.onload.bind(script), check = properties.check, doc = properties.document;
		delete properties.onload; delete properties.check; delete properties.document;
		
		var aktiveScript=null;
		//überprüft ob Script schon geladen by BMo 2009:
		$(doc.head).getElements('script').each(function(script_element){
			if(script_element.getProperty('src')==source){
				aktiveScript=script_element;
			}
		});
		if(aktiveScript!=null){//by BMo
			load();	//fireEvent('load');
			return aktiveScript;//abbruch -> Script schon da
		}else{
			script.addEvents({
				load: load,
				readystatechange: function(){
					if (['loaded', 'complete'].contains(this.readyState)){//if IE und Opera
						load();
					}
				}
			}).set(properties);
			if (Browser.Engine.webkit419) var checker = (function(){
				if (!$try(check)) return;
				$clear(checker);
				load();
			}).periodical(50);
			return script.inject(doc.head);
		}
};

/*globale Confirm Funktion für unload der Seite*/
function confirmExit(evt){
		message = 'Sie haben Änderungen an dieser Seite gemacht und noch nicht gespeichert! Wenn sie diese Seite jetzt verlassen, verlieren Sie alle Änderungen.';
		if (typeof evt == 'undefined') {//error handling
   		   evt = window.event;
  		}
		if(changed) {
			if (evt) {
    			evt.returnValue = message;//error handling
  			}
  			return message;
		}else{
			changed = false; // kein return -> keine Meldung!   
		}
}
//Funktion für Ajax unloads
function unloadWithAjax(){
	if(changed){
		var confirmWindow = confirm("Sie haben Änderungen an dieser Seite gemacht und noch nicht gespeichert! Wenn sie diese Seite jetzt verlassen, verlieren Sie alle Änderungen.\n\nMöchten Sie diese Seite verlassen?");
		if (confirmWindow == false){//User hat abgebrochen -> tu nix
			return false; 
		}
		if (confirmWindow == true){//User bestätigt
			changed = false;
			return true;
		}
	}else{
		return true;
	}
}

/*Veraltet:*/

function general_function_load_Ajax_to_div(divId, urlStr, sendMethod, sendParameter, doFunktionAfterSubmitInLoadedContent, usePageLoadManager){//Standard:  usePageLoadManager = true
			alert('veraltet');
			if($(divId.toString())){
				general_function_buildLoadingAnimation($(divId.toString()));
			}
			var HTML_Request = new Request({
					url: urlStr,
					method: sendMethod,
					onSuccess: function() {
						if($(divId.toString())){
							general_function_destroyLoadingAnimation($(divId.toString()));
							$(divId.toString()).set('html',HTML_Request.response.text.toString());
							//domready ausführen
							if(!usePageLoadManager==false){
								if(pageLoadManager!=null){
									pageLoadManager.initialize();
								}else{
									pageLoadManager = new PageLoadManager();
								}
							}
							//übergebene Funktion ausführen
							eval(doFunktionAfterSubmitInLoadedContent);
						}
					},
					onFailure: function() {
						alert('Fehler, kann keinen HTML-Request senden, versuchen Sie es noch einmal oder kontaktieren Sie den Administrator!');
					}
			});
			HTML_Request.send(sendParameter);//mache request
}

//evtl über ->gui_element_pageform lösen!
function general_function_ajax_set_form(form_name,response_div){//ersetzt die Submitmethode eines Formulars durch Ajax //response_div bekommt Antwort
	var antwort_div = $(response_div.toString());
	//übergeben ob Submit von JS kommt
	var hidden_input = new Element('input', {name:'ajax_form', type:'hidden', value:'true'});
	$(form_name).grab(hidden_input);
	$(form_name).addEvent('submit', function(e) {
		e.stop();
		//Set the options of the form's Request handler. 		
		this.set('send', {
			method: 'post',
			onComplete: function(response) {
				general_function_destroyLoadingAnimation(antwort_div);
				antwort_div.set('html', response);
				//domready ausführen
				if(pageLoadManager!=null){
					pageLoadManager.initialize();
				}else{
					pageLoadManager = new PageLoadManager();					
				}
			}
		});
		//Send the form.
		this.send();
		general_function_buildLoadingAnimation(antwort_div);
	});
}


/*
		window.addEvent('domready', function() {
				$each(document.links, function(hrefattribut){//alle Links durchgehen, also a-Tags
					if (hrefattribut.rel && hrefattribut.rel.test(/^open_detail_page/i)){ //falls rel='open_detail_page' oder rel='open_detail_page[blablabla]'
						hrefattribut.onclick = new Function("f_admin_page_start('"+hrefattribut.href.toString()+"')");
						hrefattribut.href =	"#";
					}
				});
		});	
		
		
		var changed = new Array();
		var erscheien_effekt_contentArea;
		var erscheien_effekt_contentAreaOverlay;
			
		function f_admin_page_start(v_link){
			/*erstellt HTML
			<div id="content_area_overlay"></div>
			<div id="content_window">
				<div id="content_window_moveArea"></div>
				<div id="content_window_closeButton"></div>
				<div id="content_area"></div>
			</div>
			in body*/
/*			
			var contentAreaOverlay = new Element('div', {id: 'content_area_overlay'});//click: f_admin_page_close
			var contentWindow = new Element('div', {id: 'content_window'});
			var contentWindow_moveArea = new Element('div', {id: 'content_window_moveArea'});
			var contentWindow_closeButton = new Element('div', {id: 'content_window_closeButton'}).addEvent("click", f_admin_page_close);			
			var contentArea = new Element('div', {id: 'content_area'});
			
			//Effekt Voreinstellungen
			erscheien_effekt_contentWindow = new Fx.Tween(contentWindow, {property: "opacity", duration: 2000}).set(0);
			erscheien_effekt_contentAreaOverlay = new Fx.Tween(contentAreaOverlay, {property: "opacity", duration: 2000}).set(0);	
			
			$(document.body).grab(contentAreaOverlay);
			$(document.body).grab(contentWindow);
			contentWindow.grab(contentWindow_moveArea);
			contentWindow.grab(contentWindow_closeButton);
			contentWindow.grab(contentArea);
			
			var closeimg = '<img src=../images/admin/contentWindow_closeButton.jpg" width="15" height="15" alt="schließen">';
			
			contentWindow_closeButton.set('html',closeimg);
			contentArea.set('html','<br/><br/>Inhalt wird geladen...<br/><br/><br/>Bitte warten!<br/><br/><br/>');
			
			//mittelt contentArea
			contentWindow.setStyle('left', (($(document.body).getStyle('width').toInt()-contentWindow.getStyle('width').toInt())/2).toString()+" px");
			//verschiebbar machen
			var verschiebObjekt = contentWindow.makeDraggable({
				handle: contentWindow_moveArea,
				onComplete: function(){
				}
			});
			//
			f_admin_page_reiter(v_link);
		}
		
		function f_admin_page_setTitle(window_title){
			$('content_window_moveArea').set('text',window_title);
		}
		
		function f_admin_page_reiter(v_link){
			if($('page_must_save') && $('page_must_save').value == 1 && $('objekt_id').value < 1){
				window.alert("Bitte erst abschließen");
				return;
			}else if($('page_must_save') ){
				$('page_save').value = "0";
			}
			
			/*	
			if(f_admin_page_is_changed() ){
				var result = window.confirm("Wenn Sie die Seite verlassen werden die Änderungen nicht gespeichert! Wollen Sie die Seite verlassen?");
				if(!result)
					return;
				else
					$('page_save').value = "0";
				}*/
/*		
			if($('page_form_action_weiter') ){
				$('page_form_main').action = v_link;
				f_admin_page_save();
			}else{
				//HTML-Request für DetailseiteInhalt
				general_function_load_Ajax_to_div('content_area', v_link, 'post', "");
				f_admin_page_setTitle('Hotel eintragen');//evtl. per switch case oder per PHP
				//Einblend-Effekt
				erscheien_effekt_contentWindow.start(1);
				erscheien_effekt_contentAreaOverlay.start(0.8);
			}

		}
		
		function f_admin_page_save(){
			
			if($('page_save').value == 1){
			}else if(f_admin_page_is_changed() ){
				var result = window.confirm("Wenn Sie die Seite verlassen werden die Änderungen nicht gespeichert! Wollen Sie die Seite verlassen?");
				if(!result)
					return;
				else
					$('page_save').value = "0";
			}
			changed.splice(0,changed.length);
			
			general_function_load_Ajax_to_div('content_area', $('page_form_main').action, 'post', _ajax_posts('page_form_main'));
		}
		
		function _ajax_posts(form_name){
			var str = "";
			var elements = $(form_name).elements;
			for(var i = 0; i < elements.length; i++)
				str = str + elements[i].name + "=" + elements[i].value + "&";
			return str;
		}
		
		function f_admin_page_weiter(){
			//window.alert($('page_form_action_weiter').value);
			$('page_save').value = 1;
			$('page_form_main').action = $('page_form_action_weiter').value;
			f_admin_page_save();
		}
		
		function f_admin_page_back(){
			$('page_save').value = 0;
			$('page_form_main').action = $('page_form_action_back').value;
			f_admin_page_save();
		}
		
		function f_admin_save_hotel_zk(){
			window.alert('saved');
		}
		
		function f_admin_page_changed(row_name){
			changed[changed.length] = row_name;
		}
		
		function f_admin_page_is_changed(){
			if(changed.length > 0)
				return true;
			return false;
		}
		
		function f_admin_page_is_saved(row_name){
			 for(var i = 0; i < changed.length; i++) {
				if(changed[i] == row_name){ 
					changed[i] = "";
					changed.splice(i,1);
					return true;
				}
			}
			return false;
		}
		
		function f_admin_page_save_row(row_name){
			f_admin_save_hotel_zk();
			f_admin_page_is_saved(row_name);
		}
		
		function general_function_load_Ajax_to_div(divId, urlStr, sendMethod, sendParameter){
			var HTML_Request = new Request({
					url: urlStr,
					method: sendMethod,
					onSuccess: function() {
						$(divId.toString()).set('html',HTML_Request.response.text.toString());
					},
					onFailure: function() {
						alert('Fehler, kann keinen HTML-Request senden, versuchen Sie es noch einmal oder kontaktieren Sie den Administrator!');
					}
				});
				HTML_Request.send(sendParameter);//mache request
		}
		
		/*
		function f_admin_page_check(){
			new Ajax.Updater('test', $('page_form_main').action + "&page_check" , { method: 'post', 
																		   postBody: _ajax_posts('page_form_main'), 
																		   onSuccess: function(req){f_admin_page_check_response(req);}
																		  });
			}
		
		function f_admin_page_check_response(req){
			window.alert(req.responseText);
			}
		*/
/*		function f_admin_page_close(){
			alert("close");
		}
		
		
		/* START HOTEL FUNKTIONS */
		
/*		function f_hotel_load_zk(){
			general_function_load_Ajax_to_div('zk_all', 'ajax_hotel.php?page=zk&all&hotel_id=' + $('objekt_id').value, 'post');
			}
		
		function f_hotel_have_zk(zk_id){
			general_function_load_Ajax_to_div('zk_' + zk_id, 'ajax_hotel.php?page=zk&have&hotel_id=' + $('objekt_id').value + '&zk_id=' + zk_id, 'post');
			f_hotel_load_zk();
			}

		function f_hotel_new_zk(){
			general_function_load_Ajax_to_div('zk_new', 'ajax_hotel.php?page=zk&hotel_id=' + $('objekt_id').value, 'post');
			}

		function f_hotel_save_zk(){
			general_function_load_Ajax_to_div('zk_new', 'ajax_hotel.php?page=zk&save&hotel_id=' + $('objekt_id').value, 'post', _ajax_posts('page_form_main') );
			//Response-Text abarbeiten und Seite neu laden
			}

		function f_hotel_edit_zk(zk_id){
			general_function_load_Ajax_to_div('zk_' + zk_id, 'ajax_hotel.php?page=zk&hotel_id=' + $('objekt_id').value + '&zk_id=' + zk_id, 'post');
			}

		function f_hotel_update_zk(zk_id){
			general_function_load_Ajax_to_div('zk_' + zk_id, 'ajax_hotel.php?page=zk&update&hotel_id=' + $('objekt_id').value + '&zk_id=' + zk_id, 'post', _ajax_posts('page_form_main'));
			//Response-Text abarbeiten und Seite neu laden
			}

*/


//Fullscreen-Layer Funktionen
function erstelle_fullscreen_PopUp(url,doFunktionAfterLoadingAjaxContent){
			/*erstellt HTML
			<div id="content_area_overlay"></div>
			<div id="content_area"></div>
			in body*/
			
			var erscheien_effekt_contentArea;
			var erscheien_effekt_contentAreaOverlay;
			
			var contentAreaOverlay = new Element('div', {id: 'content_area_overlay'});
			var contentArea = new Element('div', {id: 'content_area'});
			
			//Effekt Voreinstellungen
			erscheien_effekt_contentArea = new Fx.Tween(contentArea, {property: "opacity", duration: 1000}).set(0);
			erscheien_effekt_contentAreaOverlay = new Fx.Tween(contentAreaOverlay, {property: "opacity", duration: 1000}).set(0);	
			
			$(document.body).grab(contentAreaOverlay);
			$(document.body).grab(contentArea);

			contentArea.set('html','<br/><br/>Inhalt wird geladen...<br/><br/><br/>Bitte warten!<br/><br/><br/>');
			
			//mittelt contentArea
			contentArea.setStyle('left', (($(document.body).getStyle('width').toInt()-contentArea.getStyle('width').toInt())/2).toString()+" px");
			//Ajaxload
			general_function_load_Ajax_to_Element(contentArea, url, 'get', '' , '',false, false);
			//Effekt
			erscheien_effekt_contentArea.start(1);
			erscheien_effekt_contentAreaOverlay.start(1);
}
function closeFullscreenLayer(){
	$('content_area_overlay').dispose();
	$('content_area').dispose();
}