﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("TexAgs.Web.UI.Extenders");

TexAgs.Web.UI.Extenders.ToggleButtonBehavior = function(element) {
    TexAgs.Web.UI.Extenders.ToggleButtonBehavior.initializeBase(this, [element]);
    
    // Constants
    this._idDecoration = '_ToggleButton';    
    
    // Properties
    this._Text = null;
    this._CssClass = null;
    this._UseAlternateFalseImage = null;

    // Member Variables
    this._decoyElement = null;
    this._decoyElementClickHandler = null;
    this._checkChangedHandler = null;
}

TexAgs.Web.UI.Extenders.ToggleButtonBehavior.prototype = {
    initialize: function() {
        TexAgs.Web.UI.Extenders.ToggleButtonBehavior.callBaseMethod(this, 'initialize');
              
        var e = this.get_element();

        this._decoyElement = document.createElement('a');
        this._decoyElement.id = e.id + this._idDecoration;
        this._decoyElement.href = '';
        this._decoyElement.innerHTML = this._Text.replace(/\s+/gi,'&nbsp;');
        this._decoyElement.className = this._CssClass;
        e.parentNode.insertBefore(this._decoyElement, e);

        e.style.display = 'none';
        var decoyElementStyle = this._decoyElement.style;
        this._onClick();

        // Create delegates
        this._clickHandler = Function.createDelegate(this, this._onClick);
        this._checkChangedHandler = Function.createDelegate(this, this._onClick);
        this._decoyElementClickHandler = Function.createDelegate(this, this._onDecoyElementClick);
                
        // Attach events
        $addHandler(e, "click", this._clickHandler);
        $addHandler(e, "change", this._checkChangedHandler);        
        $addHandler(this._decoyElement, "click", this._decoyElementClickHandler);
    },
    
    dispose: function() {     
        // Detach events
        if (this._decoyElementClickHandler) {
            $removeHandler(this._decoyElement, "click", this._decoyElementClickHandler);
            this._decoyElementClickHandler = null;
        }
        if(this._checkChangedHandler) {
            $removeHandler(this.get_element(), "change", this._checkChangedHandler);
            this._checkChangedHandler = null;
        }                   
        TexAgs.Web.UI.Extenders.ToggleButtonBehavior.callBaseMethod(this, 'dispose');
    },
    
    _onClick : function() {
        if(this.get_element().checked) {
            this._decoyElement.style.backgroundPosition = 'top left';
            
        } else {
			if (this._UseAlternateFalseImage)
			{
				this._decoyElement.style.backgroundPosition = 'bottom left';
			}
			else
			{
				this._decoyElement.style.backgroundPosition = 'center left';
			}
            
            
        }
    },    
    
    _onDecoyElementClick : function(e) {    
        this.get_element().click();
        e.preventDefault();
        return false;
    },    
    
    get_Text : function() {
        return this._Text;
    },
    set_Text : function(value) {
        if (this._Text != value) {
           this._Text = value;
           this.raisePropertyChanged('Text');
        }
    },
    
    get_CssClass : function() {
        return this._CssClass;
    },
    set_CssClass : function(value) {
        if (this._CssClass != value) {
           this._CssClass = value;
           this.raisePropertyChanged('CssClass');
        }
    }, 
    
    get_UseAlternateFalseImage : function() {
        return this._UseAlternateFalseImage;
    },
    set_UseAlternateFalseImage : function(value) {
        if (this._UseAlternateFalseImage != value) {
           this._UseAlternateFalseImage = value;
           this.raisePropertyChanged('UseAlternateFalseImage');
        }
    }             
}
TexAgs.Web.UI.Extenders.ToggleButtonBehavior.registerClass('TexAgs.Web.UI.Extenders.ToggleButtonBehavior', Sys.UI.Behavior);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
