Type.registerNamespace("ComposantsPersonnalises");

// Constructeur
ComposantsPersonnalises.BoutonSurvole = function (element) {

    ComposantsPersonnalises.BoutonSurvole.initializeBase(this, [element]);

    // membres privés : gestionnaires d'événements
    this._clickDelegate = null;
    this._mouseOverDelegate = null;
    this._mouseOutDelegate = null;
}




ComposantsPersonnalises.BoutonSurvole.prototype = {

    // Texte du bouton
    get_text: function () {
        return this.get_element().innerHTML;
    },
    set_text: function (value) {
        this.get_element().innerHTML = value;
    },



    // Ajout et suppression de gestionnaire d'événement click
    add_click: function (handler) {
        this.get_events().addHandler('click', handler);
    },
    remove_click: function (handler) {
        this.get_events().removeHandler('click', handler);
    },


    // Ajout et suppression de gestionnaire d'événement mouseOver
    add_mouseOver: function (handler) {
        this.get_events().addHandler('mouseOver', handler);
    },
    remove_mouseOver: function (handler) {
        this.get_events().removeHandler('mouseOver', handler);
    },


    // Ajout et suppression de gestionnaire d'événement mouseOut
    add_mouseOut: function (handler) {
        this.get_events().addHandler('mouseOut', handler);
    },
    remove_mouseOut: function (handler) {
        this.get_events().removeHandler('mouseOut', handler);
    },




    // Libération des ressources
    dispose: function () {

        var element = this.get_element();

        if (this._clickDelegate) {
            Sys.UI.DomEvent.removeHandler(element, 'click', this._clickDelegate);
            delete this._clickDelegate;
        }

        if (this._mouseOverDelegate) {
            Sys.UI.DomEvent.removeHandler(element, 'focus', this._mouseOverDelegate);
            Sys.UI.DomEvent.removeHandler(element, 'hover', this._mouseOverDelegate);            
            delete this._hoverDelegate;
        }

        if (this._mouseOutDelegate) {
            Sys.UI.DomEvent.removeHandler(element, 'blur', this._mouseOutDelegate);
            Sys.UI.DomEvent.removeHandler(element, 'unhover', this._mouseOutDelegate);            
            delete this._unhoverDelegate;
        }
        ComposantsPersonnalises.BoutonSurvole.callBaseMethod(this, 'dispose');
    },



    // constructeur applicatif : initialisation du composant
    initialize: function () {

        // récupère l'élement associé au contrôle
        var element = this.get_element();

        if (!element.tabIndex) 
            element.tabIndex = 0;

        // initialisation des délégués

        if (this._clickDelegate === null) {
            this._clickDelegate = Function.createDelegate(this, this._clickHandler);
        }
        // événements de l'élément auquel le bouton est réactif : click
        Sys.UI.DomEvent.addHandler(element, 'click', this._clickDelegate);


        if (this._mouseOverDelegate === null) {
            this._mouseOverDelegate = Function.createDelegate(this, this._mouseOverHandler);
        }
        // événements de l'élément auquel le bouton est réactif : hover et focus
        Sys.UI.DomEvent.addHandler(element, 'hover', this._mouseOverDelegate);
        Sys.UI.DomEvent.addHandler(element, 'focus', this._mouseOverDelegate);        


        // événements de l'élément auquel le bouton est réactif : unhover et blur
        if (this._mouseOutDelegate === null) {
            this._mouseOutDelegate = Function.createDelegate(this, this._mouseOutHandler);
        }
        Sys.UI.DomEvent.addHandler(element, 'unhover', this._mouseOutDelegate);
        Sys.UI.DomEvent.addHandler(element, 'blur', this._mouseOutDelegate);        


        // initialisation du contrôle au niveau de la classe de base
        ComposantsPersonnalises.BoutonSurvole.callBaseMethod(this, 'initialize');

    },


// fonction de déclenchement des événements : appel des gestionnaires
_clickHandler: function (event) {
    var gestionnaire = this.get_events().getHandler('click');

    // s'il existe au moins un gestionnaire
    if (gestionnaire) 
        gestionnaire(this, Sys.EventArgs.Empty);
},
_mouseOverHandler: function (event) {
    var gestionnaire = this.get_events().getHandler('mouseOver');

    // s'il existe au moins un gestionnaire
    if (gestionnaire) 
        gestionnaire(this, Sys.EventArgs.Empty);
},
_mouseOutHandler: function (event) {
    var gestionnaire = this.get_events().getHandler('mouseOut');

    // s'il existe au moins un gestionnaire
    if (gestionnaire) 
        gestionnaire(this, Sys.EventArgs.Empty);
}
}



// notre composant dérive de Sys.UI.Control
ComposantsPersonnalises.BoutonSurvole.registerClass('ComposantsPersonnalises.BoutonSurvole', 
    Sys.UI.Control);

// comme le script n'est pas chargé par ScriptResourceHandler, 
// ce code indique au ScriptManager que c'est la fin du script
if (typeof (Sys) !== 'undefined') 
    Sys.Application.notifyScriptLoaded();




