//var alreadyRun = false;

/**** Funktionen, die beim Laden der Seite ausgefuehrt werden ****/

function init(){
	//if (alreadyRun) {return;}
	//alreadyRun = true;

	/**** Toggle von Elementen ****/
	$$('.message_toggle').each(function(element) {
		
		/**** Zeile highlighten onMouseOver****/
		$(element).observe('mouseover', function(event){   
			$$('.message_toggle').each(function(element2) {  
				$(element2).setStyle("background-color:#dfedfa");
				$(element2).up(0).setStyle("background-color:#dfedfa");
			});
			Event.element(event).setStyle("background-color:#c5ddf4");
			Event.element(event).up(0).setStyle("background-color:#c5ddf4");
		}, false); 
			  
		/**** Mail anzeigen onClick****/	  
		$(element).observe('click', function(event){   
		  	Event.stop(event);  
			/*$$('.message_shorttext').each(function(shorttext) {
				$(shorttext).show();
			});  
			$$('.message_fulltext').each(function(fulltext) {
				$(fulltext).hide();
			});*/
			Event.element(event).next(0).toggle();
			Event.element(event).up(0).setStyle("background-color:#c5ddf4");
			messageid = Event.element(event).id;
			if ($("button_"+messageid).src.indexOf("newmail") > 0){	
				$("button_"+messageid).src="images/readmail.png";
				url 		= 'include/ajaxDBUpdateHandler.inc.php';
				params  	= 'context=changeMessage' 
							 +'&type=read'
							 +'&obj='+messageid;
				sendmethod  = 'post'; 
				container = "button_"+messageid;   
				ajaxUpdate(container, url, params, sendmethod);	    
			}
	   }, false); 
	 }); 
	 
	$$('ul.img_menu li').each(function(element) {
		$(element).observe('click', function(event){  
			$("photoscape_img").src = "images/photoscape/"+$(element).id+".jpg";
 	   		$$("ul.img_menu li").invoke('removeClassName', 'highlighted');
			$(element).addClassName("highlighted");
		}, false); 
	 }); 	
}


/**** BEREICHE UPDATEN ****/

	/**** Bild und Beschreibungstext zur Bearbeitung laden ****/
	function loadImageData(image, objid){
		$('image_preview').src = image.src;
		if(image.width>image.height) {
			preview_width = 305;
		}else {
			preview_width = 170;
		}		
		preview_height = (preview_width/image.width)*image.height;

		$('image_preview').width=preview_width;			
		$('image_preview').height=preview_height;

		comment = $('image_comment_'+objid).innerHTML;		
		$('image').update(comment);		
		$('image').title = objid;		
	}
	
	/**** Bilder einer bestimmten Kategorie anzeigen ****/
	function showImages(category){
		$$('.image_tbl').each(function(element) {
			if (element.id != category){
				element.hide();
				$("link_"+element.id).removeClassName("highlighted");
			}else{
				$(category).show();
				$('link_'+category).addClassName("highlighted");		
			}
		});
	}

	/**** Sortierung von Bildern ****/
	function sortImages(category){ 
		var p = $('image_sort_'+category);
		sort = Sortable.create('image_sort_'+category, {
			tag:'li',overlap:'horizontal',constraint: false,
			onUpdate:function(){
				new Ajax.Request("include/ajaxDBUpdateHandler.inc.php", {
					method: "post",
					parameters: { 
						data: Sortable.serialize("image_sort_"+category), 
						context: 'imageSort',
						type: category
					}
				});
	    	}
	  	});
	};
	
	
