﻿/*
 *  instant_offer.js
 *
 *  Autor: Norman Walter
 *  Datum: 11.2.2009
 *
 *  Letzte Änderung: 24.8.2010
 *
 */

var anfrage = null;
var XMLDoc = null;
var selected_offer = 0;
var total_price = 0;
var language_string = null;
var calendar_1;
var calendar_2;
var mode = "normal";
var update = "auto";
var referrer = "";
var post_form = "";
var ob_client_id = null;
var ob_request_id = null;
var ob_request_obj = null;

function erzeugeAnfrage()
{
	try
	{
		anfrage = new XMLHttpRequest();
	}
	catch (versuchmicrosoft)
	{
		try
		{
			anfrage = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (anderesmicrosoft)
		{
			try
			{
				anfrage = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(fehlschlag)
			{
				anfrage = null;
			}
		}
	}
	
	if (anfrage == null)
	{
		alert("Fehler beim Erstellen des Anfrage-Objekts!");	
	}	
	
}

function changeLoadingState(flag)
{
    var loading_node = document.getElementById("loading");
	
	if (loading_node != null)
	{
		var style = "none";
	
		if (flag == true)
		{
			style = "";
		}

		loading_node.style.display = style;
	}
}

function getRequestId()
{
	return XMLDoc.getElementsByTagName("request_id")[0].firstChild.nodeValue;
}

function getServiceText(XMLoffer)
{
	var service_text = "";
	var XMLservice_text_nodes = XMLoffer.getElementsByTagName("service_text");
	
	if (XMLservice_text_nodes != null)
	{
		var XMLservice_text = XMLservice_text_nodes[0];
		
		if (XMLservice_text != null);
		{
			if (XMLservice_text.firstChild)
			{
				service_text = XMLservice_text.firstChild.nodeValue;
			}
		}
	}

	return service_text;
}

function getExtraText(XMLoffer)
{
	var extra_text = "";
	var XMLextra_text_nodes = XMLoffer.getElementsByTagName("extra_text");
	
	if (XMLextra_text_nodes != null)
	{
		var XMLextra_text = XMLextra_text_nodes[0];
		
		if (XMLextra_text != null);
		{
			if (XMLextra_text.firstChild)
			{
				extra_text = XMLextra_text.firstChild.nodeValue;
			}
		}
	}

	return extra_text;
}

function checkDates()
{
	var startDay = calendar_from.getSelectedDay();
	var startMonth = calendar_from.getSelectedMonth();
	var startYear = calendar_from.getSelectedYear();
	
	var endDay = calendar_to.getSelectedDay();
	var endMonth = calendar_to.getSelectedMonth();
	var endYear = calendar_to.getSelectedYear();

	var startDate = new Date(startYear,startMonth,startDay);
	var endDate = new Date(endYear,endMonth,endDay);
	
	return startDate.getTime() < endDate.getTime();
}

function getOffers()
{
	if (!checkDates())
	{
		return;
	}
	
	var url = "http://www.easymailing.eu/Hotelprojekt/ajax/ajax_offer.php";

	var client_id = document.getElementById("client_id").value;
	var language = document.getElementById("language").value;
	
	var startDay = calendar_from.getSelectedDay();
	var startMonth = calendar_from.getSelectedMonth();
	var startYear = calendar_from.getSelectedYear();

	var endDay = calendar_to.getSelectedDay();
	var endMonth = calendar_to.getSelectedMonth();
	var endYear = calendar_to.getSelectedYear();
	
	var adults = document.getElementById("adults").value;
	var children = document.getElementById("children").value;
	
	var rooms_wanted_node = document.getElementById("rooms_wanted");
	
	if (rooms_wanted_node != null)
	{
		var rooms_wanted = rooms_wanted_node.value;
	}
	else
	{
		var rooms_wanted = 0;
	}
	
	var service = document.getElementById("service").value;
		
	var post_data = "startDay=" + startDay + "&startMonth=" + startMonth + "&startYear=" + startYear +
					"&endDay=" + endDay + "&endMonth=" + endMonth + "&endYear=" + endYear +
					"&adults=" + adults + "&children=" + children + "&rooms=" + rooms_wanted + "&service=" + service +
					"&language=" + language + "&client_id=" + client_id + "&referrer=" + referrer;
	
	erzeugeAnfrage();
	
	removeChildrenId("offers");
	changeLoadingState(true);
	
	anfrage.open("POST", url, true);
	anfrage.onreadystatechange = updateSeite;
	anfrage.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	anfrage.send(post_data);
}

function removeChildrenId(id)
{
	var element = document.getElementById(id);
	
	if (element != null)
	{
		if (element.childNodes)
		{
			while (element.hasChildNodes())
			{
				element.removeChild(element.firstChild);
			}
		}
	}
}

function createChildPrice(price,n)
{
	var price_text = document.createTextNode(price);
	var childPrice = document.createElement("span");
	
	childPrice.name = "child_price_" + n;
	childPrice.id = "child_price_" + n;
	childPrice.appendChild(price_text);
	
	return childPrice;
}

function getChildren(XMLroom_description)
{
	return XMLroom_description.getElementsByTagName("children")[0].firstChild.nodeValue;
}

function priceStringToFloat(price_string)
{
	return 1 * price_string.replace(/\./g, "").replace(/,/,".");
}

function floatToPriceString(float_value)
{
	return float_value.toFixed(2).toString().replace(/\./,",");
}

function calculateTotalPrice()
{
	total_price = 0;
	var n = selected_offer;
			
	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[n-1];
	var XMLroom_descriptions = XMLoffer.getElementsByTagName("room_description");

	// Alle Zimmerbeschreibungen für dieses Zimmer durchgehen
	for (var i=0; i<XMLroom_descriptions.length; i++)
	{
		// Normalpreis für dieses Zimmer für den gesamten Aufenthalt
		var price_string = XMLroom_descriptions[i].getElementsByTagName("price_per_person")[0].firstChild.nodeValue;
		var price_value = priceStringToFloat(price_string);
		//alert("Normalpreis für Zimmer " + i + " = " + price_value);
		
		// Anzahl der Erwachsenen für dieses Zimmer
		var num_adults = XMLroom_descriptions[i].getElementsByTagName("adults")[0].firstChild.nodeValue;
		var price_for_adults = price_value * num_adults;
		//alert ("Preis für " + num_adults + " Erwachsene = " + price_for_adults);
		total_price += price_for_adults;
		
		// Alle child-Knoten ermitteln
		var XMLchild_nodes = XMLroom_descriptions[i].getElementsByTagName("child");
		
		// Alle child-Knoten durchgehen
		for (var j=0; j<XMLchild_nodes.length; j++)
		{
			var child_price_string = XMLchild_nodes[j].getElementsByTagName("price")[0].firstChild.nodeValue;
			var child_price_value = priceStringToFloat(child_price_string);
			total_price += child_price_value;
		}
	}
	
	// Formatierung anpassen
	total_price = floatToPriceString(total_price);
	
	//alert ("Gesamtpreis = " + total_price);
}

function getRoomPriceTable(num_room)
{
	room_price = 0;
	var n = selected_offer;
			
	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[n-1]; 
	var XMLroom_description = XMLoffer.getElementsByTagName("room_description")[num_room];

	// Normalpreis für dieses Zimmer für den gesamten Aufenthalt
	var price_string = XMLroom_description.getElementsByTagName("price_per_person")[0].firstChild.nodeValue;
	var price_value = priceStringToFloat(price_string);
	//alert("Normalpreis für Zimmer " + i + " = " + price_value);
		
	// Anzahl der Erwachsenen für dieses Zimmer
	var num_adults = 1 * XMLroom_description.getElementsByTagName("adults")[0].firstChild.nodeValue;
	var price_for_adults = price_value * num_adults;
	//alert ("Preis für " + num_adults + " Erwachsene = " + price_for_adults);
	room_price += price_for_adults;
	
	var room_price_table = document.createElement("table");
	room_price_table.id = "room_price";

	var price_for_string = getLanguageString("price_for",language_string);
	var adults_string = getLanguageString("adults",language_string);
	var child_string = getLanguageString("child",language_string);
	
	if (num_adults > 0)
	{
		var adults_text = getText(price_for_string + " " + num_adults + " " + adults_string + ":");
		var adults_price_text = getText(floatToPriceString(price_for_adults) + " Euro");
		//var adults_row = document.createElement("tr");
		var adults_row = room_price_table.insertRow(room_price_table.rows.length);
	
		var adults_text_col = document.createElement("td");
		adults_text_col.align = "left";
	
		var adults_price_col = document.createElement("td");
		adults_price_col.align = "right";
	
		adults_text_col.appendChild(adults_text);
		adults_price_col.appendChild(adults_price_text);
	
		adults_row.appendChild(adults_text_col);
		adults_row.appendChild(adults_price_col);
	
		//room_price_table.appendChild(adults_row);
	}
	
	// Alle child-Knoten ermitteln
	var XMLchild_nodes = XMLroom_description.getElementsByTagName("child");
	
	// Alle child-Knoten durchgehen
	for (var j=0; j<XMLchild_nodes.length; j++)
	{
		var num_child = j+1;
		var child_price_string = XMLchild_nodes[j].getElementsByTagName("price")[0].firstChild.nodeValue;
		var child_price_value = priceStringToFloat(child_price_string);
		room_price += child_price_value;
		
		var child_text = getText(price_for_string + " " + child_string + " " + num_child + ": ");
		//var child_row = document.createElement("tr");
		var child_row = room_price_table.insertRow(room_price_table.rows.length);
		var child_text_col = document.createElement("td");
		child_text_col.align = "left";
		
		var child_price_col = document.createElement("td");
		child_price_col.align = "right";
	
		child_text_col.appendChild(child_text);
		child_price_col.appendChild(getText(child_price_string + " Euro"));
	
		child_row.appendChild(child_text_col);
		child_row.appendChild(child_price_col);
	
		//room_price_table.appendChild(child_row);		
	}

	// Trennlinie
	var bar = document.createElement("hr");
	//var bar_row = document.createElement("tr");
	var bar_row = room_price_table.insertRow(room_price_table.rows.length);
	var bar_col = document.createElement("td");
	bar_col.colSpan = 2;
	
	bar_col.appendChild(bar);
	bar_row.appendChild(bar_col);
	
	//room_price_table.appendChild(bar_row);
	
	// Formatierung anpassen
	room_price = floatToPriceString(room_price);

	var intermediate_total_string = getLanguageString("intermediate_total",language_string);
	var room_text = getText(intermediate_total_string + " :");
	var room_price_text = getText(room_price + " Euro");
	//var room_row = document.createElement("tr");
	var room_row = room_price_table.insertRow(room_price_table.rows.length);
	var room_text_col = document.createElement("td");
	room_text_col.align = "left";
	
	var room_price_col = document.createElement("td");
	room_price_col.align = "right";
	
	room_text_col.appendChild(room_text);
	room_price_col.appendChild(room_price_text);
	
	room_row.appendChild(room_text_col);
	room_row.appendChild(room_price_col);
	
	//room_price_table.appendChild(room_row);
	
	return room_price_table;
}

function getChildrenPrice(XMLroom_description,age)
{
	// Normalpreis für dieses Zimmer für den gesamten Aufenthalt
	var price = XMLroom_description.getElementsByTagName("price_per_person")[0].firstChild.nodeValue;	
	
	var XMLchildren_discounts_node = XMLroom_description.getElementsByTagName("children_discounts")[0];
	
	// Alle Kinderpreise ermitteln
	//var XMLchildren_prices = XMLroom_description.getElementsByTagName("price");
	var XMLchildren_prices = XMLchildren_discounts_node.getElementsByTagName("price");
	//alert (XMLchildren_prices.length + " Kinderpreise gefunden");
	
	// Den Preis für das gegebene Alter heraussuchen
	for (var i=0; i<XMLchildren_prices.length; i++)
	{
		var min_age = 1 * XMLchildren_prices[i].getAttribute("min_age");
		var max_age = 1 * XMLchildren_prices[i].getAttribute("max_age");
		var children_price = XMLchildren_prices[i].firstChild.nodeValue;
		
		//alert ("min_age = " + min_age + "\nmax_age = " + max_age + "\nage = " + age + "\nprice = " + price);
		
		if (age >= min_age && age <= max_age)
		{
		   price = children_price;
		   break;
		}
	}
	
	return price;
}

function getChildAge(child_number)
{
	child_number--;
	
	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[selected_offer-1];

	// Alle child-Konoten dieses offer-Knotens
	var XMLchildren = XMLoffer.getElementsByTagName("child");
				
	// Wert des Unterknoten des child_number-1 ten child-Knotens aus der XML-Datei
	return XMLchildren[child_number].getElementsByTagName("age")[0].firstChild.nodeValue;
}

function setChildrenPrices(select,room_description_number,child_number)
{
	child_number--;

	//alert("child_number=" + child_number);
	
	// Ausgewähltes Alter
	var selected_age = select.options[select.options.selectedIndex].value;

	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[selected_offer-1];

	// Alle room_description-Konoten dieses offer-Knotens
	var XMLroom_descriptions = XMLoffer.getElementsByTagName("room_description");

	for (var i=0; i<XMLroom_descriptions.length; i++)
	{
		if (i == room_description_number)
		{
			// Alle child-Knoten dieses Zimmers ermitteln
			var XMLchildren = XMLroom_descriptions[i].getElementsByTagName("child");
			var children_price = getChildrenPrice(XMLroom_descriptions[i],selected_age);
				
			// Werte der Unterknoten des child_number-1 ten child-Knotens aus der XML-Datei
			XMLchildren[child_number].getElementsByTagName("age")[0].firstChild.nodeValue = selected_age;				
			XMLchildren[child_number].getElementsByTagName("price")[0].firstChild.nodeValue = children_price;	
		}	
	}
		
	// Ausgewähltes Angebot neu zeichnen
	displayOffer();
	
}

function isApartment(text)
{
	var answer = false;

	var result_ita = text.match(/\bAppartamento\b/i);
	var result_ger = text.match(/\bApartment\b/i);
	
	result = (result_ita || result_ger);
	
	if (result)
	{
		answer = true;
		//alert("apartment = true");
	}
	else
	{
		//alert("apartment = false");
	}
	
	//alert("result.length = " + result.length);
	
	return answer;
}

function isMultiple(text)
{	
	return !text.match(/\b1x\b/i);
}

function displayOffer()
{
	var n = selected_offer;
		
	removeChildrenId("offers");
			
	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[n-1];
	
	//var selected_offer = getOffer(XMLoffer);
	//var button = createButton("buchen",function() { });

	// Wert des headline-Knotens dieses offer-Konotens
	var headline = XMLoffer.getElementsByTagName("headline")[0].firstChild.nodeValue;
	var offer = getText("\n" + headline + "\n\n");
	
	// Alle room_description-Konoten dieses offer-Knotens
	var XMLroom_descriptions = XMLoffer.getElementsByTagName("room_description");
	
	for (var i=0; i<XMLroom_descriptions.length; i++)
	{
		// Für jedes Zimmer ein neues div-Element
		var room_div = document.createElement("div");
		room_div.id = "room";
		
		// Ein Array mit allen text-Knoten dieses room_description-Konotens
		var room_description_texts = XMLroom_descriptions[i].getElementsByTagName("text");
		
		// Anzahl der Erwachsenen für dieses Zimmer
		var num_adults = 1 * XMLroom_descriptions[i].getElementsByTagName("adults")[0].firstChild.nodeValue;

		// Anzahl der Kinder für dieses Zimmer
		var num_children = 1 * getChildren(XMLroom_descriptions[i]);
		
		// Normalpreis für dieses Zimmer für den gesamten Aufenthalt
		var price_per_person = XMLroom_descriptions[i].getElementsByTagName("price_per_person")[0].firstChild.nodeValue;
		
		var room_description_text = "";
		
		for (var j=0; j<room_description_texts.length; j++)
		{
			room_description_text += room_description_texts[j].firstChild.nodeValue;
		}

		var apartment = isApartment(room_description_text);
		var multiple = isMultiple(room_description_text);
		var text_node = getText(room_description_text + "\n\n");
		room_div.appendChild(text_node);
		
		var language = document.getElementById("language").value;		
		
		//room_div.appendChild(getText("Normalpreis: " + price_per_person + " Euro pro Person\n"));
		
		if (num_adults > 0)
		{
			var adults_text = num_adults + " " + getLanguageString("adults",language_string) + "\n";
			room_div.appendChild(getText(adults_text));
		}
		
		if (num_children > 0)
		{
			var children_text = num_children + " " + getLanguageString("children",language_string) + "\n";
			room_div.appendChild(getText(children_text));		
		}
		
		room_div.appendChild(document.createElement("br"));
		
		// Kinderrabatte nur dann, wenn Kinder zusammen mit Erwachsenen in einem Zimmer sind
		if (num_children > 0 && num_adults > 1 && !apartment && !multiple)
		{
			// Alle child-Knoten dieses Zimmers ermitteln
			var XMLchildren = XMLroom_descriptions[i].getElementsByTagName("child");
			
			//var XMLchildren_price_texts = XMLchildren.getElementsByTagName("price");
			
			for (var k=1; k<=num_children; k++)
			{								
				// Werte der Unterknoten des k-1 ten child-Knotens aus der XML-Datei
				var child_age_text = XMLchildren[k-1].getElementsByTagName("age")[0].firstChild.nodeValue;				
				var child_price_text = XMLchildren[k-1].getElementsByTagName("price")[0].firstChild.nodeValue;

				// Select-Button für Kindesalter
				//var child_age_selector = createIntegerSelection(0,17,child_age_text,"children_ages[]");
				var child_age_selector = createIntegerSelection(0,18,child_age_text,"children_ages[]");

				switch (i)  // Nummer der Zimmerbeschreibung				
				{
					case 0:
						switch (k)  // Nummer der Kinder
						{
							case 1:
								child_age_selector.onchange = function() {setChildrenPrices(this,0,1);};
							break;
				
							case 2:
								child_age_selector.onchange = function() {setChildrenPrices(this,0,2);};
							break;
			
							case 3:
								child_age_selector.onchange = function() {setChildrenPrices(this,0,3);};
							break;

							case 4:
								child_age_selector.onchange = function() {setChildrenPrices(this,0,4);};
							break;

							case 5:
								child_age_selector.onchange = function() {setChildrenPrices(this,0,5);};
							break;

							case 6:
								child_age_selector.onchange = function() {setChildrenPrices(this,0,6);};
							break;
						}
					break;
					
					case 1:
						switch (k)  // Nummer der Kinder
						{
							case 1:
								child_age_selector.onchange = function() {setChildrenPrices(this,1,1);};
							break;
				
							case 2:
								child_age_selector.onchange = function() {setChildrenPrices(this,1,2);};
							break;
			
							case 3:
								child_age_selector.onchange = function() {setChildrenPrices(this,1,3);};
							break;

							case 4:
								child_age_selector.onchange = function() {setChildrenPrices(this,1,4);};
							break;

							case 5:
								child_age_selector.onchange = function() {setChildrenPrices(this,1,5);};
							break;

							case 6:
								child_age_selector.onchange = function() {setChildrenPrices(this,1,6);};
							break;
						}
					break;
				
					case 2:
						switch (k)  // Nummer der Kinder
						{
							case 1:
								child_age_selector.onchange = function() {setChildrenPrices(this,2,1);};
							break;
				
							case 2:
								child_age_selector.onchange = function() {setChildrenPrices(this,2,2);};
							break;
			
							case 3:
								child_age_selector.onchange = function() {setChildrenPrices(this,2,3);};
							break;

							case 4:
								child_age_selector.onchange = function() {setChildrenPrices(this,2,4);};
							break;

							case 5:
								child_age_selector.onchange = function() {setChildrenPrices(this,2,5);};
							break;

							case 6:
								child_age_selector.onchange = function() {setChildrenPrices(this,2,6);};
							break;
						}
					break;
				
				}
				
				var child_age_string = getLanguageString("child_age",language_string);
				room_div.appendChild(getText(child_age_string + " " + k + ": "));
				room_div.appendChild(child_age_selector);
				room_div.appendChild(document.createElement("br"));
			}
					
			room_div.appendChild(document.createElement("br"));
		
		}
		
		if (!apartment)
		{
			room_div.appendChild(getRoomPriceTable(i));
			room_div.appendChild(document.createElement("br"));
		}
		
		// Das div-Element des Zimmers zum Angebot hinzufügen
		offer.appendChild(room_div);
	}
	
	// Gesamtpreis
	if (!apartment)
	{
		calculateTotalPrice();
		var total_price_string = getLanguageString("total_price",language_string);
		var total_price_span = getText(total_price_string + ": " + total_price + " Euro");
		total_price_span.id = "total_price";
		offer.appendChild(total_price_span);
	}
	
	// Extra Text
	var extra_text = getExtraText(XMLoffer);
	offer.appendChild(getText(extra_text + "\n\n"));
	
	// Servicetext
	var service_text = getServiceText(XMLoffer);
	offer.appendChild(getText("\n\n" + service_text + "\n\n"));

	// Buttons hinzufügen

	// Zurück
	var back_string = getLanguageString("back",language_string);
	var back_button = createButton(back_string,function() { getOffers(); });
	offer.appendChild(back_button);
	
	// Weiter zur Buchung
	if (mode == "normal")
	{
		var continue_string = getLanguageString("continue",language_string);
		var button = createButton(continue_string,function() { getAddressInput(); });
		offer.appendChild(button);
	}
	
	appendToId(offer,"offers");	
}

function selectOffer(n)
{
	//alert("Angebot " + n + " buchen...");
	selected_offer = n;
	displayOffer();
}

function getAddressInputTable()
{
	if (!checkDates())
	{
		alert(getLanguageString("insert_valid_period",language_string));
		return;
	}

	var firstname = "";
	var lastname = "";
	var street = "";
	var zipcode = "";
	var city = "";
	var country = "";
	var phone = "";
	var email = "";
	
	if (ob_request_obj != null)
	{	
		var ob_guest_id = ob_request_obj.getGuestID();
		
		if (ob_guest_id != null && ob_guest_id != "")
		{
			var guest = new guest_class();
			
			guest.load(ob_client_id,ob_guest_id);
			firstname = guest.getFirstname();
			lastname = guest.getLastname();
			street = guest.getStreet();
			zipcode = guest.getZipcode();
			city = guest.getCity();
			country = guest.getCountry();
			phone = guest.getPhone();
			email = guest.getEmail();
		}
	}
	
	var table = document.createElement("table");
	
	// Vorname
	var firstname_row = table.insertRow(table.rows.length);
	var firstname_text_col = document.createElement("td");
	firstname_text_col.align = "left";
	var firstname_input_col = document.createElement("td");
	firstname_input_col.align = "left";
	
	var firstname_string = getLanguageString("firstname",language_string);	
	var firstname_text = getText(firstname_string);
	firstname_text_col.appendChild(firstname_text);
	
	var firstname_input = createTextInput("firstname",firstname);
	firstname_input_col.appendChild(firstname_input);
	
	firstname_row.appendChild(firstname_text_col);
	firstname_row.appendChild(firstname_input_col);
	
	// Nachname
	var lastname_row = table.insertRow(table.rows.length);
	var lastname_text_col = document.createElement("td");
	lastname_text_col.align = "left";
	var lastname_input_col = document.createElement("td");
	lastname_input_col.align = "left";
	
	var lastname_string = getLanguageString("lastname",language_string);
	var lastname_text = getText(lastname_string);
	lastname_text_col.appendChild(lastname_text);
	
	var lastname_input = createTextInput("lastname",lastname);
	lastname_input_col.appendChild(lastname_input);
	
	lastname_row.appendChild(lastname_text_col);
	lastname_row.appendChild(lastname_input_col);
	
	// Straße
	var street_row = table.insertRow(table.rows.length);
	var street_text_col = document.createElement("td");
	street_text_col.align = "left";
	var street_input_col = document.createElement("td");
	street_input_col.align = "left";
	
	var street_string = getLanguageString("street",language_string);
	var street_text = getText(street_string);
	street_text_col.appendChild(street_text);
	
	var street_input = createTextInput("street",street);
	street_input_col.appendChild(street_input);
	
	street_row.appendChild(street_text_col);
	street_row.appendChild(street_input_col);
	
	// Postleitzahl
	var zip_row = table.insertRow(table.rows.length);
	var zip_text_col = document.createElement("td");
	zip_text_col.align = "left";
	var zip_input_col = document.createElement("td");
	zip_input_col.align = "left";
	
	var zip_string = getLanguageString("zip",language_string);
	var zip_text = getText(zip_string);
	zip_text_col.appendChild(zip_text);
	
	var zip_input = createTextInput("zip",zipcode);
	zip_input_col.appendChild(zip_input);
	
	zip_row.appendChild(zip_text_col);
	zip_row.appendChild(zip_input_col);
		
	// Stadt
	var city_row = table.insertRow(table.rows.length);
	var city_text_col = document.createElement("td");
	city_text_col.align = "left";
	var city_input_col = document.createElement("td");
	city_input_col.align = "left";
	
	var city_string = getLanguageString("city",language_string);
	var city_text = getText(city_string);
	city_text_col.appendChild(city_text);
	
	var city_input = createTextInput("city",city);
	city_input_col.appendChild(city_input);
	
	city_row.appendChild(city_text_col);
	city_row.appendChild(city_input_col);
	
	// Land
	var country_row = table.insertRow(table.rows.length);
	var country_text_col = document.createElement("td");
	country_text_col.align = "left";
	var country_input_col = document.createElement("td");
	country_input_col.align = "left";
	
	var country_string = getLanguageString("country",language_string);
	var country_text = getText(country_string);
	country_text_col.appendChild(country_text);
	
	var country_input = createTextInput("country",country);
	country_input_col.appendChild(country_input);
	
	country_row.appendChild(country_text_col);
	country_row.appendChild(country_input_col);

	// Telefonnummer
	var phone_row = table.insertRow(table.rows.length);
	var phone_text_col = document.createElement("td");
	phone_text_col.align = "left";
	var phone_input_col = document.createElement("td");
	phone_input_col.align = "left";
	
	var phone_string = getLanguageString("phone",language_string);
	var phone_text = getText(phone_string);
	phone_text_col.appendChild(phone_text);
	
	var phone_input = createTextInput("phone",phone);
	phone_input_col.appendChild(phone_input);
	
	phone_row.appendChild(phone_text_col);
	phone_row.appendChild(phone_input_col);
	
	// email-Adresse
	var email_row = table.insertRow(table.rows.length);
	var email_text_col = document.createElement("td");
	email_text_col.align = "left";
	var email_input_col = document.createElement("td");
	email_input_col.align = "left";
	
	var email_string = getLanguageString("email",language_string);
	var email_text = getText(email_string);
	email_text_col.appendChild(email_text);
	
	var email_input = createTextInput("email",email);
	email_input_col.appendChild(email_input);
	
	email_row.appendChild(email_text_col);
	email_row.appendChild(email_input_col);

	// Freitext
	var note_row = table.insertRow(table.rows.length);
	var note_text_col = document.createElement("td");
	note_text_col.align = "left";
	var note_input_col = document.createElement("td");
	note_input_col.align = "left";
	
	var note_string = getLanguageString("note",language_string);
	note_text_col.appendChild(getText(note_string));
	
	var note_input = document.createElement("textarea");
	note_input.cols = 20;
	note_input.rows = 5;
	note_input.name = "note";
	note_input.id = "note";
	note_input_col.appendChild(note_input);
	
	note_row.appendChild(note_text_col);
	note_row.appendChild(note_input_col);
		
	return table;
}

function createPrivacy()
{
	var table = document.createElement("table");
	var privacy_row = table.insertRow(table.rows.length);
	var checkbox_col = document.createElement("td");
	var privacy_text_col = document.createElement("td");
	
	var privacy_string = getLanguageString("privacy",language_string);
	privacy_text_col.appendChild(getText(privacy_string));

	var checkbox = document.createElement("input");
	checkbox.type = "checkbox";
	checkbox.defaultChecked = true;
	checkbox_col.appendChild(checkbox);
	
	privacy_row.appendChild(privacy_text_col);
	privacy_row.appendChild(checkbox_col);
	
	return table;
}

function getChildrenAgeHint(XMLoffer)
{
	var hint_text = "";

	//getChildAge(child_number);

	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[selected_offer-1];

	// Alle child-Konoten dieses offer-Knotens
	var XMLchildren = XMLoffer.getElementsByTagName("child");
	var num_children = XMLchildren.length;

	var child_age_string = getLanguageString("child_age",language_string);
		
	for (var i=1; i<=num_children; i++)
	{
		// Wert des Unterknoten des child_number-ten child-Knotens aus der XML-Datei
		var child_age = XMLchildren[i-1].getElementsByTagName("age")[0].firstChild.nodeValue;	
		hint_text += child_age_string + " " + i + ": " + child_age + "\n";
	}
	
	return hint_text;
}

function getOfferText(XMLoffer)
{
	var text = "";

	// Wert des headline-Knotens dieses offer-Konotens
	//var headline = XMLoffer.getElementsByTagName("headline")[0].firstChild.nodeValue;
	//text += headline + "\n\n";
	
	// Alle room_description-Konoten dieses offer-Knotens
	var XMLroom_descriptions = XMLoffer.getElementsByTagName("room_description");
	
	for (var i=0; i<XMLroom_descriptions.length; i++)
	{
		// Ein Array mit allen text-Knoten dieses room_description-Konotens
		var room_description_texts = XMLroom_descriptions[i].getElementsByTagName("text");
		
		for (var j=0; j<room_description_texts.length; j++)
		{
			var room_description_text = room_description_texts[j].firstChild.nodeValue;
			text += room_description_text;
		}
	}

	// Alter der Kinder
	var child_age_hint_text = getChildrenAgeHint(XMLoffer);
	text += child_age_hint_text + "\n";

	// Extra Text
	var extra_text = getExtraText(XMLoffer);
	text += extra_text + "\n";
	
	// Servicetext
	var service_text = getServiceText(XMLoffer);
	text += "\n" + service_text;

	return text;
}

function requestSend()
{
	if (anfrage.readyState == 4)
	{
		if (anfrage.status == 200)
		{
			removeChildrenId("offers");
			//alert("Ihre Anfrage wurde verschickt.");
			
			var request_send_string = getLanguageString("request_send",language_string);
			var text_node = getText(request_send_string + "\n");
			appendToId(text_node,"offers");
		}
	}		
}

function checkRequiredFields()
{
	var answer = false;

	var firstname = document.getElementById("firstname").value;
	var lastname = document.getElementById("lastname").value;
	var email = document.getElementById("email").value;

	if (firstname != "" && lastname != "" && email != "")
	{
		answer = true;
	}
	
	return answer;
}

function submitRequest()
{
	//alert("submitRequest");

	if (!checkDates())
	{
		alert(getLanguageString("insert_valid_period",language_string));
		return;
	}	
	
	var n = selected_offer;
					
	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[n-1];	
	
	var offer_text = getOfferText(XMLoffer);
	
	//alert (offer_text);
	
	var url = "http://www.easymailing.eu/Hotelprojekt/ajax/ajax_offer.php";

	var client_id = document.getElementById("client_id").value;
	var language = document.getElementById("language").value;
	var request_id = getRequestId();

	var startDay = calendar_from.getSelectedDay();
	var startMonth = calendar_from.getSelectedMonth();
	var startYear = calendar_from.getSelectedYear();

	var endDay = calendar_to.getSelectedDay();
	var endMonth = calendar_to.getSelectedMonth();
	var endYear = calendar_to.getSelectedYear();	
	
	var adults = document.getElementById("adults").value;
	var children = document.getElementById("children").value;
	var rooms_wanted = document.getElementById("rooms_wanted").value;
	
	var service = document.getElementById("service").value;
	
	var note = document.getElementById("note").value;
	
	var firstname = document.getElementById("firstname").value;
	var lastname = document.getElementById("lastname").value;
	var street = document.getElementById("street").value;
	var zip = document.getElementById("zip").value;
	var city = document.getElementById("city").value;
	var country = document.getElementById("country").value;
	var phone = document.getElementById("phone").value;
	var email = document.getElementById("email").value;
	
	if (!checkRequiredFields())
	{
		alert(getLanguageString("required_field_missing",language_string));
	}
	else
	{
		var post_data = "startDay=" + startDay + "&startMonth=" + startMonth + "&startYear=" + startYear +
						"&endDay=" + endDay + "&endMonth=" + endMonth + "&endYear=" + endYear +
						"&adults=" + adults + "&children=" + children + "&rooms=" + rooms_wanted + "&service=" + service +
						"&note=" + note + "&language=" + language + "&client_id=" + client_id +
						"&offer_text=" + offer_text + "&total_price=" + total_price +
						"&firstname=" + firstname + "&lastname=" + lastname +
						"&street=" + street + "&zip=" + zip + "&city=" + city +
						"&country=" + country + "&phone=" + phone + "&email=" + email + 
						"&action=submit_request" + "&request_id=" + request_id +
						"&selected_offer_nr=" + selected_offer;

		erzeugeAnfrage();
	
		anfrage.open("POST", url, true);
		anfrage.onreadystatechange = function() { requestSend() };
		anfrage.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		anfrage.send(post_data);
	}
	
}

function postRequest()
{
	//alert("postRequest");

	if (!checkDates())
	{
		alert(getLanguageString("insert_valid_period",language_string));
		return;
	}	
	
	var n = selected_offer;
					
	// Der(n-1)i-ter offer-Knoten aus der XML-Datei
	var XMLoffer = XMLDoc.getElementsByTagName("offer")[n-1];	
	
	var offer_text = getOfferText(XMLoffer);
	
	//alert (offer_text);
		
	var client_id = document.getElementById("client_id").value;
	var language = document.getElementById("language").value;
	var request_id = getRequestId();

	var startDay = calendar_from.getSelectedDay();
	var startMonth = calendar_from.getSelectedMonth();
	var startYear = calendar_from.getSelectedYear();

	var endDay = calendar_to.getSelectedDay();
	var endMonth = calendar_to.getSelectedMonth();
	var endYear = calendar_to.getSelectedYear();	
	
	var adults = document.getElementById("adults").value;
	var children = document.getElementById("children").value;
	var rooms_wanted = document.getElementById("rooms_wanted").value;
	
	var service = document.getElementById("service").value;
	
	var note = document.getElementById("note").value;
	
	var firstname = document.getElementById("firstname").value;
	var lastname = document.getElementById("lastname").value;
	var street = document.getElementById("street").value;
	var zip = document.getElementById("zip").value;
	var city = document.getElementById("city").value;
	var country = document.getElementById("country").value;
	var phone = document.getElementById("phone").value;
	var email = document.getElementById("email").value;
	
	if (!checkRequiredFields())
	{
		alert(getLanguageString("required_field_missing",language_string));
	}
	else
	{
		var post_data = "startDay=" + startDay + "&startMonth=" + startMonth + "&startYear=" + startYear +
						"&endDay=" + endDay + "&endMonth=" + endMonth + "&endYear=" + endYear +
						"&adults=" + adults + "&children=" + children + "&rooms=" + rooms_wanted + "&service=" + service +
						"&note=" + note + "&language=" + language + "&client_id=" + client_id +
						"&offer_text=" + offer_text + "&total_price=" + total_price +
						"&firstname=" + firstname + "&lastname=" + lastname +
						"&street=" + street + "&zip=" + zip + "&city=" + city +
						"&country=" + country + "&phone=" + phone + "&email=" + email + 
						"&action=submit_request" + "&request_id=" + request_id +
						"&selected_offer_nr=" + selected_offer;
		
		erzeugeAnfrage();

		// Angebotsmail versenden
		var url = "http://www.easymailing.eu/Hotelprojekt/ajax/ajax_offer.php";
		anfrage.open("POST", url, false);
		anfrage.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		anfrage.send(post_data);		
		
		// Parameter per GET an Programm auf dem Server übergeben

		var get_data = "startDay=" + startDay + "&startMonth=" + startMonth + "&startYear=" + startYear +
						"&endDay=" + endDay + "&endMonth=" + endMonth + "&endYear=" + endYear +
						"&adults=" + adults + "&children=" + children + "&rooms=" + rooms_wanted + "&service=" + service +
						"&note=" + escape(note) + "&language=" + language + "&client_id=" + client_id +
						"&offer_text=" + escape(offer_text) + "&total_price=" + total_price +
						"&firstname=" + escape(firstname) + "&lastname=" + escape(lastname) +
						"&street=" + escape(street) + "&zip=" + escape(zip) + "&city=" + escape(city) +
						"&country=" + escape(country) + "&phone=" + escape(phone) + "&email=" + escape(email) + 
						"&action=submit_request" + "&request_id=" + request_id +
						"&selected_offer_nr=" + selected_offer;

		var url = post_form;

		window.location.href = url + "?" + get_data;
		
		/*
		anfrage.open("POST", url, false);
		//anfrage.onreadystatechange = function() { showResult() };
		anfrage.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		anfrage.send(post_data);
        document.open();
		document.write(anfrage.responseText);
		document.close();
		anfrage.abort();
		*/
	}
	
}

function getAddressInput()
{
	//alert("getAddressInput");
	removeChildrenId("offers");
	
	var address_input = getAddressInputTable();
	
	appendToId(address_input,"offers");
	appendToId(document.createElement("br"),"offers");

	var required_fields_string = getLanguageString("required_fields",language_string);
	appendToId(getText(required_fields_string),"offers");
	appendToId(document.createElement("br"),"offers");
	
	// Genehmigung für Werbemails
	var privacy = createPrivacy();
	appendToId(privacy,"offers");
	appendToId(document.createElement("br"),"offers");
	
	// Button hinzufügen
	var continue_string = getLanguageString("continue",language_string);
	
	if (post_form == "")
	{
		var button = createButton(continue_string,function() { submitRequest(); });
	}
	else
	{
		var button = createButton(continue_string,function() { postRequest(); });
	}
	
	appendToId(button,"offers");
}

function getText(text)
{
	var span = document.createElement("span");
	
	if (text != null)
	{
		var lines = text.split("\n");
	
		var num_lines = lines.length;
		var last_line = num_lines-1;
	
		for (var i=0; i<num_lines; i++)
		{
			var line = document.createTextNode(lines[i]);
			span.appendChild(line);

			if (i != last_line)
			{
				var umbruch = document.createElement("br");	
				span.appendChild(umbruch);
			}
		}
	}
	
	return span;
}

function createButton(value,eventHandler)
{
  var button = document.createElement("input");

  button.type    = "button";
  button.value   = value;
  button.onclick = eventHandler;
  button.className = "input";

  return button;
}

function createTextInput(name,value)
{
  var input = document.createElement("input");

  input.type    = "text";
  input.name 	= name;
  input.id		= name;
  input.value   = value;
  input.className = "input";

  return input;
}

function getOffer(XMLoffer)
{
	// Wert des headline-Knotens dieses offer-Konotens
	var headline = XMLoffer.getElementsByTagName("headline")[0].firstChild.nodeValue;
	var offer = getText("\n" + headline + "\n\n");
	
	// Alle room_description-Konoten dieses offer-Knotens
	var XMLroom_descriptions = XMLoffer.getElementsByTagName("room_description");
	
	for (var i=0; i<XMLroom_descriptions.length; i++)
	{
		// Ein Array mit allen text-Knoten dieses room_description-Konotens
		var room_description_texts = XMLroom_descriptions[i].getElementsByTagName("text");
		
		for (var j=0; j<room_description_texts.length; j++)
		{
			var room_description_text = room_description_texts[j].firstChild.nodeValue;
			offer.appendChild(getText(room_description_text + "\n\n"));
		}	
	}
	
	// Extra Text
	var extra_text = getExtraText(XMLoffer);
	offer.appendChild(getText(extra_text + "\n\n"));
	
	var service_text = getServiceText(XMLoffer);
	offer.appendChild(getText(service_text + "\n\n"));
		
	return offer;
}

function showResult()
{
	if (anfrage.readyState == 4)
	{
		changeLoadingState(false);
		
		if (anfrage.status == 200)
		{
			document.write(anfrage.responseText);
		}
	}
}

function updateSeite()
{
	if (anfrage.readyState == 4)
	{
		changeLoadingState(false);
		
		if (anfrage.status == 200)
		{
			//removeChildrenId("offers");
			XMLDoc = anfrage.responseXML;
	
			if (XMLDoc != null)
			{
				var XMLoffers = XMLDoc.getElementsByTagName("offer");
	
				if (XMLoffers.length == 0)
				{
					var text = getLanguageString("no_offer",language_string);
					
					var offer = getText(text);
					appendToId(offer,"offers");
				}
	
				var book_string = getLanguageString("book",language_string);
	
				for (var i=0; i<XMLoffers.length; i++)
				{
					//alert("Angebot " + i + " hat " + XMLoffers[i].getElementsByTagName("text").length + " Textelemente");

					// Der i-te offer-Knoten aus der XML-Datei
					var XMLoffer = XMLoffers[i];
										
					switch (i+1)
					{
						case 1:
						
							var offer_1 = getOffer(XMLoffer);
							
							if (mode != "hide_details")
							{
								var button_1 = createButton(book_string,function() { selectOffer(1); });
								offer_1.appendChild(button_1);
							}
							
							offer_1.appendChild(document.createElement("br"));
							appendToId(offer_1,"offers");
						
						break;

						case 2:
						    
							var offer_2 = getOffer(XMLoffer);
							
							if (mode != "hide_details")
							{
								var button_2 = createButton(book_string,function() { selectOffer(2); });
								offer_2.appendChild(button_2);
							}
							
							offer_2.appendChild(document.createElement("br"));
							appendToId(offer_2,"offers");
						
						break;

						case 3:
						
							var offer_3 = getOffer(XMLoffer);
							
							if (mode != "hide_details")
							{
								var button_3 = createButton(book_string,function() { selectOffer(3); });
								offer_3.appendChild(button_3);
							}
							
							offer_3.appendChild(document.createElement("br"));							
							appendToId(offer_3,"offers");
						break;
					}	
				}			
			}	
		}	
	}
}

function createIntegerSelection(min,max,selected,name)
{
	var auswahl = document.createElement("select");
	var is_selected = false;
	
	auswahl.name = name;
	auswahl.id = name;
	auswahl.className = "input";
	
	for (var i=min; i<=max; i++)
	{
		i==selected ? is_selected=true : is_selected=false;
		auswahl[auswahl.length] = new Option(i,i,false,is_selected);
	}
	
	return auswahl;
}

function appendToId(element,id)
{
	var pos = document.getElementById(id);
	
	if (pos != null)
	{
		pos.appendChild(element);
	}
}

function setLanguageString(language_code)
{
	switch (language_code)
	{
		case '1':
			language_string = "italian";
		break;
		
		case '2':
			language_string = "german";
		break;

		case '3':
			language_string = "english";
		break;
		
		default:
			language_string = "english";
		break;
	}
}

function toggleVisibility(id)
{
	var node = document.getElementById(id);
	
	if (node != null)
	{
		if (node.style.display == "")
		{
			node.style.display = "none";
		}
		else
		{
			node.style.display = "";
		}
	}
}

function changeVisibilityAll()
{
	toggleVisibility("adults_field");
	toggleVisibility("children_field");
	toggleVisibility("rooms_field");
	toggleVisibility("service_field");
}

function checkBrowserName(name)
{  
   var agent = navigator.userAgent.toLowerCase();
   
   return agent.indexOf(name.toLowerCase()) != -1;  
}

function checkBrowserVersion(version)
{
	return navigator.appVersion.indexOf(version + ".") != -1;
}

function checkBrowser(name,version)
{
	return checkBrowserName(name) && checkBrowserVersion(version);
}  

function getCookie(c_name)
{
	var value = "";

	if (document.cookie.length>0)
	{
		c_start=document.cookie.indexOf(c_name + "=");
		
		if (c_start != -1)
		{
			c_start = c_start + c_name.length+1;
			c_end = document.cookie.indexOf(";",c_start);
			
			if (c_end==-1) c_end = document.cookie.length;
			value = unescape(document.cookie.substring(c_start,c_end));
		}
	}
	
	return value;
}

function init()
{
	// Sprachdatei laden
	getLanguages('http://www.easymailing.eu/Hotelprojekt/ajax/languages.php');
	setLanguageString(document.getElementById("language").value);

	if (document.cookie.length > 0)
	{
		ob_client_id = getCookie("ob_client_id");
		ob_request_id = getCookie("ob_request_id");
		
		//alert("ob_client_id = " + ob_client_id + "\nob_request_id = " + ob_request_id);
		
		if (!(ob_client_id == null || ob_client_id == "") && !(ob_request_id == null || ob_request_id == ""))
		{
			ob_request_obj = new request_class();
			ob_request_obj.load(ob_client_id,ob_request_id);
		}
	}
	
	var mode_node = document.getElementById("mode");
	
	if (mode_node)
	{
		mode = mode_node.value;
	}

	var post_form_node = document.getElementById("post_form");
	
	if (post_form_node)
	{
		post_form = post_form_node.value;
		//alert("post_form = " + post_form);
	}	
	
	var update_node = document.getElementById("update")
	
	if (update_node)
	{
		update = update_node.value;
	}
	
	referrer = document.referrer;
	
	if (ob_request_obj == null)
	{
		var adults_select = createIntegerSelection(1,8,1,"adults");
		var children_select = createIntegerSelection(0,6,0,"children");
		var rooms_select = createIntegerSelection(1,5,0,"rooms_wanted");
	}
	else
	{
		var adults_select = createIntegerSelection(1,8,ob_request_obj.getAdults(),"adults");
		var children_select = createIntegerSelection(0,6,ob_request_obj.getChildren(),"children");
		var rooms_select = createIntegerSelection(1,5,ob_request_obj.getRoomsWanted(),"rooms_wanted");	
	}
	
	var handler = function() { };
	
	if (update != "manual")
	{
		adults_select.onchange = getOffers;
		children_select.onchange = getOffers;
		handler = function() { getOffers(); };
	}
		
	appendToId(adults_select,"adults_field");
	appendToId(children_select,"children_field");
	appendToId(rooms_select,"rooms_field");

	if (ob_request_obj == null)
	{	
		var von = new Date();
		var bis = new Date();
		bis.setTime(von.getTime() + (7 * 24 * 60 * 60 * 1000));
	}
	else
	{
		var von = ob_request_obj.getArrivalDate();
		var bis = ob_request_obj.getDepartureDate();
	}
	
	var visibility_handler = function() { return 0; };

	if (checkBrowser("MSIE",6))
	{
		visibility_handler = function() { changeVisibilityAll(); };
	}

	calendar_from = new calendar_class("calendar_from");
	calendar_from.setCallback(handler);
	calendar_from.setVisibilityCallback(visibility_handler);
	calendar_from.setLanguage(language_string);
	
	var calendar_table_from = calendar_from.getCalendar(von);
	appendToId(calendar_table_from,"dateFrom");
	
	calendar_to = new calendar_class("calendar_to");
	calendar_to.setCallback(handler);
	calendar_to.setVisibilityCallback(visibility_handler);	
	calendar_to.setLanguage(language_string);
	
	var calendar_table_to = calendar_to.getCalendar(bis);
	appendToId(calendar_table_to,"dateTo");

	// Bei Weiterleitung durch Link aus dem Angebot
	// die Berechnung des Angebots automatisch starten
	if (ob_request_obj != null)
	{
		getOffers();
	}
	
}
