
















var maxInfantsPerAdult  = 1;
var maxChildrenPerAdult = 2;
var maxNoOfTravellers   = 8;
var maxNoOfChildren     = 4;
var maxNoOfInfants      = 4;
var destDefault         = '??? otherDestDefaultMsg ???';

var numberOfChildren = 0;
var numberOfInfants = 0;

function setNumTravellers(form, adults, children, infants) {
    if (form.numberOfAdults.options[0].value == 0) {
        form.numberOfAdults.selectedIndex = adults;
    } else {
        form.numberOfAdults.selectedIndex = adults-1;
    }
    numberOfChildren = children;
    numberOfInfants = infants;
}

function validateAdultTravellers(form) {
    var numAdults  = parseInt($j(form.numberOfAdults).val());
    var numChildrenInfants = parseInt($j(form.numberOfChildrenInfants).val());
    var numInfantsAllowed = numAdults * maxInfantsPerAdult;

    if (numAdults == 0) {
        alert('Det måste vara minst en vuxen på resan');
        setNumTravellers(form, 1, 0, 0);
        return false;
    }
    else if (numAdults > maxNoOfTravellers) {
        alert('Max '+maxNoOfTravellers+' resenärer');
        setNumTravellers(form, maxNoOfTravellers, 0, 0);
        return false;
    }
    else if (numAdults + numChildrenInfants > maxNoOfTravellers) {
        alert('Max '+maxNoOfTravellers+' resenärer');
        setNumTravellers(form, numAdults, 0, 0);
        return false;
    }
    else if (numberOfInfants > numInfantsAllowed) {
        alert('Max '+maxInfantsPerAdult+' spädbarn per vuxen resenär');
        setNumTravellers(form, numAdults, 0, 0);
        return false;
    }
    return true;
}

function validateChildTravellers(form) {
    var numAdults  = parseInt($j(form.numberOfAdults).val());
    var numChildrenInfants = parseInt($j(form.numberOfChildrenInfants).val());

    if (numChildrenInfants > maxNoOfChildren) {
        alert('Max '+maxNoOfChildren+' barn');
        setNumTravellers(form, numAdults, 0, numberOfInfants);
        return false;
    }
    else if (numAdults + numChildrenInfants > maxNoOfTravellers) {
        alert('Max '+maxNoOfTravellers+' resenärer');
        setNumTravellers(form, numAdults, 0, numberOfInfants);
        return false;
    }
    return true;
}

function validateChildrenAndInfants(form, infantMaxAge, childMaxAge) {
	var numChildrenInfants = parseInt($j(form.numberOfChildrenInfants).val());
	var childrenInfantsAge = form.childrenInfantsAge.value;

	if (numChildrenInfants == 0) {
		childrenInfantsAge = '';
		return true;
	}
	
	if (!childrenInfantsAge.match(/(^ *\d+ *(, *\d+ *)*$)/)) {
		alert('Barnens åldrar är felaktigt ifyllda.');
		return false;
	}

	var parts = childrenInfantsAge.split(",");
	if (numChildrenInfants != parts.length) {
		alert('Barnens åldrar felaktigt ifyllt.');
		return false;
	}

	for (var i=0; i<parts.length; i++) {
		var part = parts[i].replace(" ", "");
		if (part <= infantMaxAge) {
			numberOfInfants++;
		} else if (part <= childMaxAge) {
			numberOfChildren++;
		} else {
			alert('Felaktig ålder för ett barn.');
			return false
		}
	}
	return true;
}

function validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, childrenInfantsAgeInput) {
	var numChildrenInfants = numChildrenInfantsSelect.val();
	var childrenInfantsAge = childrenInfantsAgeInput.val();

	if (numChildrenInfants == 0) {
		childrenInfantsAge = '';
		return true;
	}

	if (!childrenInfantsAge.match(/(^ *\d+ *(, *\d+ *)*$)/)) {
		alert('Barnens åldrar är felaktigt ifyllda.');
		return false;
	}

	var parts = childrenInfantsAge.split(",");
	if (numChildrenInfants != parts.length) {
		alert('Barnens åldrar felaktigt ifyllt.');
		return false;
	}

	for (var i=0; i<parts.length; i++) {
		var part = parts[i].replace(" ", "");
        if (part > childMaxAge) {
			alert('Felaktig ålder för ett barn.');
			return false
		}
	}

	return true;
}