/**** Tabelle aktualisieren ****/
	function updateTable(type, select){
		url 		= 'include/ajaxHandler.inc.php';
		params  	= 'context=updateTable'
					 +'&select='+select
					 +'&type='+type
		           	 +'&obj='+$F(select);
		sendmethod  = 'get';    
		container   = type+'_choices';

		new Ajax.Request(url, { method: sendmethod, parameters: params, 
	    		onComplete:function(transport) {
					var responseT = transport.responseText;
					$(container).update(responseT);

					initToggle();
	    		}
	    });
	}

	/**** Inhalte von einem Element in ein anderes kopieren ****/
	function copyContent(sender, receiver){
		if ($F(receiver) != "")
			$(receiver).insert("\r\n");
		$(receiver).insert($F(sender));
		changeImg('save', 'active');
	}

	/**** Inhalte von einer Tabelle in eine andere kopieren ****/
	function copyToTable(type, container, id, cell){
		
		var err = 0;
		fields_new = document.getElementsByName(type+"_selected_new");
		for ($j = 0; $j < fields_new.length; $j++){
			if(fields_new[$j].value == id)
				err = 1;
		}
		fields_old = document.getElementsByName(type+"_selected_old");
		for ($k = 0; $k < fields_old.length; $k++){
			if(fields_old[$k].value == id)
				err = 1;
		}									
		
		if (err == 0){
	
	        var lastRow = $(container).rows.length;

			var row = cell.parentNode.parentNode;

			var input = document.createElement('input');

			switch (type){
				case "highlights":
					input.type = 'checkbox';		
					row.deleteCell(1);
					break;
				case "leisures":
					input.type = 'checkbox';		
					row.deleteCell(1);
					/*input.type = 'radio';		
					if (lastRow > 0){
						$(container).deleteRow(lastRow-1);
						lastRow = 0;
					}*/
					break;
			}

			var myRow = $(container).insertRow(lastRow);

			input.name = container+'_new';
			input.id = container+'_new';
			input.value = id;
	
			var leftCell=myRow.insertCell(0);			
			leftCell.width = "25";
			leftCell.setAttribute ('vAlign','top');
			leftCell.appendChild(input);
			input.checked = "checked";

			var rightCell=myRow.insertCell(1);
			rightCell.width = "380";
			
			content = row.cells[0].innerHTML;
			rightCell.innerHTML = content;

			initToggle();				
						
			changeImg('save', 'active');
		}
	}	

	/**** Passwort bekommen ****/
	function getPwMail(container){
		url 		= 'include/ajaxDBUpdateHandler.inc.php';
		params  	= 'context=getPwMail'
		           	 +'&obj='+$F("email");
		sendmethod  = 'post';    

		ajaxUpdate(container, url, params, sendmethod);
	}


/**** OBJEKTE AENDERN ****/

	/**** Anzeigestatus von Angeboten aendern ****/
	function changeStatus(type, img, obj, cell){
		url 		= 'include/ajaxDBUpdateHandler.inc.php';
		params  	= 'context=changeStatus' 
					 +'&type='+type
					 +'&img='+img
					 +'&obj='+obj;
		sendmethod  = 'post';    

		new Ajax.Request(url, { method: sendmethod, parameters: params, 
	    		onComplete:function(transport) {
	    			var response = transport.responseText;
					cell.src = "images/"+img+response+".png";
	    		}
	    });
	}
	
	/**** Standard von Bildern aendern ****/
	function setImageStandard(image, standard, type, object){
		url 		= 'include/ajaxDBUpdateHandler.inc.php';
		params  	= 'context=imageStandard'
					 +'&type='+type
					 +'&standard='+standard
					 +'&image='+image
		           	 +'&object='+object;
		sendmethod  = 'post';    
	  	container = 'image_sort_'+type;
	  
/*		new Ajax.Request(url, { method: sendmethod, parameters: params, 
	    		onComplete:function(transport) {
					var response = transport.responseText;
					$('theimage'+image).removeClassName("border_standard_"+standard);
					(standard == 1) ? newstandard = 0 : newstandard = 1;
					$('theimage'+image).addClassName("border_standard_"+newstandard);					
	    		}
	    });		*/

		ajaxUpdate(container, url, params, sendmethod);	    
	}
	
	/**** Bild aendern ****/
	function changeImg(img, type){
		switch(img){
			case "save":
				$('saveicon').src="images/save_"+type+".png";
				switch (type){
					case "active":
						$('saveicon').setStyle("cursor:pointer;");
						break;
					case "inactive":
						$('saveicon').setStyle("cursor:default;");
						break;
				}
				break;
		}
	}
	
	/**** Toggle das nachfolgende Element ****/
	function initToggle(){
		$$('.toggle').each(function(element) {  
			Event.stopObserving(element, 'click');
			$(element).observe('click', function(event){   
			  	Event.stop(event);  
				Event.element(event).up(0).next(0).toggle();          
		   }, false);  							
		 }); 			
	}

	/**** <br> durch Zeilenumbruch ersetzen ****/	
	function br2nl(actual) {
		return actual.replace(/<br>/g, '\r');
	}
		

/**** SUCHE ****/

	/**** Einschraenkung der Suche anhand von Parametern ****/
	function specifySearch(context, param, container){
		url 		= 'include/ajaxHandler.inc.php';
		params  	= 'context='+context
					 +'&type='+param
		           	 +'&obj='+$F(param);
		sendmethod  = 'get';    
	  
		ajaxUpdate(container, url, params, sendmethod);
	}


