
bhajs.defineClass("BHA.Web.UI.ClientControls", "ToolbarButton", 
    function (id, clickScript, imageUrl, imageDisabledUrl, enabled) {
        this.$id = id;
        this.$classInfo = bhajs.getClassInfo("BHA.Web.UI.ClientControls.ToolbarButton");
        this.$classInfo.registerObject(this.$id, this);
        this.$clickScript = clickScript;
        this.$onClickDelegate = null;
        this.$onMouseOverDelegate = null;
        this.$onMouseDownDelegate = null;
        this.$onMouseUpDelegate = null;
        this.$onMouseOutDelegate = null;
        this.$imageUrl = imageUrl;
        this.$imageDisabledUrl = imageDisabledUrl;
        this.$enabled = false;
        this.$checked = false;
      
        this.$initialize = function(enabled) {
            if (enabled) {
                this.enable();
            }else{
                this.disable();
            }
            delete(this.$initialize);
        };
        
        this.$getElement = function() {
            return document.getElementById(this.$id);
        };
        
        this.enable = function() {
        
            var element = this.$getElement();
            if (!this.$onClickDelegate) {
                this.$onClickDelegate = this.$classInfo.createInstanceMethodCall(this.$id,'$onClick',['e']);
                this.$onMouseOverDelegate = this.$classInfo.createInstanceMethodCall(this.$id,'$onMouseOver',['e']);
                this.$onMouseDownDelegate = this.$classInfo.createInstanceMethodCall(this.$id,'$onMouseDown',['e']);
                this.$onMouseUpDelegate = this.$classInfo.createInstanceMethodCall(this.$id,'$onMouseUp',['e']);
                this.$onMouseOutDelegate = this.$classInfo.createInstanceMethodCall(this.$id,'$onMouseOut',['e']);
                if (element.addEventListener) {
                    element.addEventListener("click", this.$onClickDelegate, false);
                    element.addEventListener("mouseover", this.$onMouseOverDelegate, false);
                    element.addEventListener("mousedown", this.$onMouseDownDelegate, false);
                    element.addEventListener("mouseup", this.$onMouseUpDelegate, false);
                    element.addEventListener("mouseout", this.$onMouseOutDelegate, false);
                }else if (element.attachEvent) {
                    element.attachEvent("onclick", this.$onClickDelegate);
                    element.attachEvent("onmouseover", this.$onMouseOverDelegate);
                    element.attachEvent("onmousedown", this.$onMouseDownDelegate);
                    element.attachEvent("onmouseup", this.$onMouseUpDelegate);
                    element.attachEvent("onmouseout", this.$onMouseOutDelegate);
                }
            }
            
            element.style.backgroundImage = "url('" + this.$imageUrl + "')";
            this.$enabled = true;
        };
        
        this.disable = function() {
        
            var element = this.$getElement();
            if (this.$onClickDelegate) {
                if (element.removeEventListener) {
                    element.removeEventListener("click", this.$onClickDelegate, false);
                    element.removeEventListener("mouseover", this.$onMouseOverDelegate, false);
                    element.removeEventListener("mousedown", this.$onMouseDownDelegate, false);
                    element.removeEventListener("mouseup", this.$onMouseUpDelegate, false);
                    element.removeEventListener("mouseout", this.$onMouseOutDelegate, false);
                }else if (element.detachEvent) {
                    element.detachEvent("onclick", this.$onClickDelegate);
                    element.detachEvent("onmouseover", this.$onMouseOverDelegate);
                    element.detachEvent("onmousedown", this.$onMouseDownDelegate);
                    element.detachEvent("onmouseup", this.$onMouseUpDelegate);
                    element.detachEvent("onmouseout", this.$onMouseOutDelegate);
                }
                this.$onClickDelegate = null;
                this.$onMouseOverDelegate = null;
                this.$onMouseDownDelegate = null;
                this.$onMouseUpDelegate = null;
                this.$onMouseOutDelegate = null;
            }
            if (!this.$imageDisabledUrl) {
                this.$imageDisabledUrl = this.$imageUrl;
            }            
            element.style.borderWidth = '0px';
            element.style.borderStyle = 'none';
            element.style.backgroundImage = "url('" + this.$imageDisabledUrl + "')";
            this.$enabled = false;
            this.$checked = false;
            
        };
        
        this.getEnabled = function() {
            return this.$enabled;
        };
        this.setEnabled = function(value) {
            if (value) {
                this.enable();
            }else{
                this.disable();
            }
        }
        
        this.setChecked = function(value) {
            if (!this.$enabled) return;
            
            var element = this.$getElement();
            if (value) {
                element.style.borderWidth = '1px';
                element.style.borderStyle = 'inset';
            }else{
                element.style.borderWidth = '0px';
                element.style.borderStyle = 'none';
            }
            
            this.$checked = value;
            
        };
        this.getChecked = function() {
            return this.$checked;
        };
        
        
   
        this.$onClick = new Function ('e', this.$clickScript);
   
        this.$onMouseOver = function(e) {
            if (this.$checked) return;
            var element = this.$getElement();
            element.style.borderWidth = '1px';
            element.style.borderStyle = 'outset';
        };
        
        this.$onMouseDown = function(e) {
            if (this.$checked) return;
            var element = this.$getElement();
            element.style.borderWidth = '1px';
            element.style.borderStyle = 'inset';
        };
        
        this.$onMouseUp = function(e) {
            if (this.$checked) return;
            var element = this.$getElement();
            element.style.borderWidth = '1px';
            element.style.borderStyle = 'outset';
        };
        
        this.$onMouseOut = function(e) {
            if (this.$checked) return;
            var element = this.$getElement();
            element.style.borderWidth = '0px';
            element.style.borderStyle = 'none';
        };
        
        
        

        
        
        
        this.$initialize(enabled);
    }
);


