
var selected_persons = 0;
var init_persons = 1;
var init_persons_count = 10;
var tmp_count_persons = 0;
var template_v2 = false;
var org_enddate = '';
var org_days = '';


document.observe('dom:loaded', function() {
	
	org_enddate = $('enddate') != undefined ? $F('enddate') : '';
	org_days = $$('.days')[0] != undefined ? $$('.days')[0].innerHTML : '';
	
	updatePrice();
	
	$$('select[class=extensionsSelect]').each(function(element) {
		element.observe('change', function() {
			updatePrice();
			updateEnddate($F(element));
		});
	});
});



function initPersonSelects()
{
	var selects = $$('select[id^=personSel_category]', 'select[id^=personSel_option]');
	var select_options = '';
	
	for (var j = 0; j <= init_persons_count; j++)
	{
		select_options += '<option value="' + j + '">' + j + '</option>';
	}
	
	selects.each(function(element) {
		element.update(select_options);
	});
	
	
	// Verlängerungswochen zurücksetzen -> FF behält Auswahl bei aktualisierung
	var extension_selects = $$('select[id^=extension_category]');
	
	extension_selects.each(function(element) {
		element.options[0].selected = true;
	});
}


function renderPersonInputs(element, count_persons, price_id)
{
	var html = '';
	var el_id = 'personInputs_' + price_id;

	if ($('categoryArea' + price_id) != undefined)
	{
		template_v2 = true;
		element = $('categoryArea' + price_id);
	}

	if (count_persons > 0)
	{
		if (template_v2)
		{
			element.addClassName('bgColor2');
			element.setStyle({padding: '1px 5px', margin: '0 0 5px 0' });
			//element.getElementsByClassName('priceLabel')[0].setStyle({fontWeight: 'bold'});
			$$('#' + element.id + ' .priceLabel')[0].setStyle({fontWeight: 'bold'});
			
			html += '<div style="clear: both; padding-bottom: 3px;" class="personsInput_tr" id="' + el_id + '_a">';
			html += '  <div style="float: left; width: 145px;">Vorname:</div>';
			html += '  <div style="float: left; width: 145px;">Nachname:</div>';
			html += '  <div style="float: left; width: 132px;">Geburtstag:</div>';
			html += '  <div class="clearer">&#160;</div>';
			html += '</div>';
		}
		else
		{
			$(element).addClassName('personsInput_tr_before');
			element.getElementsByTagName('TD')[0].className = 'personsInput_categoryName';
		
			html += '<tr class="personsInput_tr" id="' + el_id + '_a">';
			html += '<td colspan="3" style="padding: 8px 8px 4px 8px;"><div style="float: left; width: 145px;">Vorname:</div><div style="float: left; width: 145px;">Nachname:</div><div style="float: left; width: 132px;">Geburtstag:</div></td>';
			html += '</tr>';
		}
	}
	
	for (var i = 0; i < count_persons; i++)
	{
		tmp_count_persons++;
		var init_value = tmp_count_persons + '. Person';
		var firstname_value = '';
		var firstname_class = '';
		var firstname_click = '';
		var firstname_fieldname = 'person[' + price_id + '][' + i + '][firstname]';
		var surname_value = '';
		var surname_fieldname = 'person[' + price_id + '][' + i + '][surname]';
		var birthday_fieldname = 'person[' + price_id + '][' + i + '][birthday]';
		var day = '';
		var month = '';
		var year = '';
		
		
		if ($(firstname_fieldname) != undefined && $F(firstname_fieldname).search(/\. Person/) < 0)
		{
			firstname_value = $F(firstname_fieldname);
			firstname_class = '';
		}
		else
		{	
			if (tmp_count_persons == 1 && $F('firstname') != '')
			{
				firstname_value = $F('firstname');
			}
			else
			{
				firstname_value = init_value;
				firstname_class = 'initValue';
				firstname_click = "if(this.value == '" + init_value + "'){this.value='';this.className='';}";
			}
			
		}
		
		
		if ($(surname_fieldname) != undefined && $F(surname_fieldname) != '')
		{
			surname_value = $F(surname_fieldname);
		}
		else
		{
			if (tmp_count_persons == 1 && $F('surname') != '')
			{
				surname_value = $F('surname');
			}
		}
		
		
		if ($(birthday_fieldname + '[day]') != undefined && $F(birthday_fieldname + '[day]') != '')
		{
			day = $F(birthday_fieldname + '[day]');
		}
		else
		{
			if (tmp_count_persons == 1 && $('birthday[day]') != undefined && $('birthday[day]') != '')
			{
				day = $F('birthday[day]');
			}
		}
		
		
		if ($(birthday_fieldname + '[month]') != undefined && $F(birthday_fieldname + '[month]') != '')
		{
			month = $F(birthday_fieldname + '[month]');
		}
		else
		{
			if (tmp_count_persons == 1 && $('birthday[month]') != undefined && $('birthday[month]') != '')
			{
				month = $F('birthday[month]');
			}
		}
		
		
		if ($(birthday_fieldname + '[year]') != undefined && $F(birthday_fieldname + '[year]') != '')
		{
			year = $F(birthday_fieldname + '[year]');
		}
		else
		{
			if (tmp_count_persons == 1 && $('birthday[year]') != undefined && $('birthday[year]') != '')
			{
				year = $F('birthday[year]');
			}
		}
		
		
		if (template_v2)
		{
			html += '<div class="personsInput_tr" id="' + el_id + '_' + i + '" style="padding: 2px 0;">';
			html += ' <input type="text" id="' + firstname_fieldname + '" name="' + firstname_fieldname + '" value="' + firstname_value + '" class="' + firstname_class + '" style="width: 130px; margin: 0 10px 0 0; padding: 1px;" onFocus="' + firstname_click + '" />';
			html += ' <input type="text" id="' + surname_fieldname + '" name="' + surname_fieldname + '" value="' + surname_value + '" style="width: 130px; margin: 0 10px 0 0; padding: 1px;" />';
			html +=   generateDateSelector(birthday_fieldname, 'return', day, month, year);
			html += '</div>';
		}
		else
		{
			html += '<tr class="personsInput_tr" id="' + el_id + '_' + i + '">';
			html += '<td class="personInput" colspan="3" style="padding: 2px 8px;" nowrap="nowrap">' + 
					'<input type="text" id="' + firstname_fieldname + '" name="' + firstname_fieldname + '" value="' + firstname_value + '" class="' + firstname_class + '" style="width: 130px; margin: 0 10px 0 0; padding: 1px;" onFocus="' + firstname_click + '" />' + 
					'<input type="text" id="' + surname_fieldname + '" name="' + surname_fieldname + '" value="' + surname_value + '" style="width: 130px; margin: 0 10px 0 0; padding: 1px;" />' + 
					generateDateSelector(birthday_fieldname, 'return', day, month, year) + 
					'</td>';
			html += '</tr>';
		}
	}
	
	if (count_persons > 0 && template_v2 == false)
	{
		html += '<tr class="personsInput_tr" id="' + el_id + '_b">';
		html += '<td colspan="3" style="height: 5px; font-size: 5px;">&nbsp;</td>';
		html += '</tr>';
		
		html += '<tr class="personsInput_tr_after" id="' + el_id + '_c">';
		html += '<td colspan="3" style="height: 5px; font-size: 5px;">&nbsp;</td>';
		html += '</tr>';
	}
		
	// Bestehende Inputs entfernen
	if (template_v2)
	{
		var input_rows = $$('div[id^=' + el_id + ']');
		
		input_rows.each(function(elm) {
			var prev_elm = $('categoryArea' + price_id);
			
			if (count_persons == 0 && $(prev_elm).hasClassName('bgColor2'))
			{
				$(prev_elm).removeClassName('bgColor2');
				$(prev_elm).setStyle({padding: '0', margin: '0' });
				//element.getElementsByClassName('priceLabel')[0].setStyle({fontWeight: 'normal'});
				$$('#' + element.id + ' .priceLabel')[0].setStyle({fontWeight: 'normal'});
			}
			
			elm.remove();
		});
	}
	else
	{
		var input_rows = $$('tr[id^=' + el_id + ']');
		
		input_rows.each(function(element) {
			var prev_tr = element.previous();
		
			if (count_persons == 0 && $(prev_tr).hasClassName('personsInput_tr_before')) 
			{
				$(prev_tr).removeClassName('personsInput_tr_before');
				$(prev_tr).getElementsByTagName('TD')[0].className = '';
			}
		
			element.remove();
		});
	}
	
	if (template_v2)
	{
		$(element).insert({bottom: html});
	}
	else
	{
		$(element).insert({after: html});
	}
}


