function confirmStep1() {
    document.getElementById('step1Form').submit();
}

/* STEP 2 */

/* date */
function refreshDateFields(date) {
    var daysMonthArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var today = new Date();
   
    if (date) {
        if (date < today) {
            var tomorrow = new Date();
            tomorrow.setUTCDate(today.getDate() + 1);
            populateDays(tomorrow.getMonth());
			
            var myList = document.getElementById('btMonthYear');
            myList.options[0].selected = true;
			
        } else {
            var monthYear = date.getMonth()+1 + ' ' + date.getFullYear();
            var myList = document.getElementById('btMonthYear');
            for (i = 0; i < myList.options.length; i++) {
                if (myList.options[i].value == monthYear) {
                    myList.options[i].selected = true;
                    break;
                }
            }
			
            if (i >= myList.options.length) {
                // a data escolhida é a mais de 12 meses de distância
                monthYear = myList.options[11].value.split(' ');
                var month = parseInt(monthYear[0], 10);
                var year = parseInt(monthYear[1], 10);
                var day = daysMonthArray[month];
                date = new Date(year, month, day);
                myList.options[11].selected = true;
            }
			
            populateDays(date.getMonth()+1);
			
            var day = date.getDate();
            var daysList = document.getElementById('btDay');
            for (i = 0; i < daysList.options.length; i++) {
                if (daysList.options[i].value == day) {
                    daysList.options[i].selected = true;
                    break;
                }
            }
        }
    } else {
        var daysList = document.getElementById('btDay');
        var myList = document.getElementById('btMonthYear');
        var monthYear = myList.options[myList.selectedIndex].value.split(' ');
        var month = parseInt(monthYear[0], 10);
        var year = parseInt(monthYear[1], 10);
		
        populateDays(month);
    }
	
    updateSeasonInfo();
}

function updateSeasonInfo() {
    var monthsArray = new Array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');
    var daysList = document.getElementById('btDay');
    var myList = document.getElementById('btMonthYear');
    var seasonInfo = document.getElementById('seasonInfo');
	
    var month = parseInt(myList.options[myList.selectedIndex].value.split(' ')[0], 10);
    var day = parseInt(daysList.options[daysList.selectedIndex].value, 10);
	
    if (isNaN(month) || empty(month) || month == 0) {
        seasonInfo.innerHTML = '';
        return;
    }
	
    var xHRObject = createxHRObject();
	
    xHRObject.open("GET", "services/isHighSeason.php?id=" + tourId + "&day=" + day + "&month=" + month, true);
    xHRObject.onreadystatechange = function() {
        if (xHRObject.readyState == 4 && xHRObject.status == 200) {
            var ihs = xHRObject.responseText;
            seasonInfo.innerHTML = (ihs.indexOf("true") != -1)? "ÉPOCA ALTA" : "ÉPOCA BAIXA";
	
            /* reset what depends on season */
            resetRoomsList();
            resetCarsList();
        }
    };
    xHRObject.send(null);
}

function populateDays(month) {
    var daysMonthArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    var list = document.getElementById('btDay');

    // limpar tudo
    var idx = 0;
    while (idx < list.options.length)
        list.remove(idx);

    var today = new Date();
    var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate()+7);
    var startDay = 1;

    if (!month) {
        var myList = document.getElementById('btMonthYear');
        var monthYear = myList.options[myList.selectedIndex].value.split(' ');
        var month = parseInt(monthYear[0], 10);
    }

    idx = 0;
    for (i = 1; i <= daysMonthArray[month-1]; i++) {

        list.options[idx++] = new Option(i, i, false, false);
    }


}


function populateMonths() {
    var list = document.getElementById('btMonthYear');
    var monthArray = new Array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');
	
    var today = new Date();
    //today.setMonth(4,20);
    var startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 6);
    //tomorrow.setUTCDate(tomorrow.getDate() + 30);
    
    list.options[0] = new Option(monthArray[startDate.getMonth()] + ' ' + startDate.getFullYear(), (startDate.getMonth()+1)%13 + ' ' + startDate.getFullYear(), false, false);
    //alert(list.options[0].value);
   for (i = 1; i < 12; i++) {
	   startDate.setMonth(startDate.getMonth()+1);
	   list.options[i] = new Option(monthArray[startDate.getMonth()] + ' ' + startDate.getFullYear(), (startDate.getMonth()+1)%13 + ' ' + startDate.getFullYear(), false, false);
   }
}

function selectDefaultDate() {
    var monthArray = new Array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');


    var today = new Date();
    var defaultDate = new Date(today.getFullYear(), today.getMonth()+1, today.getDate());
    var monthYearList = document.getElementById('btMonthYear');
    for (var i = 0; i < monthYearList.options.length; i++) {
        if (monthYearList.options[i].value == defaultDate.getMonth() + " " + defaultDate.getFullYear()) {
            monthYearList.options[i].selected = true;
            break;
        }
    }

    var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate()+7);

    var startDay = 1;

    startDay = minDate.getDate();

    var daysList = document.getElementById('btDay');

    for (var i = 0; i < daysList.options.length; i++) {
        if (daysList.options[i].value == startDay) {
            daysList.options[i].selected = true;
            break;
        }
    }
	
}