function numberOfAdultsChanged(select) {
    var adults = $j(select);
    if (adults.val() < 1) {
        alert('Det måste vara minst en vuxen på resan');
        adults.val(1);
    }
}

function isLocationSet(input) {
    return input.value != ''
            && input.value != 'Ange destination'
            && input.value != 'Ange avreseort'
            && input.value != 'Ange upphämtningsplats';
}

function numberOfRoomsChanged(select, searchSuffix) {
    var rooms = $j(select).val();
    if (rooms < 2) {
        $j('.searchFormRoomHeader' + searchSuffix).hide();
    } else {
        $j('.searchFormRoomHeader' + searchSuffix).show();
    }
    var i=1;
    for (; i<=rooms; i++) {
        $j('#searchFormRoom_' + i + searchSuffix).show();
    }
    for (; i<=8; i++) {
        $j('#searchFormRoom_' + i + searchSuffix).hide();
    }
}

function validateRoomCount(form) {
    var roomCount = form.numberOfRooms;
    if ($j(roomCount).is(':visible') && $j(roomCount).val() <= 0) {
        alert('Du måste ange antalet rum');
        return false;
    }
    return true;
}

function validateRoomsFilled(form) {
    var rooms = $j(form.numberOfRooms).val();
    for (var i=0; i<rooms; i++) {
        var adults = $j(form.elements['hotelNumberOfAdults['+ i +']']).val();
        if (adults < 1) {
            alert('Varje rum måste innehålla minst en vuxen.');
            return false;
        }
    }
    return true;
}

function validateMaxTravellers(form) {
    var max = 8;
    var totalTravellers = 0;
    var rooms = $j(form.numberOfRooms).val();
    for (var i=0; i<rooms; i++) {
        var adults = $j(form.elements['hotelNumberOfAdults['+ i +']']).val();
        var childs = $j(form.elements['hotelNumberOfChildrenInfants['+ i +']']).val();
        totalTravellers += parseInt(adults);
        totalTravellers += parseInt(childs);
    }
    if (totalTravellers > max) {
        alert('Max '+max+' resenärer');
        return false;
    }
    return true;
}

function numberOfChildrenChanged(select, roomId, suffix) {
    var childrens = $j(select).val();
    if (childrens > 0) {
        $j('#childrenInfantsAgeHeader_' + roomId + suffix).show();
        $j('#childrenInfantsAge_'+ roomId + suffix).show();
    } else {
        $j('#childrenInfantsAgeHeader_' + roomId + suffix).hide();
        $j('#childrenInfantsAge_'+ roomId + suffix).hide();
    }
}

function numberOfChildrenInfantsChangedAir(select, agesDiv) {
    var ages = $j(agesDiv);
    if (ages) {
        if ($j(select).val() > 0) {
            ages.show();
        } else {
            ages.hide();
        }
    }
}

function toggleAdvancedAirSearch() {
    $j('#airSearchFormAdvancedSearchDiv').slideToggle();
}

function toggleAdvancedAirHotelSearch() {
    $j('#airHotelSearchExtendedForm').slideToggle();
}

function validateHotelDates(form) {
    var teValidation = validate(form, externalMinDate_HOTEL);
    if (teValidation == 'ok') return true;
    switch(teValidation) {
        case 'alertInvalidOutDate':
            alert('Felaktigt avresedatum');
            break;
        case 'alertInvalidHomeDate':
            alert('Felaktigt hemresedatum');
            break;
        case 'alertToErlyOutDate':
            alert('För tidigt angett ankomstdatum');
            break;
        case 'alertToErlyHomeDate':
            alert('För tidigt hemresedatum');
            break;
        case 'alertSameDayDate':
            alert('Avresedatum och hemresedatum är lika');
            break;
    }
    return false;
}

