Menu = {
	initialize: function ()
	{
		var submenu = '';

		$('menu').select('li').each(
			function (element)
			{
				if (!element.id.empty())
				{
					Event.observe(element, 'click', toggle.bindAsEventListener(element, element.id.replace('-menu-item', '')));
				}
			}
		);

		function toggle(event, name)
		{
			var item = $(name + '-menu-item');
			var wrapper = $(name + '-menu-wrapper');

			if (!submenu.empty() && submenu != name)
			{
				$(submenu + '-menu-wrapper').hide();
				$(submenu + '-menu-item').removeClassName('active');
			}

			if (!wrapper.visible())
			{
				submenu = name;

				item.addClassName('active');
				wrapper.appear({ duration: 0.3 });
			}
			else
			{
				wrapper.hide();
				item.removeClassName('active');

				submenu = '';
			}
		}

		try
		{
			if (!Prototype.Browser.IE)
			{
				$$('#products-menu-wrapper li.item', '#designers-menu-wrapper li.item').each(
					function (element)
					{
						var scope = element.identify() + '-scope';

						element.setStyle({ opacity: 0.4 });

						Event.observe(element, 'mouseenter', itemMouseEnter.bindAsEventListener(element, scope));
						Event.observe(element, 'mouseleave', itemMouseLeave.bindAsEventListener(element, scope));
					}
				);
			}
		}
		catch (error)
		{
		}

		function itemMouseEnter(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(this, { duration: 0.4, to: 1.0, queue: { position: 'end', scope: scope }});
		}

		function itemMouseLeave(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(this, { duration: 0.4, to: 0.4, queue: { position: 'end', scope: scope }})
		}
	}
}

MountingTypesMenu = {
	initialize: function ()
	{
		$('mounting-types-menu').select('li').each(
			function (element)
			{
				Event.observe(element, 'click', toggle.bindAsEventListener(element, $('mounting-type-lamps-' + element.id.match(/\d/) + '-menu-wrapper')));
			}
		);

		var resized;

		function toggle(event, wrapper)
		{
			if (this.hasClassName('active'))
			{
				wrapper.hide();

				this.removeClassName('active');
			}
			else
			{
				$('mounting-types-menu').select('li').invoke('removeClassName', 'active');
				$$('div.mounting-type-lamps-menu-wrapper').invoke('hide');

				this.addClassName('active');

				/*new Effect.Parallel([
						new Effect.SlideDown(wrapper, { sync: true }),
						new Effect.Appear(wrapper, { sync: true }),
					], { duration: 0.5, afterUpdate: resize.bind(this, wrapper) }
				);*/

				var viewport = wrapper.down('div');
				var content = wrapper.down('div', 1);
				var list = wrapper.down('ul');

				viewport.setStyle({ height: 'auto' });
				content.setStyle({ width: '10000px' });

				content.resized = false;

				wrapper.appear({ duration: 0.5, afterUpdate: resize.bind(this, viewport, content, list) });
			}
		}

		function resize(viewport, content, list)
		{
			if (!content.resized)
			{
				if (content.getWidth() > list.getWidth())
				{
					content.setStyle({ width: list.getWidth().toString() + 'px' });
				}

				if (list.getHeight() > viewport.clientHeight)
				{
					viewport.setStyle({ height: (list.getHeight() + (list.getHeight() - viewport.clientHeight)).toString() + 'px' });
				}

				content.resized = true;
			}
		}
	}
}