/* rooms */

function priceRangeChanged(list) {
    resetRoomsList();
}

function resetRoomsList() {
    for (i = 1; i <= 6; i++) {
        if (!document.getElementById('bookTourRoomBox' + i))
            break;
    }
	
    for (j = i - 1; j > 0; j--) {
        var oldDiv = document.getElementById('bookTourRoomBox' + j);
        document.getElementById('bookTourInputArea').removeChild(oldDiv);
		
        var oldPriceDiv = document.getElementById('bookTourRoomPriceBox' + j);
        document.getElementById('bookTourPricesArea').removeChild(oldPriceDiv);
    }
	
    var nRoomsList = document.getElementById('btNRooms');
    nRoomsList.selectedIndex = 0;
    addRoom(nRoomsList);
}

function addRoom(list) {
    var n = parseInt(list.options[list.selectedIndex].value, 10);
    var priceRange = document.getElementById('btPriceRange');
    var cat = parseInt(priceRange.options[priceRange.selectedIndex].value, 10);
	
    var season;
    if (document.getElementById('seasonInfo').innerHTML == 'ÉPOCA ALTA')
        season = 'highSeason';
    else
        season = 'lowSeason';
		
    var adultsPrices = eval('acc' + cat + 'Prices.' + season + 'Adults');
    var kidsPrices = eval('acc' + cat + 'Prices.' + season + 'Kids');
	
    for (i = 1; i <= 6; i++) {
        if (!document.getElementById('bookTourRoomBox' + i))
            break;
    }
	
    for (j = i -1; j > n; j--) {
        var oldDiv = document.getElementById('bookTourRoomBox' + j);
        document.getElementById('bookTourInputArea').removeChild(oldDiv);
		
        var oldPriceDiv = document.getElementById('bookTourRoomPriceBox' + j);
        document.getElementById('bookTourPricesArea').removeChild(oldPriceDiv);
    }
	
    for ( ; i <= n; i++) {
        var newDiv = document.createElement('div');
        newDiv.className = 'bookTourItemBox';
        newDiv.id = 'bookTourRoomBox' + i;
        newDiv.innerHTML = '<div class="bookTourRoomTitle">\
					Quarto ' + i + '\
				</div>\
				<div class="bookTourRoomInput">\
				</div>\
				<div class="bookTourRoomSubtitle">\
					Número de Adultos\
				</div>\
				<div class="bookTourRoomInput">\
					<select id="btRoom' + i + 'NAdults" name="btRoom' + i + 'NAdults" onchange="roomNAdultsChanged(this, ' + i + ');">\
						' + ((adultsPrices[0]>0) ? '<option value="1">1</option>':'') + '\
						' + ((adultsPrices[1]>0) ? '<option value="2" selected>2</option>':'') + '\
						' + ((adultsPrices[2]>0) ? '<option value="3">3</option>':'') + '\
					</select>\
				</div>\
				<div class="bookTourRoomSubtitle">\
					Número de Crianças <span class="bookTourNote">(2-12)</span>\
				</div>\
				<div class="bookTourRoomInput">\
					<select id="btRoom' + i + 'NChildren" name="btRoom' + i + 'NChildren" onchange="roomNKidsChanged(this, ' + i + ');">\
						<option value="0">0</option>\
						' + ((kidsPrices[0]>0) ? '<option value="1">1</option>':'') + '\
					</select>\
				</div>\
				<div class="bookTourRoomSubtitle">\
					Número de Bebés <span class="bookTourNote">(0-1)</span>\
				</div>\
				<div class="bookTourRoomInput">\
					<select id="btRoom' + i + 'NBabies" name="btRoom' + i + 'NBabies">\
						<option value="0">0</option>\
						<option value="1">1</option>\
					</select>\
				</div>';
        var accCostDiv = document.getElementById('booktTourAccomodationCost');
        document.getElementById('bookTourInputArea').insertBefore(newDiv, accCostDiv);
		
        var nAdultsList = document.getElementById('btRoom' + i + 'NAdults');
        var nAdults = parseInt(nAdultsList.options[nAdultsList.selectedIndex].value, 10);
        var adultsPricesValue = adultsPrices[nAdults-1];
		
        var nKidsList = document.getElementById('btRoom' + i + 'NChildren');
        var nKids = parseInt(nKidsList.options[nKidsList.selectedIndex].value, 10);
        var kidsPricesValue = (nKids > 0)? kidsPrices[nKids-1] : 0;
		
        var newPriceDiv = document.createElement('div');
        newPriceDiv.id = "bookTourRoomPriceBox" + i;
        newPriceDiv.className = "price bookTourItemBox";
        newPriceDiv.innerHTML = '<div class="price bookTourRoomTitle">&nbsp;</div>\
            <div id="bookTourRoomPriceBox' + i + 'Adult" class="bookTourSubitemPriceSeason">€' + adultsPricesValue + '</div>\
			<div id="bookTourRoomPriceBox' + i + 'Kid" class="bookTourSubitemPriceSeason">€' + kidsPricesValue + '</div>\
            <div class="bookTourSubitemPriceSeason">€0</div>';
		
        var accCostValueDiv = document.getElementById('bookTourAccomodationCostValue');
        document.getElementById('bookTourPricesArea').insertBefore(newPriceDiv, accCostValueDiv);
			
    }
	
    updateAccomodationCost();
}


