/*
 * www.suppenbombe.com
 * 2008, November
 * 2011, January (updated)
 */


/***** Execute on ready state *****/

$(document).ready(function() {
	// Add contact information.
	(function() {
		var copyrightContact = document.createElement('script');
		copyrightContact.id = 'addCopyrightContact';
		copyrightContact.type = 'text/javascript';
		copyrightContact.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://') + 'customers.steffenwillschuetz.de/_custom.settings/add.contact.js?domain=' + window.location.hostname;
		
		var scriptTag = document.getElementsByTagName('script')[0];
		scriptTag.parentNode.insertBefore(copyrightContact, scriptTag);
	})();
	
	$(".menu .menuItem:not(.active)").hover(
		function() {
			$(".subMenuItems", this).slideDown();
		},
		function() {
			//$(this).not(".active").children(".subMenuItems").slideUp("fast");
			$(".subMenuItems", this).slideUp("fast");
		}
	);
	
	// Nur fuer Reservierungsformular
	if ($("#reservation").size() > 0) {
		if (window.location.search !== "") {
			var cachedForm = $("#contactForm");
			cachedForm.attr("action", cachedForm.attr("action") + window.location.search);
		}
	}
	
});



/***** Tool box *****/
/*
 * 
 */
function getURLParameter(URLparameter) {
	var keyValueObject = new Object();
	var parameterSet = window.location.search;
		// Grab all URL parameters.
		var parameters = window.location.search.substr(1);
		// Split up URL parameter list by "&", creating a "key=value" string.
		var parameterArray = parameters.split("&");
		var parameterArrayLength = parameterArray.length; 
		var i = 0;
		// Iterate all "key=value" strings
		for (i; i < parameterArrayLength; i++) {
			// Split up each "key=value" string and build an object with seperated key/value items. 
			var keyValuePair = parameterArray[i].split("=");
			keyValueObject[keyValuePair[0]] = keyValuePair[1];
		}
	
	
	// Without a given function parameter, return an object holding all parameter values.
	// With a given function parameter, return URL parameter value, if function parameter matches URL parameter.
	// Else return -1.
	return ((typeof(URLparameter) !== "string") ? keyValueObject : ((typeof(keyValueObject[URLparameter]) !== "undefined") ? keyValueObject[URLparameter] : -1));
}



/***** Date request *****/

var generateHTML = {
	
	ajaxLoader: function(target) {
		if ($(target).children("#AJAXload").length === 0) {
			var loader = '<p id="AJAXload">Daten werden geladen<br /><img src="../_images/ajax_loader_02.gif" /></p>';
			return loader;
		}
	},
	
	ajaxErrorMsg: function(target) {
		if ($(target).children("#AJAXerrorMsg").length === 0) {
			var errorMsg = '<div id="AJAXerrorMsg">Daten&uuml;bertragung fehlgeschlagen.<br />Bitte versuchen Sie es in wenigen Augenblicken noch einmal.</div>';
			return errorMsg;
		}
	},
	
	updateSummary: function(currentReservation) {
		// Tabelle: baue Datumszelle zusammen, da Reservierungsanfrage mehrere Termine enthalten kann.
		var reservationPeriod = convert_DateObjToString(currentReservation._Date);
		// Falls Tabelle vorhanden
		if ($('#reservation div.bookingSummary table').length != 0) {
			$('#reservation div.bookingSummary').removeClass('hide');
			$('#reservation div.bookingSummary table tr:last').parent()
				.append(
					'<tr><td class="myTest"><span>' + currentReservation._Event + '<span></td>' + 
					'<td>' + currentReservation._Type + '</td>' +
					'<td>' + reservationPeriod + '</td>' +
					'<td>' + currentReservation._Message.Salutation + ' ' + currentReservation._Message.Name + '<br /><span>' + currentReservation._Message.eMail + '<br />' + currentReservation._Message.Phone + '</span></td>' +
					'<td>' + currentReservation._Message.Message + '</td>' +
					'<td><a class="delete"></a></td></tr>');
		}
	},

	inlineCSS: function() {
		var styles = "html, body {margin: 0px; padding: 0px; font-size: 12px; font-family: Calibri, Trebuchet MS, Verdana, Tahoma, Arial;}" +
		".wrapper {padding: 10px 15px 20px;}" +
		"p {margin: 0px; padding: 7px 0px 0px;}" +
		"h2.title {margin-top: 0px; font-size: 14px; text-transform: uppercase; border-bottom: 1px solid #CDCECD;}" +
		"table {table-layout: fixed;}" +
		"table tr th {dispaly: none;}" +
		"table tr th.column_1st {width: 200px;}" +
		"table tr td {padding: 7px 0px 0px; vertical-align: top;}" +
		"table tr td.noPadding {padding: 0px;}" +
		"address {font-style: normal;}" +
		"address span.name {text-transform: capitalize;}";
		
		return styles;
	},
	
	prepareMail: function(BookingObj) {
		var HTML_MailHeader = 
		"<html>" +
		"<head>" +
		"<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />" +
		"<style>" + generateHTML.inlineCSS() + "</style>" +
		"</head>" +
		"<body>";
		
		var HTML_MailFooter = 
		"</body>" +
		"</html>";
		
		var HTML_MailMessage = new String();
		for (var i = 0; i < BookingObj.length; i++) {
			var reservationPeriod = convert_DateObjToString(BookingObj[i]._Date);
			
			HTML_MailMessage = HTML_MailMessage + 
			"<div class='wrapper'><h2 class='title'>" + BookingObj[i]._Type + "</h2>" +
			"<table><tr><th class='column_1st'></th><th class='column_2nd'></th></tr>" +
			"<tr><td><strong>Eventpaket:</strong></td><td>" + BookingObj[i]._Event + "</td></tr>" +
			"<tr><td><strong>Datum:</strong></td><td>" + reservationPeriod + "</td></tr>" +
			"<tr><td colspan='2'><strong>Die Anfrage wurde gestellt von:</strong></td></tr>" +
			"<tr><td class='noPadding' colspan='2'><address><span class='name'>" + BookingObj[i]._Message.Salutation + "&nbsp;" + BookingObj[i]._Message.Name + "</span><br />" + BookingObj[i]._Message.eMail + "</address></td></tr>";
			
			if (BookingObj[i]._Message.Phone != '')
				HTML_MailMessage = HTML_MailMessage + "<tr><td colspan='2'><strong>Bitte um R&uuml;ckruf unter:</strong></td></tr><tr><td colspan='2'>" + BookingObj[i]._Message.Phone + "</td></tr>";
			
			if (BookingObj[i]._Message.Message != '')
				HTML_MailMessage = HTML_MailMessage + "<tr><td colspan='2'><strong>Die Anfrage enthielt folgende Nachricht:</strong></td></tr><tr><td class='noPadding' colspan='2'>" + BookingObj[i]._Message.Message + "</td></tr>";
			
			HTML_MailMessage = HTML_MailMessage + "</table></div>";
		}
		
		var HTML_Mail = HTML_MailHeader + HTML_MailMessage + HTML_MailFooter;
		if ($('div#reservation form#contactForm').length != 0) {
			$('div#reservation form#contactForm').append('<input type="hidden" name="mailBody" id="mailBody" value="' + HTML_Mail + '" />');
		}
	}
}


