function FindLeftPos(item)
{
	if (item.offsetParent == undefined)
	{
		return item.offsetLeft;
	}
	return item.offsetLeft + FindLeftPos(item.offsetParent);
}

function FindTopPos(item)
{
	if (item.offsetParent == undefined)
	{
		return item.offsetTop;
	}
	return item.offsetTop + FindTopPos(item.offsetParent);	
}

function HideDropMenu(dropMenu)
{
	dropMenu.style.display = 'none';	
}

function ShowDropMenu(menuHeadElement, dropMenu)
{
	dropMenu.style.top = FindTopPos(menuHeadElement) + menuHeadElement.offsetHeight + "px";
	dropMenu.style.left = FindLeftPos(menuHeadElement) + "px";
	dropMenu.style.display = 'block';
}

function GetDropMenuSelectedItem(dropMenu)
{
	var fields = dropMenu.getElementsByTagName('div');
	for (var i=0; i<fields.length; i++)
	{
		if (fields[i].className == 'dropitem_highlight')
		{
			return fields[i];
		}
	}
	return null;
}

function HighlightDropMenuItem(highlightField)
{
	var fields = highlightField.parentNode.getElementsByTagName('div');
	for (var i=0; i<fields.length; i++)
	{
		fields[i].className = 'dropitem_normal';
	}
	highlightField.className = 'dropitem_highlight';
}

function HighlightNextDropMenuItem(dropMenu)
{
	var fields = dropMenu.getElementsByTagName('div');
	var done = false;
	for (var i=0; i<fields.length; i++)
	{
		if (fields[i].className == 'dropitem_highlight')
		{
			done = true;
			fields[i].className = 'dropitem_normal';
			if (i+1 == fields.length)
			{
				fields[0].className = 'dropitem_highlight';
			}
			else
			{
				fields[i+1].className = 'dropitem_highlight';
			}
			break;
		}
	}
	if (!done && fields.length > 0)
	{
		fields[0].className = 'dropitem_highlight';
	}
}

function HighlightPreviousDropMenuItem(dropMenu)
{
	var fields = dropMenu.getElementsByTagName('div');
	var done = false;
	var j = fields.length - 1; // When going backwards, we start at the last element
	for (var i=0; i<fields.length; i++)
	{
		if (fields[j-i].className == 'dropitem_highlight')
		{
			done = true;
			fields[j-i].className = 'dropitem_normal';
			if (i==j)
			{
				fields[j].className = 'dropitem_highlight';
			}
			else
			{
				fields[(j-i)-1].className = 'dropitem_highlight';
			}
			break;
		}
	}
	if (!done && fields.length > 0)
	{
		fields[j].className = 'dropitem_highlight';
	}
}

function DropDownItemSelected(dropMenu)
{
	var fields = dropMenu.getElementsByTagName('div');
	for (var i=0; i<fields.length; i++)
	{
		if (fields[i].className == 'dropitem_highlight')
		{
//			dropMenu.menuFunc(fields[i]);
			FillInSearchTagField(fields[i].innerHTML);
			dropMenu.style.display = 'none';
			break;
		}
	}
}

function DropMenuItemClick(field, dropMenu)
{
//	dropMenu.menuFunc(field);
	FillInSearchTagField(field.innerHTML);
	dropMenu.style.display = 'none';
}

function DropDownKeyUp(evt, menuId)
{
	dropMenu = document.getElementById(menuId);
	if (dropMenu.style.display != 'none')
	{
		var charCode = (evt.which) ? evt.which : event.keyCode;
		if (charCode == 13)
		{
			DropDownItemSelected(dropMenu);
			return false;
		}
		else if (charCode == 40)
		{
			// down arrow
			HighlightNextDropMenuItem(dropMenu);
			return false;
		}
		else if (charCode == 38)
		{
			HighlightPreviousDropMenuItem(dropMenu);
			return false;
		}
	}
	return true;
}

function ClearDropMenuItems(menu)
{
	menu.innerHTML = '';	
}

function AddDropMenuItem(menu, itemStr, attrHTML)
{
	menu.innerHTML += '<div ' + attrHTML + ' class="dropitem_normal" onmouseover="HighlightDropMenuItem(this)" onclick="DropMenuItemClick(this, this.parentNode);">' + itemStr + '</div>';
}

function SuggestKeyUp(evt, menuId, text)
{
	var charCode = (typeof(event) != 'undefined') ? event.keyCode : evt.which;
	if ( (charCode < 37 || charCode > 40) && charCode != 13)
	{ 
		if (trim(text) != '')
		{
			MakeAjaxRequest("download.php?function=suggesttags&id="+menuId+"&text="+text);
		}
		else
		{
			HideDropMenu(document.getElementById(menuId));	
		}
	}
	return true;
}

function SuggestKeyPress(evt, menuId)
{
	var charCode = (typeof(event) != 'undefined') ? event.keyCode : evt.which;

	if (charCode == 13)
	{
		var menu = document.getElementById(menuId);
		if (menu.style.display != 'none' && GetDropMenuSelectedItem(menu) != null)
		{
			// The user is selecting a tag. Ignore this 13
			return false;
		}
		else
		{
			// There's no selection. So treat this like a normal 13
			return true;
		}
	}
	return true;
}

function PopulateSuggestMenu(dataStr, textField, menuId, PopulateSubFunc)
{
	var menu = document.getElementById(menuId);
	ShowDropMenu(textField, menu);
	ClearDropMenuItems(menu);
//	var dataArray = ParseData(dataStr);
	
//	if (dataArray.length == 0)
//	{
//		HideDropMenu(menu);
//	}
//	else
//	{
		PopulateSubFunc(menu, dataStr);
//	}
}

function DropMenuParentBlur (dropMenu, event)
{
	HideDropMenu(dropMenu);
}

////////////////////////////////////////
// Custom methods per dropdown here

function PopulateTags (dropMenu, dataStr)
{
	if (dataStr == '')
	{
		HideDropMenu(dropMenu);
	}
	dropMenu.innerHTML = dataStr;
}

function FillInSearchTagField(text)
{
	document.getElementById('searchTag').value = text;	
}
