/*
  
  Water to Wine Project
  Main JavaScript
  
  Requires: JQuery, JQuery Cookie Plugin, JQuery UI Effects
  
*/

var w2wp = new W2WP();
$(document).ready(w2wp.init);

function W2WP() {
  
  var navAllExpanded = false;
  var navExpanded = [];
  var navMenuItems;
  var navTimer;
  
  this.init = init;
  function init() {
    applyCssPseudoClasses('#page_nav ul li, h1, h2, h3, h4, h5, h6');
    setupNavigationMenus('#page_nav > ul > li');
  }
  
  function applyCssPseudoClasses(selector) {
    if (typeof selector == 'undefined') selector = '*';
    $(selector).each(function() {
      $this = $(this);
      switch (true) {
        case $this.is(':first-child'):
          $this.addClass('first');
        break;
        case $this.is(':last-child'):
          $this.addClass('last');
        break;
      }
    });
  }
  
  function collapseAllNavigation() {
    while (navExpanded.length) {
      collapseNavigation(navExpanded.pop());
    }
  }
  
  function collapseNavigation(el) {
    $(el).stop().slideUp(250);
  }
  
  function expandAllNavigation(immediate) {
    navMenuItems.find('> ul').each(function() {
      expandNavigation(this, immediate);
    });
  }
  
  function expandNavigation(el, immediate) {
    var time = (immediate) ? 0 : 250;
    $(el).stop().slideDown(time, function() { $(this).css('height', 'auto'); });
    navExpanded.push(el);
  }
  
  this.log = log;
  function log(msg) {
    if (console && console.log) {
      console.log(msg);
    }
  }
  
  function setupNavigationMenus(selector) {
    navMenuItems = $(selector);
    navMenuItems.each(function() {
      var listItem = $(this);
      var submenu = listItem.find('> ul');
      listItem.mouseover(function() {
        if (!navAllExpanded) {
          if (navTimer) clearTimeout(navTimer);
          expandNavigation(submenu);
        }
      });
      listItem.mouseout(function() {
        if (!navAllExpanded) {
          navTimer = setTimeout(function() { collapseAllNavigation(); }, 2000);
        }
      });
      submenu.hide();
    });
    $('#page_nav_links').after('<div class="nav-toggle-container"><a id="page_nav_toggle" class="nav-toggle" href="#">+ Expand</a></div>');
    navAllExpanded = ($.cookie('navAllExpanded') == 'true');
    if (navAllExpanded) {
      expandAllNavigation(true);
      $('#page_nav_toggle').text('- Collapse');
    }
    $('#page_nav_toggle').click(function() {
      if (navAllExpanded) {
        navAllExpanded = false;
        collapseAllNavigation();
        $(this).text('+ Expand');
        $.cookie('navAllExpanded', 'false', {expires: 30, path: '/'});
      } else {
        navAllExpanded = true;
        expandAllNavigation();
        clearTimeout(navTimer);
        $(this).text('- Collapse');
        $.cookie('navAllExpanded', 'true', {expires: 30, path: '/'});
      }
      $(this).blur();
      return false;
    });
  }
}