function roomNAdultsChanged(e, id) {
    var n = parseInt(e.options[e.selectedIndex].value, 10);
    var priceRange = document.getElementById('btPriceRange');
    var cat = parseInt(priceRange.options[priceRange.selectedIndex].value, 10);
	
    var season;
    if (document.getElementById('seasonInfo').innerHTML == 'ÉPOCA ALTA')
        season = 'highSeason';
    else
        season = 'lowSeason';
		
    var adultsPrices = eval('acc' + cat + 'Prices.' + season + 'Adults');
    var adultsPricesValue = adultsPrices[n-1];
	
    document.getElementById('bookTourRoomPriceBox' + id + 'Adult').innerHTML = '€' + adultsPricesValue;
	
    updateAccomodationCost();
}

function roomNKidsChanged(e, id) {
    var n = parseInt(e.options[e.selectedIndex].value, 10);
    var priceRange = document.getElementById('btPriceRange');
    var cat = parseInt(priceRange.options[priceRange.selectedIndex].value, 10);
	
    var season;
    if (document.getElementById('seasonInfo').innerHTML == 'ÉPOCA ALTA')
        season = 'highSeason';
    else
        season = 'lowSeason';
		
    var kidsPrices = eval('acc' + cat + 'Prices.' + season + 'Kids');
    var kidsPricesValue = (n > 0)? kidsPrices[n-1] : 0;
	
    document.getElementById('bookTourRoomPriceBox' + id + 'Kid').innerHTML = '€' + kidsPricesValue;
	
    updateAccomodationCost();
}

function updateAccomodationCost() {
    document.getElementById('bookTourAccomodationCostValue').innerHTML = '<div class="bookTourItemPriceSeason">€' + calcAccomodationCost() + '</div>';
    updateTotalCost();
}

function calcAccomodationCost() {
    var sum = 0;
    for (i = 1; i <= 6; i++) {
        if (!document.getElementById('bookTourRoomBox' + i))
            break;
        else {
            sum += parseInt(document.getElementById('bookTourRoomPriceBox' + i + 'Adult').innerHTML.replace('€', ''), 10);
            sum += parseInt(document.getElementById('bookTourRoomPriceBox' + i + 'Kid').innerHTML.replace('€', ''), 10);
        }
    }
    return sum;
}

/* cars */

function resetCarsList() {
    for (i = 1; i <= 4; i++) {
        if (!document.getElementById('bookTourCarBox' + i))
            break;
    }
	
    for (j = i - 1; j > 0; j--) {
        var oldDiv = document.getElementById('bookTourCarBox' + j);
        document.getElementById('bookTourInputArea').removeChild(oldDiv);
		
        var oldPriceDiv = document.getElementById('bookTourCarPriceBox' + j);
        document.getElementById('bookTourPricesArea').removeChild(oldPriceDiv);
    }
	
    var nCarsList = document.getElementById('btNCars');
    nCarsList.selectedIndex = 0;
    addCar(nCarsList);
    updateCarsCost();
}

