﻿Type.registerNamespace("Occitane.WebControls");

Occitane.WebControls.ValidatorEx = function(element) {
    Occitane.WebControls.ValidatorEx.initializeBase(this, [element]);
    
    this._highlightCssClass = null;   
    this._originalValidationMethod = null;
    this._validationMethodOverride = null;
    this._elementToValidate = null;
    this._isValid = true;
    this._loaded = false;
    
    this._app_onload$delegate = Function.createDelegate(this, this._app_onload);
    this._propertyChanged$delegate = Function.createDelegate(this, this._onpropertyChanged);
}

Occitane.WebControls.ValidatorEx.prototype = {
    get_highlightCssClass : function() {
        return this._highlightCssClass;
    },
    set_highlightCssClass : function(value) {

        if (this._highlightCssClass != value) {
            this._highlightCssClass = value;
            this.raisePropertyChanged("highlightCssClass");
        }
    },
    
    get_isValid : function() {
        return this._isValid;
    },
    set_isValid : function(value) {

        if (this._isValid != value) {
            this._isValid = value;
            this.raisePropertyChanged("isValid");
        }
    },
    
    // Initialise le controle.
    initialize : function() {
        Occitane.WebControls.ValidatorEx.callBaseMethod(this, 'initialize');

        this.add_propertyChanged(this._propertyChanged$delegate);
        Sys.Application.add_load(this._app_onload$delegate);
    },
    
    // Libere les ressources.
    dispose : function() {
        this.remove_propertyChanged(this._propertyChanged$delegate);
        Sys.Application.remove_load(this._app_onload$delegate);

        Occitane.WebControls.ValidatorEx.callBaseMethod(this, 'dispose');
    },
    
    // Handlers
    _app_onload : function(sender, e) {
        var elt = this.get_element();
        if(elt.evaluationfunction) {
            this._originalValidationMethod = Function.createDelegate(elt, elt.evaluationfunction);
            this._validationMethodOverride = Function.createDelegate(this, this._onvalidate);
            elt.evaluationfunction = this._validationMethodOverride;            
        }
        
        this._elementToValidate = $get(elt.controltovalidate);
        this._update(this._isValid);
        this._loaded = true;
    },
    
    _onpropertyChanged : function(sender, e) {
        Sys.Debug.traceDump(e);
        if (e == "isValid" && this._loaded) this._update(this._isValid);
    },
    
    _onvalidate : function(val) {
        return this._update(this._originalValidationMethod(val));
    },
    
    _update : function(isValid) {
        if(!isValid) {
            if(this._highlightCssClass) {
                Sys.UI.DomElement.addCssClass(this._elementToValidate, this._highlightCssClass);
            }

            this._isValid = false;
        } else {
            if(this._highlightCssClass && !this._isValid) {
                Sys.UI.DomElement.removeCssClass(this._elementToValidate, this._highlightCssClass)
            }
            
            this._isValid = true;
        }
        
        return this._isValid;
    }
}

Occitane.WebControls.ValidatorEx.registerClass('Occitane.WebControls.ValidatorEx', Sys.UI.Behavior);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();