LoginTooltip = {
	initialize: function ()
	{
		try
		{
			var label = $('login-label');
			var tooltip = $('login-tooltip');

			if (tooltip != null)
			{
				var scope = tooltip.identify() + '-scope';

				tooltip.setStyle({
					top: (label.positionedOffset().top + label.getHeight() + 8).toString() + 'px',
					left: (label.positionedOffset().left + parseInt(label.getWidth() / 2) - 27).toString() + 'px'
				});

				Event.observe(label, 'mouseenter', labelMouseEnter.bindAsEventListener(label, tooltip, scope));
				Event.observe(label, 'mouseleave', labelMouseLeave.bindAsEventListener(label, tooltip, scope));
				Event.observe(tooltip, 'mouseenter', tooltipMouseEnter.bindAsEventListener(tooltip, scope));
				Event.observe(tooltip, 'mouseleave', tooltipMouseLeave.bindAsEventListener(tooltip, scope));
			}
		}
		catch (error)
		{
		}

		function labelMouseEnter(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(tooltip, { duration: 0.4, to: 0.96, queue: { position: 'end', scope: tooltip.identify() + '-mouseenter-scope', limit: 1 }});

			/*tooltip.select('form').each(
				function (form)
				{
					if (form.visible())
					{
						form.focusFirstElement();
					}
				}
			);*/
		}

		function labelMouseLeave(event, tooltip, scope)
		{
			new Effect.Fade(tooltip, { delay: 2.0, duration: 0.4, queue: { position: 'end', scope: scope }});
		}

		function tooltipMouseEnter(event, scope)
		{
			labelMouseEnter(event, this, scope);
		}

		function tooltipMouseLeave(event, scope)
		{
			labelMouseLeave(event, this, scope);
		}
	}
}

HighlightedProductsTooltip = {
	initialize: function ()
	{
		try
		{
			var label = $('highlighted-products').down('.label a');
			var tooltip = $('highlighted-products').down('.tooltip');

			if (tooltip != null)
			{
				var scope = tooltip.identify() + '-scope';

				tooltip.setStyle({
					top: (label.positionedOffset().top - parseInt((tooltip.getHeight() - label.getHeight()) / 2)).toString() + 'px',
					left: (label.positionedOffset().left - tooltip.getWidth() - 6).toString() + 'px'
				});

				Event.observe(label, 'mouseenter', labelMouseEnter.bindAsEventListener(label, tooltip, scope));
				Event.observe(label, 'mouseleave', labelMouseLeave.bindAsEventListener(label, tooltip, scope));
				Event.observe(tooltip.down('ul'), 'mouseenter', tooltipMouseEnter.bindAsEventListener(tooltip, scope));
				Event.observe(tooltip.down('ul'), 'mouseleave', tooltipMouseLeave.bindAsEventListener(tooltip, scope));

				if (!Prototype.Browser.IE)
				{
					tooltip.select('.product').each(
						function (element)
						{
							var scope = element.identify() + '-scope';

							element.setStyle({ opacity: 0.4 });

							Event.observe(element, 'mouseenter', productMouseEnter.bindAsEventListener(element, scope));
							Event.observe(element, 'mouseleave', productMouseLeave.bindAsEventListener(element, scope));
						}
					);
				}
			}
		}
		catch (error)
		{
		}

		function labelMouseEnter(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(tooltip, { duration: 0.4, to: 0.96, queue: { position: 'end', scope: tooltip.identify() + '-mouseenter-scope', limit: 1 }});
		}

		function labelMouseLeave(event, tooltip, scope)
		{
			new Effect.Fade(tooltip, { delay: 2.0, duration: 0.4, queue: { position: 'end', scope: scope }});
		}

		function tooltipMouseEnter(event, scope)
		{
			labelMouseEnter(event, this, scope);
		}

		function tooltipMouseLeave(event, scope)
		{
			labelMouseLeave(event, this, scope);
		}

		function productMouseEnter(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(this, { duration: 0.4, to: 1.0, queue: { position: 'end', scope: scope }});
		}

		function productMouseLeave(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(this, { duration: 0.4, to: 0.4, queue: { position: 'end', scope: scope }})
		}
	}
}

