

var dropdown_selected;

function dropdown_init()
{
	dropdown_selected = location.href;

	document.onclick = function(e) 
	{
		evt = e || window.event;
		
		var el = getEventTarget(evt);
		
		var dd = dropdown_check(el);

		if (dd)
		{
			// It's our dropdown menu!
			if (dd.tagName == 'DIV' && dd.id != 'dropdown')
			{
				dropdown_toggle(dd);
			}
			else
			{
				dropdown_select(dd);
			}
		}
		else
		{
			clearElements();
		}
	}

	if (document.getElementById('dropdown'))
	{
		dropdown_reset('close');
	}
}

function getEventTarget(evt)
{
	return (evt.target) 
		? evt.target
        : (evt.srcElement) 
		? evt.srcElement 
		: null;
}

function clearElements()
{
	if (document.getElementById('dropdown'))
	{
		dropdown_change('close', document.getElementById('dropdown'));
	}
}

function dropdown_check(el)
{
	if (el.id == 'dropdown' || el.id == 'dropdown-btn_off' || el.id == 'dropdown-btn_on')
	{
		return el;
	}
	
	var obj = el;

	while (obj.tagName != 'DIV' && obj.tagName != 'BODY' && obj.tagName != 'HTML')
	{
		if (obj.tagName == 'LI')
		{
			var li = obj;
		}
		obj = obj.parentNode;
	}

	if (obj.id && obj.id == 'dropdown')
	{
		return li;
	}
	else
	{
		return false;
	}
}

function dropdown_reset(status)
{
	var default_label = 'Main';
	
	var dropdown = document.getElementById('dropdown');
	if (!dropdown)
	{
		return;
	}

	for (var i=0; i < dropdown.childNodes.length; i++)
	{
		if (dropdown.childNodes[i].tagName == 'UL')
		{
			var menu = dropdown.childNodes[i];
			
			var clonem = menu.cloneNode(true);
			
			clonem.style.display = 'none';
			
			while (menu.childNodes[0])
			{
				menu.removeChild(menu.childNodes[0]);
			}
		}
		else if (dropdown.childNodes[i].tagName == 'DIV')
		{
			var btn = dropdown.childNodes[i];
		}
	}
	
	var w = 0;

	for (var i=0; i < clonem.childNodes.length; i++)
	{
		if (clonem.childNodes[i].tagName == 'LI')
		{
			var selected = dropdown_match(clonem.childNodes[i]);

			var url = dropdown_parseurl(clonem.childNodes[i]);

			if (url['default'])
			{
				var def = clonem.childNodes[i];
			}
			if (selected)
			{
				var li = clonem.childNodes[i];
			}
		}
	}

	if (li) // selected
	{
		var url = dropdown_parseurl(li);
		
		if (url['default'])
		{
			for (var i=0; i < li.childNodes.length; i++)
			{
				if (li.childNodes[i].tagName == 'A')
				{
					var a = li.childNodes[i];
					
					a.innerHTML = 'Select from...';

					break;
				}
			}
		}
	}
	else if (def) // no URL match
	{
		var li = def;
		
		var url = dropdown_parseurl(li);

		if (url['default'])
		{
			for (var i=0; i < li.childNodes.length; i++)
			{
				if (li.childNodes[i].tagName == 'A')
				{
					var a = li.childNodes[i];
					
					a.innerHTML = 'Select from...';
					
					// Change 'Main' link to reflect url string
					//
					a.href = location.href;
					
					break;
				}
			}
		}
	}
	
	menu.appendChild(li);
	
	li.className = '';
	li.onmouseover = null;
	li.onmouseout = null;

	this_w = dropdown_width(li);
	
	w = this_w > w
		? this_w
		: w;
		
	li.style.display = 'block';

	for (var j=0; j < clonem.childNodes.length; j++)
	{
		if (clonem.childNodes[j].tagName == 'LI')
		{
			var li = clonem.childNodes[j];
			
			var selected = dropdown_match(li);

			if (!selected)
			{
				var url = dropdown_parseurl(li);

				if (!url['default'])
				{
					menu.appendChild(li);
					
					li.onmouseover = function() { this.className = 'hover'; };
					li.onmouseout = function() { this.className = ''; };
					
					j--;
				}
				
				w = dropdown_width(li) > w
					? dropdown_width(li)
					: w;
				
				if (status != 'close')
				{
					li.style.display = 'block';
				}
				else
				{
					li.style.display = 'none';
				}
			}
		}
	}
	
	for (var j=0; j < clonem.childNodes.length; j++)
	{
		if (clonem.childNodes[j].tagName == 'LI')
		{
			var li = clonem.childNodes[j];
			
			var url = dropdown_parseurl(li);
			
			if (url['default'])
			{
				for (var i=0; i < li.childNodes.length; i++)
				{
					if (li.childNodes[i].tagName == 'A')
					{
						var a = li.childNodes[i];
						
						a.innerHTML = default_label;

						break;
					}
				}
				
				menu.appendChild(li);
				
				li.onmouseover = function() { this.className = 'hover'; };
				li.onmouseout = function() { this.className = ''; };
				
				w = dropdown_width(li) > w
					? dropdown_width(li)
					: w;
				
				li.style.display = status != 'close'
					? 'block'
					: 'none';
				
				break;
			}
		}
	}

	dropdown.style.width = navigator.appName.indexOf("Microsoft") != -1
		? (w + btn.offsetWidth + 20)
		: (w + btn.offsetWidth + 20) + 'px';
		
	btn.id = status == 'close'
		? 'dropdown-btn_off'
		: 'dropdown-btn_on';

	dropdown.style.visibility = 'visible';

    delete clonem;
}

