﻿Type.registerNamespace('ButtonOneClickBehavior');

ButtonOneClickBehavior.ButtonOneClick = function(element) {
    ButtonOneClickBehavior.ButtonOneClick.initializeBase(this, [element]);
    this._onclickHandler = null;
    this._onContinueHandler = false;
    this._CheckPageValidation = false;
    this._UpdPanelName = null;
}

ButtonOneClickBehavior.ButtonOneClick.prototype = {

    initialize: function() {
        ButtonOneClickBehavior.ButtonOneClick.callBaseMethod(this, 'initialize');
        this._onclickHandler = Function.createDelegate(this, this._onclick);
        var el = this.get_element();
        $addHandler(el, "click", this._onclickHandler);
        this._onContinueHandler = Function.createDelegate(this, this._onContinue);
    },

    dispose: function() {

        if (this._onclickHandler) {
            $removeHandler(this.get_element(), "click", this._onclickHandler);
        }

        ButtonOneClickBehavior.ButtonOneClick.callBaseMethod(this, 'dispose');
    },

    _onclick: function(event) {

        if (this._CheckPageValidation) {
            if (typeof (Page_ClientValidate) == 'function') {
                if (Page_ClientValidate() == false) { return false; }
            }
        }
        var el = this.get_element();
        el.disabled = true;
        var e = (window.event) ? (window.event) : event;
        if (e.cliked != true) {
            e.cliked = true;
        } else {
            if (window.event) e.returnValue = false; if (e.cancel != null) e.cancel = true;
        }

        if (this._UpdPanelName == null)
            __doPostBack(el.name, '');
        else {
            // При удачном обновлении данных мы обновляем панели
            // Но может быть мы и не найдем нужную панель
            var bFinded = UpdPanelPostTrigger(this._UpdPanelName);
            if (!bFinded) {
                __doPostBack(el.name, '');
            }
            window.setTimeout(this._onContinueHandler, 1000);
        }

        if (e.preventDefault && e.stopPropagation) // FF
        {
            e.preventDefault();
            e.stopPropagation();
        }

        return false;

    },

    _onContinue: function() {
        var el = this.get_element();
        el.disabled = false;
    },

    get_UpdPanelName: function() {
        return this._UpdPanelName;
    },

    set_UpdPanelName: function(value) {
        if (this._UpdPanelName !== value) {
            this._UpdPanelName = value;
            this.raisePropertyChanged('UpdPanelName'); // Временно не работаем с панель выяснения всех обстоятельств
        }
    },

    get_CheckPageValidation: function() {
        return this._CheckPageValidation;
    },

    set_CheckPageValidation: function(value) {
        if (this._CheckPageValidation !== value) {
            this._CheckPageValidation = value;
            this.raisePropertyChanged('CheckPageValidation');
        }
    }

}

// Optional descriptor for JSON serialization.
ButtonOneClickBehavior.ButtonOneClick.descriptor = {
properties: [
        { name: 'UpdPanelName', type: String },
        { name: 'CheckPageValidation', type: Boolean }
    ]
}

ButtonOneClickBehavior.ButtonOneClick.registerClass('ButtonOneClickBehavior.ButtonOneClick', Sys.UI.Control);