/**** FORMULARE ****/

	/**** Fenster mit Formular anzeigen ****/
	function showForm(type, context, obj){
	
		switch (type){
			case "miniform":
			    w_width  	= 300;
				w_height 	= 180;
			    w_title     = context;		
				w_options   = false; 
				break;
			case "userform":
			    w_width  	= 600;
				w_height 	= 520;			
				w_title 	= context;
				w_options   = false; 
				break;
			case "adminform":
			    w_width  	= 1000;
				w_height 	= 620;
				w_title 	= context+ " bearbeiten";		
				w_options   = true; 
				break;
			case "imageform":
			    w_width  	= 1000;
				w_height 	= 620;
				w_title 	= "Bilder hinzuf&uuml;gen";		
				w_options   = true; 
				break;			
		}		
	
	    w_class  	= "bluelighting";
	    container 	= "form";
		url 		= 'include/ajaxHandler.inc.php';
		params = 'type='+type
					 +'&context='+context
		           	 +'&obj='+obj;
		sendmethod  = 'get';    
	  
		ajaxUpdate(container, url, params, sendmethod);
	    
	    createWindow(w_width, w_height, w_class, w_title, w_options, container);  
	}

	/**** Formularseite anzeigen ****/
	function showFormPage(type, element, objid){

		switch(type){
			case "product":
				pages = new Array ("details", "bilder", "highlights", "freizeit", "anreise", "infos");
				break;
			case "city":
				pages = new Array ("details", "bilder");
				break;
			case "region":
				pages = new Array ("details", "bilder");
				break;
			case "country":
				pages = new Array ("details", "bilder");
				break;
			case "highlight":
				pages = new Array ("details", "bilder");
				break;
			case "leisure":
				pages = new Array ("details", "bilder");
				break;
		}
		
		switch(element){
			case "anreise":
				updateTextarea('arrival', 'country');
				updateTextarea('arrival', 'region');
				updateTextarea('arrival', 'city');
				break;
			case "highlights":		
				if ($F('region') != "")
					updateTable('highlights', 'region');		
				else if ($F('country') != "")
					updateTable('highlights', 'country');		
				break;
			case "freizeit":		
				if ($F('region') != "")
					updateTable('leisures', 'region');
				else if ($F('country') != "")
					updateTable('leisures', 'country');		
				break;	
			case "bilder":
				if (objid != ""){
					loadFile('imageUpload', type, objid);
					sortImages(type);
					editbox_init();
				}
				break;			
		}
		
		for ($i=0; $i<pages.length; $i++){
			$(pages[$i]).hide();
			$(pages[$i]+'_button').removeClassName('highlighted');
		}
	
		$(element).show();
		$(element+'_button').addClassName('highlighted');
	}


	/**** Formular-Ueberpruefung (Buchung) ****/

	function checkBooking(obj){
		var err = false;
		$$('.mandatory').each(function(element) {
			if ($F($(element)) == ""){
				err = true;
			}
		});
		if (err){
			err_msg = "<h2 class='red_text'>Bitte f&uuml;llen Sie die <p>roten Felder aus !</h2>";
			openConfirmDialog('bookingerr', err_msg, " Weiter ");
		}
	}

	/**** Formular-Ueberpruefung ****/
	function checkForm(type, container, obj, link){
	
		url    = 'include/ajaxDBUpdateHandler.inc.php';
		params = 'context=updateDB'
				+'&type='+type;
		sendmethod = 'post';

		var err = false;
		$$('form .mandatory').each(function(element) {
			if ($F($(element)) == ""){
				$(element.id+"_err").addClassName("err_text");
				//$(element).previous().addClassName("err_text");
				err = true;
			}else{
				$(element.id+"_err").removeClassName("err_text");
				//$(element).previous().removeClassName("err_text");
			}
		});
	
		if (!err){	
			params += "&val=" + obj + "&" + $("adminform").serialize();
			
			if (document.getElementsByName("highlights_selected_new")){
				highlights_new = document.getElementsByName("highlights_selected_new");
				params += '&newhighlights=';
				for ($j = 0; $j < highlights_new.length; $j++){
					if(highlights_new[$j].checked)
						params += '||'+highlights_new[$j].value;
				}
				highlights_old = document.getElementsByName("highlights_selected_old");
				params += '&oldhighlights=';
				for ($k = 0; $k < highlights_old.length; $k++){
					if(!highlights_old[$k].checked)
						params += '||'+highlights_old[$k].value;
				}									
			}
            if (document.getElementsByName("leisures_selected_new")){
				leisures_new = document.getElementsByName("leisures_selected_new");
				params += '&newleisures=';
				for ($j = 0; $j < leisures_new.length; $j++){
					if(leisures_new[$j].checked)
						params += '||'+leisures_new[$j].value;
				}
				leisures_old = document.getElementsByName("leisures_selected_old");
				params += '&oldleisures=';
				for ($k = 0; $k < leisures_old.length; $k++){
					if(!leisures_old[$k].checked)
						params += '||'+leisures_old[$k].value;
				}													
			}			
			if (type != "message"){
				new Ajax.Request(url, { method: sendmethod, parameters: params, 
		    		onComplete:function(transport) {
						var response = transport.responseText;
						if (obj == ""){
							$(link).onclick = function (evt) {
								checkForm(type, container, response);
							};
							$("preview_button").href = $("preview_button").href.replace("oid=&","oid="+response+"&");
							$("bilder_button").onclick = function (evt) {
								showFormPage(type, 'bilder', response);
							};			
							$("close_button").onclick = function (evt) {
								reloadAdminTbl(type, container, response);
							};														
						}
			    	}
			    });
				changeImg('save', 'inactive');				
			}else{
				ajaxUpdate(container, url, params, sendmethod);
				$("button_"+obj).src="images/repliedmail.png";
			}			
		}
	}
	
	function reloadAdminTbl(type, container, obj){	
		url    = 'include/ajaxDBUpdateHandler.inc.php';
		params = 'context=reloadAdminTbl'
				+'&type='+type
				+'&container='+container
				+'&obj='+obj;
		sendmethod = 'post';

		ajaxUpdate(container, url, params, sendmethod);
		win.close();
	}

	/**** Formularfeld zuruecksetzen ****/	
	function resetFormElement(element){
		$(element).clear();
	}

	/**** Select-Feld aktualisieren ****/
	function updateSelect(context, container, select){
		url 		= 'include/ajaxHandler.inc.php';
		params  	= 'context='+context
					 +'&container='+container
					 +'&select='+select
		           	 +'&obj='+$F(select);
		sendmethod  = 'get';    
	
		new Ajax.Request(url, { method: sendmethod, parameters: params, 
	    		onComplete:function(transport) {
					var responseT = transport.responseText;
					var response = responseT.split('||');
					$(container).length = 0;
					for ($i = 0; $i < response.length; $i++){
						values = response[$i].split('#');
						$option = new Option(values[1],values[0]);					
						$(container).options[$i] = $option;				
					}
	    		}
	    });
	}

	/**** Textarea aktualisieren ****/
	function updateTextarea(type, select){
		url 		= 'include/ajaxHandler.inc.php';
		params  	= 'context=updateTextarea'
					 +'&select='+select
					 +'&type='+type
		           	 +'&obj='+$F(select);
		sendmethod  = 'get';    
		container   = type+'_'+select;

		ajaxUpdate(container, url, params, sendmethod);
	}
	
	/**** Datei-Upload ****/
	function loadFile(thiscontext, thistype, thisobjid) {
		var button = $('button1'), file_li = $$('#example1 .files')[0], interval;
		new AjaxUpload(button,{
			action: 'include/ajaxDBUpdateHandler.inc.php',
			name: 'myfile',
			data: {
	   			context : thiscontext,
	    		type : thistype,
	    		objid : thisobjid
	  		},
			onSubmit : function(file, ext){
	
				// change button text, when user selects file			
				//button.update('Uploading');
				
				// If you want to allow uploading only 1 file at time,
				// you can disable upload button
				this.disable();
				
				// Animating upload button
				// Uploding -> Uploading. -> Uploading...
				interval = window.setInterval(function(){
					/*var text = button.innerHTML;
					if (text.length < 13){
						button.update(text + '.');					
					} else {
						button.update('Uploading');				
					}*/
				}, 200);			
			},
			onComplete: function(file, response){
				//console.log(response);
				//button.update('Upload');
				window.clearInterval(interval);
				
				// enable upload button
				this.enable();
	
				if (thiscontext == "imageUpload"){
					$('image_sort_'+thistype).update(response);
					sortImages(thistype);
				}
			}
		});	
	}

	/**** Textfeld leeren ****/
	
	function clearField(element){
		element.value = "";
	}


