$(document).ready(function() {


    var start = $("#datepicker_start");
    var end = $("#datepicker_stop");
    
    // initialize the datepicker
    $(function() {
        var day = new Date();
        $.datepicker.regional['de'];
        start.datepicker({
            numberOfMonths: 2,
            showButtonPanel: true,
            minDate: '1', 
            dateFormat: 'dd.mm.yy'
        });
        end.datepicker({
            numberOfMonths: 2,
            showButtonPanel: true,
            minDate: '2',
            dateFormat: 'dd.mm.yy'
        });
    });

    var spinner_big = $("#loadingDiv");
	var spinner_small = $("#loadingCity");
    var bookingform = $("#booking_section");
    var submit = $("#submit");
    var flash = $('#flashMessage');
    var locations = $("#locationSelect");
    var shops = $("#shopSelect");
    var pickup = $("#pickup");
    
    // remove disabled attribute after DocumentReady to prevent messing up the shop-select
    locations.removeAttr("disabled");
    
    start.attr("disabled", true);
    shops.attr("disabled", true);
    start.attr("disabled", true);
    end.attr("disabled", true);
    pickup.attr("disabled", true);
    
    // when a pickup time has already been set (after missing choice in module)
    if(pickup.val() != '') {
        $("#dropoff-time").html('<strong>@ '+pickup.val()+'h</strong>');
    }
    // remove disabled attribute when dependent fields are already selected
    if((shops.val() != '') && (locations.val() != '') && (start.val() != '') && (pickup.not(':empty'))) {
        pickup.attr("disabled", false);
    }
    // when a location is selected, remove disabled attribute from field shops
    if (locations.val() != '') {
        shops.removeAttr("disabled");
    }
    // when a start date has already been set, update the minDate fro datepicker when coming back with error
    if (start.val() != '') {
        end.removeAttr("disabled");
        temp_date = start.val();
        var enddate_array = temp_date.split('.')
        correct_date = new Date(enddate_array[2], enddate_array[1]-1, enddate_array[0]);
        correct_date.setDate(correct_date.getDate()+1);
        //var enddate_array = correct_date.split('.')
        end.datepicker( "option", "minDate", correct_date);
    }
    
    $("span.show-tooltip").click(function () {
        $("div.show-tooltip-content").toggle("fast");
    });
    
    locations.change(function() {
        spinner_small.show('fast');
        locations.attr("disabled", true);
        flash.remove();
        shops.find("option").remove();
        pickup.find("option").remove();
        start.attr('value', '');
        start.attr("disabled", true);
        end.attr('value', '');
        end.attr("disabled", true);
        pickup.find("option").remove();
        pickup.attr("disabled", true);
        locations.delay(1000, function() {
            $.ajax({
                url: '/rentals/getActiveShops',
                data: "ajax=true&id="+locations.val(),
                dataType: 'json',
                complete: function(){
                    spinner_small.hide("fast");
                    locations.removeAttr("disabled");
                    shops.removeAttr("disabled");
                },
                success: function(data){
                    shops.append('<option value="">Choose shop</option>');
                    pickup.append('<option value="">Pickup Time</option>');
                    $.each(data, function(key, value) {
                        shops.append('<option value="'+key+'">'+value+'</option>');
                    });
                }
            })
        });
        
    });
    
    if (shops.val() != '') {
        start.removeAttr("disabled");
    }
    var preroll = '1';
    shops.change(function() {
        spinner_small.show('fast');
        start.attr("disabled", true);
        end.attr("disabled", true);
        pickup.attr("disabled", true);
        flash.remove();
        start.attr('value', '');
        end.attr('value', '');
        pickup.find("option").remove();
        pickup.append('<option value="">Pickup Time</option>');
        var tomorrow = new Date();
        tomorrow.setDate(tomorrow.getDate()+1);
        if(shops.val() != 0) {
            $.ajax({
                url: '/rentals/checkPreroll',
                data: "ajax=true&shopid="+shops.val()+"&date_start="+tomorrow,
                dataType: 'json',
                success: function(data){
                    if(data == 1) {
                        preroll = '2';
                        start.datepicker( "option" , "minDate" , preroll );
                        preroll++;
                        end.datepicker( "option" , "minDate" , preroll );
                    }
                    start.removeAttr("disabled");
                    spinner_small.hide('fast');
                }
            })
        }
        spinner_small.hide('fast');
        
    });
    
    if (start.val() != '') {
        start.removeAttr("disabled");
    }
    start.change(function() {
        spinner_small.show('fast');
        flash.remove();
        pickup.find("option").remove();
        pickup.append('<option value="">Pickup Time</option>');
        $.ajax({
            url: '/rentals/getPickupTime',
            data: "ajax=true&shopid="+shops.val()+"&date_start="+start.val()+"&preroll="+preroll,
            dataType: 'json',
            success: function(data){
                $.each(data, function(key, value) {
                    pickup.append('<option value="'+value+'">'+value+'</option>');
                });
                // set the minDate of the end-date selection to 1 day after the selected start date
            }
        });
        temp_date = start.datepicker( "getDate");
        day = new Date(temp_date);
        day.setDate(day.getDate()+1);
        end.datepicker( "option" , "minDate" , day );
        end.removeAttr("disabled");
        pickup.removeAttr("disabled");
        //$("#dropoff-time").html('<strong>@ '+pickup.val()+'h</strong>');
        spinner_small.hide('fast');
    });
    
    if (pickup.val() != '') {
        pickup.removeAttr("disabled");
    }
    pickup.change(function(){
        $("#dropoff-time").html('<strong>@ '+pickup.val()+'h</strong>');
    });
    
    if (end.val() != '') {
        end.removeAttr("disabled");
    }
    end.change(function(){
        spinner_small.show('fast');
        flash.remove();
        pickup.removeAttr("disabled");
        spinner_small.hide('fast');
    });
    
    $("#submit").click(function() {
        spinner_big.show();
        bookingform.hide();
        submit.hide();
        
        // validation of data will be in controller!
        /*
        if (locations.val() == '') {
            var message = "please choose a location";
            OnError(message);
            spinner_big.hide();
            bookingform.show();
            submit.show();
            return false;
        }
        
        if (shops.val() == '') {
            var message = "please choose a shop";
            OnError(message);
            spinner_big.hide();
            bookingform.show();
            submit.show();
            return false;
        }
        
        if(!start.val()) {
            var message = "please choose a start date";
            OnError(message);
            spinner_big.hide();
            bookingform.show();
            submit.show();
            return false;
        }
        
        if(!end.val()) {
            var message = "please choose a end date";
            OnError(message);
            spinner_big.hide();
            bookingform.show();
            submit.show();
            return false;
        }
        
        if(mydiff(start.val(), end.val(), "days") < 1) {
            var message = "you have to rent a scooter for 24 hrs at least!";
            OnError(message);
            spinner_big.hide();
            bookingform.show();
            submit.show();
            return false;
        }
        
        if(pickup.val() == '') {
            var message = "Please select a pickup time";
            OnError(message);
            spinner_big.hide();
            bookingform.show();
            submit.show();
            error = 1;
            return false;
        }
        */
    });
});

function mydiff(date1,date2,interval) {
    var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
    var mdy_start = date1.split('-')
    date1 = new Date(mdy_start[0], mdy_start[1], mdy_start[2]);
    var mdy_stop = date2.split('-')
    date2 = new Date(mdy_stop[0], mdy_stop[1], mdy_stop[2]);
    
    var timediff = date2 - date1;
    if (isNaN(timediff)) return NaN;
    switch (interval) {
        case "years": return date2.getFullYear() - date1.getFullYear();
        case "months": return (
            ( date2.getFullYear() * 12 + date2.getMonth() )
            -
            ( date1.getFullYear() * 12 + date1.getMonth() )
        );
        case "weeks"  : return Math.floor(timediff / week);
        case "days"   : return Math.floor(timediff / day); 
        case "hours"  : return Math.floor(timediff / hour); 
        case "minutes": return Math.floor(timediff / minute);
        case "seconds": return Math.floor(timediff / second);
        default: return undefined;
    }
}

function OnError(message) {
    var div = $(document.createElement("div")).addClass('message');
    div.attr('id', "flashMessage");
    div.html("p").text(message).insertBefore('.bookings form').slideDown("slow");
}

