/*

  -- -- -- -- -- -- --
  css sprites 2
  nav behaviour

  http://www.alistapart.com/articles/sprites2
  -- -- -- -- -- -- --
  
*/

function generateSprites(parent, selectedPrefix, setActive, hoverSpeed, style) {
  // throw the parent object's class into a variable
  var parentClass = $(parent).attr("class");

  // start a loop that cycles through each of the li elements inside the parent element
  $(parent).children("li").each(function() {
    // create a few variables that we'll need during this function:
    // myClass = the class of the object we're currently inspecting
    // current = what the selected class should look like for the parent of the object we're currently inspecting
    var myClass = ($(this).attr("class"))
    var current = parent.substring(1) + " current-" + ($(this).attr("class"));

    // turn on nav events for element this loop identifies
    attachNavEvents(parent, myClass, setActive, hoverSpeed, style);
  
    // let's hide the CSS-defined background image, but only if this isn't the currently-selected item
    if (parentClass != current) {
      $(this).children("a").css({backgroundImage:"none"});
    }

  });
}


function attachNavEvents(parent, myClass, setActive, hoverSpeed, style) {
  $(parent + " ." + myClass).mouseover(function() {
        
    // create pseudo-link
    $(this).append('<div class="nav-' + myClass + '"></div>');
    // either slide or fade, depending on the style value
    if (style == "slide") {
      // slide down the pseudo-link
      $("div.nav-" + myClass).css({display:"none"}).slideDown(hoverSpeed);
    } else {
      // fade in the pseudo-link
      $("div.nav-" + myClass).css({display:"none"}).fadeIn(hoverSpeed);
    }
    
  }).mouseout(function() {
    
    // either slide or fade, depending on the style value
    if (style == "slide") {
      // slide up & destroy pseudo-link
      $("div.nav-" + myClass).slideUp(hoverSpeed, function() {
        $(this).remove();
      });
    } else {
      // fade out & destroy pseudo-link
      $("div.nav-" + myClass).fadeOut(hoverSpeed, function() {
        $(this).remove();
      });
    }
  });


  // we only want to check the mousedown/up events if the CSS exists for :active states
  // if so, let's apply our selective filtering to undo the events above
  if (setActive) {
    $(parent + " ." + myClass).mousedown(function() {
      $("div.nav-" + myClass).attr("class", "nav-" + myClass + "-click");
    }).mouseup(function() {
      $("div.nav-" + myClass + "-click").attr("class", "nav-" + myClass);
    });
  }
}