var HelpCars ="";
function addCar(list) {
    var n = parseInt(list.options[list.selectedIndex].value, 10);
	
    for (var i = 1; i <= 4; i++) {
        if (!document.getElementById('bookTourCarBox' + i))
            break;
    }
	
    for (var j = i -1; j > n; j--) {
        var oldDiv = document.getElementById('bookTourCarBox' + j);
        document.getElementById('bookTourInputArea').removeChild(oldDiv);
		
        var oldPriceDiv = document.getElementById('bookTourCarPriceBox' + j);
        document.getElementById('bookTourPricesArea').removeChild(oldPriceDiv);
    }
	
    var rentalCarClassesTranslation = new Array();
    rentalCarClassesTranslation['ECONOMY NO AC'] = 'Económico s/ AC';
    rentalCarClassesTranslation['ECONOMY'] = 'Económico c/ AC';
    rentalCarClassesTranslation['COMPACT'] = 'Compacto';
    rentalCarClassesTranslation['STATION WAGON'] = 'Carrinha';
    rentalCarClassesTranslation['VAN 7 PAX'] = 'Carrinha 7 Pax';
    rentalCarClassesTranslation['AUTOMATIC'] = 'Automático';
    rentalCarClassesTranslation['PREMIUM'] = 'Premium';
	
    var carOptions = '';
    for (var k = 0; k < rentalCars.length; k++)
        carOptions += '<option value="R' + k + '">Aluguer - ' + rentalCarClassesTranslation[rentalCars[k].className.toUpperCase()] + '</option>';
    for (var k = 0; k < driverCars.length; k++)
        carOptions += '<option value="D' + k + '">Motorista - ' + driverCars[k].className + '</option>';
	
    for ( ; i <= n; i++) {
        var newDiv = document.createElement('div');
        newDiv.className = 'bookTourItemBox';
        newDiv.id = 'bookTourCarBox' + i;
        newDiv.innerHTML = '<div class="bookTourRoomTitle">\
                Carro ' + i + '\
            </div>\
            <div class="bookTourRoomInput">\
            </div>\
            <div class="bookTourRoomSubtitle" id="cartypeTitle">\
			<img style="float:right" alt="Car Help" src="imgs/smallHelpBtn.gif" onload="carsHelpTooltip(this, \'<strong>ECONÓMICO S/ AC</strong><br/>KIA PICANTO ou similar<br/>2 ou 4 portas<br/>Manual<br/>S/ Ar Condicionado<p><strong>ECONÓMICO</strong><br/>VW POLO 1.2 ou similar<br/>2 ou 4 portas<br/>Manual<br/>C/ Ar Condicionado</p><p><strong>COMPACTO</strong><br/>FORD FOCUS ou similar<br/>2 ou 4 portas<br/>Manual<br/>C/ Ar Condicionado</p><p><strong>CARRINHA</strong><br/>OPEL ASTRA 1.4 ou similar<br/>5 portas<br/>Manual<br/>C/ Ar Condicionado</p><p><strong>CARRINHA 7 PAX</strong><br/>FORD GALAXY ou similar<br/>5 portas<br/>Manual<br/>C/ Ar Condicionado</p><p><strong>AUTOMÁTICO</strong><br/>OPEL ASTRA 1.4 ou similar<br/>4 portas<br/>Automatic<br/>C/ Ar Condicionado</p><p><strong>PREMIUM</strong><br/>MERCEDES C220 ou similar<br/>4 portas<br/>Manual<br/>C/ Ar Condicionado</p>\');" />\
                Tipo\
            </div>\
            <div class="bookTourRoomInput">\
            	<select id="btCar' + i + 'Type" name="btCar' + i + 'Type" onchange="typeCarChanged(this, ' + i + ');" >\
                	' + carOptions + '\
                </select>\
            </div>\
            <div class="bookTourRoomSubtitle">\
				<div style="float: right; ">\
					<img src="imgs/smallHelpBtn.gif" onload="carsHelpTooltip(this, \'<strong>Dia Extra</strong>:<br/>Se não devolver o carro na data e hora marcadas será cobrado pela companhia de rent-a-car um dia extra. Ex: Se recolhe o carro no dia da sua chegada às 14h00, terá que devolve-lo até às 14h00 do dia da partida, caso contrário terá que pagar um dia extra.\');" />\
				</div>\
				<div style="float: left">Dia Extra</div>\
            </div>\
            <div class="bookTourRoomInput">\
            	<input type="checkbox" id="btCar' + i + 'ExtraDay" name="btCar' + i + 'ExtraDay" onclick="extraDayCarChanged(this, ' + i + ');" />\
            </div>\
			<div class="bookTourRoomSubtitle" id="btCar' + i + 'ChildSeatsLabel">\
				N. de Assentos de Criança <span class="bookTourNote">(4-12)</span>\
			</div>\
			<div class="bookTourRoomInput">\
				<select id="btCar' + i + 'ChildSeats" name="btCar' + i + 'ChildSeats" onchange="childSeatsCarChanged(this, ' + i + ');">\
					<option value="0">0</option>\
					<option value="1">1</option>\
					<option value="2">2</option>\
					<option value="3">3</option>\
				</select>\
			</div>\
			<div style="clear:both"></div>\
			<div class="bookTourRoomSubtitle">\
				N. de Cadeiras de Bebé <span class="bookTourNote">(0-3)</span>\
			</div>\
			<div class="bookTourRoomInput">\
				<select id="btCar' + i + 'BabyChairs" name="btCar' + i + 'BabyChairs" onchange="babyChairsCarChanged(this, ' + i + ');">\
					<option value="0">0</option>\
					<option value="1">1</option>\
					<option value="2">2</option>\
					<option value="3">3</option>\
				</select>\
			</div>';
        var carsCostDiv = document.getElementById('bookTourCarsCost');
        document.getElementById('bookTourInputArea').insertBefore(newDiv, carsCostDiv);
		
        var newPriceDiv = document.createElement('div');
        newPriceDiv.id = "bookTourCarPriceBox" + i;
        newPriceDiv.className = "price bookTourItemBox";
        newPriceDiv.innerHTML = '<div class="price bookTourRoomTitle"></div>\
            <div id="bookTourCarPriceBox' + i + 'Type" class="bookTourSubitemPriceSeason">€0</div>\
            <div id="bookTourCarPriceBox' + i + 'ExtraDay" class="bookTourSubitemPriceSeason">€0</div>\
            <div id="bookTourCarPriceBox' + i + 'ChildSeats" class="bookTourSubitemPriceSeason">€0</div>\
            <div id="bookTourCarPriceBox' + i + 'BabyChairs" class="bookTourSubitemPriceSeason">€0</div>';
		
        var carsCostValueDiv = document.getElementById('bookTourCarsCostValue');
        document.getElementById('bookTourPricesArea').insertBefore(newPriceDiv, carsCostValueDiv)
		
        typeCarChanged(document.getElementById('btCar' + i + 'Type'), i);
			
    }
	
    updateCarsCost();
}