function updatePrice()
{
	var total_price = 0;
	var category_price = 0;
	var option_price = 0;
	var addition_price = 0;
	
	selected_persons = 0;
	tmp_count_persons = 0;
	
	// Initialisierung der Selectoptionen
	if (init_persons == 1)
	{
		initPersonSelects();
	}
	
	
	// Preise der Kategorien ermitteln
	var category_selects = $$('select[id^=personSel_category]');
	
	category_selects.each(function(element) {
		var price_id = element.name.match("\[[0-9]+\]")[0].replace(/\W/g, '');
		var person_type = element.name.match("\[[a-z]+\]")[0].replace(/\W/g, '');
		var person_price = parseFloat($F(element.name.replace(person_type, 'price')).replace(',', '.'));
		var count_persons = parseInt($F(element));
		var table_row = element.parentNode.parentNode;
		
		category_price += count_persons * person_price;
		selected_persons += count_persons;

		// Verlängerungswochen addieren
		var extension_field = $('extension_category[' + price_id + '][extension]');
		
		if (extension_field)
		{
			var extension_price = parseFloat($F(extension_field).split('|')[0]);
			
			if ( ! isNaN(extension_price))
			{
				category_price += count_persons * extension_price;
			}
		}
		
		// Formularfelder für Personen generieren
		if (person_type == 'persons')
		{
			var render_count = count_persons;
			
			if ($(element.id.replace('persons', 'childrens')))
			{
				render_count += parseInt($F(element.id.replace('persons', 'childrens')));
			}
			
			renderPersonInputs(table_row, render_count, price_id);
		}
	});
	
	total_price += category_price;

	
	// Auswahlboxen für zubuchbare Optionen auf Anzahl der gewählten Personsn beschränken
	if (init_persons == 0)
	{
		var option_selects = $$('select[id^=personSel_option]');
		var option_count = selected_persons == 0 ? init_persons_count : selected_persons;
		var select_options = '';

		for (var i = 0; i <= option_count; i++)
		{
			select_options += '<option value="' + i + '">' + i + '</option>';
		}
		
		option_selects.each(function(element) {
			// Merke die aktuell ausgewählte Anzahl
			var save_selected = $F(element);
			
			element.update(select_options);
			
			if (save_selected <= selected_persons || selected_persons == 0) // ursprünglich ausgewählte Option auswählen
			{
				$(element).options[save_selected].selected = true;
			}
			else	// Ansonten die maximale Anzahl der Personen auswählen
			{
				$(element).options[selected_persons].selected = true;
			}
		});
	}
	
	
	// Preis der Optionen auf Gesamtpreis addieren
	var option_selects = $$('select[id^=personSel_option]');
	
	option_selects.each(function(element) {
		var person_type = element.name.match("\[[a-z]+\]")[0].replace(/\W/g, '');
		var person_price = parseFloat($F(element.name.replace(person_type, 'price')).replace(',', '.'));
		
		option_price += $F(element) * person_price;
	});
	
	total_price += option_price;
	
	
	// Aufschlag für Zustieg zu Gesamtpreis addieren
	if ($('stationprice'))
	{
		total_price += parseFloat($F('stationprice').replace(',', '.')) * selected_persons;
	}
	
	
	// Pflichtzuschläge ermitteln
	var additions = $$('input[id^=addition]');
	
	for (var i = 0; i < additions.length; i+=5)
	{
		var addition_id = additions[i].name.match(/\[([^\]]*)\]/)[0].replace(/\W/g, '');
		var addition_str = 'addition[' + addition_id + ']';
		
		var addition = new Object();
		addition.unit = $F(addition_str + '[unit]');
		addition.pricetype = $F(addition_str + '[pricetype]');
		addition.price = parseFloat($F(addition_str + '[price]').replace(',', '.'));
		addition.days = $F(addition_str + '[days]');
		addition.title = $F(addition_str + '[title]');
		
		if (addition.pricetype == '%')
		{
			if (selected_persons > 0)
			{
				addition_price = (category_price * (addition.price / 100)) / selected_persons;
			}
			else
			{
				addition_price = category_price * (addition.price / 100);
			}
		}
		else
		{
			addition_price = addition.price;
		}
		
		switch (addition.unit)
		{
			case 'pro Person':
				addition_price = addition_price * selected_persons;
			break;
			
			case 'pro Tag':
				addition_price = addition_price * addition.days;
			break;
			
			default:
				addition_price = addition_price * selected_persons * addition.days;
		}
	}
	
	if (selected_persons > 0)
	{
		total_price += addition_price;
	}
	
	
	// Gesamtpreis aktualisieren
	if (showDecimalPlace)
		total_price = formatInt(total_price, 2, true);
	else
		total_price = formatInt(total_price, 0, false);

	$('totalprice').update(total_price + " &euro;");
	
	
	// Marker zum initialisieren von Personenauswahl entfernen
	init_persons = 0;
	
}


