/**
 * IDEALIAGroup srl
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the EULA
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.idealiagroup.com/magento-ext-license.html
 *
 * @category   IG
 * @package    IG_DropDown
 * @copyright  Copyright (c) 2010-2011 IDEALIAGroup srl (http://www.idealiagroup.com)
 * @license    http://www.idealiagroup.com/magento-ext-license.html
 */
var igDropdownConfig = new Object();
var igDropdownTweenInProgress = new Object();
var igDropdownMenuStatus = new Object();
var igDropdownMenuStatusReal = new Object();

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

var igDropdownIE = 0;
var igDropdownFF = 0;

var igDropDownTablesWidth = new Object();

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 igDropdownAfterTween(item, status)
{
	if (igDropdownMenuStatusReal[item.id] != status)
		igDropdownToggleMenu(item, igDropdownMenuStatusReal[item.id]);
}

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);
				}
				
				igDropdownAfterTween(item, status);
			}
		});
	}
	else 
	{
		new Effect.SlideUp(ul, {
			duration: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			afterFinish: function(e)
			{
				igDropdownTweenInProgress[item.id] = false;
				igDropdownAfterTween(item, status);
			}
		});
	}
}

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);
				}
				
				igDropdownAfterTween(item, status);
			}
		});
	}
	else 
	{
		new Effect.BlindUp(ul, {
			duration: parseFloat(igDropdownConfig['effects/menu-effect-duration']),
			afterFinish: function(e)
			{
				igDropdownTweenInProgress[item.id] = false;
				igDropdownAfterTween(item, status);
			}
		});
	}
}

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);
				}
				
				igDropdownAfterTween(item, status);
			}
		});
	}
	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;
				
				igDropdownAfterTween(item, status);
			}
		});
	}
}

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 (!status) return;
	
	igDropdownMenuStatusReal[item.id] = status;
	
	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');
	
	if (!igDropDownTablesWidth[item.id])
		igDropDownTablesWidth[item.id] = parseInt(igDropdownConfig['style-menu/width-per-column']) ? divIn.getWidth() : parseInt(igDropdownConfig['style-menu/width']);
	
	var leftEdge = 0;
	var rightEdge = 999999;
	
	switch (igDropdownConfig['asset/respect-edges'])
	{
		case 'menu':
			leftEdge = getAbsolutePos($('nav')).x;
			rightEdge = getAbsolutePos($('nav')).x + parseInt($('nav').getWidth());
			break;
			
		case 'menu-items':
			leftEdge = getAbsolutePos($('org-' + igDropdownFirstMenuId)).x;
			rightEdge = getAbsolutePos($('org-' + igDropdownLastMenuId)).x + parseInt($('org-' + igDropdownLastMenuId).getWidth());
			break;
	}
	
	// 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()) -
			igDropDownTablesWidth[item.id];
			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']);
	
	if (leftPos < leftEdge) leftPos = leftEdge;
	if (leftPos + igDropDownTablesWidth[item.id] > rightEdge) leftPos -= leftPos + igDropDownTablesWidth[item.id] - rightEdge;
	
	$(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
		};
	}
	
	var menuWidth = igDropDownTablesWidth[item.id];
	
	divIn.setStyle({
		'left': parseInt(igDropdownConfig['style-menu/border-size']) + 'px',
		'width': (menuWidth - parseInt(igDropdownConfig['style-menu/padding']) * 2) + 'px'
	});
	
	// Set outer border
	divOut.setStyle({
		'opacity': parseFloat(igDropdownConfig['style-menu/border-opacity']),
		'width': (menuWidth + parseInt(igDropdownConfig['style-menu/border-size']) * 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 && (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]);
		}
	}
}
