﻿Type.registerNamespace("Res.Commerce.Web.Composants");
Res.Commerce.Web.Composants.ScriptControlBase = function(element)
{
    Res.Commerce.Web.Composants.ScriptControlBase.initializeBase(this, [element]);
    
    this._clientStateField = null;
    this._clientState = null;
    this._enableClientState = null;
    
    this._onSubmitHandler = null;
    this._onPartialUpdateEnd = null;
}
Res.Commerce.Web.Composants.ScriptControlBase.prototype =
{
    initialize: function() {
        Res.Commerce.Web.Composants.ScriptControlBase.callBaseMethod(this, 'initialize');

        if (this._enableClientState) {
            this.loadClientState();

            this._onSubmitHandler = Function.createDelegate(this, this._onSubmit);
            this._onPartialUpdateEnd = Function.createDelegate(this, this._onUpdateEnd);

            if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
                Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onSubmitHandler);
                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._onPartialUpdateEnd);
            }
            else
                $addHandler(document.forms[0], "submit", this._onSubmitHandler);
        }
    },

    dispose: function() {
        if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") {
            if (this._onSubmitHandler) {
                Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._onPartialUpdateEnd);
                this._onSubmitHandler = null;
            }
            if (this._onSubmitHandler) {
                Array.remove(this._pageRequestManager._onSubmitStatements, this._onSubmitHandler);
                this._onSubmitHandler = null;
            }
        }
        else {
            if (this._onSubmitHandler) {
                $removeHandler(document.forms[0], "submit", this._onSubmitHandler);
                this._onSubmitHandler = null;
            }
        }

        if (this._clientStateField)
            this._clientStateField = null;
        if (this._clientState)
            this._clientState = null;

        Res.Commerce.Web.Composants.ScriptControlBase.callBaseMethod(this, 'dispose');
    },

    loadClientState: function() {
        if (this._clientStateField.value == '' || this._clientStateField.value == 'undefined')
            return;
        this._clientState = Sys.Serialization.JavaScriptSerializer.deserialize(this._clientStateField.value);
    },

    saveClientState: function() {
        return null;
    },

    _onSubmit: function() {
        if (!this._clientStateField)
            return true;

        if (null != this.saveClientState()) {
            this._clientStateField.value = this.saveClientState();
        }

        return true;
    },

    _onUpdateEnd: function() {
        this.loadClientState();
        return true;
    },

    get_clientStateField: function() {
        return this._clientStateField;
    },

    set_clientStateField: function(value) {
        if (this._clientStateField != value) {
            this._clientStateField = value;
        }
    },

    get_clientState: function() {
        return this._clientState;
    },

    set_clientState: function(value) {
        if (this._clientState != value) {
            this._clientState = value;
        }
    },
    get_EnableClientState: function() {
        return this._enableClientState;
    },

    set_EnableClientState: function(value) {
        this._enableClientState = value;
    }
}

Res.Commerce.Web.Composants.ScriptControlBase.registerClass('Res.Commerce.Web.Composants.ScriptControlBase', Sys.UI.Control);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();