// $Id: activemenu.js,v 1.19.2.10 2008/04/14 16:10:31 nedjo Exp $

Drupal.behaviors.activeMenu = function (context)
{
	// The elements supported. Each can designate a different uri.
	var menus = Drupal.settings.activemenu;
	for (var menu in menus)
	{
		var mid = menu.match(/[0-9]*/g).join('');
		$(menu + ' li.expanded:not(.activemenu-processed)').each(function ()
		{
			Drupal.preventSelect(this);
			$(this)
				.click(function (e) {
					Drupal.activemenuToggle(this, e);
				})
				.addClass('activemenu-processed')
			});
		$(menu + ' li.collapsed:not(.activemenu-processed)').each(function()
		{
			if ($(this).children('ul').length > 0)
			{
				return;
			}
			var path = Drupal.getPath($('a:first', this).attr('href'));
			var mid = this.id;
			var url = Drupal.url(menus[menu]);
			var elt = this;
			Drupal.preventSelect(this);
			$(this)
				.click(function (e)
				{
					var offset = Drupal.mousePosition(e).x - Drupal.absolutePosition(this).x;
					var padding = $(this).css('padding-left');
					// Determine if we are in the selection area.
					if (offset < (padding.slice(-2) == "px" ? parseInt(padding) : 18))
					{
						$(elt).addClass('loading');
						// Ajax GET request for autocompletion
						$.ajax(
						{
							type: 'POST',
							url: url,
							data: 'mid=' + mid + '&path=' + path,
							success: function (data) {
								$(elt).removeClass('loading');
								if ($(elt).children('ul').length > 0)
								{
									return;
								}
								data = Drupal.parseJson(data);
								$(elt)
									.append(data.content)
									.removeClass('collapsed')
									.addClass('expanded')
									.unbind('click')
									.click(function (e)
									{
										Drupal.activemenuToggle(this, e);
									})
									.find('ul:first')
									.slideDown(200);
								Drupal.attachBehaviors(elt);
							},
							error: function (xmlhttp)
							{
								if(xmlhttp.status >= 400)
									alert('An HTTP error '+ xmlhttp.status +' occured.\n' + url);
							}
						});
						return false;
					}
				})
				.addClass('activemenu-processed');
		});
	}
};

Drupal.activemenuToggle = function (menu, e)
{
	// Only toggle if this is the element that was clicked.
	// Otherwise, a parent li element might be toggled too.
	// Don't animate multiple times.
	if (menu == Drupal.getTarget(e) && !$(menu).is('.animating')) {
		if ($(menu).is('.collapsed')) {
			$(menu)
				.addClass('animating')
				.removeClass('collapsed')
				.addClass('expanded')
				.find('ul:first')
				.slideDown(200, function(){
					$(this).parents('.animating').removeClass('animating')
				});
		} 
		else {
			$(menu)
				.addClass('animating')
				.removeClass('expanded')
				.addClass('collapsed')
				.find('ul:first')
				.slideUp(200, function(){
					$(this).parents('.animating').removeClass('animating')
				});
		}
	}
};