function validateCarDates(form) {
    var teValidation = validate(form, externalMinDate_CAR);
    if (teValidation == 'ok') return true;
    switch(teValidation) {
        case 'alertInvalidOutDate':
            alert('Felaktig hämtningstidpunkt');
            break;
        case 'alertInvalidHomeDate':
            alert('Felaktig återlämningstidpunkt');
            break;
        case 'alertToErlyOutDate':
            alert('För tidigt angett upphämtningsdatum');
            break;
        case 'alertToErlyHomeDate':
            alert('För tidig återlämningstidpunkt');
            break;
        case 'alertSameDayDate':
            alert('??? alertsearchCarSameDayDate ???');
            break;
    }
    return false;
}

function validatePackageDates(form) {
    var teValidation = validate(form, externalMinDate_CAR);
    if (teValidation == 'ok') return true;
    switch(teValidation) {
        case 'alertInvalidOutDate':
            alert('Felaktig hämtningstidpunkt');
            break;
        case 'alertInvalidHomeDate':
            alert('Felaktig återlämningstidpunkt');
            break;
        case 'alertToErlyOutDate':
            alert('För tidigt angett upphämtningsdatum');
            break;
        case 'alertToErlyHomeDate':
            alert('För tidig återlämningstidpunkt');
            break;
        case 'alertSameDayDate':
            alert('Upphämtningsdatum och återlämningsdatum får ej vara samma dag');
            break;
    }
    return false;
}

/**** AIR HOTEL ****/

function validateAirHotelSearchForm(form) {
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_1_airHotel'), $j('#childrenInfantsAges_1_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_2_airHotel'), $j('#childrenInfantsAges_2_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_3_airHotel'), $j('#childrenInfantsAges_3_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_4_airHotel'), $j('#childrenInfantsAges_4_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_5_airHotel'), $j('#childrenInfantsAges_5_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_6_airHotel'), $j('#childrenInfantsAges_6_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_7_airHotel'), $j('#childrenInfantsAges_7_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_8_airHotel'), $j('#childrenInfantsAges_8_airHotel')))
            return false;
    

    if (!validateCalendarDates(form, externalMinDate_FLIGHT_HOTEL))
        return false;

    if (!isLocationSet(form.homeStartLocation)) {
        alert('Du måste ange en destination');
        return false;
    }

    if (!isLocationSet(form.outStartLocation)) {
        alert('Du måste ange en avreseort');
        return false;
    }

    if (!validateMaxTravellers(form))
      return false;

    if (!validateRoomCount(form))
      return false;

    if (!validateRoomsFilled(form))
        return false;

    return true;
}

/* SEARCH AIR HOTEL */
function submitAirHotel(form) {
    if (!validateAirHotelSearchForm(form))
        return false;
    form.submit();
    showWaitSearch({text:'Vi söker nu efter rätt biljett för dig.'});
    return false;
}

/* SEARCH AIR HOTEL IN LIST */
function submitAirHotelSearchForm(form) {
    form.isMapSearch.value = 'false';
    return submitAirHotel(form);
}

/* SEARCH AIR HOTEL ON MAP */
function submitAirHotelSearchMapForm(form) {
    form.isMapSearch.value = 'true';
    return submitAirHotel(form);
}

function initAirHotelSearchForm() {
    var form = document.airHotelSearchForm;
    numberOfRoomsChanged(form.numberOfRooms, '_airHotel');
    var rooms = $j(form.numberOfRooms).val();
    for (var i=1; i<=rooms; i++) {
        numberOfChildrenChanged($j('#searchFormRoomChildrensSelect_' + i + '_airHotel'), i, '_airHotel');
    }

    var startLocation = form.outStartLocation;
    var storedDeparture = readStoredDeparture();
    if (storedDeparture != null && startLocation != null && startLocation.value == '')
        startLocation.value = storedDeparture;

    var homeLocation = form.homeStartLocation;
    var storedDestination = readStoredDestination();
    if (storedDestination != null && homeLocation.value == '')
        homeLocation.value = storedDestination;

    defaultText('#outStartLocation_airHotel', 'Ange avreseort');
    defaultText('#homeStartLocation_airHotel', 'Ange destination');

    
        defaultText('#childrenInfantsAges_1_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_2_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_3_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_4_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_5_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_6_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_7_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_8_airHotel', '(ex 0,3)');
    
}

/**** AIR ****/




