(function($) {
  var openMenu = null;
  var openLevel3Menu = null;
  function lemenuExpand(ev) {
    var e = $(this).parent();
    var m = e.children('ul');
    var pos = e.offset();
    var w = m.outerWidth();
    var h = m.outerHeight();
    var ww = $(window).width();
    var wh = $(window).height();
    if (pos.left + w > ww) {
      m.css({ left: (ww - w - pos.left) + 'px'});
    }
    if (pos.top + h > wh) {
      m.css({ top: (wh - h - pos.top) + 'px'});
    }
    if (openMenu != null && openMenu[0] != e[0]) {
      lemenuContract.apply(openMenu);
    }
    m.show('fast')
    .stopTime('l1');
    openMenu = e;
    return false;
  }
  function lemenuContract(ev) {
    var e = $(this).parent();
    var m = e.children('ul');
    m.hide('fast', function() {
      m.offset({ top: 0, left: 0});
    })
    .stopTime('l1')
    .find('ul ul')
    .hide();
    openMenu = null;
    return false;
  }
  function lemenuExpandLevel3(ev) {
    var e = $(this);
    var ww = $(window).width();
    if (openLevel3Menu != null) {
      if (openLevel3Menu[0] == e[0]) {
        return;
      }
      lemenuContractLevel3.apply(openLevel3Menu);
    }
    var m = $('ul', e).show();
    if (m.offset().left + m.outerWidth() > ww) {
      m.css({ left: 'auto', right: '26.5em' });
    } else {
      m.css({ left: '26.5em', right: 'auto' });
    }
    openLevel3Menu = e;
    return (m != null);
  }
  function lemenuContractLevel3(ev) {
    var e = $(this);
    $('ul', e).hide()
    .css({ left: '26.5em', right: 'auto' });
    e.stopTime('l3');
    openLevel3Menu = null;
  }
  $.fn.lemenu = function(options) {
    return this.each(function() {
      var settings = {
        selectMode: false
      };
      var $this = $(this);
      if (options) {
        $.extend(setting, options);
      }
      if ($this[0].tagName == 'SELECT') {
        var id = $this.attr('id');
        var name = $this.attr('name');
        var html = '<div class="nav" id="' + id + '_nav"><div class="select">' + $this.val() + '</div>';
        html += '<input type="hidden" value="' + $this.val() + '" id="' + id + '" name="' + name + '" />';
        html += '<ul class="level1">';
        $('option', $this).each(function() {
          html += '<li><a href="#' + $(this).attr('value') + '">' + $(this).html() + '</a></li>';
        });
        html += '</ul></div>';
        $this.before(html).remove();
        $this = $('#' + id + '_nav');
        $('li a', $this).click(function() {
          $('input', $this).val($(this).attr('href').substr(1));
          $('.select', $this).html($(this).html());
          lemenuContract.apply($this.children('ul'));
          return false;
        });
      }
      $('.select', $this).hover(lemenuExpand)
      .click(lemenuExpand);
      $this.children('ul').hover(function() {
        $(this).stopTime('l1');
      }, function() {
        $(this).stopTime('l1').oneTime(2000, 'l1', lemenuContract);
      })
      .hide();
      $('ul ul li:has(ul)', $this).hover(lemenuExpandLevel3, function() {
        $(this).stopTime('l3').oneTime(2000, 'l3', lemenuContractLevel3);
      })
      .click(lemenuExpandLevel3);
    });
  }
})(jQuery);
 