function calcCarsCost() {
    var sum = 0;
    for (i = 1; i <= 4; i++) {
        if (!document.getElementById('bookTourCarBox' + i))
            break;
        else {
            sum += parseInt(document.getElementById('bookTourCarPriceBox' + i + 'Type').innerHTML.replace('€', ''), 10);
            sum += parseInt(document.getElementById('bookTourCarPriceBox' + i + 'ExtraDay').innerHTML.replace('€', ''), 10);
            sum += parseInt(document.getElementById('bookTourCarPriceBox' + i + 'ChildSeats').innerHTML.replace('€', ''), 10);
            sum += parseInt(document.getElementById('bookTourCarPriceBox' + i + 'BabyChairs').innerHTML.replace('€', ''), 10);
			
            try {
                sum += parseInt(document.getElementById('bookTourCarPriceBox' + i + 'ExtraDriver').innerHTML.replace('€', ''), 10);
                sum += parseInt(document.getElementById('bookTourCarPriceBox' + i + 'GPS').innerHTML.replace('€', ''), 10);
            } catch (Exception) {
            // is a car with driver
            }
        }
    }
    return sum;
}

function updateCarsCost() {
    document.getElementById('bookTourCarsCostValue').innerHTML = '<div class="bookTourItemPriceSeason">€' + calcCarsCost() + '</div>';
    updateTotalCost();
}

function typeCarChanged(e, id) {
    var sel = e.options[e.selectedIndex].value;
    var car;
	
    if (sel.charAt(0) == 'R') {
        car = rentalCars[sel.substring(1)];
    } else {
        car = driverCars[sel.substring(1)];
    }
	
    if (document.getElementById('seasonInfo').innerHTML == 'ÉPOCA ALTA') {
        document.getElementById('bookTourCarPriceBox' + id + 'Type').innerHTML = '€' + car.highSeasonPrice;
    } else {
        document.getElementById('bookTourCarPriceBox' + id + 'Type').innerHTML = '€' + car.lowSeasonPrice;
    }
	
    extraDayCarChanged(document.getElementById('btCar' + id + 'ExtraDay'), id, car);
    extraDriverCarChanged(document.getElementById('btCar' + id + 'ExtraDriver'), id, car);
    gpsCarChanged(document.getElementById('btCar' + id + 'GPS'), id, car);
    childSeatsCarChanged(document.getElementById('btCar' + id + 'ChildSeats'), id, car);
    babyChairsCarChanged(document.getElementById('btCar' + id + 'BabyChairs'), id, car);
	
    updateCarsCost();
}

function extraDayCarChanged(e, id, car) {
	
    if (e.checked) {
        if (!car) {
            var carlist = document.getElementById('btCar' + id + 'Type');
            var sel = carlist.options[carlist.selectedIndex].value;
			
            if (sel.charAt(0) == 'R') {
                car = rentalCars[sel.substring(1)];
            } else {
                car = driverCars[sel.substring(1)];
            }
        }
		
        document.getElementById('bookTourCarPriceBox' + id + 'ExtraDay').innerHTML = '€' + car.dayExtra;
		
    } else {
        document.getElementById('bookTourCarPriceBox' + id + 'ExtraDay').innerHTML = '€0';
    }
	
    updateCarsCost();

}

function extraDriverCarChanged(e, id, car) {
    var carlist = document.getElementById('btCar' + id + 'Type');
    var sel = carlist.options[carlist.selectedIndex].value;
	
    if (sel.charAt(0) == 'R') {
        if (!car)
            car = rentalCars[sel.substring(1)];
		
        var label = document.getElementById('btCar' + id + 'ExtraDriverLabel');
		
        if (!label) {
            // the previous selected car type was a driver car
		
            // extra driver
            var label = document.createElement('div');
            label.className = "bookTourRoomSubtitle";
            label.id = "btCar" + id + "ExtraDriverLabel";
            label.innerHTML = " Condutor Adicional ";
			
            var val = document.createElement('div');
            val.className = "bookTourRoomInput";
            val.innerHTML = '<input type="checkbox" id="btCar' + id + 'ExtraDriver" name="btCar' + id + 'ExtraDriver" onclick="extraDriverCarChanged(this, ' + id + ');"/>';
			
            var childSeatsLabel = document.getElementById('btCar' + id + 'ChildSeatsLabel');
            childSeatsLabel.parentNode.insertBefore(label, childSeatsLabel);
            childSeatsLabel.parentNode.insertBefore(val, childSeatsLabel);
			
            var price = document.createElement('div');
            price.className = "bookTourSubitemPriceSeason";
            price.id = "bookTourCarPriceBox" + id + "ExtraDriver";
            price.innerHTML = '€0';
			
            var childSeatsPrice = document.getElementById('bookTourCarPriceBox' + id + 'ChildSeats');
            childSeatsPrice.parentNode.insertBefore(price, childSeatsPrice);
        }
		
    } else {
        // extra driver
        var label = document.getElementById('btCar' + id + 'ExtraDriverLabel');
		
        if (!label)
            // the previous selected car type was also a driver car
            return;
		
        label.parentNode.removeChild(label);
        var val = document.getElementById('btCar' + id + 'ExtraDriver');
        val.parentNode.parentNode.removeChild(val.parentNode);
        var price = document.getElementById('bookTourCarPriceBox' + id + 'ExtraDriver');
        price.parentNode.removeChild(price);
		
        /*e.disabled = true;
		e.checked = false;
		document.getElementById('bookTourCarPriceBox' + id + 'ExtraDriver').innerHTML = '€0';*/
        return;
    }
	
    // when the row is only added after being invoked the onchange listener
    if (!e)
        e = document.getElementById("btCar" + id + "ExtraDriver");
	
    if (e.checked)
        document.getElementById('bookTourCarPriceBox' + id + 'ExtraDriver').innerHTML = '€' + car.extraDriver;
    else
        document.getElementById('bookTourCarPriceBox' + id + 'ExtraDriver').innerHTML = '€0';
		
    updateCarsCost();

}

