﻿/// <reference name="MicrosoftAjax.js" />

Type.registerNamespace('MyExtenders');

MyExtenders.DisableSubmitBehaviour = function(element) {

    MyExtenders.DisableSubmitBehaviour.initializeBase(this, [element]);

    this._onsubmit$delegate = Function.createDelegate(this, this._submit);
    this._onclick$delegate = Function.createDelegate(this, this._click);
    this._onload$delegate = Function.createDelegate(this, this._page_updated);
    this._text = null;
    this._clicked = false;
    this._oldText = null;
}

MyExtenders.DisableSubmitBehaviour.prototype = {

    initialize: function() {
        MyExtenders.DisableSubmitBehaviour.callBaseMethod(this, 'initialize');

        if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
            Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);
        } else {
            $addHandler(document.forms[0], "submit", this._onsubmit$delegate);
        }

        $addHandler(this.get_element(), 'click', this._onclick$delegate);

        Sys.Application.add_load(this._onload$delegate);
    },

    _page_updated: function() {
        if (this._oldText != null) {
            var e = this.get_element();
            if (e) {
                e.value = this._oldText;
                e.disabled = false;
            }
        }
    },

    dispose: function() {
        if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
            Array.remove(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);
        } else {
            $removeHandler(document.forms[0], "submit", this._onsubmit$delegate);
        }

        $removeHandler(this.get_element(), 'click', this._onclick$delegate);

        MyExtenders.DisableSubmitBehaviour.callBaseMethod(this, 'dispose');
    },

    _submit: function() {
        var e = this.get_element();
        if (e && this._clicked) {
            setTimeout(function() { e.disabled = true; }, 0);
            this._oldText = e.value;
            e.value = this._text;
        }
        return true;
    },

    _disableForm: function(theform) {
        if (document.all || document.getElementById)
            for (i = 0; i < theform.length; i++) {
            var tempobj = theform.elements[i];
            if (tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset")
                tempobj.disabled = true;
        }
    },

    _click: function() {
        this._clicked = true;
    },

    set_Text: function(value) {
        if (this._text != value) {
            this._text = value;
            this.raisePropertyChanged("Text");
        }
    },

    get_Text: function() {
        return this._text;
    }
}

MyExtenders.DisableSubmitBehaviour.registerClass('MyExtenders.DisableSubmitBehaviour', Sys.UI.Behavior);

if (typeof(Sys) != 'undefined') Sys.Application.notifyScriptLoaded();