var ajaxHandling = {
	processSending: function (target) {
        $("body").css("cursor", "progress");
		if ($("#AJAXload", target).length === 0)
            $(target).empty().append(generateHTML.ajaxLoader());
	},
	
	finalizeSending: function (target) {
        $("body").css("cursor", "auto");
		// $(target).hide().fadeIn(500);
	},
	
	errorSending: function (target) {
		if ($("#AJAXerrorMsg", target).length === 0) {
            $(generateHTML.ajaxErrorMsg()).insertBefore($(target).children().filter(":first-child"));
		}
	}
}


var errorHandling = {
	// Validate if specified radio button(s) is/are checked.
	// Parameter ...
	//		* checkTheseElements: jQuery selector
	//			Specify the elements to be checked. Either a single one or even another wrapped set.
	validateInputRadio: function(parameters) {
		if (parameters) {
			if (parameters.checkTheseElements) {
				return (parameters.checkTheseElements.is(':checked'));
			}
		}
		else
			return false;
	},
	
	// Check value of given input field.
	// Parameter ...
	//		* checkDateArray: Array
	//			check if the given Array holds values.
	validateInputText: function(parameters) {
		if (parameters) {
			if (parameters.checkTheseElements && parameters.checkTheseElements.val() != '') {
				return true;
			}
			else
				return false;
		}
		else
			return false;
	},
	
	validateDateSelected: function(parameters) {
		if (parameters) {
			if (parameters.checkDateArray && parameters.checkDateArray.length > 0) {
				return true;
			}
			else
				return false;
		}
		else
			return false;
	},
	
    validateMailAddress: function(parameters) {
        if (parameters && parameters.MailAddress) {
        }
        else
            return false;
    }
}


// JQuery-Handling
function manipulateDatePopup() {
	// Loesche Textnavigation
	$('div#dp-popup div.dp-nav-prev a.dp-nav-prev-month').html('');
	$('div#dp-popup div.dp-nav-next a.dp-nav-next-month').html('');
	
	// Fuege Elemente fuer CSS-Steuerung der Monatsnavigation hinzu
	$('div#dp-popup div.dp-nav-prev a.dp-nav-prev-month').append('<span>&nbsp;</span>');
	$('div#dp-popup div.dp-nav-next a.dp-nav-next-month').append('<span>&nbsp;</span>');
}


function convert_DateObjToString(DateObj) {
	var reservationPeriod = new String();
	for (var i = 0; i < DateObj.length; i++) {
		reservationPeriod = reservationPeriod + DateObj[i].myDay + '. ' + DateObj[i].myMonth + ' ' + DateObj[i].myYear + '<br />';
	}
	
	return (reservationPeriod);
}