function gpsCarChanged(e, id, car) {
    var carlist = document.getElementById('btCar' + id + 'Type');
    var sel = carlist.options[carlist.selectedIndex].value;
	
    if (sel.charAt(0) == 'R') {
        if (!car)
            car = rentalCars[sel.substring(1)];
		
        // gps
        var label = document.getElementById('btCar' + id + 'GPSLabel');
		
        if (!label) {
            // the previous selected car type was a driver car
		
            var label = document.createElement('div');
            label.className = "bookTourRoomSubtitle";
            label.id = "btCar" + id + "GPSLabel";
            label.innerHTML = " GPS ";
			
            var val = document.createElement('div');
            val.className = "bookTourRoomInput";
            val.innerHTML = '<input type="checkbox" id="btCar' + id + 'GPS" name="btCar' + id + 'GPS" onclick="gpsCarChanged(this, ' + id + ');"/>';
			
            var childSeatsLabel = document.getElementById('btCar' + id + 'ChildSeatsLabel');
            childSeatsLabel.parentNode.insertBefore(label, childSeatsLabel);
            childSeatsLabel.parentNode.insertBefore(val, childSeatsLabel);
			
            var price = document.createElement('div');
            price.className = "bookTourSubitemPriceSeason";
            price.id = "bookTourCarPriceBox" + id + "GPS";
            price.innerHTML = '€0';
			
            var childSeatsPrice = document.getElementById('bookTourCarPriceBox' + id + 'ChildSeats');
            childSeatsPrice.parentNode.insertBefore(price, childSeatsPrice);
        }
    } else {
		
        // gps
        var label = document.getElementById('btCar' + id + 'GPSLabel');
		
        if (!label)
            // the previous selected car type was also a driver car
            return;
		
        label.parentNode.removeChild(label);
        var val = document.getElementById('btCar' + id + 'GPS');
        val.parentNode.parentNode.removeChild(val.parentNode);
        var price = document.getElementById('bookTourCarPriceBox' + id + 'GPS');
        price.parentNode.removeChild(price);
		
        return;
    }
	
    // when the row is only added after being invoked the onchange listener
    if (!e)
        e = document.getElementById("btCar" + id + "GPS");
	
    if (e.checked)
        document.getElementById('bookTourCarPriceBox' + id + 'GPS').innerHTML = '€' + car.gps;
    else
        document.getElementById('bookTourCarPriceBox' + id + 'GPS').innerHTML = '€0';
	
    updateCarsCost();
}

function childSeatsCarChanged(e, id, car) {
	
    if (!car) {
        var carlist = document.getElementById('btCar' + id + 'Type');
        var sel = carlist.options[carlist.selectedIndex].value;
		
        if (sel.charAt(0) == 'R') {
            car = rentalCars[sel.substring(1)];
        } else {
            car = driverCars[sel.substring(1)];
        }
    }
	
    var val = e.options[e.selectedIndex].value * car.childSeat;
    document.getElementById('bookTourCarPriceBox' + id + 'ChildSeats').innerHTML = '€' + val;

    updateCarsCost();
}

function babyChairsCarChanged(e, id, car) {
	
    if (!car) {
        var carlist = document.getElementById('btCar' + id + 'Type');
        var sel = carlist.options[carlist.selectedIndex].value;
		
        if (sel.charAt(0) == 'R') {
            car = rentalCars[sel.substring(1)];
        } else {
            car = driverCars[sel.substring(1)];
        }
    }
	
    var val = e.options[e.selectedIndex].value * car.babyChair;
    document.getElementById('bookTourCarPriceBox' + id + 'BabyChairs').innerHTML = '€' + val;

    updateCarsCost();
}


/* addons */

