


















var dateFormat = 'yy-mm-dd';

function initializeDatepickerDefaults() {
    var dayNames = 'sö,må,ti,on,to,fr,lö'.split(',');
    var monthDays = 'jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec'.split(',');
    var firstDay = 1;

    var minDate = new Date();
    if ($j('#datepicker3').length > 0 && $j('#datepicker4').length > 0) {
        minDate.setDate(minDate.getDate() + 7); //Groupbooking
    } else {
        minDate.setDate(minDate.getDate() + 3);
    }

    $j.datepicker.setDefaults(
            $j.extend({showMonthAfterYear: false},
                    $j.datepicker.regional['sv']));

    $j.datepicker.setDefaults({
        changeMonth: true,
        changeYear: true,
        minDate: minDate,
        showButtonPanel: false,
        duration: 0,
        dayNamesMin: dayNames,
        monthNamesShort: monthDays,
        dateFormat: dateFormat,
        firstDay: firstDay
    });
}

function initializeDatepickers() {
    //Set the datepicker default values
    initializeDatepickerDefaults();

    //Set datepickers to be dependent on each other
    createDatepicker('#airDatepicker1', '#airDatepicker2', externalMinDate_FLIGHT);
    createDatepicker('#hotelDatepicker1', '#hotelDatepicker2', externalMinDate_HOTEL);
    createDatepicker('#airHotelDatepicker1', '#airHotelDatepicker2', externalMinDate_FLIGHT_HOTEL);
    createDatepicker('#carDatepicker1', '#carDatepicker2', externalMinDate_CAR);
    createDatepicker('#packageDatepicker1', '#packageDatepicker2', externalMinDate_PACKAGE);

    //Group booking
    if ($j('#datepicker3').length) {
        $j('#datepicker3').datepicker();
        $j('#datepicker3').datepicker('option', 'minDate', new Date());
    }
    if ($j('#datepicker4').length) {
        $j('#datepicker4').datepicker();
        $j('#datepicker4').datepicker('option', 'minDate', new Date());
    }

    //Initialize fields with correct date formats and default values
    initDatepicker('#airDatepicker1');
    initDatepicker('#airDatepicker2');
    initDatepicker('#hotelDatepicker1');
    initDatepicker('#hotelDatepicker2');
    initDatepicker('#airHotelDatepicker1');
    initDatepicker('#airHotelDatepicker2');
    initDatepicker('#carDatepicker1');
    initDatepicker('#carDatepicker2');
    initDatepicker('#packageDatepicker1');
    initDatepicker('#packageDatepicker2');
}

function createDatepicker(datepicker1, datepicker2, minDate) {
    var primaryDatepicker = $j(datepicker1);
    var secondaryDatepicker = $j(datepicker2);
    if (primaryDatepicker.length) {
        var datePickerMinDate = new Date();
        datePickerMinDate.setDate(minDate);

        primaryDatepicker.datepicker({
            onSelect: function(dateText, inst) {
                if (secondaryDatepicker.length) {
                    setDependentDates(dateText, primaryDatepicker, secondaryDatepicker);
                }
            },
            minDate: datePickerMinDate,
            beforeShow: function(picker, inst) {
                setTimeout(
                        function() {
                            $j('.ui-datepicker').css('z-index', 100);
                        }, 400
                )
            }
        });
    }
    if (secondaryDatepicker.length) {
        $j(secondaryDatepicker).datepicker({
            beforeShow: function(picker, inst) {
                setTimeout(
                        function() {
                            $j('.ui-datepicker').css('z-index', 100);
                        }, 400
                )
            }
        });
    }
}

function isDateSet(input) {
    try {
        $j.datepicker.parseDate(dateFormat, input.val());
        return true;
    } catch (ex) {
        return false;
    }
}

