var igDropdownConfig			= new Object();
var igDropdownTweenInProgress	= new Object();
var igDropdownMenuStatus		= new Object();

var igDropdownFirstMenuId	= '';
var igDropdownLastMenuId	= '';

var igDropdownIE	= 0;
var igDropdownFF	= 0;

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
{
	var ieversion=new Number(RegExp.$1);
	if (ieversion>=8) igDropdownIE=8;
	else if (ieversion>=7) igDropdownIE=7;
	else if (ieversion>=6) igDropdownIE=6;
}

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
{
	var ffversion=new Number(RegExp.$1);
	if (ffversion>=3) igDropdownFF=3;
	else if (ffversion>=2) igDropdownFF=2;
	else if (ffversion>=1) igDropdownFF=1;
}

function igDropdownToggleMenuNone(item, status)
{
	var ul = $(item.getElementsByTagName('ul')[0].id);
	
	if (status)	ul.show();
	else		ul.hide();
}

function igDropdownToggleMenuSlide(item, status)
{
	var ul = $(item.getElementsByTagName('ul')[0].id);
	
	igDropdownTweenInProgress[item.id]=true;
	
	if (status)
	{
		new Effect.SlideDown(ul, {
			duration	: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			afterFinish	: function (e) {
				igDropdownTweenInProgress[item.id]=false;

				if (!igDropdownMenuStatus[item.id])
				{
					igDropdownMenuStatus[item.id]=true;
					igDropdownToggleMenu(item, false);
				}
			}
		});
	}
	else
	{
		new Effect.SlideUp(ul, {
			duration	: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			afterFinish	: function (e) {
				igDropdownTweenInProgress[item.id]=false;
			}
		});
	}
}

function igDropdownToggleMenuBlind(item, status)
{
	var ul = $(item.getElementsByTagName('ul')[0].id);
	igDropdownTweenInProgress[item.id]=true;
	
	if (status)
	{
		new Effect.BlindDown(ul, {
			duration	: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			afterFinish	: function (e) {
				igDropdownTweenInProgress[item.id]=false;

				if (!igDropdownMenuStatus[item.id])
				{
					igDropdownMenuStatus[item.id]=true;
					igDropdownToggleMenu(item, false);
				}
			}
		});
	}
	else
	{
		new Effect.BlindUp(ul, {
			duration	: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			afterFinish	: function (e) {
				igDropdownTweenInProgress[item.id]=false;
			}
		});
	}
}

function igDropdownToggleMenuFade(item, status)
{
	var ul = $(item.getElementsByTagName('ul')[0].id);
	igDropdownTweenInProgress[item.id]=true;
	
	if (status)
	{
		ul.setStyle({
			'visibility' 	: 'visible',
			'opacity'	 	: 0.0
		});
		new Effect.Opacity(ul, {
			duration	: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			from		: 0.0,
			to			: parseFloat(igDropdownConfig['style-menu/opacity']),
			afterFinish	: function (e) {
				igDropdownTweenInProgress[item.id]=false;

				if (!igDropdownMenuStatus[item.id])
				{
					igDropdownMenuStatus[item.id]=true;
					igDropdownToggleMenu(item, false);
				}
			}
		});
	}
	else
	{
		new Effect.Opacity(ul, {
			duration	: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			from		: parseFloat(igDropdownConfig['style-menu/opacity']),
			to			: 0.0,
			afterFinish	: function (effect) {
				ul.setStyle({
					'opacity'	 : 0.0,
					'visibility' : 'hidden'
				});
				igDropdownTweenInProgress[item.id]=false;
			}
		});
	}
}

function igDropdownCloseOthers(item)
{
	for (var i in igDropdownMenuStatus)
	{
		if (i == item.id) continue;

		if (igDropdownTweenInProgress[i])
		{
			igDropdownMenuStatus[i]=false;
		}
 		else
 		{
 			igDropdownToggleMenu($(i), false);
 		}
	}
}

function igDropdownToggleMenu(item, status)
{
	var ul		= $(item.id+'-ul');

 	if ((igDropdownMenuStatus[item.id]==status) || igDropdownTweenInProgress[item.id]) return;

	igDropdownMenuStatus[item.id]=status;
 	if (status)
 	{
 		igDropdownCloseOthers(item);
 		igDropdownSetupMenu(item);
 	}

	switch (igDropdownConfig['effects/menu-effect'])
	{
		case 'fade':
			return igDropdownToggleMenuFade(item, status);
			
		case 'blind':
			return igDropdownToggleMenuBlind(item, status);
			
		case 'slide':
			return igDropdownToggleMenuSlide(item, status);
	}
	
	return igDropdownToggleMenuNone(item, status);
}

