// $Id: visibility_api.js,v 1.8 2008/07/07 23:51:23 tjholowaychuk Exp $
(function($){

  /**
   * Visibility API.
   *
   * @param string key
   *
   * @return mixed
   *   - success: Settings object
   *   - failure: false   
   */
  $.visibility_api = function(key) {   
    if (Drupal.settings && Drupal.settings.visibility_api && Drupal.settings.visibility_api[key]){
      var settings = Drupal.settings.visibility_api[key]; 
    }
    
    if (!settings){
      return false;
    }
    else if (!settings.visible){
      return false;
    }
    else {
      return settings;
    }
  };
  
  /**
   * Get nodes within visibility.
   * 
   * @param string key
   *
   * @param array nodes
   *   An array of potential nodes which are filtered, returning  
   *   only nodes which are 'visibile' to this key. 
   *
   * @return mixed
   *   - success: Array of nodes
   *   - failure: false  
   *
   * @todo make nodes optional
   */
  $.visibility_api_get_nodes = function(key, nodes) {
    var visibleNodes = [];
    var settings = $.visibility_api(key);
    
    if (!settings){
      return false;
    } 
    
    if (!settings.selectors.length){
      return false;
    } 
    
    // Include
    if (settings.selector_visibility == 'include'){
      var selector = settings.selectors.join(', ');  
      visibleNodes = $(selector);
    }
    // Exclude
    else if (settings.selector_visibility == 'exclude'){
      // @todo finish
      $.each(settings.selectors, function(i, selector){
        if (node = $(nodes).not(selector)){
          visibleNodes.push(node);
        }
      });
    }
    
    return visibleNodes;
  }
  
})(jQuery);
