/*
 * YUI2 analog of YUI3 ButtonCollection class
 * @author Dmitry Monin
 */

if(typeof NB == "undefined")
{
    NB = {ui:{}};
}
else if(typeof NB.ui == "undefined")
{
    NB.ui = {};
}

(function() {
    
    var Dom = YAHOO.util.Dom;
	var Event = YAHOO.util.Event;
	
	function getAttribute(element, attribute)
	{
		return element.attributes[attribute] ? element.attributes[attribute].nodeValue : "";
	}
	
	function init()
	{		
	    var radioButtons = new NB.ui.ButtonCollection("yui2-radio-button", false, "yui2-radio-button");
	    var checkboxes = new NB.ui.ButtonCollection("yui2-checkbox", true, "yui2-checkbox");
    }
    
    NB.ui.ButtonCollection = function(className, isMultipleSelect, cssClass) {
        
        this.isMultipleSelect = isMultipleSelect;
        if(cssClass)
        {
            this.cssClass = cssClass;
        }
        else
        {
            this.cssClass = isMultipleSelect ? "checkbox" : "radio-button";
        }
		
        cssClass = this.cssClass;
        
        
        
        var html, labels, className, element, css, label;
        
        var controls = Dom.getElementsByClassName(className);
		
		for(var i = 0; i < controls.length; i++)
		{
			control = controls[i];
			if(control.tagName.toLowerCase() != "input")
			{
				continue;
			}
			
			Dom.removeClass(control, className);
		
            labels = control.parentNode.getElementsByTagName("label");
			
			for(var j = 0; j < labels.length; j++)
			{
				var lbl = labels[j];
				
				if(getAttribute(lbl, "for") == control.id)
                {
                    Dom.setStyle(lbl, "display", "none");
                    label = lbl;
                    continue;
                }
			}
            
            label = label || document.createElement("label");
            
            className= cssClass + " " + cssClass + "-" + control.name;
            if(control.checked == true)
            {
                className += " " + cssClass + "-checked";
            }
            
            html = '<a href="#' + control.name + '" class="' + className + '">' + label.innerHTML + '</a>';
            
			
			
			element = NB.insertHtml("afterend", control, html);
			
            css = control.getAttribute("style");
            
            if(typeof(css) == "string")
            {
                element.setAttribute("style", css);
            }
            else if(css !== null) // in IE it is object
            {
                element.style.cssText = css.cssText;
            }
    	        
            Dom.setStyle(control, "position", "absolute");
		    Dom.setStyle(control, "visibility", "hidden");
    		
    		
            Event.on(element, "click", this.onButtonClick, {
                element : element,
                control : control                
            }, this);
        
        
        }
        
        
    };
    
	NB.ui.ButtonCollection.prototype = {
	    onButtonClick : function(e, ea) {
	        
			e = Event.getEvent(e);
			Event.stopEvent(e);
			
			
			
			
	        // Checkbox
            if(this.isMultipleSelect)
	        {
		        if(Dom.hasClass(ea.element, this.cssClass + "-checked"))
		        {
			        Dom.removeClass(ea.element, this.cssClass + "-checked");
			        ea.control.checked = false;
		        }
		        else
		        {
			        Dom.addClass(ea.element, this.cssClass + "-checked");
			        ea.control.checked = true;				    
		        }
	        }
	        // Radio button
	        else
	        {
		        var cssClass = this.cssClass + "-" + ea.control.name;
		        var radioBtns = Dom.getElementsByClassName(cssClass);
				
				for(var i = 0; i < radioBtns.length; i++)
				{
		            Dom.removeClass(radioBtns[i], this.cssClass + "-checked");
		        };
		        
		        Dom.addClass(ea.element, this.cssClass + "-checked");
    			ea.control.checked = true;
	        }
	    }
	};
	
	Event.on(window, "load", init);    	
})();
