
bhajs.defineClass("BHA.Web.UI.ClientControls", "RadioBar", 
    function (id, checkedItemId, clientEventNotifyProcedure,dColor,hColor,cColor) {
        this.$id = id;
        this.$classInfo = bhajs.getClassInfo("BHA.Web.UI.ClientControls.RadioBar");
        this.$classInfo.registerObject(this.$id, this);
        this.$element = null;
        this.$dColor = dColor;
        this.$hColor = hColor;
        this.$cColor = cColor;
        this.$checkedItemId = checkedItemId;
        this.$eventHandlers = null;
        this.$clientEventNotifyProcedure = clientEventNotifyProcedure;
        this.$clientEventNotifyHandler = null;

        this.$initialize = function() {
            this.$element = document.getElementById(this.$id);
            
            
            this.$eventHandlers = {};
            this.$eventHandlers.currentItemChanged = new Array();
         
            var children = this.$element.getElementsByTagName("div");
            var i;
            var childElement;
            var childObject;
            for (i=0; i<children.length; i++) {
                childElement = children[i];
                if (childElement.id) {
                    childObject = bhajs.createObject("BHA.Web.UI.ClientControls.RadioBar+Item", [childElement.id, this]);
                }
            }
            
            if (this.$checkedItemId) {
                childObject = bhajs.getObject("BHA.Web.UI.ClientControls.RadioBar+Item", this.$checkedItemId);
                childObject.$setChecked(true);
            
            }
            
            if (this.$clientEventNotifyProcedure) {
                this.$clientEventNotifyHandler = new Function("eventArgs", this.$clientEventNotifyProcedure);
                this.addEventHandler("currentItemChanged", this.$clientEventNotifyHandler);
            }
            

            delete this.$initialize;
        };
        
        
        this.$getRadioBarItems = function() {
            var children = this.$element.getElementsByTagName("div");
            var i;
            var childElement;
            var childObject;
            var list = new Array();
            for (i=0; i<children.length; i++) {
                childElement = children[i];
                if (childElement.id) {
                    childObject = bhajs.getObject("BHA.Web.UI.ClientControls.RadioBar+Item", childElement.id);
                    list.push(childObject);
                }
            }
            return list;
        }
        
        this.getCheckedItem = function() {
            return this.$checkedItemId;
        }
        
        this.setCheckedItem = function(id) {
            if (id == this.$checkedItemId) return;
        
            var items = this.$getRadioBarItems();
            var i;
            for (i=0; i < items.length; i++) {
                var item = items[i];
                if (item.$id == id) {
                    item.$setChecked(true);
                }else{
                    item.$setChecked(false);
                }
            }
            this.$checkedItemId = id;
            
            this.$raiseEvent("currentItemChanged", id);
            
        }
        
        this.$raiseEvent = function (eventId, args) {
            if (!this.$eventHandlers[eventId]) {
                throw new Exception("Event does not exist.");
            }
            
            var handlers = this.$eventHandlers[eventId];
            var i;
            for (i = 0; i < handlers.length; i++) {
                (handlers[i])(args);
            }
        }
        
        this.addEventHandler = function(eventId, handler) {
            if (!this.$eventHandlers[eventId]) return;
            this.$eventHandlers[eventId].push(handler);
        }
        
        this.removeEventHandler = function(eventId, handler) {
            if (!this.$eventHandlers[eventId]) return;
            
            var handlers = this.$eventHandlers[eventId];
            var i;
            var index = null;
            for (i = 0; i < handlers.length; i++) {
                if (handlers[i] = handler) {
                    index = i;
                }
            }
            handlers.splice(index,1);
        }
        

        this.$initialize();
    }
);


bhajs.defineClass("BHA.Web.UI.ClientControls", "RadioBar+Item", 
    function (id, radioBar) {
        this.$id = id;
        this.$classInfo = bhajs.getClassInfo("BHA.Web.UI.ClientControls.RadioBar+Item");
        this.$classInfo.registerObject(this.$id, this);
        this.$element = null;
        this.$radioBar = radioBar;
        this.$checked = false;
        
        this.$onMouseDownDelegate = null;
        this.$onMouseOverDelegate = null;
        this.$onMouseOutDelegate = null;
  
        this.$initialize = function() {
            this.$element = document.getElementById(this.$id);
            this.$element.style.backgroundColor = this.$radioBar.$dColor;
            this.$onMouseDownDelegate = this.$classInfo.createInstanceMethodCall(this.$id, "$onMouseDownHandler", ["e"]);
            this.$onMouseOverDelegate = this.$classInfo.createInstanceMethodCall(this.$id, "$onMouseOverHandler", ["e"]);
            this.$onMouseOutDelegate = this.$classInfo.createInstanceMethodCall(this.$id, "$onMouseOutHandler", ["e"]);
            
            if (this.$element.addEventListener) {
                this.$element.addEventListener("mousedown", this.$onMouseDownDelegate, false);
                this.$element.addEventListener("mouseover", this.$onMouseOverDelegate, false);
                this.$element.addEventListener("mouseout", this.$onMouseOutDelegate, false);
            }else if(this.$element.attachEvent) {
                this.$element.attachEvent("onmousedown", this.$onMouseDownDelegate);
                this.$element.attachEvent("onmouseover", this.$onMouseOverDelegate);
                this.$element.attachEvent("onmouseout", this.$onMouseOutDelegate);
            }
            
            
            
            
            delete this.$initialize;
        }
        
       
        this.$onMouseDownHandler = function(e) {
            this.$radioBar.setCheckedItem(this.$id);
        }
        this.$onMouseOverHandler = function(e) {
            if(!this.$checked){
                this.$element.style.backgroundColor = this.$radioBar.$hColor;
            }
        }
        this.$onMouseOutHandler = function(e) {
            if(!this.$checked){
                this.$element.style.backgroundColor = this.$radioBar.$dColor;
            }
        }
        
        this.getChecked = function() {
            return this.$checked;
        }
        
        this.$setChecked = function(checked) {
            if (checked) {
                this.$element.style.backgroundColor = this.$radioBar.$cColor;
            }else{
                this.$element.style.backgroundColor = this.$radioBar.$dColor;
            }
            this.$checked = checked;
        }
        
        
        
        this.$initialize();
    }
);