MountingTypeProductsTooltip = {
	initialize: function ()
	{
		try
		{
			$('product-mounting-types').select('li.mounting-type').each(
				function (element)
				{
					var label = element.down('.label');
					var tooltip = element.down('.tooltip');
					var scope = tooltip.identify() + '-scope';

					tooltip.setStyle({
						top: (label.positionedOffset().top + label.getHeight()).toString() + 'px',
						left: (label.positionedOffset().left - 10).toString() + 'px'
					});

					Event.observe(label, 'mouseenter', labelMouseEnter.bindAsEventListener(label, tooltip, scope));
					Event.observe(label, 'mouseleave', labelMouseLeave.bindAsEventListener(label, tooltip, scope));
					Event.observe(tooltip.down('div'), 'mouseenter', tooltipMouseEnter.bindAsEventListener(tooltip, scope));
					Event.observe(tooltip.down('div'), 'mouseleave', tooltipMouseLeave.bindAsEventListener(tooltip, scope));

					if (!Prototype.Browser.IE)
					{
						tooltip.select('.product').each(
							function (element)
							{
								var scope = element.identify() + '-scope';

								element.setStyle({ opacity: 0.4 });

								Event.observe(element, 'mouseenter', productMouseEnter.bindAsEventListener(element, scope));
								Event.observe(element, 'mouseleave', productMouseLeave.bindAsEventListener(element, scope));
							}
						);
					}
				}
			);
		}
		catch (error)
		{
		}

		function labelMouseEnter(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(tooltip, { duration: 0.4, to: 0.96, queue: { position: 'end', scope: scope }});
		}

		function labelMouseLeave(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(tooltip, { duration: 0.0, queue: { position: 'end', scope: scope }});
		}

		function tooltipMouseEnter(event, scope)
		{
			labelMouseEnter(event, this, scope);
		}

		function tooltipMouseLeave(event, scope)
		{
			labelMouseLeave(event, this, scope);
		}

		function productMouseEnter(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(this, { duration: 0.4, to: 1.0, queue: { position: 'end', scope: scope }});
		}

		function productMouseLeave(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(this, { duration: 0.4, to: 0.4, queue: { position: 'end', scope: scope }})
		}
	}
}

LampGallery = {
	initialize: function ()
	{
		var imageGalleryLabel = $('lamp-image-gallery-label');
		var imageGalleryTooltip = $('lamp-image-gallery-tooltip');

		var videoGalleryLabel = $('lamp-video-gallery-label');
		var videoGalleryTooltip = $('lamp-video-gallery-tooltip');

		setupGallery(imageGalleryLabel, imageGalleryTooltip);
		setupGallery(videoGalleryLabel, videoGalleryTooltip);

		function setupGallery(label, tooltip)
		{
			if (label != null && tooltip != null)
			{
				var toggleTooltip = toggle.bindAsEventListener(this, label, tooltip);
				var hideTooltip = hide.bindAsEventListener(this, label, tooltip);

				Event.observe(label, 'click', toggleTooltip);
			}

			function toggle(event, label, tooltip)
			{
				if (imageGalleryTooltip != null)
				{
					imageGalleryTooltip.hide();
				}

				if (videoGalleryTooltip != null)
				{
					videoGalleryTooltip.hide();
				}

				Event.stopObserving(document, 'click', hideTooltip);

				if (!tooltip.visible())
				{
					Event.observe(document, 'click', hideTooltip);

					tooltip.style.top = (label.positionedOffset().top + label.getHeight() + 4).toString() + 'px';
					tooltip.style.left = (label.positionedOffset().left + parseInt(label.getWidth() / 2) - 26).toString() + 'px';

					// tooltip.setOpacity(1.0);
					tooltip.appear({ duration: 0.3, to: 0.9 });
				}
				else
				{
					tooltip.hide();
				}

				event.stop();
			}

			function hide(event, label, tooltip)
			{
				Event.stopObserving(document, 'click', hideTooltip);

				tooltip.hide();
			}
		}
	}
}

