
// JS-Datei für das Extended-Formular

// Angeben wie viele Zimmer gleich am Anfang angezeigt werden sollen
var roomsdisplay = 1;

// Definitionen der Zimmertypen und deren maximale Anzahl Personen angeben
var roomdefinitions = new Array();

// Definitionen der Zimmerkategorien pro Zimmertyp
var personsperroom = new Array();

// Felder angeben, die beim entfernen eines Zimmers leer gesetzt werden sollen
var fields2reset = new Array('roomcategory{loop}', 'service{loop}', 'adults{loop}', 'kids{loop}', 'kidsage{loop}1', 'kidsage{loop}2', 'kidsage{loop}3', 'kidsage{loop}4', 'kidsage{loop}5', 'kidsage{loop}6', 'kidsage{loop}7', 'kidsage{loop}8', 'kidsage{loop}9', 'kidsage{loop}10');

// Funktion zum hinzufügen eines Zimmers
function addroom()
{
	if (roomsdisplay >= 10)
	{
		return;
	}
	roomsdisplay += 1;
	document.getElementById('room' + roomsdisplay).style.display = '';
	if (roomsdisplay > 1)
	{
		document.getElementById('removeroomlink').style.display = '';
	}
	if (roomsdisplay > 9)
	{
		document.getElementById('addroomlink').style.display = 'none';
	}
	else
	{
		document.getElementById('addroomlink').style.display = '';
	}
}

// Funktion zum entfernen eines Zimmers
function removeroom()
{
	if (roomsdisplay <= 1)
	{
		return;
	}
	var obj = document.getElementById('room' + roomsdisplay);
	if (!obj)
	{
		return;
	}
	obj.style.display = 'none';
	for (var i = 0; i < fields2reset.length; i += 1)
	{
		var obj = document.getElementById(fields2reset[i].replace('{loop}', roomsdisplay));
		if (obj)
		{
			if (obj.value)
			{
				obj.value = '';
			}
			if (obj.options && obj.options[0])
			{
				obj.options[0].selected = true;
			}
		}
	}
	adjustroom(roomsdisplay);
	roomsdisplay -= 1;
	if (roomsdisplay <= 1)
	{
		var obj = document.getElementById('removeroomlink');
		if (obj)
		{
			obj.style.display = 'none';
		}
	}
	var obj = document.getElementById('addroomlink');
	if (obj)
	{
		obj.style.display = '';
	}
}

// Funktion zum anpassen eines Zimmers nach geändertem Wert
function adjustroom(room)
{
	// Anzahl ausgewählte Personen ermitteln
	var persons = getroompersons(room);
	// Anpassen der Erwachsenen
	setadults(room, maxpersons - persons[1]);
	// Anpassen der Kinder
	setkids(room, maxpersons - persons[0]);
	// Laden der möglichen Zimmerkategorien
	loadcategories(room, persons[0] + persons[1]);
}

// Funktion zum berechnen der Anzahl ausgewählter Personen
function getroompersons(room)
{
	var adultsobj = document.getElementById('adults' + room);
	var kidsobj = document.getElementById('kids' + room);
	if (adultsobj && kidsobj)
	{
		var adultsvalue = 0;
		var kidsvalue = 0;
		for (var i = 0; i < adultsobj.options.length; i += 1)
		{
			if (adultsobj.options[i].selected)
			{
				adultsvalue = parseInt(adultsobj.options[i].text);
				break;
			}
		}
		for (var i = 0; i < kidsobj.options.length; i += 1)
		{
			if (kidsobj.options[i].selected)
			{
				kidsvalue = parseInt(kidsobj.options[i].text);
				break;
			}
		}
		return new Array(adultsvalue, kidsvalue);
	}
	else
	{
		return new Array(0, 0);
	}
}

// Funktion zum setzen der maximalen Anzahl der Erwachsenen eines Zimmers
function setadults(room, roomsize)
{
	var obj = document.getElementById('adults' + room);
	if (!obj)
	{
		return false
	}
	for (var i = 0; i < obj.options.length; i += 1)
	{
		if (parseInt(obj.options[i].text) > roomsize)
		{
			obj.options[i] = null;
			i -= 1;
		}
	}
	if (obj.options.length - 1 < roomsize)
	{
		for (var i = obj.options.length; i - 1 < roomsize; i += 1)
		{
			var newOption = new Option(i, i, false);
			obj.options[obj.options.length] = newOption;
		}
	}
}