/**** LOGIN / LOGOUT ****/

	/**** Ueberpruefung des Logins ****/
	function checkLogin(){
	
		if (($F("usr") && $F("pwd")) != ""){
			url 		= 'include/ajaxDBUpdateHandler.inc.php';
			params  	= 'context=checkLogin' 
						 +'&usr='+$F("usr")
			             +'&pwd='+$F("pwd");
			sendmethod  = 'post';
			            	        
			new Ajax.Request(url, { method: sendmethod, parameters: params, 
		    		requestHeaders: {Accept: 'application/json'}, 
		    		onComplete:function(oReq, oJSN) {
						var response = oReq.responseText.evalJSON(true);
						if (response.status == "true"){
							win.close();
							window.location.reload();
							//openConfirmDialog('login', response.text, " Weiter ");
						}else
							$('login_err').update(response.text);
		    		}
		    });
	    }else
			$('login_err').update("Bitte Usernamen und Passwort eingeben!");
	}
	
	/**** Ausloggen ****/
	function logout(){
	
		url 		= 'include/ajaxHandler.inc.php';
		params  	= 'context=logout'; 
		sendmethod  = 'get';
		                    
		new Ajax.Request(url, { method: sendmethod, parameters: params, 
	    		requestHeaders: {Accept: 'application/json'}, 
	    		onComplete:function(oReq, oJSN) {
					//var response = oReq.responseText.evalJSON(true);
					//openConfirmDialog('logout', response.text, " Weiter ");
					window.location.href="index.php";
					
	    		}
	    });
	}


