﻿/// <reference name="MicrosoftAjax.js"/>
/// <reference path="~/Frameworks/Common/Scripts/jquery.js" />
// Requires jquery,jquery.ui.datepicker and date.js plugin

Type.registerNamespace("PEAB.Base");

PEAB.Base.jQueryDatePickerExtender = function(element) {
    this.keyup$delegate = Function.createDelegate(this, this.validateDate);
    this.blur$delegate = Function.createDelegate(this, this.hideErrorLabel);

    PEAB.Base.jQueryDatePickerExtender.initializeBase(this, [element]);
    this._DateFormat = null;
    this._ButtonImage = null;
    this._ErrorLabelElement = null;
    this._MonthNames = null;
    this._DayNames = null;
    this._DayOffset = 0;

};

PEAB.Base.jQueryDatePickerExtender.prototype = {
    initialize: function() {
        PEAB.Base.jQueryDatePickerExtender.callBaseMethod(this, "initialize");
        $addHandler(this.get_element(), 'keyup', this.keyup$delegate);
        $addHandler(this.get_element(), 'blur', this.blur$delegate);

        this.attachDatePicker();
    },
    dispose: function() {
        $removeHandler(this.get_element(), 'keyup', this.keyup$delegate);
        $removeHandler(this.get_element(), 'blur', this.blur$delegate);
        PEAB.Base.jQueryDatePickerExtender.callBaseMethod(this, "dispose");
    },
    attachDatePicker: function() {
        
        //set default daynames
        var dayNames = "Su,Mo,Tu,We,Th,Fr,Sa";
        if (this.get_DayNames())
            dayNames = this.get_DayNames();
        dayNames = dayNames.split(",");
        
        //set default monthnames
        var monthNames = "January,February,March,April,May,June,July,August,September,October,November,December";
        if (this.get_MonthNames())
            monthNames = this.get_MonthNames();
        monthNames = monthNames.split(",");
                
        var dayOffset = this.get_DayOffset();

        jQuery(this.get_element()).datepicker({
            dateFormat: this.get_DateFormat(),
            showOn: 'button',
            buttonImage: this.get_ButtonImage(),
            buttonImageOnly: true,
            dayNamesMin: dayNames,
            monthNames: monthNames,
            firstDay: dayOffset
        });
    },

    validateDate: function() {
    var fullDateArray = jQuery(this.get_element()).val().split("-");
        if ((fullDateArray.length > 1) && (this.tryParseInt(fullDateArray[2], 0) != 0) && this.get_ErrorLabelElement()) {
            try {

                if (this.get_DateFormat() == "mm-dd-yy") {
                    //Validates year, month and day                 
                    Date.validateYear(parseInt(fullDateArray[2]));
                    Date.validateMonth(parseInt(fullDateArray[0]));
                    Date.validateDay(parseInt(fullDateArray[1]), parseInt(fullDateArray[2]), parseInt(fullDateArray[0]));
                }
                else if (this.get_DateFormat() == "yy-mm-dd") {
                    //Validates year, month and day                 
                    Date.validateYear(parseInt(fullDateArray[0]));
                    Date.validateMonth(parseInt(fullDateArray[1]));
                    Date.validateDay(parseInt(fullDateArray[2]), parseInt(fullDateArray[0]), parseInt(fullDateArray[1]));
                }

                jQuery('#' + this.get_ErrorLabelElement()).fadeOut();
            }
            catch (e) {
                jQuery('#' + this.get_ErrorLabelElement()).fadeIn();
            }
        }
    },

    hideErrorLabel: function() {
        jQuery('#' + this.get_ErrorLabelElement()).fadeOut();
    },

    tryParseInt: function(str, defaultValue) {
        var retValue = defaultValue;
        if (str != null) {
            if (str.length > 0) {
                if (!isNaN(str)) {
                    retValue = parseInt(str);
                }
            }
        }
        return retValue;
    },

    //Getters and setters
    get_DateFormat: function() {
        return this._DateFormat;
    },
    set_DateFormat: function(v) {
        this._DateFormat = v;
    },
    get_ButtonImage: function() {
        return this._ButtonImage;
    },
    set_ButtonImage: function(v) {
        this._ButtonImage = v;
    },
    get_ErrorLabelElement: function() {
        return this._ErrorLabelElement;
    },
    set_ErrorLabelElement: function(v) {
        this._ErrorLabelElement = v;
    },
    get_MonthNames: function() {
        return this._MonthNames;
    },
    set_MonthNames: function(v) {
        this._MonthNames = v;
    },
    get_DayNames: function() {
        return this._DayNames;
    },
    set_DayNames: function(v) {
        this._DayNames = v;
    },
    get_DayOffset: function() {
        return this._DayOffset;
    },
    set_DayOffset: function(v) {
        this._DayOffset = v;
    }
};

PEAB.Base.jQueryDatePickerExtender.registerClass("PEAB.Base.jQueryDatePickerExtender", Sys.UI.Behavior);

Sys.Application.notifyScriptLoaded(); 
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();