/** 
 * Tab class - used for showing/hiding elements when clicked.
     * @param _jq             the tab element the user clicks on to show the tabs contents.
     * @param _tab_set         Array of all tabs in the group/set of tabs - used to dispatch a TAB_OPENED event to all tabs in the set.
     * @param _to_open_j        jQuery object holding references to elements to display when tab is open.
     * @param _css_classes     object with names of CSS classes used - should have properties: active, inactive & hover.
     
     * @property data         Data provided to the constructor - not sure what this is for...
     * @property jq           Main jQuery object for this tab.
     */
var Tab = function( _jq, _tab_set, _to_open_j, _css_classes, _data ){
    
    // SET DEFAULTS FOR CSS CLASSES OR USE SPECIFIED
    _css_classes = _css_classes ||
        {
            active   :'active',
            inactive :'inactive',
            hover    :'hover'
        };
    
    var _self = this,
        $ = jQuery;
        
    _self._data = _data;
    _self.jq   = _jq;
    
    // Default empty tab-set so we don't throw an undefined error:
    _tab_set = _tab_set || [];
    
    
    // EVENT HANDLERS
    function onClick(e){
    
        selected = true;
        
        _to_open_j.show();
        _jq.addClass( _css_classes.active ).removeClass( _css_classes.inactive );
        
        // DISPATCH TAB_OPENED EVENT TO ALL TABS IN TAB-SET
        for( var i in _tab_set ){
            $(_tab_set[i]).trigger( Tab.TAB_OPENED, _self );
        }
    }
    
    function onOtherTabOpened(e, d){
        if( d != _self ) // NOT selected tab.
        {
            selected = false;
        
            _to_open_j.hide();
            _jq.addClass( _css_classes.inactive ).removeClass( _css_classes.active );
        }else{
            // DISPATCH GLOBAL EVENT THAT THIS TAB'S SELECTED
            $(document).trigger( Tab.TAB_SELECTED, _self );
        }
    }
    
    
    // PUBLIC METHODS
    /**
     * Used to select/display this tab.
     */
    _self.select = onClick;
    
    
    // EVENT LISTENERS
    _jq.click(function(e){ onClick(e); });
    
    _jq.hover(
        function(){
            _jq.addClass(    _css_classes.hover );
        },
        function(){
            _jq.removeClass( _css_classes.hover );
        }
    );
    $( _self ).bind( Tab.TAB_OPENED, onOtherTabOpened );
};

Tab.TAB_OPENED   = 'MODO_TAB_OPEN';
Tab.TAB_SELECTED = 'MODO_TAB_SELECT';










