var chargeDayHours = 0;
var minimumDays = 1;
var duration = 0;

$.blockUI.defaults.message = '<img src="/img/loading2.gif" />';
$.blockUI.defaults.showOverlay = true;
$.blockUI.defaults.applyPlatformOpacityRules = false;
$.blockUI.defaults.css.border = '0 none';
$.blockUI.defaults.css.background = 'transparent';
$.blockUI.defaults.overlayCSS.backgroundColor = '#888';
$.blockUI.defaults.overlayCSS.opacity = 0.3;

$(document)
    .ajaxStart($.blockUI)
    .ajaxStop($.unblockUI);
    
$(document).ready(function(){

    $('#ProxyPayForm, #BankPayForm').preventDoubleSubmit();

    $('.booking-navigate').live('click', function(){
        goToStep($(this).data('step'));
        return false;
    });

    $('.booking-select-car').live('click', function(){
        $('#BookingCarId').val( $(this).val() );
        goToStep(3);
        return false;
    });

    $('.booking-extras').live('change', function(){
        goToStep(3);
        return false;
    });

    updateDatePickers();
    
    $('#BookingLocationStopIsStart').live('change', function(){
        if (this.checked) {
        //if ($(this).attr('checked')) {
            $('#BookingLocationStop').val( $('#BookingLocationStart').val() ).parent('div').hide();
        } else {
            $('#BookingLocationStop').parent('div').show();
        }
    });

    $('#BookingLocationStart, #BookingLocationStop').live('change', function(){
        var checkbox = $('#BookingLocationStopIsStart');
        if ($('#BookingLocationStart').val() == $('#BookingLocationStop').val()) {
            checkbox.attr('checked', true);
            $('#BookingLocationStop').parent('div').hide();
        } else {
            checkbox.removeAttr('checked');
            $('#BookingLocationStop').parent('div').show();
        }
    }).change();

    $('.toggle-next').live('click', function() {
        $next = $(this).next('.toggleable');
        $flag = $('span:first', this);
        if ($next.is(':visible')) {
            $next.hide();
            $flag.text('\u25BA');
        } else {
            $next.show();
            $flag.text('\u25BC');
        }
        return false;
    });

    //$('.triggerDialogAction').dialogAction();
    $('.triggerAjaxAction').ajaxAction();
    $('.popupwindow').initPopupwindow();
});

function goToStep(step) {
    var $form0   = $('#BookSearch');
    var $form1   = $('#BookIndex');
    var $Content = $("#Content");
    var data = $.merge($form0.serializeArray(), $form1.serializeArray());

    if (typeof step != 'undefined') {
        data.push({name:'step', value:step});
    }
    //console.log($form1.serializeArray());
    //console.log(data);
    $.ajax({
        url:        $form1.attr('action'),
        type:       'post',
        data:       data,
        dataType:   'html',
        cache:      false,
        success: function(data){
            $Content.html(data);
            updateDatePickers();
            $('.datepicker').initDatepicker();
            $('.popupwindow').initPopupwindow();
        },
        error: function(){
        }
    });
}

function updateDatePickers() {
    dateFields = $("#BookingDateStartDate, #BookingDateStopDate");
    if (dateFields.length) {
        var data_charge_day_hours = $('#BookingDateStopDate').data('charge_day_hours');
        var data_minimum_days = $('#BookingDateStopDate').data('minimum_days');

        if (data_charge_day_hours) {
            chargeDayHours = data_charge_day_hours;
        }
        if (data_minimum_days) {
            minimumDays = data_minimum_days;
        }
        dateFields.initDatepicker();
        updateStopDate();
    }
}

function updateStopDate() {
    var startDate = $('#BookingDateStartDatePicker').datepicker('getDate');
    var stopDate = $('#BookingDateStopDatePicker').datepicker('getDate');

    if (startDate) {
        updateDuration();
        startDate.setDate(startDate.getDate() + minimumDays);
        $("#BookingDateStopDatePicker").datepicker("option", "minDate", startDate);

        if (startDate > stopDate) {
            $("#BookingDateStopDatePicker").datepicker('setDate', startDate);
            updateDuration();
        }
    }
}