function hideReturnTripSpecifics(hide){
    var homeDate = document.getElementById('airSearchFormArrivalDateWrapper');
    homeDate.style.visibility = hide ?  'hidden' : 'visible';

    var homeTime = document.getElementById('airSearchFormArrivalTimeWrapper');
    homeTime.style.visibility = hide ?  'hidden' : 'visible';

    var flexibleDateDiv = document.getElementById('flexibleDateDiv');
    flexibleDateDiv.style.visibility = hide ?  'hidden' : 'visible';

    var calendarBox = document.getElementById('calendarSearch_air');
    if (calendarBox != null)
        calendarBox.checked &= !hide;
}

function validateAirSearchForm(form) {
    if (!validateChildrenAndInfants(form, infantMaxAge, childMaxAge))
        return false;

    if (!validateCalendarDates(form, externalMinDate_FLIGHT))
        return false;

    if (!validateAdultTravellers(form))
        return false;

    if (!isLocationSet(form.outStartLocation)) {
        alert('Du måste ange en avreseort');
        return false;
    }
    if (!isLocationSet(form.homeStartLocation)) {
        alert('Du måste ange en destination');
        return false;
    }

    if (!isLocationSet(form.outStartLocation)) {
        alert('Du måste ange en avreseort');
        return false;
    }

    if (form.calendarSearch != null && form.calendarSearch.checked) {
        if (form.homeStartLocation.getAttribute("locationtype") == 'COUNTRYPART') {
            alert('Flexibel sökning kan endast göras på flygplatser! Tex vill du söka på Phuket, måste du välja Phuket, International');
            return false;
        }
        if (form.outStartLocation.getAttribute("locationtype") == 'COUNTRYPART') {
            alert('Flexibel sökning kan endast göras på flygplatser! Tex vill du söka på Phuket, måste du välja Phuket, International');
            return false;
        }
    }
    return true;
}

function submitAirSearchForm(form) {
    if (!validateAirSearchForm(form)) {
        return false;
    }
    form.submit();
    showWaitSearch({text:'Vi söker nu efter rätt biljett för dig.'});
    return false;
}

function initAirSearchForm() {
    var form = document.airSearchForm;
    var outStartLocation = form.outStartLocation;
    var homeStartLocation = form.homeStartLocation;

    var storedDeparture = readStoredDeparture();
    if (storedDeparture != null && outStartLocation.value == '')
        outStartLocation.value = storedDeparture;

    var storedDestination = readStoredDestination();
    if (storedDestination != null && homeStartLocation.value == '')
        homeStartLocation.value = storedDestination;

    defaultText('#outStartLocation_air', 'Ange avreseort');
    defaultText('#homeStartLocation_air', 'Ange destination');
    defaultText('#childrenInfantsAges_air', '(ex 0,3)');
    
    

    
    
}

/**** HOTEL ****/

function validateSearchHotelForm(form) {
	var numChildrenInfantsSelect;
	var agesChildrenInfants;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[0]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[0]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[1]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[1]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[2]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[2]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[3]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[3]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[4]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[4]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[5]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[5]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[6]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[6]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    
		numChildrenInfantsSelect = $j(form.elements['hotelNumberOfChildrenInfants[7]']);
		agesChildrenInfants = $j(form.elements['hotelChildrensAge[7]']);
		if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, numChildrenInfantsSelect, agesChildrenInfants))
            return false;
    

    if (!validateHotelDates(form))
        return false;

    if (!isLocationSet(form.homeStartLocation)) {
        alert('Du måste ange en destination');
        return false;
    }

    if (!validateMaxTravellers(form))
        return false;

    if (!validateRoomCount(form))
        return false;

    if (!validateRoomsFilled(form))
        return false;

    return true;
}

/* SEARCH HOTEL ON MAP */
function submitHotelMapSearchForm(form) {
    if (!validateSearchHotelForm(form))
        return false;

    form.isMapSearch.value = 'true';
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de hotell vi kan erbjuda efter dina sökkriterier.'});
    return false;
}

/* SEARCH HOTEL IN LIST */
function submitHotelSearchForm(form) {
    if (!validateSearchHotelForm(form))
        return false;

    form.isMapSearch.value = 'false';
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de hotell vi kan erbjuda efter dina sökkriterier.'});
    return false;
}