function updateEnddate(value)
{
	var enddate = value != '' ? value.match(/\(bis (.*?)\)/)[1] : org_enddate;

	$$('.enddate').each(function(element) {
		var type = element.nodeName.toUpperCase();
		
		switch (type)
		{
			case 'SPAN':
				element.innerHTML = enddate;
			break;
			
			case 'INPUT':
				element.value = enddate;
			break;
		}
	});
	
	
	// Anzahl der Tage aktualisieren
	startdate = $F('startdate').split('.');
	enddate = enddate.split('.');
	
	date_diff = new Date(enddate[2], enddate[1]-1, enddate[0]).getTime() - new Date(startdate[2], startdate[1]-1, startdate[0]).getTime();
	days = Math.floor((date_diff/(1000*60*24*60)))+1;
	
	if ($$('.days')[0] != undefined)
		$$('.days')[0].innerHTML = days + ' Tage';
}


function updateStation(id, label, price)
{
	price = parseInt(price);
	$('station').value = id;
	$('stationname').value = label;
	$('stationprice').value = price;
	Element.setInnerHTML('startstation', label);
	Element.setInnerHTML('stationpriceCal', price);
	updatePrice();
	myModalbox.end();
}


function checkForm()
{
	if ($F('firstname') == '')
	{
		alert("Bitte geben Sie ihren Vornamen an!");
		$('firstname').focus();
		return false;
	}

	if ($F('surname') == '')
	{
		alert("Bitte geben Sie ihren Nachnamen an!");
		$('surname').focus();
		return false;
	}

	if ($F('street') == '')
	{
		alert("Bitte geben Sie ihre Strasse an!");
		$('street').focus();
		return false;
	}

	if ($F('zip') == '')
	{
		alert("Bitte geben Sie ihre Postleitzahl an!");
		$('zip').focus();
		return false;
	}

	if ($F('city') == '')
	{
		alert("Bitte geben Sie ihren Wohnort an!");
		$('city').focus();
		return false;
	}

	if ($F('telephone') == '')
	{
		alert("Bitte geben Sie ihre Telefonnummer an!");
		$('telephone').focus();
		return false;
	}

	if ($F('email') == '')
	{
		alert("Bitte geben Sie ihre eMail-Adresse an!");
		$('email').focus();
		return false;
	}

	if (birthdayRequired == true && $('birthday[day]') != undefined && ($F('birthday[day]') == '' || $F('birthday[month]') == '' || $F('birthday[year]') == ''))
	{
		alert("Bitte geben Sie ihr Geburtsdatum an!")
		return false;
	}
	
	
	// Alle Eingabefelder für Personen
	var persons = $$('input[id*=[firstname]]');
	var persons_surname = $$('input[id*=[surname]]');
	var persons_birthday_day = $$('select[id*=[day]]');
	var persons_birthday_month = $$('select[id*=[month]]');
	var persons_birthday_year = $$('select[id*=[year]]');

	for (var i = 0; i < persons.length; i++)
	{
		if ($F(persons[i]).search(/\. Person/) > 0 || $F(persons[i]) == '')
		{
			alert('Bitte geben Sie den Vornamen der ' + (i+1) + '. mitreisenden Person an!');
			persons[i].focus();
			return false;
		}
		
		if ($F(persons_surname[i]) == '')
		{
			alert('Bitte geben Sie den Nachnamen der ' + (i+1) + '. mitreisenden Person an!');
			persons_surname[i].focus();
			return false;
		}
		
		if (birthdayRequired == true && ($F(persons_birthday_day[i]) == '' || $F(persons_birthday_month[i]) == '' || $F(persons_birthday_year[i]) == ''))
		{
			alert('Bitte geben Sie den Geburtstag der ' + (i+1) + '. mitreisenden Person an!');
			$(persons_birthday_day[i]).focus();
			return false;
		}
	}
	
	if (selected_persons == 0)
	{
		alert("Sie müssen eine Kategorie auswählen");
		return false;
	}
	
	
	if ($('agb').checked == false)
	{
		alert("Sie müssen die AGB's lesen und akzeptieren um den Buchungsvorgang abzuschließen");
		return false;
	}


	return true;
}


