// -------------------------------------------
// This file is for website menu blocks
//   It is needed for the display on published sites
//   This only works for single menus.  Will need to be changed for menu widgets
// -------------------------------------------


// Helper function used by the dimensions and offset modules
function num(elem, prop) {
        return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
}

var open_sub_menus = [];
var current_menu_item;
var current_parent_menu;
var hide_timeouts = [];
function _show_sub_menu (menu, parent_menu) {
  // Get a tag
  var id = jQuery(menu).attr("id");
  while (hide_timeouts.length) {
    clearTimeout(hide_timeouts.pop());
  }
  if (open_sub_menus.length) {
    if (parent_menu == current_parent_menu) {
      var open_sub_menu = open_sub_menus.pop();
      open_sub_menu.css("visibility", "hidden");
    }
    else if (!parent_menu) {
      while (open_sub_menus.length) {
        var open_sub_menu = open_sub_menus.pop();
        open_sub_menu.css("visibility", "hidden");
      }
    }
  }

  current_parent_menu = parent_menu;
  var ul = jQuery("#sub_"+id);
  open_sub_menus.push(ul);
  var div_parent = ul.parents("div:first");
  ul.css("visibility", "visible");
  ul.show();

  var padding_left = jQuery(menu).css("padding-left");
  var padding_right = jQuery(menu).css("padding-right");
  padding_left = parseInt(padding_left.replace(/px/, ""));
  padding_right = parseInt(padding_right.replace(/px/, ""));
  //ul.width(jQuery(menu).width() + padding_left + padding_right);
  
  var menu_position;
  if (ul.attr('menu_position')) {
    menu_position = ul.attr('menu_position');
  }

  if (menu_position == 'top') {
    if (parent_menu) {
      // Sub sub menu & beyond
      ul.css("top", jQuery(menu).position().top - parseInt(ul.css("padding-top").replace(/px/, "")));
      // If submenu goes off screen, move left instead.
      if (jQuery(menu).offset().left + jQuery(menu).width() + padding_left + padding_right + ul.width() > document.documentElement.clientWidth) {
        ul.css("left", jQuery(menu).position().left - ul.width());
      }
      else {
        ul.css("left", jQuery(menu).position().left + jQuery(menu).width() + padding_left + padding_right);
      }
    } else {
      // Initial submenu
      var ul_top;
      if (div_parent.css('position')) {
        // Get li height, not div
        var li = jQuery(menu);
        ul_top = li.position().top + li.height() + parseInt(li.css("padding-top").replace(/px/, "")) + parseInt(li.css("padding-bottom").replace(/px/, ""));
      }

      ul.css("top", ul_top);
      if (jQuery(menu).offset().left - parseInt(ul.css("padding-left").replace(/px/, "")) + ul.width() > document.documentElement.clientWidth) {
        // If submenu goes off screen, move left instead.
        ul.css("left", document.documentElement.clientWidth - ul.width());
      }
      else {
        ul.css("left", jQuery(menu).position().left - parseInt(ul.css("padding-left").replace(/px/, "")));
      }
    }
  }
  else if (menu_position == 'left') {
    var padding_top = parseInt(ul.css("padding-top").replace(/px/, ""));
    if (parent_menu) {
      if (jQuery(menu).offset().top + ul.height() > document.documentElement.scrollHeight) {
	var delta = jQuery(menu).offset().top + ul.height() - document.documentElement.scrollHeight;
	ul.css("top", jQuery(menu).position().top - delta);
      } else {
	ul.css("top", jQuery(menu).position().top - parseInt(ul.css("padding-top").replace(/px/, "")));
      }
    }
    else {
      // Initial submenu
      if (jQuery(menu).position().top - padding_top + ul.height() > document.documentElement.scrollHeight) {
	ul.css("top", document.documentElement.scrollHeight - ul.height() - div_parent.offset().top); 
      } else {
	ul.css("top", jQuery(menu).position().top - parseInt(ul.css("padding-top").replace(/px/, "")));
      }
    }
    ul.css("left", jQuery(menu).position().left + jQuery(menu).width() + padding_left + padding_right);
  }
  else if (menu_position == 'right') {
    var ul_padding_left = jQuery(ul).css("padding-left");
    var ul_padding_right = jQuery(ul).css("padding-right");
    ul_padding_left = parseInt(ul_padding_left.replace(/px/, ""));
    ul_padding_right = parseInt(ul_padding_right.replace(/px/, ""));
    var ul_width = jQuery(ul).width();
    var max_width = 400;
    if (ul_width >= max_width) { ul_width = max_width; jQuery(ul).width(max_width) }
    ul.css("top", jQuery(menu).position().top - parseInt(ul.css("padding-top").replace(/px/, "")));
    var left;
    if (jQuery(menu).offset().left - ul_width - ul_padding_left - ul_padding_right < 0) {
      left = jQuery(menu).position().left + ul_width + ul_padding_left + ul_padding_right;
    } else {
      left = jQuery(menu).position().left - ul_width - ul_padding_left - ul_padding_right;
    }
    ul.css("left", left);
  }
  else if (menu_position == 'bottom') {
    if (parent_menu) {
      // Sub sub menu & beyond
      ul.css("top", jQuery(menu).position().top - ul.height() + jQuery(menu).height());
      // If submenu goes off screen, move left instead.
      if (jQuery(menu).offset().left + jQuery(menu).width() + padding_left + padding_right + ul.width() > document.documentElement.clientWidth) {
        ul.css("left", jQuery(menu).position().left - ul.width());
      }
      else {
        ul.css("left", jQuery(menu).position().left + jQuery(menu).width() + padding_left + padding_right);
      }
    } else {
      // Initial submenu
      var ul_top;
      if (div_parent.css('position')) {
        var li = jQuery(menu);
        ul_top = li.position().top - parseInt(li.css("padding-top").replace(/px/, "")) - ul.height();
      }

      ul.css("top", ul_top);
      if (jQuery(menu).offset().left - parseInt(ul.css("padding-left").replace(/px/, "")) + ul.width() > document.documentElement.clientWidth) {
        // If submenu goes off screen, move left instead.
        ul.css("left", document.documentElement.clientWidth - ul.width());
      }
      else {
        ul.css("left", jQuery(menu).position().left - parseInt(ul.css("padding-left").replace(/px/, "")));
      }
    }
  }
  ul.css("z-index", 500);
}
function _hide_sub_menus (now) {
  var time;
  if (now) {
    time = 1;
  } else {
    time = 500;
  }
  hide_timeouts.push(setTimeout(function () {
    if (!current_menu_item) {
      while (open_sub_menus.length) {
        var open_sub_menu = open_sub_menus.pop();
        open_sub_menu.css("visibility", "hidden");
      }
    }
  }, time));
}