ArticleGallery = {
	initialize: function ()
	{
		var imageGalleryLabel = $('article-image-gallery-label');
		var imageGalleryTooltip = $('article-image-gallery-tooltip');

		var videoGalleryLabel = $('article-video-gallery-label');
		var videoGalleryTooltip = $('article-video-gallery-tooltip');

		setupGallery(imageGalleryLabel, imageGalleryTooltip);
		setupGallery(videoGalleryLabel, videoGalleryTooltip);

		function setupGallery(label, tooltip)
		{
			if (label != null && tooltip != null)
			{
				var toggleTooltip = toggle.bindAsEventListener(this, label, tooltip);
				var hideTooltip = hide.bindAsEventListener(this, label, tooltip);

				Event.observe(label, 'click', toggleTooltip);
			}

			function toggle(event, label, tooltip)
			{
				if (imageGalleryTooltip != null)
				{
					imageGalleryTooltip.hide();
				}

				if (videoGalleryTooltip != null)
				{
					videoGalleryTooltip.hide();
				}

				Event.stopObserving(document, 'click', hideTooltip);

				if (!tooltip.visible())
				{
					Event.observe(document, 'click', hideTooltip);

					tooltip.style.top = (label.positionedOffset().top - tooltip.getHeight() - 4).toString() + 'px';
					tooltip.style.left = (label.positionedOffset().left + parseInt(label.getWidth() / 2) - 26).toString() + 'px';

					// tooltip.setOpacity(1.0);
					tooltip.appear({ duration: 0.3, to: 0.9 });
				}
				else
				{
					tooltip.hide();
				}

				event.stop();
			}

			function hide(event, label, tooltip)
			{
				Event.stopObserving(document, 'click', hideTooltip);

				tooltip.hide();
			}
		}
	}
}

CertificationTooltip = {
	initialize: function ()
	{
		try
		{
			$('certifications').select('.certification').each(
				function (element)
				{
					var tooltip = element.down('.tooltip');
					var scope = element.identify() + '-scope';

					Event.observe(element, 'mouseenter', mouseEnter.bindAsEventListener(element, tooltip, scope));
					Event.observe(element, 'mouseleave', mouseLeave.bindAsEventListener(element, tooltip, scope));
				}
			);
		}
		catch (error)
		{
		}

		function mouseEnter(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			tooltip.setStyle({
				top: (this.positionedOffset().top + this.getHeight() + 4).toString() + 'px',
				left: (this.positionedOffset().left + parseInt(this.getWidth() / 2) - (20 + 7)).toString() + 'px'
			});

			new Effect.Appear(tooltip, { duration: 0.4, to: 0.96, queue: { position: 'end', scope: scope }});
		}

		function mouseLeave(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(tooltip, { duration: 0.4, queue: { position: 'end', scope: scope }})
		}
	}
}

BodyColorsTooltip = {
	initialize: function ()
	{
		var label = $('body-colors-list-label');
		var tooltip = $('body-colors-list-tooltip');

		if (label != null && tooltip != null)
		{
			Event.observe(label, 'click', show.bindAsEventListener(this, label, tooltip));
		}

		function show(event, label, tooltip)
		{
			if (!tooltip.visible())
			{
				tooltip.style.top = (label.positionedOffset().top + parseInt(label.getHeight() / 2) - parseInt(tooltip.getHeight() / 2)).toString() + 'px';
				tooltip.style.left = (label.positionedOffset().left - tooltip.getWidth() - 10).toString() + 'px';

				// tooltip.setOpacity(1.0);
				tooltip.appear({ duration: 0.3, to: 0.9 });
			}
		}
	}
}

AreasList = {
	initialize: function ()
	{
		var labels = $$('h4.areas-list-label').compact();
		var tooltips = $$('div.areas-list-tooltip').compact();

		for (var i = 0; i < labels.length; i++)
		{
			Event.observe(labels[i], 'click', showTooltip.bindAsEventListener(labels[i], tooltips[i]));
		}

		function showTooltip(event, tooltip)
		{
			if (!tooltip.visible())
			{
				tooltips.invoke('hide');

				tooltip.appear({ duration: 0.3 });
			}
		}
	}
}