function igDropdownSetupMenu(item)
{
	if (!item) return;
	if (!document.getElementById(item.id+'-ul')) return;

	var ul		= $(item.id+'-ul');
	var li		= $(item.id+'-li');

	var divOut	= $(item.id+'-outerbox');
	var divIn	= $(item.id+'-innerbox');
	var table	= $(item.id+'-table');

	// Position
	var leftPos=0;
	switch (igDropdownConfig['asset/open-position'])
	{
		case 'relative':
			leftPos=getAbsolutePos($('org-'+item.id)).x;
			break;

		case 'absolute-left':
			leftPos=getAbsolutePos($('nav')).x;
			break;

		case 'absolute-right':
			leftPos=
				getAbsolutePos($('nav')).x
				+parseInt($('nav').getWidth())
				-parseInt(igDropdownConfig['style-menu/width'])
			;
			break;

		case 'absolute-first':
			leftPos=getAbsolutePos($('org-'+igDropdownFirstMenuId)).x;
			break;

		case 'absolute-last':
			leftPos=getAbsolutePos($('org-'+igDropdownLastMenuId)).x;
			break;
	}

	leftPos-=parseInt(igDropdownConfig['style-menu/border-size']);
	
	$(item.id).setStyle({
		display			: 'block',
		zIndex			: '999',
		position		: 'absolute',
		left			: leftPos+'px',
		top				: (getAbsolutePos($('org-'+item.id)).y+$('org-'+item.id).getHeight())+'px'
	});
}

