﻿Type.registerNamespace('Matmut.UI');

Matmut.UI.FilteredTextBoxBehavior = function(element) {
    Matmut.UI.FilteredTextBoxBehavior.initializeBase(this, [element]);
    
    this._onBlurHandler = null;
    this._regExp = null;
    this._displayFilter = '';
    this._regularExpression = null;
    this._errorMessage = '';
    this._textBoxFilter = Matmut.UI.TextBoxFilter.Custom;
    this._textAlign = Matmut.UI.TextAlign.Left;
}

Matmut.UI.FilteredTextBoxBehavior.prototype = {
    
    initialize : function() {
        Matmut.UI.FilteredTextBoxBehavior.callBaseMethod(this, 'initialize');

        this._expression = (this._regExp && this._regExp != '') ? 
            new RegExp(this._regExp, '') : null;
        
        var element = this.get_element();
        //$addHandlers(element, {'blur' : this._onBlur}, this);
        
        this._onBlurHandler = Function.createDelegate(this, this._onBlur);
        $addHandler(element, 'blur', this._onBlurHandler);
    },
    
    dispose : function() {
        var element = this.get_element();
        //$removeHandler(element, 'blur', this._onBlur);

        $removeHandler(element, 'blur', this._onBlurHandler);
        this._onBlurHandler = null;
        
        Matmut.UI.FilteredTextBoxBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_RegExp : function() {
        return this._regExp;
    },
    
    set_RegExp : function(value) {
        if (this._regExp != value) {
            this._regExp = value;
            this.raisePropertyChanged('RegExp');
        }
    },

    get_DisplayFilter : function() {
        return this._displayFilter;
    },
    
    set_DisplayFilter : function(value) {
        if (this._displayFilter != value) {
            this._displayFilter = value;
            this.raisePropertyChanged('DisplayFilter');
        }
    },

    get_ErrorMessage : function() {
        return this._errorMessage;
    },
    
    set_ErrorMessage : function(value) {
        if (this._errorMessage != value) {
            this._errorMessage = value;
            this.raisePropertyChanged('ErrorMessage');
        }
    },
    
    get_TextAlign : function() {
        return this._textAlign;
    },
    
    set_TextAlign : function(value) {
        if (this._textAlign != value) {
            switch (value) {
                case Matmut.UI.TextAlign.Right : 
                    $(this.get_element()).css('text-align', 'right');
                    break;
                case Matmut.UI.TextAlign.Center : 
                    $(this.get_element()).css('text-align', 'center');
                    break;
                default : $(this.get_element()).css('text-align', 'left');
            }
            this._textAlign = value;
            this.raisePropertyChanged('TextAlign');
        }
    },
    
    
    get_TextBoxFilter : function() {
        return this._textBoxFilter;
    },
    
    set_TextBoxFilter : function(value) {
        if (this._textBoxFilter == value) {
            return;
        }
    
        if (value == Matmut.UI.TextBoxFilter.Heure) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Custom + 
                                AjaxControlToolkit.FilterTypes.Numbers);
            this.set_ValidChars(':h');
            this.set_RegExp('^([0-9]|[0-1][0-9]|20|21|22|23)(\\:|h| )?([0-5][0-9])(| )$');
            this.set_DisplayFilter('$1:$3');
            this.set_ErrorMessage('Heure non valide');
        
        } else if (value == Matmut.UI.TextBoxFilter.Mail) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Custom + 
                                AjaxControlToolkit.FilterTypes.Numbers + 
                                AjaxControlToolkit.FilterTypes.UppercaseLetters + 
                                AjaxControlToolkit.FilterTypes.LowercaseLetters);
            this.set_ValidChars(' @-_.');
            this.set_RegExp('^([a-zA-Z0-9_\\\.\\\-])+\@(([a-zA-Z0-9\\\-])+\\\.)+([a-zA-Z0-9]{2,4})+$');
            this.set_DisplayFilter('');
            this.set_ErrorMessage('E-Mail non valide');

        } else if (value == Matmut.UI.TextBoxFilter.Mois) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Numbers);
            this.set_RegExp('^(0[1-9]|1[012])$');
            this.set_DisplayFilter('$1');
            this.set_ErrorMessage('Mois non valide');
           
        } else if (value == Matmut.UI.TextBoxFilter.NumeroProspect) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Custom);
            this.set_ValidChars(' 0123456789');
            this.set_RegExp('^([0-9]{3})(| )([0-9]{3})(| )([0-9]{3})$');
            this.set_DisplayFilter('$1 $3 $5');
            this.set_ErrorMessage('Num\u00E9ro de prospect non valide');

        } else if (value == Matmut.UI.TextBoxFilter.NumeroSocietaire) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Custom);
            this.set_ValidChars(' 0123456789');
            this.set_RegExp('^(\\d{5})(| )(\\d{4})(| )(\\d{3})$');
            this.set_DisplayFilter('$1 $3 $5');
            this.set_ErrorMessage('Num\u00E9ro de soci\u00E9taire non valide');

        } else if (value == Matmut.UI.TextBoxFilter.Signature) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Custom + 
                                AjaxControlToolkit.FilterTypes.Numbers + 
                                AjaxControlToolkit.FilterTypes.LowercaseLetters);
            this.set_ValidChars('-.');
            this.set_RegExp('^[a-z0-9\\\-]+\\\.[a-z0-9\\\-]+$');
            this.set_DisplayFilter('');
            this.set_ErrorMessage('Signature non valide');
           
        } else if (value == Matmut.UI.TextBoxFilter.Telephone) {
            this.set_FilterType(AjaxControlToolkit.FilterTypes.Custom);
            this.set_ValidChars(' -.0123456789');
            this.set_RegExp('^([0-9]{2})(| |\\\-|\\\.)([0-9]{2})(| |\\\-|\\\.)([0-9]{2})(| |\\\-|\\\.)([0-9]{2})(| |\\\-|\\\.)(([0-9][0-9])?)(\\\ ){0,6}$');
            this.set_DisplayFilter('$1 $3 $5 $7 $9');
            this.set_ErrorMessage('T\u00E9l\u00E9phone non valide');
        }
            
        this._textBoxFilter = value;
        this.raisePropertyChanged('TextBoxFilter');
    },

    _onBlur : function(e) {
        if (!this._expression) {
            return true;
        }
    
        var element = this.get_element();
        var text = new String(element.value);
        
        if (!this._expression.exec(text)) {
            this._writeError(this._errorMessage);
            return false;
        } else {
            if (this._displayFilter && this._displayFilter != '') {
                element.value = text.replace(this._expression, this._displayFilter);
            }
            this._clearError();
            return true;
        }
    },
    
    _getErrorMessageElement : function() {
        return $('div[@class] > div.image').parent('div');
    }, 
    
    _writeError : function(text) {
        this._write(text, 'error');
    },
    
    _writeForcage : function(text) {
        this._write(text, 'forcage');
    },
    
    _clearError : function() {
        this._write('', 'invisible');
    },
    
    _write : function(text, className) {
        var element = this._getErrorMessageElement();
        if (element.size() < 1) {
            if (text && text != '') {
                alert(text);
            }
            return;
        }
        
        element.removeClass().addClass(className);
        element.find('div').not('[@class]').each(function(index) {
            $(this).html(text);
        });
    }
    
}

Matmut.UI.FilteredTextBoxBehavior.registerClass('Matmut.UI.FilteredTextBoxBehavior', AjaxControlToolkit.FilteredTextBoxBehavior);









Matmut.UI.TextAlign = function() {
    throw Error.invalidOperation();
}
Matmut.UI.TextAlign.prototype = {
        Left              : 0x1,
        Right             : 0x2,
        Center            : 0x4
}
Matmut.UI.TextAlign.registerEnum('Matmut.UI.TextAlign', true);





Matmut.UI.TextBoxFilter = function() {
    throw Error.invalidOperation();
}
Matmut.UI.TextBoxFilter.prototype = {
        Custom            : 0x1,
        Heure             : 0x2,
        Mail              : 0x4,
        Mois              : 0x8,
        NumeroProspect    : 0x16,
        NumeroSocietaire  : 0x32,
        Signature         : 0x64,
        Telephone         : 0x128
}
Matmut.UI.TextBoxFilter.registerEnum('Matmut.UI.TextBoxFilter', true);

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();