// Funktion zum setzen der maximalen Anzahl der Kinder eines Zimmers
function setkids(room, roomsize)
{
	var obj = document.getElementById('kids' + room);
	if (!obj)
	{
		return false
	}
	for (var i = 0; i < obj.options.length; i += 1)
	{
		if (parseInt(obj.options[i].text) > roomsize)
		{
			obj.options[i] = null;
			i -= 1;
		}
	}
	if (obj.options.length - 1 < roomsize)
	{
		for (var i = obj.options.length; i - 1 < roomsize; i += 1)
		{
			var newOption = new Option(i, i, false);
			obj.options[obj.options.length] = newOption;
		}
	}
	for (var i = 0; i < obj.options.length; i += 1)
	{
		if (obj.options[i].selected)
		{
			kids = parseInt(obj.options[i].text);
			break;
		}
	}
	var i = 1;
	while (obj = document.getElementById('kidagebox'+room+i))
	{
		if (i <= kids)
		{
			obj.style.display = '';
		}
		else
		{
			obj.style.display = 'none';
			var obj = document.getElementById('kidsage' + room + i);
			if (obj)
			{
				obj.value = '';
			}
		}
		i += 1;
	}
}

// Funktion zum laden der Zimmerkategorien pro Zimmer je nach Anzahl der Personen
function loadcategories(room, persons)
{
	// Zimmerkategorien filtern
	var categories = new Array();
	var nrcats = 0;
	for (var roomcode in personsperroom)
	{
		if (roomcode != roomcode.toUpperCase())
		{
			continue;
		}
		var minmax = personsperroom[roomcode];
		minmax = minmax.split('-');
		if (persons >= parseInt(minmax[0]) && persons <= parseInt(minmax[1]))
		{
			categories[nrcats] = roomcode;
			nrcats += 1;
		}
	}
	// ausgewählte Zimmerkategorie ermitteln (wird danach wieder gesetzt falls vorhanden)
	var obj = document.getElementById('roomcategory'+room);
	if (!obj)
	{
		return;
	}
	var thiscode = '';
	for (var i = 0; i < obj.options.length; i += 1)
	{
		if (obj.options[i].selected == true)
		{
			thiscode = obj.options[i].value;
			break;
		}
	}
	
	// neue Zimmerkategorien in Select laden
	for (var i = obj.options.length - 1; i >= 0; i -= 1)
	{
		obj.options[i] = null;
	}
	if (persons == 0)
	{
		var newOption = new Option(selectpersonstext, '', true, true);
		obj.options[obj.options.length] = newOption;
	}
	else
	{
		var newOption = new Option(nocategorytext, '', true, true);
		obj.options[obj.options.length] = newOption;
	}
	for (var i = 0; i < nrcats; i += 1)
	{
		var code = categories[i];
		if (thiscode == code)
		{
			var newOption = new Option(roomdefinitions[code], code, true, true);
		}
		else
		{
			var newOption = new Option(roomdefinitions[code], code);
		}
		obj.options[obj.options.length] = newOption;
	}
}

// Funktion zum setzen von Werten bei verschiedenen Feldern (select, checkbox)
function set_fieldvalue(objid, value)
{
	if (objid.indexOf(',') == -1)
	{
		var obj = document.getElementById(objid);
		if (obj)
		{
			if (obj.options)
			{
				// bei einem select
				for (var i = 0; i < obj.options.length; i += 1)
				{
					if (obj.options[i].value == value)
					{
						obj.options[i].selected = true;
						break;
					}
				}
			}
			else
			{
				// bei einer Checkbox
				if (obj.value == value)
				{
					obj.checked = true;
				}
				else
				{
					obj.checked = false;
				}
			}
		}
	}
	else
	{
		// es handelt sich um eine Radiobox
		objid = objid.split(',');
		for (var i = 0; i < objid.length; i += 1)
		{
			var obj = document.getElementById(objid[i]);
			if (obj)
			{
				if (obj.value == value)
				{
					obj.checked = true;
					break;
				}
			}
		}
	}
}