function igDropdownInitMenu(item)
{
	if (!item) return;
	if (!document.getElementById(item.id+'-ul')) return;

	var ul		= $(item.id+'-ul');
	var li		= $(item.id+'-li');

	var divOut	= $(item.id+'-outerbox');
	var divIn	= $(item.id+'-innerbox');
	var table	= $(item.id+'-table');

	igDropdownMenuStatus[item.id]=0;
	igDropdownTweenInProgress[item.id]=0;

	ul.setStyle({
		'position'	: 'absolute',
		'display'	: 'block'
	});

	// Position and size
	igDropdownSetupMenu(item);

	var settingsIn;
	var settingsOut;

	// Draw corners
	if (parseInt(igDropdownConfig['style-menu/open-top']))
	{
		settingsIn = {
			tl: { radius: 0 },
			tr: { radius: 0 },
			bl: { radius: parseInt(igDropdownConfig['style-menu/radius-bl']) },
			br: { radius: parseInt(igDropdownConfig['style-menu/radius-br']) },
			antiAlias: true
		};
		settingsOut = {
			tl: { radius: 0 },
			tr: { radius: 0 },
			bl: { radius: parseInt(igDropdownConfig['style-menu/radius-bl'])+parseInt(igDropdownConfig['style-menu/border-size']) },
			br: { radius: parseInt(igDropdownConfig['style-menu/radius-br'])+parseInt(igDropdownConfig['style-menu/border-size']) },
			antiAlias: true
		};
	}
	else
	{
		settingsIn = {
			tl: { radius: parseInt(igDropdownConfig['style-menu/radius-tl']) },
			tr: { radius: parseInt(igDropdownConfig['style-menu/radius-tr']) },
			bl: { radius: parseInt(igDropdownConfig['style-menu/radius-bl']) },
			br: { radius: parseInt(igDropdownConfig['style-menu/radius-br']) },
			antiAlias: true
		};
		settingsOut = {
			tl: { radius: parseInt(igDropdownConfig['style-menu/radius-tl'])+parseInt(igDropdownConfig['style-menu/border-size']) },
			tr: { radius: parseInt(igDropdownConfig['style-menu/radius-tr'])+parseInt(igDropdownConfig['style-menu/border-size']) },
			bl: { radius: parseInt(igDropdownConfig['style-menu/radius-bl'])+parseInt(igDropdownConfig['style-menu/border-size']) },
			br: { radius: parseInt(igDropdownConfig['style-menu/radius-br'])+parseInt(igDropdownConfig['style-menu/border-size']) },
			antiAlias: true
		};
	}

	// Set outer border
	divOut.setStyle({
		'opacity'	: parseFloat(igDropdownConfig['style-menu/border-opacity']),
		'width'		: (
						parseInt(igDropdownConfig['style-menu/width'])
						+parseInt(igDropdownConfig['style-menu/border-size'])*2
					)+'px'
	});

	divIn.setStyle({
		'left'		: parseInt(igDropdownConfig['style-menu/border-size'])+'px',
		'width'		: (
						parseInt(igDropdownConfig['style-menu/width'])
						-parseInt(igDropdownConfig['style-menu/padding'])*2
					)+'px'
	});

	// Vertical
	if (parseInt(igDropdownConfig['style-menu/open-top']))
	{
		divOut.setStyle({
			'height'	: (parseInt($(divIn.id).getHeight())+parseInt(igDropdownConfig['style-menu/border-size']))+'px'
		});
		divIn.setStyle({
			'top'		: parseInt($(li.id).getStyle('paddingTop')+1)+'px'
		});
	}
	else
	{
		divOut.setStyle({
			'height'	: (parseInt($(divIn.id).getHeight())+parseInt(igDropdownConfig['style-menu/border-size'])*2)+'px'
		});
		
		divIn.setStyle({
			'top'		: (parseInt(igDropdownConfig['style-menu/border-size'])+parseInt($(li.id).getStyle('paddingTop')))+'px'
		});
	}

	// Apply corners
	curvyCorners(settingsOut, "#"+divOut.id);
	curvyCorners(settingsIn, "#"+divIn.id);

	// Hide menu
	if (igDropdownConfig['effects/menu-effect'] == 'fade')
	{
		ul.setStyle({ 'visibility' : 'hidden' });
	}
	else
	{
		ul.hide();

		if (!igDropdownIE || igDropdownIE>7)
			ul.setStyle({ 'opacity' : parseFloat(igDropdownConfig['style-menu/opacity']) });
	}

	// Attach events
	$('org-'+item.id).onmouseout = function(e)
	{
		if (!e) var e = window.event;
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		while (reltg.tagName != 'BODY')
		{
			if (reltg.id == this.id) return;
			if ('org-'+reltg.id == this.id) return;
 			if (reltg.id.replace('org-', '') == this.id) return;
			reltg = reltg.parentNode;
		}

   		igDropdownToggleMenu(item, false);
	};

	$(item.id).onmouseout = function(e)
	{
		if (!e) var e = window.event;
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		while (reltg.tagName != 'BODY')
		{
			if (reltg.id == this.id) return;
			if ('org-'+reltg.id == this.id) return;
 			if (reltg.id.replace('org-', '') == this.id) return;
			reltg = reltg.parentNode;
		}

   		igDropdownToggleMenu(item, false);
	};

	if (igDropdownConfig['asset/menu-activation'] == 'click')
	{
		$('org-'+item.id).onclick = function(e)
		{
			igDropdownToggleMenu(item, true);
		};
	}
	else
	{
		$('org-'+item.id).onmouseover = function(e)
		{
			igDropdownToggleMenu(item, true);
		};
	}
}

function igDropdownInit()
{
	var root=$('nav-ig-dropdown');
	if (!root) return;

	// Fix values
	if (!igDropdownConfig['style-menu/border-size']) igDropdownConfig['style-menu/border-size']=0;
	if (!igDropdownConfig['style-menu/padding']) igDropdownConfig['style-menu/padding']=0;

	// Disable fade effects on IE6 and IE7
	if (
		(igDropdownConfig['effects/menu-effect'] == 'fade') &&
 		igDropdownIE && (igDropdownIE<8)
 	) igDropdownConfig['effects/menu-effect']='none';

	// Enumarate menus
 	var items=root.getElementsByTagName('li');

 	// Find first and last
 	for (var i=0; i<items.length; i++)
	{
  		if (/level0/.test(items[i].className))
  		{
  			if (!igDropdownFirstMenuId) igDropdownFirstMenuId=items[i].id;
  			igDropdownLastMenuId=items[i].id;
  		}
	}

	// Initialize menu
	for (var i=0; i<items.length; i++)
	{
  		if (/level0/.test(items[i].className))
  		{
  			igDropdownInitMenu(items[i]);
  		}
	}
}
