﻿Type.registerNamespace('Umbraco.Forms.Core.Controls.Validation');

Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior = function(element) {
    Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior.initializeBase(this, [element]);

    this._TargetLabelID = null;
    this._originalValidationMethod = null;
    this._validationMethodOverride = null;
    this._elementToValidate = null;
    this._InvalidTextBoxCssClass = null;
    this._ValidTextBoxCssClass = null;
    this._InvalidLabelCssClass = null;
    this._ValidLabelCssClass = null;
    this._focusAttached = false;
    this._isOpen = false;
    this._invalid = false;
    this._isBuilt = false;
    this._focusHandler = Function.createDelegate(this, this._onfocus);
}

Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior.prototype = {
    ///////////////////////
    // FUNCTIONS
    ///////////////////////
    initialize: function() {
        Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior.callBaseMethod(this, 'initialize');

        var elt = this.get_element();
        this._elementToValidate = $get(elt.controltovalidate);

        // Override the evaluation method of the current validator
        if (elt.evaluationfunction) {
            this._originalValidationMethod = Function.createDelegate(elt, elt.evaluationfunction);
            this._validationMethodOverride = Function.createDelegate(this, this._onvalidate);
            elt.evaluationfunction = this._validationMethodOverride;
        }
    },
    dispose: function() {
        Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior.callBaseMethod(this, 'dispose');
    },

    _onvalidate: function(val) {
        if (!this._originalValidationMethod(val)) {
            if (this._InvalidTextBoxCssClass) {
                if (this._elementToValidate != null) {
                    Sys.UI.DomElement.addCssClass(this._elementToValidate, this._InvalidTextBoxCssClass);
                    //}
                    //if(this._TargetLabelID != null)
                    //{
                    Sys.UI.DomElement.addCssClass(this._TargetLabelID, this._InvalidLabelCssClass);
                }
            }
            if (!this._focusAttached) {
                $addHandler(this._elementToValidate, "focus", this._focusHandler);
                this._focusAttached = true;
            }


            if (this._ValidTextBoxCssClass) {
                if (this._elementToValidate != null) {
                    Sys.UI.DomElement.removeCssClass(this._elementToValidate, this._ValidTextBoxCssClass);
                }
                if (this._TargetLabelID != null) {
                    Sys.UI.DomElement.removeCssClass(this._TargetLabelID, this._ValidLabelCssClass);
                }
            }
            
            
            this._invalid = true;
            return false;
        }
        else {
            if (this._InvalidTextBoxCssClass && this._invalid) {
                if (this._elementToValidate != null) {
                    Sys.UI.DomElement.removeCssClass(this._elementToValidate, this._InvalidTextBoxCssClass);
                }
                if (this._TargetLabelID != null) {
                    Sys.UI.DomElement.removeCssClass(this._TargetLabelID, this._InvalidLabelCssClass);
                }
            }

            Sys.UI.DomElement.addCssClass(this._elementToValidate, this._ValidTextBoxCssClass);
            Sys.UI.DomElement.addCssClass(this._TargetLabelID, this._ValidLabelCssClass);
            
            this._invalid = false;
            return true;
        }
    },
    _onfocus: function(e) {
        if (!this._originalValidationMethod(this.get_element())) {
            if (this._InvalidTextBoxCssClass) {

                Sys.UI.DomElement.addCssClass(this._elementToValidate, this._InvalidTextBoxCssClass);
            }
            if (this._InvalidLabelCssClass) {
                Sys.UI.DomElement.addCssClass(this._TargetLabelID, this._InvalidLabelCssClass);
            }
            return false;
        }
        else {
            return true;
        }
    },
    ///////////////////////
    // PROPERTIES
    ///////////////////////
    // TargetLabel
    get_TargetLabelID: function() {
        return this._TargetLabelID;
    },

    set_TargetLabelID: function(value) {
        this._TargetLabelID = value;
    },

    //InvalidTextBoxCssClass
    get_InvalidTextBoxCssClass: function() {
        return this._InvalidTextBoxCssClass;
    },

    set_InvalidTextBoxCssClass: function(value) {
        if (this._InvalidTextBoxCssClass != value) {
            this._InvalidTextBoxCssClass = value;
            this.raisePropertyChanged("InvalidTextBoxCssClass");
        }
    },

    //ValidTextBoxCssClass
    get_ValidTextBoxCssClass: function() {
        return this._ValidTextBoxCssClass;
    },

    set_ValidTextBoxCssClass: function(value) {
        if (this._ValidTextBoxCssClass != value) {
            this._ValidTextBoxCssClass = value;
            this.raisePropertyChanged("ValidTextBoxCssClass");
        }
    },

    //InvalidLabelCssClass
    get_InvalidLabelCssClass: function() {
        return this._InvalidLabelCssClass;
    },

    set_InvalidLabelCssClass: function(value) {
        if (this._InvalidLabelCssClass != value) {
            this._InvalidLabelCssClass = value;
            this.raisePropertyChanged("InvalidLabelCssClass");
        }
    },
    
    //ValidLabelCssClass
    get_ValidLabelCssClass: function() {
        return this._ValidLabelCssClass;
    },

    set_ValidLabelCssClass: function(value) {
        if (this._ValidLabelCssClass != value) {
            this._ValidLabelCssClass = value;
            this.raisePropertyChanged("ValidLabelCssClass");
        }
    }
}
Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior.registerClass('Umbraco.Forms.Core.Controls.Validation.ValidationFieldExtenderBehavior', AjaxControlToolkit.BehaviorBase);

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();