﻿/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace("Res.Commerce.Web.Composants");

Res.Commerce.Web.Composants.CrossPostbackServerValidator = function (element) {
    Res.Commerce.Web.Composants.CrossPostbackServerValidator.initializeBase(this, [element]);

    this._validateControlId = null;
    this._isValid = false;
    this._disableClientValidationIfServerValid = false;
    this._validationSummaryId = null;
    this._errors = null;
    this._postbackUrl = null;
    this._showError = null;
    this._validationGroup = null;
}

Res.Commerce.Web.Composants.CrossPostbackServerValidator.prototype = {
    initialize: function () {
        Res.Commerce.Web.Composants.CrossPostbackServerValidator.callBaseMethod(this, 'initialize');

        if (this._clientState != null) {
            if (typeof (this._clientState.IsValid) == "undefined")
                this._isValid = false;
            else
                this._isValid = this._clientState.IsValid;
        }

        var button = $get(this._validateControlId);

        if (this._isValid) {
            this._isValid = false;
            if (typeof (Page_ClientValidate) == 'function' && this._disableClientValidationIfServerValid) {
                Page_BlockSubmit = false;
                WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(this._validateControlId, "", false, "", this._postbackUrl, false, true));
            }
            else {
                WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(this._validateControlId, "", true, this._validationGroup, this._postbackUrl, false, true));
            }
        }
        else {
            if (this._errors.length > 0 && this._showError) {
                this.AfficheSummary();
            }
            var clickHandler = Function.createDelegate(this, this.ValidateControlClick);
            $(button).click(clickHandler);

            var prm = Sys.WebForms.PageRequestManager.getInstance();

            if (!Array.contains(prm._asyncPostBackControlIDs, this._validateControlId)) {
                prm._asyncPostBackControlIDs.push(this._validateControlId);
            }
            if (!Array.contains(prm._asyncPostBackControlClientIDs, this._validateControlId)) {
                prm._asyncPostBackControlClientIDs.push(this._validateControlId);
            }
        }
    },
    dispose: function () {
        //Add custom dispose actions here
        Res.Commerce.Web.Composants.CrossPostbackServerValidator.callBaseMethod(this, 'dispose');
    },
    ValidateControlClick: function (e) {
        if (!this._isValid) {
            
            e.cancelBubble = true;
            e.returnValue = false;

            if (e.stopPropagation) {
                e.stopPropagation();
                e.preventDefault();
            }

            var prm = Sys.WebForms.PageRequestManager.getInstance();

            if (!Array.contains(prm._asyncPostBackControlIDs, "ServerValidate" + this._element.id)) {
                prm._asyncPostBackControlIDs.push("ServerValidate" + this._element.id);
            }
            if (!Array.contains(prm._asyncPostBackControlClientIDs, "ServerValidate" + this._element.id)) {
                prm._asyncPostBackControlClientIDs.push("ServerValidate" + this._element.id);
            }
            //__doPostBack("ServerValidate" + this._element.id, "");
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ServerValidate" + this._element.id, "", true, this._validationGroup, '', false, true));
        }
    },
    AfficheSummary: function () {
        var summary = $get(this._validationSummaryId);
        var html = "<ul>";
        if (summary != null) {
            for (var i = 0; i < this._errors.length; i++) {
                html = html + "<li>" + this._errors[i] + "</li>";
            }
            html = html + "</ul>";
            $(summary).html(html);
            $(summary).show();
        }
    },
    saveClientState: function () {
        this._clientStateField.value = "{ IsValid:" + this._isValid + " }";
        return null;
    },
    get_ValidateControlId: function () {
        return this._validateControlId;
    },
    set_ValidateControlId: function (value) {
        this._validateControlId = value;
    },
    get_ValidationSummaryId: function () {
        return this._validationSummaryId;
    },
    set_ValidationSummaryId: function (value) {
        this._validationSummaryId = value;
    },
    get_Errors: function () {
        return this._errors;
    },
    set_Errors: function (value) {
        this._errors = value;
    },
    get_DisableClientValidationIfServerValid: function () {
        return this._disableClientValidationIfServerValid;
    },
    set_DisableClientValidationIfServerValid: function (value) {
        this._disableClientValidationIfServerValid = value;
    },
    get_PostbackUrl: function () {
        return this._postbackUrl;
    },
    set_PostbackUrl: function (value) {
        this._postbackUrl = value;
    },
    get_ShowError: function () {
        return this._showError;
    },
    set_ShowError: function (value) {
        this._showError = value;
    },
    get_ValidationGroup: function () {
        return this._validationGroup;
    },
    set_ValidationGroup: function (value) {
        this._validationGroup = value;
    }




}
Res.Commerce.Web.Composants.CrossPostbackServerValidator.registerClass('Res.Commerce.Web.Composants.CrossPostbackServerValidator', Res.Commerce.Web.Composants.ScriptControlBase);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
