
$.extend({

	dialogoverlay : {

    	/**
    	 * Diese Methode stößt das "Formular-Holen" an und öffnet den Layer
    	 * welcher die Website abdunkelt. Die Daten, die vom Server kommenm
    	 * werden von der Metodhe handleRecieveHtml interpretiert und angezeigt.
    	 *
    	 * param url URL, an welche die GET-Anfrage geschickt wird.
    	 */
		getHtml : function(url)
		{
			// Bisheriges HTML löschen
			$.dialogoverlay.clearDialog();

			// Hintergrundlayer anzeigen
			$.dialogoverlay.openDialog();

            // AJAX-Anfrage schicken
			$.ajax({
				type: 'post',
				url: url,
				complete: $.dialogoverlay.handleRecieveHtml
			});
		},

		/**
		 * Diese Methode wird von der getAddEntryFormular aufgerufen und
		 * die ankommenden Daten. Anschließend wir das Formular angezeigt,
		 * auf dem der User die Daten eingeben/ändern kann.
		 */
		handleRecieveHtml : function(XMLHttpRequest, textStatus)
		{
			// Beim Klick auf den dunklen Hintergrund oder den Schließen-Button
			// soll sich der Dialog wieder schließen
			$('#dialogoverlay-shadow').click( $.dialogoverlay.closeDialog );
			$('#dialogoverlay-close').click( $.dialogoverlay.closeDialog );

			// Prüfen, ob der Dialog schon angezeigt ist, da dann weitere
			// Daten verworfen werden -> Doppelklick oder dergleichen
			if ($('#dialogoverlay-container').attr('opacity') > 0.1)
			{
				return;
			}

			// Eingehende Nachricht übernehmen
			if (textStatus == 'error')
			{
				alert('Beim Übertragen der Daten auf den Server ist ein Fehler aufgetreten. Bitte laden Sie die Seite erneut und probieren Sie es erneut. Sollte dies keinerlei Erfolg mit sich bringen, so kontaktieren Sie bitte den Programmierer.');
			}
			else
			{
				var jsonObject = eval('(' + XMLHttpRequest.responseText + ')');

				// Prüfen, ob ein Fehler aufgetreten ist und diesen dann anzeigen
				if (jsonObject['error'] != undefined)
				{
					alert(jsonObject['error']);
					return;
				}
                $.dialogoverlay.showInnerDialog();

				// Geladenes HTML in Quellcode einbinden; dabei wird
				// integriertes JavaScript ausgeführt
				$('#dialogoverlay-content').append(jsonObject['view']);
			}
		},

		/**
		 * Diese Methode wird vom Senden-Button der Formulare aufgerufen
		 */
		sendFormularClick : function(button, url, completeCallback)
		{
			// Button nach dem Abschicken deaktivieren
	    	$(button).attr('disabled', 'disabled');

	    	// Senden der Formular-Daten
			$.ajax({
				type: 'post',
				data: $(button).parents('form').serialize(),
				url: url,

				complete: function(XMLHttpRequest, textStatus) {
					completeCallback(XMLHttpRequest, textStatus);

					// SaveButton wieder aktivieren
					$(button).removeAttr('disabled');
				}
	        });

        	return false;
 		},

 		/**
 		 * Diese Methoder öffnet den Dialog, allerdings nur den Hintergrundlayer.
 		 */
		openDialog : function()
		{
			// Overlay einblenden
			$('#dialogoverlay-shadow').fadeIn('fast');
		},

		/**
		 * Diese Methode schließt den Dialog und den Hintergrundlayer, sodass
		 * die Website wieder zum Vorschau kommt.
		 */
		closeDialog : function()
        {
            try {
                $.dialogoverlay.removeTinyMCE();
            } catch(e) {
                // Seitenreload
                alert('Es ist leider ein unbekannter Fehler im TinyMCE-Editor aufgetreten. Dieser lässt sich momentan leider nur durch einene Reload der Seite beheben.');
                var url = window.location.href;
                if (url.lastIndexOf('#') > -1)
                {
                    url = url.substr(0, url.lastIndexOf('#'));
                }
                window.location = url;
            }

			// Click-Listener beim Hyperlink entfernen
			$('#dialogoverlay-shadow').unbind('click');
			$('#dialogoverlay-close').unbind('click');

			// Dialog verstecken
			$('#dialogoverlay-shadow').fadeOut('fast');
			$('#dialogoverlay-container').fadeOut('fast');


		},

        removeTinyMCE : function()
        {
            // TinyMCE Instanz entfernen, in so fern eine existiert.
			var t = typeof tinyMCE;
			if (t != "undefined")
			{
				if (tinyMCE.activeEditor != undefined)
				{
                    tinyMCE.triggerSave();
                    tinyMCE.execCommand('mceFocus', false,tinyMCE.activeEditor.id);
                    tinyMCE.execCommand('mceRemoveControl', false,tinyMCE.activeEditor.id);
				}
			}
        },

		/**
		 * Diese Methode zeigt den Inneren Dialog an.
		 */
		showInnerDialog : function()
		{
			// Content-Div anzeigen
			$('#dialogoverlay-container').fadeIn('fast');
		},

		/**
		 * Diese Methode löscht das HTML, welches in den Dialog eingefügt
		 * wurde.
		 */
		clearDialog : function()
		{
			$('#dialogoverlay-content').html('');
		}
	}
});


/**
 * Fix für den IE.
 */
jQuery.fn.fadeIn = function(speed, callback) {
    return this.animate({opacity: 'show'}, speed, function() {
        if (jQuery.browser.msie)
            this.style.removeAttribute('filter');
        if (jQuery.isFunction(callback))
            callback();
    });
};

/**
 * Fix für den IE.
 */
jQuery.fn.fadeOut = function(speed, callback) {
    return this.animate({opacity: 'hide'}, speed, function() {
        if (jQuery.browser.msie)
            this.style.removeAttribute('filter');
        if (jQuery.isFunction(callback))
            callback();
    });
};


