﻿var NetRDatePicker = function() {
    // Prepare to show a date picker linked to three select controls
    function readFromLinked() {
        var month = $('#frommonth').val();
        var day = $('#fromday').val();

        if (String(month).length < 2) {
            month = "0" + month;
        }
        if (String(day).length < 2) {
            day = "0" + day;
        }

        $('#from-linked-dates').val($('#fromyear').val() + '-' + month + '-' + day);
        return {};
    }
    // Update three select controls to match a date picker selection 
    function updateFromLinked(date) {
        $('#fromyear').val(parseInt(date.substring(0, 4), 10));
        $('#frommonth').val(parseInt(date.substring(5, 7), 10));
        $('#fromday').val(parseInt(date.substring(8, 10), 10));
        var fromDate = new Date($('#fromyear').val(), $('#frommonth').val() - 1, $('#fromday').val());
        var toDate = new Date($('#to-linked-dates').val().substring(0, 4), $('#to-linked-dates').val().substring(5, 7) - 1, $('#to-linked-dates').val().substring(8, 10));
        if (fromDate > toDate) {
            var newDate = $('#from-linked-dates').val();
            $('#to-linked-dates').val(newDate);
            updateToLinked(newDate);
        }
    }
    // Prevent selection of invalid dates through the select controls 
    function checkFromLinkedDays() {
        var daysInMonth = 32 - new Date($('#fromyear').val(), $('#frommonth').val() - 1, 32).getDate();
        $('#fromday option').attr('disabled', '');
        $('#fromday option:gt(' + (daysInMonth - 1) + ')').attr('disabled', 'disabled');
        if ($('#fromday').val() > daysInMonth) {
            $('#fromday').val(daysInMonth);
        }
    }
    function readToLinked() {
        var month = $('#tomonth').val();
        var day = $('#today').val();

        if (String(month).length < 2) {
            month = "0" + month;
        }
        if (String(day).length < 2) {
            day = "0" + day;
        }
        $('#to-linked-dates').val($('#toyear').val() + '-' + month + '-' + day);
        return {};
    }
    // Update three select controls to match a date picker selection 
    function updateToLinked(date) {
        $('#toyear').val(parseInt(date.substring(0, 4), 10));
        $('#tomonth').val(parseInt(date.substring(5, 7), 10));
        $('#today').val(parseInt(date.substring(8, 10), 10));
        var toDate = new Date($('#toyear').val(), $('#tomonth').val() - 1, $('#today').val());
        var fromDate = new Date($('#from-linked-dates').val().substring(0, 4), $('#from-linked-dates').val().substring(5, 7) - 1, $('#from-linked-dates').val().substring(8, 10));
        if (toDate < fromDate) {
            var newDate = $('#to-linked-dates').val();
            $('#from-linked-dates').val(newDate);
            updateFromLinked(newDate);
        }
    }
    // Prevent selection of invalid dates through the select controls 
    function checkToLinkedDays() {
        var daysInMonth = 32 - new Date($('#toyear').val(), $('#tomonth').val() - 1, 32).getDate();
        $('#today option').attr('disabled', '');
        $('#today option:gt(' + (daysInMonth - 1) + ')').attr('disabled', 'disabled');
        if ($('#today').val() > daysInMonth) {
            $('#today').val(daysInMonth);
        }
    }
    return {
        readFromLinked: readFromLinked,
        updateFromLinked: updateFromLinked,
        checkFromLinkedDays: checkFromLinkedDays,
        readToLinked: readToLinked,
        updateToLinked: updateToLinked,
        checkToLinkedDays: checkToLinkedDays
    };
} ();

// Init on document ready
$(document).ready(function() {
    // Set up datepickers after checking that the necessary elements exist
    if (document.getElementById('from-linked-dates') && document.getElementById('fromyear') && document.getElementById('frommonth') && document.getElementById('fromday') && document.getElementById('toyear') && document.getElementById('tomonth') && document.getElementById('today') && document.getElementById('to-linked-dates')) {
        $("#from-linked-dates").datepicker($.extend({}, $.datepicker.regional["sv"], {
            minDate: '-3y',
            maxDate: '+3y',
            beforeShow: NetRDatePicker.readFromLinked,
            onSelect: NetRDatePicker.updateFromLinked,
            showOn: "both",
            buttonText: "Välj från almanacka",
            buttonImage: "/i/calendar.gif",
            buttonImageOnly: true
        }));
        $("#from-linked-dates").val($("#fromyear").val() + "-" + $("#frommonth").val() + "-" + $("#fromday").val());
        $("#frommonth, #fromyear, #fromday").change(function() {
            NetRDatePicker.checkFromLinkedDays();
            NetRDatePicker.readFromLinked();
            NetRDatePicker.updateFromLinked($("#from-linked-dates").val());
        });
        $("#to-linked-dates").datepicker($.extend({}, $.datepicker.regional["sv"], {
            minDate: '-3y',
            maxDate: '+3y',
            beforeShow: NetRDatePicker.readToLinked,
            onSelect: NetRDatePicker.updateToLinked,
            showOn: "both",
            buttonText: "Välj från almanacka",
            buttonImage: "/i/calendar.gif",
            buttonImageOnly: true
        }));
        $("#to-linked-dates").val($("#toyear").val() + "-" + $("#tomonth").val() + "-" + $("#today").val());
        $("#tomonth, #toyear, #today").change(function() {
            NetRDatePicker.checkToLinkedDays();
            NetRDatePicker.readToLinked();
            NetRDatePicker.updateToLinked($("#to-linked-dates").val());
        });
    }
});