function setDependentDates(dateText, primaryDatepicker, secondaryDatepicker) {
    var oldDateString = secondaryDatepicker.val();
    secondaryDatepicker.datepicker("option", "defaultDate", dateText);
    if (oldDateString == 'åååå-mm-dd') {
        secondaryDatepicker.val('åååå-mm-dd');
    }
    var sDate = primaryDatepicker.datepicker('getDate');
    var isEndDateSet = isDateSet(secondaryDatepicker);
    if (sDate != null && isEndDateSet) {
        secondaryDatepicker.datepicker('option', 'minDate', sDate);
    } else if (sDate != null && !isEndDateSet) {
        var beforeDateString = secondaryDatepicker.val();
        secondaryDatepicker.datepicker('option', 'minDate', sDate);
        secondaryDatepicker.val(beforeDateString);
    }
}

function initDatepicker(dateInputId) {
    var datepicker = $j(dateInputId);
    if (datepicker.length) {
        var dateValue = datepicker.val();
        if (dateValue == '') {
            datepicker.val('åååå-mm-dd');
        } else if (dateValue == 'åååå-mm-dd') {
            //Do nothing
        } else {
            //I think this is a saftey procedure to always have the date in correct language format
            try {
                var dateToShow = null;
                if (isNorwegianFormat(dateValue)) {
                    dateToShow = $j.datepicker.parseDate('dd-mm-yy', dateValue); //Parse with Norwegian format
                } else {
                    dateToShow = $j.datepicker.parseDate('yy-mm-dd', dateValue); //Parse with Swedish format
                }
                if (dateToShow != null)
                    datepicker.val($j.datepicker.formatDate(dateFormat, dateToShow));
            } catch (ex) {
                //Swedish or Norwegian didn't work so it must be Danish. Then do nothing here; it is already correct.
            }
        }
    }
}

function changeDepartureDate(input) {
    //Do nothing right now
}

function changeArrivalDate(input) {
    //Do nothing right now
}

function isNorwegianFormat(text) {
    var array = text.split('-');
    return array[0].length == 2;
}

function validateCalendarDates(frm, minDateDeparture) {
    var teValidation = validate(frm, minDateDeparture);
    if (teValidation == 'ok')
        return true;

    var errorMessage = '';
    switch (teValidation) {
        case 'alertInvalidOutDate':
            errorMessage = 'Felaktigt avresedatum';
            break;
        case 'alertInvalidHomeDate':
            errorMessage = 'Felaktigt hemresedatum';
            break;
        case 'alertToErlyOutDate':
            errorMessage = 'För tidigt avresedatum';
            break;
        case 'alertToErlyHomeDate':
            errorMessage = 'Kontrollera datumen, hemresa kan ej väljas tidigare än utresa.';
            break;
        case 'alertSameDayDate':
            errorMessage = 'Avresedatum och hemresedatum är lika';
            break;
    }
    alert(errorMessage);
    return false;
}

function validate(frm, minDateDeparture) {
    var startDate = frm.startDate.value;
    var endDate = frm.endDate.value;

    var startDateTime;
    var endDateTime;

    var returnTrip;
    var returnTripInput = frm.returnTrip;
    if (returnTripInput != undefined) {
        if (returnTripInput.type == 'hidden') {
            returnTrip = returnTripInput.value;
        } else {
            $j(returnTripInput).each(function() {
                if (this.checked) {
                    returnTrip = this.value;
                }
            });
        }
    }

    try {
        startDateTime = $j.datepicker.parseDate(dateFormat, startDate).getTime();
    } catch (ex) {
        return 'alertInvalidOutDate';
    }

    if (returnTrip != 'false') {
        try {
            endDateTime = $j.datepicker.parseDate(dateFormat, endDate).getTime();
        } catch (ex) {
            return 'alertInvalidHomeDate';
        }
    }
    var minDepDate = new Date();

    minDepDate.setDate(minDateDeparture);

    minDepDate.setHours(0);
    minDepDate.setMinutes(0);
    minDepDate.setSeconds(0);
    minDepDate.setMilliseconds(0);

    if (startDateTime < minDepDate) {
        return 'alertToErlyOutDate';
    }

    if (returnTrip != 'false') {
        if (startDateTime > endDateTime) {
            return 'alertToErlyHomeDate';
        }
    }

    return 'ok';
}

$j(function() {
    // This must be loaded after the dom has been loaded to ensure IE dosen't get 'operation aborted' error.
    initializeDatepickers();
});





