﻿//
//Provides encapsulated communication between date picker components.
//
//  preconditions:
//  particular date picker is located on web site and named with number - which specifies his rerefences to other date pickers
//  It's mean that ucDatePicker3 should always has later date than others, ucDatePicker2 should has later date than ucDatePicker1 but ealier than ucDatePicker3
//     



//
//  DatePicker object
//
DatePickersMediator = function() {
  
    this.registerComponents();   
    this.registerHandlers();
}

DatePickersMediator.prototype =
{
    components: new Array(),

    registerComponents: function() {
        DatePickersMediator.prototype.components = $('input[id *= ucDatePicker]');

        if (this.components.length == 0) {
            throw new Error.argument("Date pickers Mediator", "No date picker can be found. Check document structure.");
        }
    },

    //
    //  Bind mediator as onSelect and onChange events handlers for each component.
    //
    registerHandlers: function() {
        $.each(DatePickersMediator.prototype.components, function(i, component) {

            var compareDates = function() { DatePickersMediator.prototype.compareDates(component); };

            $(component).siriusdatepicker.prototype.onSelect(component, compareDates);
            $(component).change(compareDates);
        });
    },
    //
    //  Compare dates with other components.
    //  Determine if decrease or increase related dates.
    //
    compareDates: function(component) {

        if (!DatePickersMediator.prototype.validateDateInput($(component)[0].value)) return;

        var pickerDate = $(component).siriusdatepicker.prototype.getDate(component);
        var pickerNr = DatePickersMediator.prototype.parseDatePickerNumber(component);

        $.each(DatePickersMediator.prototype.components, function(i, colleague) {
            var collegueDate = $(component).siriusdatepicker.prototype.getDate(colleague);
            var colleguePickerNr = DatePickersMediator.prototype.parseDatePickerNumber(colleague);

            var ealierPicker = colleguePickerNr < pickerNr;
            var laterPicker = colleguePickerNr > pickerNr;

            if ((ealierPicker && collegueDate > pickerDate) ||
                (laterPicker && collegueDate < pickerDate)) {

                $(component).siriusdatepicker.prototype.setDate(colleague, pickerDate);
            }
        });
    },
    //
    //  Parse for date picker number.
    //
    parseDatePickerNumber: function(datePickerId) {
        return $(datePickerId).attr("id").replace(/\D/g, '');
    },

    validateDateInput: function(value) {
        return value.length == 10;
    }
}


$(document).ready(function() {
    new DatePickersMediator();
});