function addAddon(number, id, name, fixedPrice) {
    var newDiv = document.createElement('div');
    newDiv.id = 'bookTourAddonBox' + id;
    newDiv.className = "bookTourItemBox";
	
    var newPriceDiv = document.createElement('div');
    newPriceDiv.id = 'bookTourAddonPriceBox' + id;
    newPriceDiv.className = "price bookTourItemBox";
	
    if (!fixedPrice) {
        newDiv.innerHTML = '<div class="bookTourRoomTitleBookTour" >\
                <a href="showTour.php?id=' + tourId + '&s=4&addon=' + id + '" >' + name + '</a>\
            </div>\
            <div class="bookTourRoomInput" style="height: 40px">\
            	<input type="checkbox" id="btAddon' + number + '" name="btAddon' + number + '" onclick="changeAddonOptionsState(this, ' + number + ');" value="' + id + '" />\
            </div>\
						<div class="clear"></div>\
            <div class="bookTourRoomSubtitle">\
                Número de Adultos\
            </div>\
            <div class="bookTourRoomInput">\
            	<select id="btAddon' + number + 'NAdults" name="btAddon' + number + 'NAdults" disabled="disabled" onchange="nAdultsAddonChanged(this, ' + number + ')">\
                	<option value="1">1</option>\
                    <option value="2">2</option>\
                    <option value="3">3</option>\
					<option value="4">4</option>\
                    <option value="5">5</option>\
                    <option value="6">6</option>\
					<option value="7">7</option>\
                    <option value="8">8</option>\
                </select>\
            </div>\
						<div class="clear"></div>\
            <div class="bookTourRoomSubtitle">\
                Número de Crianças\
            </div>\
            <div class="bookTourRoomInput">\
            	<select id="btAddon' + number + 'NChildren" name="btAddon' + number + 'NChildren" disabled="disabled" onchange="nKidsAddonChanged(this, ' + number + ')">\
					<option value="0">0</option>\
                	<option value="1">1</option>\
                    <option value="2">2</option>\
                    <option value="3">3</option>\
					<option value="4">4</option>\
                </select>\
            </div>';
		
        newPriceDiv.innerHTML = '<div class="price bookTourRoomTitle" style="height: 52px"></div>\
            <div id="bookTourAddon' + number +'PriceAdult" class="bookTourSubitemPriceSeason">€0</div>\
            <div id="bookTourAddon' + number +'PriceKid" class="bookTourSubitemPriceSeason">€0</div>';
    } else {
        newDiv.innerHTML = '<div class="bookTourRoomTitleBookTour" style="height: 40px;" ">\
                <a href="showTour.php?id=' + tourId + '&s=4&addon=' + id + '">' + name + '</a>\
            </div>\
            <div class="bookTourRoomInput" style="height: 40px">\
            	<input type="checkbox" id="btAddon' + number + '" name="btAddon' + number + '" value="' + id + '" onclick="addonFPSelectChanged(this, ' + number + ')" />\
            </div>';
			
        newPriceDiv.innerHTML = '<div id="bookTourAddon' + number +'Price" class="bookTourSubitemPriceSeason">€0</div>';
    }
	
    /*var addonsCostDiv = document.getElementById('bookTourAddonsCost');
	document.getElementById('bookTourInputArea').insertBefore(newDiv, addonsCostDiv);
	
	var addonsCostValueDiv = document.getElementById('bookTourAddonsCostValue');
	document.getElementById('bookTourPricesArea').insertBefore(newPriceDiv, addonsCostValueDiv);*/
	
    document.getElementById('animatedAddonsInput').appendChild(newDiv);
    document.getElementById('animatedAddonsPrices').appendChild(newPriceDiv);
}

function changeAddonOptionsState(checkbox, id) {
    document.getElementById('btAddon' + id + 'NAdults').disabled = !checkbox.checked;
    document.getElementById('btAddon' + id + 'NChildren').disabled = !checkbox.checked;
	
    if (!checkbox.checked) {
        document.getElementById('bookTourAddon' + id +'PriceAdult').innerHTML = '€0';
        document.getElementById('bookTourAddon' + id +'PriceKid').innerHTML = '€0';
    } else {
        nAdultsAddonChanged(document.getElementById('btAddon' + id + 'NAdults'), id);
        nKidsAddonChanged(document.getElementById('btAddon' + id + 'NChildren'), id);
    }
	
    updateAddonsCost();
}

function calcAddonsCost() {
    var sum = 0;
    for (var i = 0; i < addons.length; i++) {
        if (addons[i].priceType == 1) {
            sum += parseInt(document.getElementById('bookTourAddon' + i +'Price').innerHTML.replace('€', ''), 10);
        } else {
            sum += parseInt(document.getElementById('bookTourAddon' + i +'PriceAdult').innerHTML.replace('€', ''), 10);
            sum += parseInt(document.getElementById('bookTourAddon' + i +'PriceKid').innerHTML.replace('€', ''), 10);
        }
    }
	
    return sum;
}

function updateAddonsCost() {
    document.getElementById('bookTourAddonsCostValue').innerHTML = '<div class="bookTourItemPriceSeason">€' + calcAddonsCost() + '</div>';
    updateTotalCost();
}