function updateDuration() {
    var r = resolveDateString($('#BookingDateStartDate').val() + 'T' + $('#BookingDateStartTime').val());
    var dtStart = new Date(r.y, r.m, r.d, r.h, r.n);
    //console.log( dtStart.toLocaleString() );

    r = resolveDateString($('#BookingDateStopDate').val() + 'T' + $('#BookingDateStopTime').val());
    var dtStop = new Date(r.y, r.m, r.d, r.h, r.n);
    //console.log( dtStop.toLocaleString() );

    var diff = Date.parse(dtStop) - Date.parse(dtStart);
    var days = Math.floor(diff / 86400000);
    var hours = Math.floor((diff - days * 86400000) / 3600000);

    if (chargeDayHours && hours >= chargeDayHours) {
        days++;
    }

    if (days) {
        duration = days;
        $('#BookingDateStopDate').prev('label').attr('title', days + ' days rental duration');
    }
}

function resolveDateString(s) {
    return {
        y: s.substr(0,4),
        m: s.substr(5,2) - 1,
        d: s.substr(8,2),
        h: s.substr(11,2),
        n: s.substr(14,2)
    };
}

(function($){
    $.fn.initDatepicker = function(){
        this.each(function(){
            if (!$(this).is(':visible')) {
                return;
            }

            var self = $(this).hide();

            var dpField = $('<input type="text" />')
                .attr({id: this.id + 'Picker', title: self.attr('title')})
                .insertAfter(self);

            dpField.datepicker({
                altField: self,
                altFormat: 'yy-mm-dd',
                changeMonth: true,
                changeYear: true,
                showOn: 'both',
                buttonImage: '/img/calendar.png',
                buttonImageOnly: true,
                numberOfMonths: 2,
                minDate: '+0',
                maxDate: '+2y',
                onSelect: function() {
                    updateStopDate();
                }
            }).datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', self.val()));
        });
    }
    $.fn.initPopupwindow = function(){
        var target = this;
        if (target.length) {
            $.getScript('/cms/js/jquery.popupwindow.js', function(){
                target.popupwindow({
                    width:800,
                    height:500,
                    scrollbars:1,
                    centerScreen:1
                });
            });
        }
    }
    $.fn.preventDoubleSubmit = function() {
        jQuery(this).submit(function() {
            if (this.beenSubmitted) {
                //alert('Transaction already sent');
                return false;
            } else {
                this.beenSubmitted = true;
                $.blockUI({timeout:1000});
            }
        });
    }
    $.fn.ajaxAction = function(){
        $(this).bind('click', function(){
            var element = this;
            var f = $(this).closest('form');
            var target = $(this).data('target');
            var datatype = $(this).data('datatype');
            $.ajax({
                url: element.href,
                type: f.length ? 'post' : 'get',
                data: f.length ? f.serialize() : null,
                dataType: datatype ? datatype : null,
                success: function(response) {
                    if (typeof(response) == 'object') {
                        alert(response.message);
                    } else {
                        if (target) {
                            $(target).html(response);
                        } else {
                            $('<div></div>')
                            .text(response)
                            .dialog({
                                width: 300,
                                height: 'auto',
                                modal: true,
                                resizable: false,
                                title: element.title ? element.title : 'Info',
                                buttons: {'Ok': function() {$(this).dialog('close')}},
                                close: function() {$(this).dialog('destroy').remove()}
                            });
                        }
                    }
                }
            });
            return false;
        });
    }
    $.fn.dialogAction = function(){
        var updateDialog = function(dlg, element) {
            var f = $('form', dlg);
            $.ajax({
                url: element.href,
                type: f.length ? 'post' : 'get',
                data: f.length ? f.serialize() : null,
                success: function(response) {
                    $(dlg).html(response);
                    var result = $("input[name='result']", $(dlg)).val();
                    var result_message = $("input[name='result_message']", $(dlg)).val();
                    switch ( result ) {
                        case 'input':
                            $(dlg).dialog('option', 'buttons', {
                                'Ok': function() {updateDialog(this);},
                                'Άκυρο': function() {$(this).dialog('close');}
                            });
                            break;
                        default:
                            $(dlg).text(result_message);
                            $(dlg).dialog('option', 'buttons', {'Ok': function() {$(dlg).dialog('close')}});
                    }
                }
            });
        }
        $(this).bind('click', function(){
            var element = this;
            $('<div></div>').dialog({
                width: 560,
                height: 'auto',
                modal: true,
                title: this.title ? this.title : $(this).text(),
                open: function() {updateDialog(this, element)},
                close: function() {$(this).dialog('destroy').remove()}
            });
            return false;
        });
    }
})(jQuery);