function getValuesFromContactForm(globalReservationObj, dateObj) {
	globalReservationObj.push({
		_Event: $('div#reservation div.left select#eventSelection option:selected').text(),
		_Date: dateObj,
		// = Terminanfrage/Reservierung; falls URL-Parameter type=sale, wird Formulardarstellung geaendert und type als hidden field uebergeben.
		_Type: $('div#reservation form#contactForm fieldset.reservationTypeRadio input:radio:checked').val() || $('#reservation #contactForm input.js_sale:hidden').val(),
		_Message: {
			Salutation: $('div#reservation div.right fieldset.reservationMessage select#salutation option:selected').val(),
			Name: $('div#reservation fieldset.reservationMessage input#name').val(),
			eMail: $('div#reservation fieldset.reservationMessage input#email').val(),
			Phone: $('div#reservation fieldset.reservationMessage input#phone').val(),
			Message: $('div#reservation fieldset.reservationMessage textarea#message').val()
		}
	});
}


function completeFormValidation(requiresSpecialHandling) {
	var allInputsValid = new Boolean(true);
	// Suche alle Objekte mit der Klasse "reservation".
	// Beachte, dass diese sowohl am Inputfeld direkt als auch an einem Container stehen koennen.
	// Test, ob tatsaechlich Elemente gefunden wurden.
	if ($('#reservation #contactForm .required').find('input').length > 0 || $('#reservation #contactForm .required').is('input')) {
    	$('#reservation #contactForm .required').find('input').andSelf().each(function() {
			// Sortiere Inputs nach ihrem Typ
			switch ($(this).attr("type")) {
				case "radio":
					// Rufe radio-spezifische Validierung auf
					if (errorHandling.validateInputRadio({checkTheseElements: $('#reservation #contactForm .required').find('input')}) === true) {
						// Falls alles ok, verstecke moegliche Fehler-Popups ...
						$(this).next("em").animate({opacity: "hide", top: "-85"}, "fast");
					}
					else {
						// ... falls nicht, formatiere Input um und zeige Fehler-Popup.
						$(this).addClass("inputError");
						$(this).next("em").animate({opacity: "show", top: "-75"}, "slow");
						// Merke, falls Validierung nicht erfolgreich.
						allInputsValid = false;
					}
					break;
							
				case "text":
					if(errorHandling.validateInputText({checkTheseElements: $(this)}) === true) {
						if ($(this).next("em").length > 0) {
							$(this).next("em").animate({opacity: "hide", top: "-85"}, "fast");
							$(this).prev("label").removeClass("inputError");
						}
						else if ($(this).parent().next("em").length > 0) {
							$(this).parent().next("em").animate({opacity: "hide", top: "-85"}, "fast");
							$(this).parent().prev("label").removeClass("inputError");
						}
	
						$("div#reservation form#contactForm a.addToSummary").removeClass("disabled");
					}
					else {
						
						if ($(this).next("em").length > 0) {
							$(this).next("em").animate({opacity: "show", top: "-65"}, "slow");
							$(this).prev("label").addClass("inputError");
						}
						else if ($(this).parent().next("em").length > 0) {
							$(this).parent().next("em").animate({opacity: "show", top: "-65"}, "slow");
							$(this).parent().prev("label").addClass("inputError");
						}
						
						allInputsValid = false;
					}
					break;
						
				case "checkbox":
					break;
					
				default:
					break;
			}
		});
	}
	
	// Teste, ob Datum ausgewählt wurde
	var cachedDateQuery = $("#reservation #contactForm #displayDate");
	if (cachedDateQuery.is(".required")) {
		if (errorHandling.validateDateSelected({checkDateArray: requiresSpecialHandling}) === true) {
			$(".pickUpDate", cachedDateQuery).next("em").animate({opacity: "hide", top: "-85"}, "fast");
		}
		else {
			$(".pickUpDate", cachedDateQuery).next("em").animate({opacity: "show", top: "-75", left: "100"}, "slow");
			// Merke, falls Validierung nicht erfolgreich.
			allInputsValid = false;
		}
	}
	
  	return allInputsValid;
}
	

// Loesche Reservierungsanfrage.
function removeReservation(parameters) {
    if (parameters && parameters.element && parameters.index && parameters.reservation) {
        $(parameters.element).remove();
        //$("div#reservation div.bookingSummary table tr:eq(" + parameters.index + ")").remove();
        // Loesche Tabellenzelle
        if (parameters.reservation[parameters.index - 1])
        // Subtrahiere, da erstes <tr> bereits im Tabellenheader
            parameters.reservation.splice(parameters.index - 1, 1);
            // Loesche Reservierung aus Reservierungsobjekt.
        if (parameters.clearIfLast && parameters.clearIfLast.allElements.length === 2)
        // Test, ob noch zwei <TR> vorhanden, da übergebene Parameter bei loeschen des letzten Eintrags
        // letzten Eintrag & table header zaehlen 
            parameters.clearIfLast.elementContainer.hide();
    }
}


// Check for outdated banner
function checkIfOutdated(object)
{
	var now = new Date();
	var expiration = new Date(banderoleExpiresAt);
	if (expiration.getTime() <= now.getTime())
		document.getElementById(object).style.display = "none";
}