function initHotelSearchForm() {
    var form = document.hotelSearchForm;
    numberOfRoomsChanged(form.numberOfRooms, '_hotel');
    var rooms = $j(form.numberOfRooms).val();
    for (var i=1; i<=rooms; i++) {
        numberOfChildrenChanged($j('#searchFormRoomChildrensSelect_' + i + '_hotel'), i, '_hotel');
    }

    var homeStartLocation = form.homeStartLocation;
    var storedDestination = readStoredDestination();
    if (storedDestination != null && homeStartLocation.value == '')
        homeStartLocation.value = storedDestination;

    if (homeStartLocation.value == '')
        homeStartLocation.value = 'Ange destination';

    defaultText('#homeStartLocation_hotel', 'Ange destination');

    
        defaultText('#childrenInfantsAges_1_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_2_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_3_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_4_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_5_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_6_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_7_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_8_hotel', '(ex 0,3)');
    
}

/**** AIR HOTEL PUFF ****/

function initAirHotelSearchPuffForm(cleanForm) {
    var form = document.airHotelSearchPuffForm;
    numberOfRoomsChanged(form.numberOfRooms, '_airHotel');
    var rooms = $j(form.numberOfRooms).val();
    for (var i=1; i<=rooms; i++) {
        numberOfChildrenChanged($j('#searchFormRoomChildrensSelect_' + i + '_airHotel'), i, '_airHotel');
    }

	if (!cleanForm) {
		var outStartLocation = form.outStartLocation;
		var homeStartLocation = form.homeStartLocation;

		var storedDeparture = readStoredDeparture();
		if (storedDeparture != null && outStartLocation.value == '')
			outStartLocation.value = storedDeparture;

		var storedDestination = readStoredDestination();
		if (storedDestination != null && homeStartLocation.value == '')
			homeStartLocation.value = storedDestination;
	}

    defaultText('#outStartLocation_airHotel', 'Ange avreseort');
    defaultText('#homeStartLocation_airHotel', 'Ange destination');

    
        defaultText('#childrenInfantsAges_1_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_2_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_3_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_4_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_5_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_6_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_7_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_8_airHotel', '(ex 0,3)');
    

    $j('#airHotelSearchExtendedFormButton').toggle(function() {
        $j('#airHotelSearchExtendedForm').slideToggle();
        $j('#extendedSearch').val('true');
        $j('#extendedSearch').attr('checked', 'checked');
    }, function() {
        $j('#airHotelSearchExtendedForm').slideToggle();
        $j('#extendedSearch').val('false');
        $j('#extendedSearch').attr('checked', '');
    });
}

/**** AIR PUFF ****/

function hideReturnTripPuffSpecifics(hide) {
    hide ? $j('#homeDateDiv').hide() : $j('#homeDateDiv').show();
    hide ? $j('#airSearchSubFlexibleDateDiv').hide() : $j('#airSearchSubFlexibleDateDiv').show();
    hide ? $j('#airSearchSubFormArrivalTimeWrapper').hide() : $j('#airSearchSubFormArrivalTimeWrapper').show();

    var calendarBox = document.getElementById('calendarSearch_air');
    if (calendarBox != null)
        calendarBox.checked &= !hide;
}

function submitAirSearchPuffForm(form) {
    if (!validateAirSearchForm(form))
        return false;

    form._flowExecutionKey.disabled = 'true';
    form._eventId.disabled = 'true';
    form.submit();
    showWaitSearch({text:'Vi söker nu efter rätt biljett för dig.'});
    return false;
}

function initAirSearchPuffForm(cleanForm) {
    var form = document.airSearchPuffForm;
    var outStartLocation = form.outStartLocation;
    var homeStartLocation = form.homeStartLocation;

	if (!cleanForm) {
		var storedDeparture = readStoredDeparture();
		if (storedDeparture != null && outStartLocation.value == '')
			outStartLocation.value = storedDeparture;

		var storedDestination = readStoredDestination();
		if (storedDestination != null && homeStartLocation.value == '')
			homeStartLocation.value = storedDestination;
	}

    defaultText('#outStartLocation_air', 'Ange avreseort');
    defaultText('#homeStartLocation_air', 'Ange destination');
    defaultText('#childrenInfantsAges_air', '(ex 0,3)');
    
    
    
}

