var FAILCLASS = 'failField';
var hideSubTimer = null;
var startScrollNumber = 0;		//Startvariable der Bilder-Scrollleiste auf der Startseite
var scrollActive = null; 		//Variable zum Starten und Stoppen des Scroll-Intervals
var ajaxReadyToHide = false;
var ajaxLoaderImg = 'Graphics/ajax-loader-car.gif';
var ajaxBackgroundImg = 'Graphics/Textures/loadingBackground.png';
var ajaxLoaderTemplate = 
'<div id="ajaxLoader">' +
'<div class="ajaxText textSpecial">Daten werden geladen!</div>' +
	'<img class="ajaxLoaderImg" src="' + ajaxLoaderImg + '" />' +
'</div>';

//Aufrunden mit Nachkommastelle
function ceil_f(value, prec) {
	var f = Math.pow(10, prec);
	return (Math.ceil(value * f) / f);
}

/**
 * Diese Events werden überall (auch im Management gebraucht)
 */
function bindGlobalEvents(){
	//Alle Button-Hover Events
	$('.button, .buttonLong, .mailButtons, .regButtons').live({
		mouseenter : function(){
			$(this).removeClass('buttonHover').addClass('buttonHover');
		},
		mouseleave : function(){
			$(this).removeClass('buttonHover');
		}
	});
	$('.menuPointNavi a').live({
		mouseenter : function(){
			$(this).removeClass('adminHover').addClass('adminHover');
		},
		mouseleave : function(){
			$(this).removeClass('adminHover');
		}
	});
}

function bindNaviEvents(){
	$('.main').live({
		mouseenter : function(){
			$(this).addClass('mainHover');
			if($(this).next().hasClass('auto')) showSubNavi($(this).next());
		},
		mouseleave : function(){
			$(this).removeClass('mainHover');
			window.clearTimeout(hideSubTimer);
			hideSubTimer = window.setTimeout('hideSubNavi()', 1000);
		},
		click : function(){
			window.location.href = $(this).children('a').attr('href');
		}
	});
	$('.sub').live({
		mouseenter : function(){
			$(this).addClass('subHover');
		},
		mouseleave : function(){
			//var mainMenu = $(this)
			$(this).removeClass('subHover');
			window.clearTimeout(hideSubTimer);
			hideSubTimer = window.setTimeout('hideSubNavi()', 1000);
		},
		click : function(){
			window.location.href = $(this).children('a').attr('href');
		}
	});
}

function showSubNavi(ele){
	ele.slideDown('slow');
}

function hideSubNavi(){
	var subAreas = $('#naviArea .auto');
	subAreas.each(function(){
		var area = $(this);
		
		//Nur wenn nicht der Unterpunkt oder der Übermenüpunkt aktiv ist
		if(!$(area).find('.subActive').length > 0 && !$(area).prev('.main').hasClass('mainActive')){
			var areaAct = area.hasClass('subAreaActive');
			var mainHover = area.prev('.main').hasClass('mainHover');
			var hoverEle = area.find('.subHover');
			if(hoverEle.length == 0 && !(areaAct) && !(mainHover)) area.slideUp();
		}
	});
}

/**
 * Ruft einen Message Dialog auf und ruft gegebenfalls die Callback auf.
 * 
 * @param message		Diese Nachricht soll ausgegeben werden
 * @param title			Der Titel für den Header
 * @param callback		Die Funktion, die am Ende aufgerufen werden soll
 */
function messageDialog(message, title, callback){
	if(!callback)		callback = function(){};
	if(!title)			title = '';
	
	alert(unescape(message));
	
	callback();
}

/**
 * Ruft einen Confirm-Dialog auf und ruft je nach betätigung die callback oder die bei nichtbetätigung cancelcallback-Funktion auf.
 * 
 * @param message			Diese Nachricht soll ausgegeben werden (Frage)
 * @param title				Der Titel für den Header
 * @param callback			Bei OK-Betätigung wird diese Funktion aufgerufen
 * @param cancelCallback	Bei Abbrechen-Betätigung wird diese Funktion aufgerufen
 */
function confirmDialog(message, title, callback, cancelCallback){
	if(!callback)		callback = function(){};
	if(!cancelCallback)	cancelCallback = function(){};
	if(!title)			title = '';
	
	if(confirm(unescape(message)))			callback();
	else									cancelCallback();
}

/**
 * Berechnet die Dimensionen
 */
function calcDocDimensions(){
	var actPage = $('#background').attr('class');
	var banHeight = $('#banner').height();
	var clientHeight = document.documentElement.clientHeight;
	var clientWidth = document.documentElement.clientWidth;
	if(clientHeight < 800){clientHeight = 800;}
	$('body').css('height', clientHeight);
	
	//allgemeine Berechnungen
	var dynArea = $('#dynArea');
	if(dynArea.length > 0 && !management){
		dynArea.css('min-height', clientHeight - banHeight - 10);
		$('#naviArea').css('height', dynArea.height() - 10);
		$('#contentWrapper').css('height', dynArea.height() - 50);
		$('#background').css('height', dynArea.height() + banHeight + 10);
	}
	else{
		var conHeight = $('#contentWrapper').height();
		if(conHeight > clientHeight) clientHeight = conHeight + 20;
		$('#background').css('height', clientHeight);
		
	}
}

/**
 * Startet einen Ajax-Request mit den jeweiligen Parametern.
 * 
 * @param url		Wohin geht die Anfrage
 * @param post		Welche POST-Daten
 * @param callback	Callback-Funktion
 */
function ajaxRequest(url, post, callback){
	$.ajax({
		async: "async",
		url: ROOTDIR + url,
		type: "POST",
		dataType: "json",
		data: post,
		success: function(data, status){
			callback(data);
		},
		error: function(xmlhttp, statzs, error){
			alert('Verbindung konnte nicht aufgebaut werden!');
		}
	});
}

/**	
 * Initiale Konfiguration und Strukturierung der Benutzeroberfläche, sowie das Zuweisen von Eventhandlern und
 * dem Initialisieren verschiedener Objekte, wie z.B. des Schnellwahlkalenders. Wird angestoßen, sobald alle 
 * DOM-Elemente fertig geladen sind.
 */

$(window).load(function(){
	// MSIE 6.0 Warnmeldung
	if(navigator.userAgent.indexOf("MSIE 6.0") != -1){
		alert("ACHTUNG!\n\nIhre Browsersoftware ist veraltet!\nDadurch kann es zu Anzeigefehlern kommen!\n\nBitte installieren Sie eine neue\nVersion Ihres Browsers.\n\nUnsere Empfehlung:\n\nBrowsersoftware: Mozilla Firefox");
	}
	
	var thisPage = $('#background').attr('class');
	var actNavi = $('#' + thisPage);
	if(actNavi.hasClass('main')){
		actNavi.addClass('mainActive');
		actNavi.next('.auto').addClass('subAreaActive');
	}else{
		actNavi.addClass('subActive');
		actNavi.parents('.auto').addClass('subAreaActive');
		actNavi.parents('.auto').prev('.main').addClass('mainActive');
	}
	
	calcDocDimensions();
	bindNaviEvents();
	bindGlobalEvents();
});

/**
 * Konfiguration und Strukturierung der Benutzeroberfläche. Wird bei jeder Verkleinerung oder 
 * Vergrößerung des Browserfensters angestoßen.
 */

$(window).resize(function(){
	calcDocDimensions();
});
