var unitsArray = new Array("KG", "G", "OZ_MASS", "LB", "L", "ML", "CUPS", "OZ_LIQUID", "PINTS", "TBSP", "TSP", "CELSIUS", "FAHRENHEIT");
var equivalenceArray = new Array(1., 0.001, 0.028349523125, 0.45359237, 1., 0.001, 0.2365882365, 0.0295735295625, 0.473176473, 0.01478676478125, 0.00492892159375, 0., 0.);
var unitNamesArray = new Array("kg", "g", "oz (mass)", "lb", "L", "mL", "cups", "oz (liquid)", "pints", "tbsp", "tsp", "°C", "°F");
var weightUnits = new Array("KG", "G", "OZ_MASS", "LB");
var volumeUnits = new Array("L", "ML", "CUPS", "OZ_LIQUID", "PINTS", "TBSP", "TSP");
var temperatureUnits = new Array("CELSIUS", "FAHRENHEIT");
function addbookmark()
{
	if (document.all)
		window.external.AddFavorite("http://www.ourbestrecipes.com/", "Our Best Recipes");
	else
		alert("Automatic bookmarking is not supported by this browser. Please press Ctrl+D to bookmark this site.");
}
function unitEquivalence(val)
{
	var i; 
	for (i = 0; i < unitsArray.length; i++)
	{
		if (unitsArray[i] == val)
			return equivalenceArray[i];
	}
	return 1.;
}
function unitName(val)
{
	var i;
	for (i = 0; i < unitsArray.length; i++)
	{
		if (unitsArray[i] == val)
			return unitNamesArray[i];
	}
	return "";
}
function indexOf(value, array)
{
	var i;
	for (i = 0; i < array.length; i++)
	{
		if (array[i] == value)
			return i;
	}
	return -1;
}
function rebuildToList()
{
	var fromUnit = document.forms["unitConverter"].fromUnit.options[document.forms["unitConverter"].fromUnit.selectedIndex].value;
	var index, i;
	document.forms["unitConverter"].toUnit.options.length = 0;
	if ((index = indexOf(fromUnit, weightUnits)) != -1)
	{
		document.forms["unitConverter"].toUnit.options.length = weightUnits.length;
		for (i = 0; i < weightUnits.length; i++)
		{
			document.forms["unitConverter"].toUnit.options[i].value = weightUnits[i];
			document.forms["unitConverter"].toUnit.options[i].text = unitName(weightUnits[i]);
			document.forms["unitConverter"].toUnit.options[i].selected = (i == 0);
		}
	}
	else if ((index = indexOf(fromUnit, volumeUnits)) != -1)
	{
		document.forms["unitConverter"].toUnit.options.length = volumeUnits.length;
		for (i = 0; i < volumeUnits.length; i++)
		{
			document.forms["unitConverter"].toUnit.options[i].value = volumeUnits[i];
			document.forms["unitConverter"].toUnit.options[i].text = unitName(volumeUnits[i]);
			document.forms["unitConverter"].toUnit.options[i].selected = (i == 0);
		}
	}
	else if ((index = indexOf(fromUnit, temperatureUnits)) != -1)
	{
		document.forms["unitConverter"].toUnit.options.length = temperatureUnits.length;
		for (i = 0; i < temperatureUnits.length; i++)
		{
			document.forms["unitConverter"].toUnit.options[i].value = temperatureUnits[i];
			document.forms["unitConverter"].toUnit.options[i].text = unitName(temperatureUnits[i]);
			document.forms["unitConverter"].toUnit.options[i].selected = (i == 0);
		}
	}
}
function formatFloat(val)
{
	var fixed = Math.round(parseFloat(val) * 10000.) / 10000.;
	var resultStr = new String(fixed);
	var tokens = resultStr.split(".");
	var i = ((tokens[1]) ? tokens[1].length : 0);
	if (i == 0)
		resultStr += ".";
	while (i < 4)
	{
		resultStr += "0";
		i++;
	}
	return resultStr;
}
function scalarConversion(srcValue, srcUnit, dstUnit)
{
	var baseValue = srcValue * unitEquivalence(srcUnit);
	return baseValue / unitEquivalence(dstUnit);
}
function temperatureConversion(srcValue, srcUnit, dstUnit)
{
	var baseValue;
	if (srcUnit == "CELSIUS")
		baseValue = srcValue + 273.15;
	else if (srcUnit == "FAHRENHEIT")
		baseValue = 5. / 9. * (srcValue + 459.67);
	else return 0.;
	if (dstUnit == "CELSIUS")
		return baseValue - 273.15;
	else if (dstUnit == "FAHRENHEIT")
		return 9. / 5. * baseValue - 459.67;
	return 0.;
}
function convert()
{
	var input, output, index;
	var srcUnit, dstUnit;
	input = parseFloat(document.forms["unitConverter"].from.value);
	if (isNaN(input))
		input = 0.;
	document.forms["unitConverter"].from.value = formatFloat(input);
	output = 0.;
	srcUnit = document.forms["unitConverter"].fromUnit.options[document.forms["unitConverter"].fromUnit.selectedIndex].value;
	dstUnit = document.forms["unitConverter"].toUnit.options[document.forms["unitConverter"].toUnit.selectedIndex].value;
	if (indexOf(srcUnit, weightUnits) != -1)
	{
		if (indexOf(dstUnit, weightUnits) != -1)
			output = scalarConversion(input, srcUnit, dstUnit);
	}
	else if (indexOf(srcUnit, volumeUnits) != -1)
	{
		if (indexOf(dstUnit, volumeUnits) != -1)
			output = scalarConversion(input, srcUnit, dstUnit);
	}
	else if (indexOf(srcUnit, temperatureUnits) != -1)
	{
		if (indexOf(dstUnit, temperatureUnits) != -1)
			output = temperatureConversion(input, srcUnit, dstUnit);
	}
	document.forms["unitConverter"].result.value = formatFloat(output);
}
var activeButton = null;
var activeButtonMenu = null;
var activeButtonMenuOverMenu = false;
var activeButtonMenuTimer = null;
var activeMenuName = "";
var isMSIE = (navigator.userAgent.indexOf("MSIE") > 0) ? 1 : 0;
var isMSIE5 = (navigator.userAgent.indexOf("MSIE 5.5") > 0) ? 1 : 0;
var isMSIE6 = (navigator.userAgent.indexOf("MSIE 6") > 0) ? 1 : 0;
var isNetscape6 = (navigator.userAgent.indexOf("Gecko") > 0) ? 1 : 0;
var isSafari = (navigator.userAgent.indexOf("Safari") > 0) ? 1 : 0;
var offset = -1;
var menuOffset = -1;
var idleButtonImages = new Array();
var highlightedButtonImages = new Array();
var buttonImageNames = new Array("StartersMenuImage", "MainDishMenuImage", "SideDishMenuImage", "DessertMenuImage", "DrinksMenuImage", "SpecialtiesMenuImage");
var idleButtonImageFiles = new Array("navstarters.jpg", "navmaindish.jpg", "navsidedish.jpg", "navdessert.jpg", "navdrinks.jpg", "navspecialties.jpg");
var highlightedButtonImageFiles = new Array("navprstarters.jpg", "navprmaindish.jpg", "navprsidedish.jpg", "navprdessert.jpg", "navprdrinks.jpg", "navprspecialties.jpg");
if (document.images)
{
	for (i = 0; i < buttonImageNames.length; i++)
	{
		idleButtonImages[i] = new Image;
		idleButtonImages[i].src = "images/" + idleButtonImageFiles[i];
		highlightedButtonImages[i] = new Image;
		highlightedButtonImages[i].src = "images/" + highlightedButtonImageFiles[i];
	}
}
function getPageOffsetLeft(val)
{
	return val.offsetLeft + (val.offsetParent ? getPageOffsetLeft(val.offsetParent) : 0);
}
function getPageOffsetTop(val)
{
	return val.offsetTop + (val.offsetParent ? getPageOffsetTop(val.offsetParent) : 0);
}
function buttonMouseOver(button, menuName)
{
	button.blur();
	if (activeButtonMenuTimer != null)
		clearTimeout(activeButtonMenuTimer);
	if (document.getElementById(menuName) == null)
		return false;
	button.menu = document.getElementById(menuName);
	if (activeButton != null)
	{
		if (document.images)
		{
			var imageName = activeMenuName + "Image";
			var index = indexOf(imageName, buttonImageNames);
			if (index != -1)
				document.images[imageName].src = idleButtonImages[index].src;
		}
	}
	resetButton(activeButton, menuName);
	depressButton(button, menuName);
	return false;
}
function depressButton(button, menuName)
{
	var windowLeftEdge = (isMSIE) ? document.body.scrollLeft : window.pageXOffset;
	var windowWidth = (isMSIE) ? document.body.clientWidth : window.innerWidth;
	var windowRightEdge = windowLeftEdge + windowWidth;
	if (!button.isDepressed)
	{
		if (document.images)
		{
			var imageName = menuName + "Image";
			var index = indexOf(imageName, buttonImageNames);
			if (index != -1)
				document.images[imageName].src = highlightedButtonImages[index].src;
		}
	}
	if (isMSIE5 && !button.menu.firstChild.style.width)
		button.menu.offsetWidth + "px";
	x = getPageOffsetLeft(button) + 9;
	y = 213;
	if (isMSIE)
		x -= 1;
	if (isNetscape6)
		x--;
	if (button.menu.offsetWidth + x > windowRightEdge)
		x = windowRightEdge - button.menu.offsetWidth - 5;
	button.menu.style.left = x + "px";
	button.menu.style.top = y + "px";
	button.menu.style.visibility = "visible";
	button.menu.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=95);";
	button.menu.style.opacity = "0.95";
	button.menu.style.mozopacity = "0.95";
	button.isDepressed = true;
	activeButton = button;
	activeButtonMenu = button.menu;
	activeMenuName = menuName;
	hideSelect();
}
function resetButton(button, menuName)
{
	if (activeButton != null)
	{
		if (document.images)
		{
			var imageName = menuName + "Image";
			var index = indexOf(imageName, buttonImageNames);
			if (index != -1)
				document.images[imageName].src = idleButtonImages[index].src;
		}
		if (button.menu)
			button.menu.style.visibility = "hidden";
		button.isDepressed = false;
	}
	activeButton = null;
	activeButtonMenu = null;
	activeButtonMenuTimer = null;
	activeButtonMenuOverMenu = false;
	activeMenuName = "";
	showSelect();
}
function menuHide()
{
	if (!activeButtonMenuOverMenu)
	{
		if (activeButtonMenuTimer != null)
			clearTimeout(activeButtonMenuTimer);
		if (activeButton != null && activeMenuName != "")
		resetButton(activeButton, activeMenuName);
	}
}
function menuOut(menu)
{
	if (activeButton != null && activeButtonMenu != null && menu != null)
	{
		activeButtonMenuTimer = setTimeout("menuHide();", 250);
		activeButtonMenuOverMenu = false;
	}
}
function menuOver(menu)
{
	if (activeButtonMenuTimer != null)
	{
		clearTimeout(activeButtonMenuTimer);
		activeButtonMenuOverMenu = true;
	}
}
function hideSelect()
{
	if (isMSIE)
	{
		for (i = 0; i < document.all.tags("select").length; i++)
		{
			obj = document.all.tags("select")[i];
			x = getPageOffsetLeft(obj);
			y = getPageOffsetTop(obj);
			if (activeButton != null && activeButtonMenu != null)
			{
				menuHeight = activeButtonMenu.offsetTop + activeButtonMenu.offsetHeight;
				if (y < menuHeight)
				{
					if ((x < (activeButtonMenu.offsetLeft + activeButtonMenu.offsetWidth)) &&
						(x + obj.offsetWidth > activeButtonMenu.offsetLeft))
						obj.style.visibility = 'hidden';
				}
			}
		}
	}
}
function showSelect()
{
	if (isMSIE)
	{
		for (i = 0; i < document.all.tags("select").length; i++)
		{
			obj = document.all.tags("select")[i];
			if (!obj || !obj.offsetParent)
				continue;
			obj.style.visibility = 'visible';
		}
	}
}
function doMail(url)
{
	var screenWidth = (screen.width - 650) / 2;
	var screenHeight = (screen.height - 400) / 2;
	new_window = window.open(url, "mailer",
		"width=650,height=400,toolbar=no,resizable=yes,scrollbars=yes,location=no,directories=no,menubar=no,top="+screenHeight+",left="+screenWidth+"");
}
function isEmail(str)
{
	var result = false;
	var email = new String(str);
	var index = email.indexOf("@");
	if (index > 0)
	{
		var pindex = email.indexOf(".",index);
		if ((pindex > index + 1) && (email.length > pindex + 1))
			result = true;
	}
	return result;
}
function validRequired(formField, fieldLabel)
{
	var result = true;
	if (formField.value == "")
	{
		alert('Please enter a value in the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	return result;
}
function validEmail(formField, fieldLabel, required)
{
	var result = true;
	if (required && !validRequired(formField, fieldLabel))
		result = false;
	if (result && ((formField.value.length < 3) || !isEmail(formField.value)))
	{
		alert('Please enter a valid e-mail address in the "' + fieldLabel + '" field.');
		formField.focus();
		result = false;
	}
	return result;
}
function allDigits(str)
{
	return inCharSet(str, "0123456789");
}
function inCharSet(str, charset)
{
	var result = true;
	for (var i = 0; i < str.length; i++)
	{
		if (charset.indexOf(str.substr(i, 1)) < 0)
		{
			result = false;
			break;
		}
	}
	return result;
}
function validNum(formField, fieldLabel, required)
{
	var result = true;
	if (required && !validRequired(formField, fieldLabel))
		result = false;
	if (result)
	{
		if (!allDigits(formField.value))
		{
			alert('Please enter a number in the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	return result;
}
function doClose()
{
	if (window.opener)
		window.close();
}
function checkEnter()
{
	if (window.event)
	{
		if (window.event.keyCode == 13) // enter
			convert();
	}
}