﻿
if (typeof FutureLab == "undefined" || !FutureLab) {
    var FutureLab = {};
}

FutureLab.addNamespace = function(rootObj,namespace) {
    var parts=namespace.split(".");
    for (var i=1;i<parts.length; i++) {
        rootObj[parts[i]]=rootObj[parts[i]] || {};
        rootObj=rootObj[parts[i]];
    }
    return rootObj;
};

FutureLab.selectableList = Class.create({
    initialize : function( parentSelector, itemSelector, selectedClassName, hoverClassName, selectCallback) {
        this.parentSelector = parentSelector;
        this.itemSelector = itemSelector;
        this.selectedClassName = selectedClassName;
        this.hoverClassName = hoverClassName;
        this.multiSelect = false;   // allow multiple selections
        this.radioSelect = true;    // radiobutton operation, always select on click.
        this.selectCallback = selectCallback;
        this.init();
    },
    
    init : function() {
        var me = this;
        $$(me.parentSelector).each( function(parent_item) {
	        $(parent_item).getElementsBySelector(me.itemSelector).each( function(item) {	            
		        Event.observe(item, 'click', me.clickHandler.bindAsEventListener(this, me, item, me.selectCallback));
		        Event.observe(item, 'mouseover', me.mouseOverHandler.bindAsEventListener(this, me, item)); 
	            Event.observe(item, 'mouseout', me.mouseOutHandler.bindAsEventListener(this, me, item)); 
	        })
        })        
    },
    
    clickHandler : function(e, list, item, callback) {
    
        if (list.radioSelect) {     
            $(item).addClassName(list.selectedClassName);
		} else {
		    $(item).toggleClassName(list.selectedClassName);
		}
		$(item).blur();
		
		if (!list.multiSelect) {
		    $(item).siblings().each( function(item){ item.removeClassName(list.selectedClassName); } )
		}		
		if(Object.isFunction(callback)) { callback(item) };
    },
    
    mouseOverHandler : function(e, list, item) {    
        $(item).addClassName(list.hoverClassName);
    },
    
    mouseOutHandler : function(e, list, item) {
        $(item).removeClassName(list.hoverClassName);
    },
    
    getSelected : function() {
        var me = this;
        var selected = new Array();
        
        $$(me.parentSelector).each( function(parent_item) {
	        $(parent_item).getElementsBySelector(me.itemSelector).each( function(item) {
	            
		        if (item.hasClassName(me.selectedClassName)) {
		            selected.push(item);
		        }
	        })
        })
        return selected;    
    }   
    
});

// Prototype Element-AddOns

var ElementAddOns = {
    getElementById: function(element, id){
        var a = $(element).select('#'+id); 
        return a[0];
    },
    getFirstElementByClassName: function(element, classname){        
        var a = $(element).getElementsByClassName(classname); 
        return a[0];
    }
}

Event.observe(window, 'load', function() {  
    Element.addMethods(ElementAddOns); 
}); 