function nAdultsAddonChanged(e, id) {
    var nadults = parseInt(e.options[e.selectedIndex].value, 10);
    var addon;
	
    /*for (var i = 0; i < addons.length; i++)
		if (addons[i].id == id) break;*/
		
    addon = addons[id];
	
    document.getElementById('bookTourAddon' + id +'PriceAdult').innerHTML = '€' + (addon.adultPrice * nadults);
	
    updateAddonsCost();
}

function nKidsAddonChanged(e, id) {
    var nkids = parseInt(e.options[e.selectedIndex].value, 10);
    var addon;
	
    /*for (var i = 0; i < addons.length; i++)
		if (addons[i].id == id) break;*/
		
    addon = addons[id];
	
    document.getElementById('bookTourAddon' + id +'PriceKid').innerHTML = '€' + (addon.kidPrice * nkids);
	
    updateAddonsCost();
}

function addonFPSelectChanged(e, id) {
    if (e.checked) {
        var addon;
		
        /*for (var i = 0; i < addons.length; i++)
			if (addons[i].id == id) break;*/
			
        addon = addons[id];
		
        document.getElementById('bookTourAddon' + id +'Price').innerHTML = '€' + (addon.adultPrice);
    } else {
        document.getElementById('bookTourAddon' + id +'Price').innerHTML = '€0';
    }
	
    updateAddonsCost();
}

/* total cost */

function calcTotalCost() {
    var valre = /€(\d+)/;
    var sum = 0;
	
    // rooms
    sum += parseInt(valre.exec(document.getElementById('bookTourAccomodationCostValue').innerHTML)[1], 10);
    // cars
    sum += parseInt(valre.exec(document.getElementById('bookTourCarsCostValue').innerHTML)[1], 10);
    // addons
    sum += parseInt(valre.exec(document.getElementById('bookTourAddonsCostValue').innerHTML)[1], 10);
	
    return sum;
}

function updateTotalCost() {
    document.getElementById('btTotalCost').innerHTML = '€' + calcTotalCost();
}

function confirmStep2(ctc) {
    if(ctc){
		
        document.getElementById("contactOrCheck").value = 1;
        document.getElementById("bookingForm").submit();
    }else{
        document.getElementById("bookingForm").submit();
    }
}

/* STEP 3 */

function confirmStep3() {
	
    var inputsNames = new Array("firstName", "lastName", "mail", "reMail","departureDate", "returnDate");
    var suffix = document.getElementById('suffix');
	
    // reset all colors
    suffix.parentNode.style.color = "#343434";
	
    for (var i = 0; i < inputsNames.length; i++) {
        var e = document.getElementById(inputsNames[i]);
        if (e == null)
            continue;

        e.parentNode.style.color = "#343434";
        e.style.borderColor = "#000";
    }
	
    var reqOk = true;
	
    // detect required fields
    if (suffix.selectedIndex == 0) {
        suffix.parentNode.style.color = "#ff0000";
        reqOk = false;
    }
	
    for (var i = 0; i < inputsNames.length; i++) {
        var e = document.getElementById(inputsNames[i]);
        if (e != null && empty(e.value)) {
            e.parentNode.style.color = "#ff0000";
            e.style.borderColor = "#ff0000";
            reqOk = false;
        }
    }
	
    if (!reqOk) {
        document.getElementById("bookTourStep3ErrorMessage").innerHTML = "Por favor preencha os campos obrigatórios.";
        return;
    }
	
    var mail = document.getElementById('mail');
	
    if (mail != null && !validMail(mail.value)) {
        document.getElementById("bookTourStep3ErrorMessage").innerHTML = "O endereço de e-mail não é válido.";
        mail.parentNode.style.color = "#ff0000";
        mail.style.borderColor = "#ff0000";
        return;
    }
	
    var remail = document.getElementById('reMail');

    if (remail != null && mail.value != remail.value) {
        document.getElementById("bookTourStep3ErrorMessage").innerHTML = "Os endereços de e-mail não coincidem.";
        mail.parentNode.style.color = "#ff0000";
        mail.style.borderColor = "#ff0000";
        remail.parentNode.style.color = "#ff0000";
        remail.style.borderColor = "#ff0000";
        return;
    }
	
    /*if (!document.getElementById('agreement').checked) {
		document.getElementById("bookTourStep3ErrorMessage").innerHTML = "Tem que concordar com as Condições de Reserva do Portugal Trails.";
		return;
	}*/
	
    document.getElementById("bookTourStep3ErrorMessage").innerHTML = "";
    document.getElementById('bookingForm').submit();
}
var visible = false;
function showAddon(){
    if(visible == false){
        document.getElementById('animatedAddonsInput').style.display = 'block';
        document.getElementById('animatedAddonsPrices').style.display = 'block';
        document.getElementById('openSection').innerHTML = '-';
        visible = true;
    } else {
        document.getElementById('animatedAddonsInput').style.display = 'none';
        document.getElementById('animatedAddonsPrices').style.display = 'none';
        document.getElementById('openSection').innerHTML = '+';
        visible = false;
    }
}		