/**** HOTEL PUFF ****/

/* SEARCH MAP */
function submitHotelMapSearchPuffForm(form) {
    if (!validateSearchHotelForm(form))
        return false;

    form._flowExecutionKey.disabled = 'true';
    form._eventId.disabled = 'true';
    form.isMapSearch.value = 'true';
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de hotell vi kan erbjuda efter dina sökkriterier.'});
    return false;
}

/* SEARCH LIST */
function submitHotelSearchPuffForm(form) {
    if (!validateSearchHotelForm(form))
        return false;

    form._flowExecutionKey.disabled = 'true';
    form._eventId.disabled = 'true';
    form.isMapSearch.value = 'false';
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de hotell vi kan erbjuda efter dina sökkriterier.'});
    return false;
}

function initHotelSearchPuffForm(cleanForm) {
    var form = document.hotelSearchPuffForm;
    numberOfRoomsChanged(form.numberOfRooms, '_hotel');
    var rooms = $j(form.numberOfRooms).val();
    for (var i=1; i<=rooms; i++) {
        numberOfChildrenChanged($j('#searchFormRoomChildrensSelect_' + i + '_hotel'), i, '_hotel');
    }

    if (!cleanForm) {
        var homeStartLocation = form.homeStartLocation;
        var storedDestination = readStoredDestination();
        if (storedDestination != null && homeStartLocation.value == '')
            homeStartLocation.value = storedDestination;

        if (homeStartLocation.value == '')
            homeStartLocation.value = 'Ange destination';
    }

    defaultText('#homeStartLocation_hotel', 'Ange destination');

    
        defaultText('#childrenInfantsAges_1_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_2_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_3_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_4_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_5_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_6_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_7_hotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_8_hotel', '(ex 0,3)');
    
}

/* CAR */

function carReturnAtOtherStnChanged(chkbox) {
    var returnStation = document.getElementById('returnStationDiv');
    returnStation.style.display = !chkbox.checked ? 'none' : 'block';
    var form = document.carSearchForm;
    if (form.homeStartLocation.value == form.outEndLocation.value) {
        form.outEndLocation.value = '';
    }
}

function submitCarSearchForm(form) {
    if (!validateSearchCarForm(form)) {
        return false;
    }
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de hyrbilar vi kan erbjuda efter dina sökkriterier.'});
    return false;
}

var carRentalQuerySuffix = '&carrental=true';

function initCarSearchForm() {
    defaultText('#homeStartLocation_car', 'Ange upphämtningsplats');
    defaultText('#outEndLocation_car', 'Ange återlämningsplats');
    defaultText('#childrenInfantsAges_car', '(ex 0,3)');
}

function validateSearchCarForm(form) {
    if (!validateCarDates(form))
        return false;

    if (!isLocationSet(form.homeStartLocation)) {
        alert('Du måste ange en destination');
        return false;
    }

    if (form.useEndLocation && form.useEndLocation.checked) {
        if (!isLocationSet(form.outEndLocation)) {
            alert('Du måste ange en destination');
            return false;
        }
    }

    return true;
}

function submitCarSearchPuffForm(form) {
    if (!validateSearchCarForm(form))
        return false;

    form._flowExecutionKey.disabled='true';
    form._eventId.disabled='true';
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de hyrbilar vi kan erbjuda efter dina sökkriterier.'});
    return false;
}



/**** PACKAGE ****/

function validatePackageSearchForm(form) {
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_1_package'), $j('#childrenInfantsAges_1_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_2_package'), $j('#childrenInfantsAges_2_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_3_package'), $j('#childrenInfantsAges_3_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_4_package'), $j('#childrenInfantsAges_4_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_5_package'), $j('#childrenInfantsAges_5_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_6_package'), $j('#childrenInfantsAges_6_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_7_package'), $j('#childrenInfantsAges_7_package')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_8_package'), $j('#childrenInfantsAges_8_package')))
            return false;
    

    if (!validateCalendarDates(form, externalMinDate_FLIGHT_HOTEL))
        return false;

    if (!isLocationSet(form.homeStartLocation)) {
        alert('Du måste ange en destination');
        return false;
    }

    if (!isLocationSet(form.outStartLocation)) {
        alert('Du måste ange en avreseort');
        return false;
    }

    if (!validateMaxTravellers(form))
      return false;

    if (!validateRoomCount(form))
      return false;

    if (!validateRoomsFilled(form))
        return false;

    return true;
}