function generateDateSelector(name, retType, select_day, select_month, select_year)
{
	ret = '<select name="'+name+'[day]" id="'+name+'[day]" class="dateSelectorDay"><option value="" selected="selected"></option>';
	
	for (i=1;i<=31;i++)
	{
		day = (i < 10) ? '0'+i : i;	
			
		var selected = (select_day == day) ? ' selected="selected"' : '';
			
		ret += '<option value="' + day + '"' + selected + '>' + day + '</option>';
	}
	
	ret += '</select>';
	
	
	
	ret += '<select name="'+name+'[month]" id="'+name+'[month]" class="dateSelectorMonth"><option value="" selected="selected"></option>';
	
	for (i=1;i<=12;i++)
	{
		month = (i < 10) ? '0'+i : i;
		
		var selected = (select_month == month) ? ' selected="selected"' : '';
		
		ret += '<option value="' + month + '"' + selected + '>' + month + '</option>';
	}

	ret += '</select>';
	
	
	
	ret += '<select name="'+name+'[year]" id="'+name+'[year]" class="dateSelectorYear"><option value="" selected="selected"></option>';

	actYear = parseInt(new Date().getFullYear());

	for (i=actYear; i>=(actYear-109); i--)
	{
		var selected = (select_year == i) ? ' selected="selected"' : '';
		
		ret += '<option value="' + i + '"' + selected + '>' + i + '</option>';
	}

	ret += '</select>';
	
	
	
	if (retType == 'write')
		document.write(ret);
	else if (retType == 'return')
		return ret;
}	


function formatInt(zahl, k, fix) 
{ 
    if(!k) k = 0; 
    var neu = ''; 
    // Runden 
    var f = Math.pow(10, k); 
    zahl = '' + parseInt( zahl * f + (.5 * (zahl > 0 ? 1 : -1)) ) / f ; 
    // Komma ermittlen 
    var idx = zahl.indexOf('.'); 
    // fehlende Nullen einfügen 
    if(fix) 
    { 
         zahl += (idx == -1 ? '.' : '' ) 
         + f.toString().substring(1); 
    } 
    // Nachkommastellen ermittlen 
    idx = zahl.indexOf('.'); 
    if( idx == -1) idx = zahl.length; 
    else neu = ',' + zahl.substr(idx + 1, k); 
  
    // Tausendertrennzeichen 
    while(idx > 0) 
    { 
        if(idx - 3 > 0) 
        neu = '.' + zahl.substring( idx - 3, idx) + neu; 
        else 
        neu = zahl.substring(0, idx) + neu; 
        idx -= 3; 
    } 
    return neu; 
} 