/**** AJAX ****/

	/**** Ajax-Request mit Update des entsprechenden Containers ****/
	function ajaxUpdate(container, url, params, sendmethod){
	    new Ajax.Updater(
	    	container,
	        url,
	        {
	        	method: sendmethod,
	        	parameters: params
	    	}
	    );
	}


/**** FENSTER ****/

	/**** Erzeugung eines Fensters ****/
	function createWindow(w_width, w_height, w_class, w_title, w_options, container){
	    win = new Window({className: w_class, title: w_title, width: w_width, height: w_height, destroyOnClose: true, recenterAuto:false, minimizable:w_options, maximizable:w_options, resizable:w_options, draggable:true});
	    win.getContent().update("<div id='"+container+"' class='window_text'></div>");
		win.setConstraint(true, {left:0, right:20, top: 10, bottom:0})
	    win.showCenter(); 
	    win.setZIndex(30);
	}

	/**** Anzeigen des Loeschen-Dialogs ****/
	function openDeleteDialog(type, objtype, title, obj, cell, contype, conobj) {	    
	    Dialog.confirm(
	    	"Wollen Sie "+objtype+"<p> <b>"+title+"</b><p>wirklich l&ouml;schen?",
	    	{
	    		top: 200, width:250, className: "alphacube", okLabel: "Ja", cancelLabel:"Nein", 
	    		onOk:function() {
					url 		= 'include/ajaxDBUpdateHandler.inc.php';
					params  	= 'context=delete'
					             +'&type='+type
					             +'&obj='+obj
					             +'&contype='+contype
					             +'&conobj='+conobj;
					sendmethod  = 'post';


				    /**** Zeile in DB loeschen ****/
					new Ajax.Request(url, { method: sendmethod, parameters: params, 
					    	onComplete:function(transport) {
								var response = transport.responseText;

								/**** Zeile in DOM loeschen ****/								
								if (type == "image"){
									$(type+"_"+obj).remove();
								}else{								    
									var row = cell.parentNode.parentNode;
					    			row.parentNode.removeChild(row);
					    		}
					    	}
				    });
				    
				    /**** Dialog schliessen ****/    				
    				this.close();
	    		}
	    	}
	    )
	}
	
	/**** Anzeigen eines Confirm-Dialogs ****/
	function openConfirmDialog(type, text, buttontext) {
	    Dialog.alert(
	    	text,
	    	{
	    		top: 200, width:250, height:150, className: "alphacube", okLabel: buttontext, 
	    		onOk:function() {
	    			switch (type){
	    				case "login":
	    					window.location.reload();
	    					break;
	    				case "logout":
			    			window.location.href="index.php";
	    					break;
	    				case "bookingerr":
	    					//$("bookingform").submit();
		    				break;
	    			}
	    		}
	    	}
	    )
	}
	
	function openDecisionDialog(element, objid){
	    Dialog.confirm(
	    	"Wollen Sie das Bild bearbeiten oder l&ouml;schen?",
	    	{
	    		top: 200, width:250, className: "alphacube", okLabel: "Bearbeiten", cancelLabel:"L&ouml;schen", buttonClass:"window_button",
	    		onOk:function() {
	    			this.close();
	    			loadImageData(element, objid);
	    		},
	    		onCancel:function() {
	    			this.close();
	    			openDeleteDialog("image", "das", "aktuelle Bild", objid, element);
	    		}	    		
	    	}
	    )
	}