RetailerImageTooltip = {
	initialize: function ()
	{
		try
		{
			$('retailers').select('.retailer').each(
				function (element)
				{
					var tooltip = element.down('.tooltip');
					var scope = element.identify() + '-scope';

					if (tooltip != null)
					{
						Event.observe(element, 'mouseenter', mouseEnter.bindAsEventListener(element, tooltip, scope));
						Event.observe(element, 'mouseleave', mouseLeave.bindAsEventListener(element, tooltip, scope));
					}
				}
			);
		}
		catch (error)
		{
		}

		function mouseEnter(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			tooltip.setStyle({
				top: (this.positionedOffset().top - tooltip.getHeight() + 6).toString() + 'px',
				left: (this.positionedOffset().left + parseInt(this.getWidth() / 2) - parseInt(tooltip.getWidth() / 2)).toString() + 'px'
			});

			new Effect.Appear(tooltip, { duration: 0.4, to: 0.96, queue: { position: 'end', scope: scope }});
		}

		function mouseLeave(event, tooltip, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(tooltip, { duration: 0.4, queue: { position: 'end', scope: scope }})
		}
	}
}

PrivacyPolicyTooltip = {
	initialize: function ()
	{
		var tooltip = $('privacy-policy-tooltip');
		var hideTooltip = hide.bindAsEventListener(this, tooltip);

		if (tooltip != null)
		{
			$$('span.privacy-policy-label').each(
				function (label)
				{
					Event.observe(label, 'click', toggle.bindAsEventListener(this, label, tooltip));
				}
			);
		}

		function toggle(event, label, tooltip)
		{
			if (tooltip.visible())
			{
				tooltip.hide();
			}

			tooltip.style.top = (label.positionedOffset().top - tooltip.getHeight() - 10).toString() + 'px';
			tooltip.style.left = (label.positionedOffset().left - parseInt(tooltip.getWidth() / 2) + 20).toString() + 'px';

			// tooltip.setOpacity(1.0);
			tooltip.appear({ duration: 0.3, to: 0.9 });

			event.stop();

			Event.observe(document, 'click', hideTooltip);
		}

		function hide(event, tooltip)
		{
			Event.stopObserving(document, 'click', hideTooltip);

			tooltip.hide();
		}

		/*var label = $('privacy-policy-label');
		var tooltip = $('privacy-policy-tooltip');

		var toggleTooltip = toggle.bindAsEventListener(this, label, tooltip);
		var hideTooltip = hide.bindAsEventListener(this, label, tooltip);

		if (tooltip != null)
		{
			Event.observe(label, 'click', toggleTooltip);
		}


*/
	}
}

PublicationsList = {
	initialize: function ()
	{
		try
		{
			if (!Prototype.Browser.IE)
			{
				$('publications-list').select('a').each(
					function (element)
					{
						var scope = element.identify() + '-scope';

						element.setStyle({ opacity: 0.4 });

						Event.observe(element, 'mouseenter', publicationMouseEnter.bindAsEventListener(element, scope));
						Event.observe(element, 'mouseleave', publicationMouseLeave.bindAsEventListener(element, scope));
					}
				);
			}
		}
		catch (error)
		{
		}

		function publicationMouseEnter(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Appear(this, { duration: 0.4, to: 1.0, queue: { position: 'end', scope: scope }});
		}

		function publicationMouseLeave(event, scope)
		{
			Effect.Queues.get(scope).invoke('cancel');

			new Effect.Fade(this, { duration: 0.4, to: 0.4, queue: { position: 'end', scope: scope }})
		}
	}
}

document.observe('dom:loaded', function () {
	Menu.initialize();
	MountingTypesMenu.initialize();
	LoginTooltip.initialize();
	HighlightedProductsTooltip.initialize();
	MountingTypeProductsTooltip.initialize();
	LampGallery.initialize();
	ArticleGallery.initialize();
	CertificationTooltip.initialize();
	BodyColorsTooltip.initialize();
	AreasList.initialize();
	RetailerImageTooltip.initialize();
	PrivacyPolicyTooltip.initialize();
	PublicationsList.initialize();
});

function submitTo(form, element, url, fragment)
{
	try
	{
		form.elements['focus'].value = element.name;
		form.action = url + (!Object.isUndefined(fragment) ? ('#' + fragment) : '');

		form.submit();
	}
	catch (error)
	{
	}
}

function setFocus(element)
{
	try
	{
		element.focus();
	}
	catch (error)
	{
	}
}