function dropdown_toggle(btn)
{
	var dropdown = document.getElementById('dropdown');
	
	var btn = document.getElementById('dropdown-btn_on')
		? document.getElementById('dropdown-btn_on')
		: document.getElementById('dropdown-btn_off');

	if (btn.id == 'dropdown-btn_on')
	{
		dropdown_change('close');
	}
	else
	{
		dropdown_change('open');
	}
}

function dropdown_change(action)
{
	var dropdown = document.getElementById('dropdown');

	for (var i=0; i < dropdown.childNodes.length; i++)
	{
		if (dropdown.childNodes[i].tagName == 'UL')
		{
			var menu = dropdown.childNodes[i];
			
			var k=0;
			for (var j=0; j < menu.childNodes.length; j++)
			{
				if (menu.childNodes[j].tagName == 'LI')
				{
					var li = menu.childNodes[j];
					
					if (action == 'close')
					{
						li.style.display = j == 0
							? 'block'
							: 'none';
					}
					else
					{
						li.style.display = 'block';
					}
					k++;
				}
			}
			break;
		}
	}
	
	var btn = document.getElementById('dropdown-btn_on')
		? document.getElementById('dropdown-btn_on')
		: document.getElementById('dropdown-btn_off');
	
	btn.id = action == 'close'
		? 'dropdown-btn_off'
		: 'dropdown-btn_on';
}

function dropdown_select(li)
{
	var url = dropdown_parseurl(li);
	
	if (url['str'] == dropdown_selected)
	{
		return;
	}
	
	var spl = url['str'].split('#');
	
	// If new page...
	//
	if (spl.length == 1)
	{
		// .. just load it:
		//
		location.href = url['str'];
	}
	else
	{
		// Else, we have a jump link!
		// we'll need to reset everything here
		//
		dropdown_selected = url['str'];
		
		dropdown_reset('close');

		location.href = url['str'];
	}
}

function dropdown_match(li)
{
	var url = dropdown_parseurl(li);

	if (url['str'] == dropdown_selected)
	{
		return true;
	}
	
	return false;
}

function dropdown_parseurl(li)
{
	var arr = new Array();
	
	for (var i=0; i < li.childNodes.length; i++)
	{
		if (li.childNodes[i].tagName == 'A')
		{
			var a = li.childNodes[i];
			
			var spl = a.href.split('?');

			arr['str'] = a.href;
			
			if (spl.length > 1)
			{
				arr['default'] = false;
			}
			else
			{
				var spl_pound = a.href.split('#');
				
				arr['default'] = spl_pound.length > 1
					? false
					: true;
			}
			
			break;
		}
	}

	return arr;
}

function dropdown_width(li)
{
	var w = 0;
	
	li.style.display = 'block';
	
	for (var i=0; i < li.childNodes.length; i++)
	{
		if (li.childNodes[i].tagName == 'A')
		{
			w = li.childNodes[i].offsetWidth;

			break;
		}
	}

	li.style.display = 'none';
	
	return w;
}