/* SEARCH PACKAGE */
function submitPackage(form) {
    if (!validatePackageSearchForm(form))
        return false;
    form.submit();
    showWaitSearch({text:'Snart får du förslag på de paket vi kan erbjuda efter dina sökkriterier.'});
    return false;
}

/* SEARCH PACKAGE IN LIST */
function submitPackageSearchForm(form) {
    form.isMapSearch.value = 'false';
    return submitPackage(form);
}

/* SEARCH PACKAGE ON MAP */
function submitPackageSearchMapForm(form) {
    form.isMapSearch.value = 'true';
    return submitPackage(form);
}

function initPackageSearchForm() {
    var form = document.packageSearchForm;
    numberOfRoomsChanged(form.numberOfRooms, '_package');
    var rooms = $j(form.numberOfRooms).val();
    for (var i=1; i<=rooms; i++) {
        numberOfChildrenChanged($j('#searchFormRoomChildrensSelect_' + i + '_package'), i, '_package');
    }

    var startLocation = form.outStartLocation;
    var storedDeparture = readStoredDeparture();
    if (storedDeparture != null && startLocation.value == '')
        startLocation.value = storedDeparture;

    var homeLocation = form.homeStartLocation;
    var storedDestination = readStoredDestination();
    if (storedDestination != null && homeLocation.value == '')
        homeLocation.value = storedDestination;

    defaultText('#outStartLocation_package', 'Ange avreseort');
    defaultText('#homeStartLocation_package', 'Ange destination');

    
        defaultText('#childrenInfantsAges_1_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_2_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_3_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_4_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_5_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_6_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_7_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_8_airHotel', '(ex 0,3)');
    
}

/*--------------------------*/


function initCustomizePackageSearchForm() {
    var form = document.customizePackageForm;
    numberOfRoomsChanged(form.numberOfRooms, '_airHotel');
    var rooms = $j(form.numberOfRooms).val();
    for (var i=1; i<=rooms; i++) {
        numberOfChildrenChanged($j('#searchFormRoomChildrensSelect_' + i + '_airHotel'), i, '_airHotel');
    }

    
        defaultText('#childrenInfantsAges_1_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_2_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_3_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_4_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_5_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_6_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_7_airHotel', '(ex 0,3)');
    
        defaultText('#childrenInfantsAges_8_airHotel', '(ex 0,3)');
    
}

function customizeSelectedPackage() {
    var form = document.customizePackageForm;

    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_1_airHotel'), $j('#childrenInfantsAges_1_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_2_airHotel'), $j('#childrenInfantsAges_2_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_3_airHotel'), $j('#childrenInfantsAges_3_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_4_airHotel'), $j('#childrenInfantsAges_4_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_5_airHotel'), $j('#childrenInfantsAges_5_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_6_airHotel'), $j('#childrenInfantsAges_6_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_7_airHotel'), $j('#childrenInfantsAges_7_airHotel')))
            return false;
    
        if (!validateHotelChildrenAndInfants(form, infantMaxAge, childMaxAge, $j('#searchFormRoomChildrensSelect_8_airHotel'), $j('#childrenInfantsAges_8_airHotel')))
            return false;
    

    if (!validateMaxTravellers(form))
        return false;

    if (!validateRoomCount(form))
        return false;

    if (!validateRoomsFilled(form))
        return false;

    form.submit();
    showWaitSearch({text:'Söker ny paketresa utifrån dina önskemål.'});
    return false;
}

function packageRoomsChanged(select) {
    var rooms = $j(select).val();
    if (rooms < 2) {
        $j('#searchFormPackageDefaultRoomHeader').show();
    } else {
        $j('#searchFormPackageDefaultRoomHeader').hide();
    }
}




