// Copyright 2009 FORWARD LEAP, LLC . All rights reserved.
 if (document.images)
 {
      kitchenCalcVolumeOn = new Image(35,31); 
      kitchenCalcVolumeOn.src="http://www.kitchencalculator.net/converter/calcVolumeOn.png"; 
	  
	  calcWeightOn = new Image(35,31); 
      calcWeightOn.src="http://www.kitchencalculator.net/converter/calcWeightOn.png"; 
	  
	  
	  calcTempOn = new Image(35,31); 
      calcTempOn.src="http://www.kitchencalculator.net/converter/calcTempOn.png"; 
	  
	  
	  calcLengthOn = new Image(35,31); 
      calcLengthOn.src="http://www.kitchencalculator.net/converter/calcLengthOn.png"; 
 }
	
var oKitchenCalculator = new JSKitchenCalculator();

function JSKitchenCalculator() 
{ 
	this.selectedUnitType = "volume";
	
	this.frameDiv = document.getElementById("KitchenCalculator_Converter");
	this.uiDiv = document.getElementById("KitchenCalculator_UI");
	
	this.toPicklist = null;
	this.fromPicklist =  null;
	this.amountInput =  null;
	
	this.volumeUnits = initVolumeArray();
	this.weightUnits = initWeightArray();
	this.temperatureUnits = initTemperatureArray();
	this.lengthUnits = initLengthArray();
	
	this.selectedUnits = this.volumeUnits;
	
	function JSMeasurementUnit( unitName, unitSingular, unitFactor )
	{	
		this.name = unitName;
		this.singular = unitSingular;
		this.factor = unitFactor;
	}
	
	JSKitchenCalculator.prototype.init = function()
	{
		this.initUI();
		
		this.toPicklist = document.getElementById("KitchenCalculator_ToPicklist");
		this.fromPicklist = document.getElementById("KitchenCalculator_FromPicklist");
		this.amountInput = document.getElementById("KitchenCalculator_Amount");
	
		var amountLabel = document.getElementById("KitchenCalculator_AmountText");
		var resultLabel = document.getElementById("KitchenCalculator_ResultText");
		
		amountLabel.innerHTML = "enter amount";
		resultLabel.innerHTML = "to convert";
		
		this.loadPicklists();
		
		
	}
	
	function initVolumeArray()
	{
		var units = new Array();
		
		units[0] = new JSMeasurementUnit("teaspoons", "teaspoon", 4.9289215938);
		units[1] = new JSMeasurementUnit("tablespoons", "tablespoon", 14.786764781);
		units[2] = new JSMeasurementUnit("cups", "cup", 236.5882365);
		units[3] = new JSMeasurementUnit("pints", "pint", 473.176473);
		units[4] = new JSMeasurementUnit("gallons", "gallon", 3785.411784);
		units[5] = new JSMeasurementUnit("liters", "liter", 1000);
		units[6] = new JSMeasurementUnit("centiliters", "centiliter", 10);
		units[7] = new JSMeasurementUnit("milliliters", "milliliter", 1);
		units[8] = new JSMeasurementUnit("fluid ounces", "fluid ounce", 29.573529562);
		units[9] = new JSMeasurementUnit("quarts", "quart", 946.352946);
		units[10] = new JSMeasurementUnit("drops", "drop", 0.051342933268);
		units[11] = new JSMeasurementUnit("jiggers", "jigger", 44.360294344);
		units[12] = new JSMeasurementUnit("jills", "jill", 118.29411825);
		units[13] = new JSMeasurementUnit("dashes", "dash", 0.61611519922);
		units[14] = new JSMeasurementUnit("pinches", "pinch",  0.30805759961);
		
		return units;
	}
	
	function initWeightArray()
	{
		var units = new Array();
		
		units[0] = new JSMeasurementUnit("pounds", "pound", 453.59237);
		units[1] = new JSMeasurementUnit("ounces", "ounce", 28.349523125);
		units[2] = new JSMeasurementUnit("grams", "gram", 1);
		units[3] = new JSMeasurementUnit("kilograms", "kilogram", 1000);
		
		return units;
	}
	
	function initTemperatureArray()
	{
		var units = new Array();
		
		units[0] = new JSMeasurementUnit("fahrenheit", "fahrenheit", 0);
		units[1] = new JSMeasurementUnit("celsius","celsius", 0);
			
		return units;
	}
	
	function initLengthArray()
	{
		var units = new Array();
		
		units[0] = new JSMeasurementUnit("feet", "foot", 304.8);
		units[1] = new JSMeasurementUnit("inches","inch", 25.4);
		units[2] = new JSMeasurementUnit("yards", "yard", 914.4);
		units[3] = new JSMeasurementUnit("meters", "meter", 1000);
		units[4] = new JSMeasurementUnit("centimiters", "centimiter", 10);
		units[5] = new JSMeasurementUnit("miles", "mile", 1609344);
		units[6] = new JSMeasurementUnit("kilometers", "kilometer", 1000000);
		
		return units;
	}
	
	JSKitchenCalculator.prototype.loadPicklists = function()
	{
		this.fromPicklist.options.length = 0;
		this.toPicklist.options.length = 0;
		
		for( var i = 0; i < this.selectedUnits.length; i++ )
		{
			this.fromPicklist.options[i] = new Option(this.selectedUnits[i].name, i);
		}
		
		for( var x = 0; x < this.selectedUnits.length; x++ )
		{
			this.toPicklist.options[x] = new Option(this.selectedUnits[x].name, x);
		}
	}
		
	JSKitchenCalculator.prototype.changeUnitType = function(unitName)
	{
		 unitName = unitName.toLowerCase();
		
		 switch(unitName)
		 {
			 case "volume":
			 	 this.selectedUnits = this.volumeUnits;
				 break;
				 
			 case "weight":
			 	 this.selectedUnits = this.weightUnits;
				 break;
				 
			 case "temperature":
			 	 this.selectedUnits = this.temperatureUnits;
				 break;
				 
			 case "length":
			 	 this.selectedUnits = this.lengthUnits;
				 break;
		 }
		 
		this.selectedUnitType = unitName;
		this.loadPicklists();
	}
	
	JSKitchenCalculator.prototype.unitImageClicked = function(unitName)
	{
		 var selectedImageID = "KitchenCalculator_" + unitName;
		 var selectedImg = document.getElementById(selectedImageID);
		 var volumeImg = document.getElementById("KitchenCalculator_Volume");
		 
		 
		 var weightImg = document.getElementById("KitchenCalculator_Weight");
		 var temperatureImg = document.getElementById("KitchenCalculator_Temperature");
		 var lengthImg = document.getElementById("KitchenCalculator_Length");
	
		 var defaultURL = "";
		 var index = selectedImg.src.lastIndexOf("/");
		 if( index > -1 ) defaultURL = selectedImg.src.substring(0,index) + "/";
			 
		 volumeImg.src = (volumeImg == selectedImg ) ? defaultURL + "calcVolumeOn.png" : defaultURL + "calcVolumeOff.png"; 
		 weightImg.src = (weightImg == selectedImg ) ? defaultURL + "calcWeightOn.png" : defaultURL + "calcWeightOff.png"; 
		 temperatureImg.src = (temperatureImg == selectedImg ) ? defaultURL + "calcTempOn.png" : defaultURL + "calcTempOff.png"; 
		 lengthImg.src = (lengthImg == selectedImg ) ? defaultURL + "calcLengthOn.png" : defaultURL + "calcLengthOff.png"; 
		 
		 this.changeUnitType(unitName);
	}
	
	function checkNumber(value)
	{
		var anum=/(^\d+$)|(^\d+\.\d+$)/
		
		if(anum.test(value))
			return true;
		else
		{
			alert("Please enter a valid number.");
			return false;
		}
	}
	
	function convertUnits(unitType, amount, unit1, unit2)
	{
		var convertedAmount = 0;
		
		if( unitType.toLowerCase() != "temperature" )
		{
			var amountUnit1 = amount * unit1.factor;
			convertedAmount = amountUnit1 / unit2.factor;
		}
		else if(unit1.name.toLowerCase() == "fahrenheit")
		{
			convertedAmount = Math.round((amount - 32.0) * 5.0 / 9.0);		
		}
		else
		{
			convertedAmount = Math.round((amount * 9.0 / 5.0) + 32.0);
		}
		
		return convertedAmount;
	}

	function formatResult( result)
	{
		 if (result.toFixed)
			result = result.toFixed(3)
	
		 var strResult = result.toString();
		 var arrResult = result.split('.', 2);
		
		 var decimals = strResult = arrResult[1].replace(/0*$/, "");
		 if( decimals.length > 0 ) decimals = "." + decimals;
				 
		 strResult = arrResult[0] + decimals;
		 return strResult;
	}
	
	JSKitchenCalculator.prototype.convert = function()
	{
		 if( !checkNumber(this.amountInput.value))
		 {
		 	 this.amountInput.value = "";
			  return;
		 }
		 
		 var fromUnit = this.selectedUnits[this.fromPicklist.selectedIndex];
		 var toUnit = this.selectedUnits[this.toPicklist.selectedIndex];
		
		 var amountLabel = document.getElementById("KitchenCalculator_AmountText");
		 var resultLabel = document.getElementById("KitchenCalculator_ResultText");
		 var amount = eval(this.amountInput.value);
		 
		 var result = convertUnits(this.selectedUnitType, amount, fromUnit, toUnit);
		 var strResult = formatResult(result);
		 		  
		 var fromUnitName = (amount == 1 ) ? fromUnit.singular : fromUnit.name;
		 var toUnitName = (eval(result) == 1 ) ? toUnit.singular : toUnit.name;
		 
		 amountLabel.innerHTML =  amount + " " + fromUnitName;
		 resultLabel.innerHTML = strResult + " " + toUnitName;
	}
	
	JSKitchenCalculator.prototype.initUI = function()
	{
		var html = "<table border=0 cellpadding=0 cellspacing=0 width='100%'>";
           html += "<tr>";
           html += "<td colspan='2' valign='top' style='padding-top:18px; padding-left:20px;'>";
           html += "<span id='KitchenCalculator_AmountText' style='font:10pt arial;color:#000000;'>&nbsp;</span>";
           html += "</td>";
           html += "</tr>";
           html += "<tr>";
           html += "<td colspan='2' valign='top' style='padding-top:12px;padding-left:20px;'>";
           html += "<span id='KitchenCalculator_ResultText' style='font:10pt arial;color:#000000;'>&nbsp;</span>";
           html += "</td>";
           html += "</tr>";
           html += "<tr>";
           html += "<td style='padding-left:18px;padding-top:9px' colspan='2'>";
           html += "<a href='JavaScript:oKitchenCalculator.unitImageClicked(\"Volume\")'><img id='KitchenCalculator_Volume' src='http://www.kitchencalculator.net/converter/calcVolumeOn.png' width='35' height='31' border='0'/></a>&nbsp;&nbsp;";
           html += "<a href='JavaScript:oKitchenCalculator.unitImageClicked(\"Weight\")'><img id='KitchenCalculator_Weight' src='http://www.kitchencalculator.net/converter/calcWeightOff.png' width='35' height='31' border='0'/></a>&nbsp;&nbsp;";
           html += "<a href='JavaScript:oKitchenCalculator.unitImageClicked(\"Temperature\")'><img id='KitchenCalculator_Temperature' src='http://www.kitchencalculator.net/converter/calcTempOff.png' width='35' height='31' border='0'/></a>&nbsp;&nbsp;";
           html += "<a href='JavaScript:oKitchenCalculator.unitImageClicked(\"Length\")'><img id='KitchenCalculator_Length' src='http://www.kitchencalculator.net/converter/calcLengthOff.png' width='35' height='31' border='0'/></a>";
           html += "</td>";
           html += "</tr>";
           html += "<tr><td colspan='2' style='padding-top:10px'>&nbsp;</td></tr>";
           html += "<tr>";
           html += "<td height='35' style='padding-left:20px; font:10pt arial;color:#333333;'>From:</td><td><select id='KitchenCalculator_FromPicklist' style='width:120px'></select></td>";
           html += "</tr>";
           html += "<tr>";
           html += "<td style='padding-left:20px;font:10pt arial;color:#333333;'>To:</td><td><select id='KitchenCalculator_ToPicklist' style='width:120px'></select></td>";
           html += "</tr>";
           html += "<tr height='35'>";
           html += "<td style='padding-left:20px;font:10pt arial;color:#333333;'>Amount:</td><td><input id='KitchenCalculator_Amount' style='width:120px;border:black 1px solid' /></td>";
           html += "</tr>";
           html += "<tr height='35'>";
           html += "<td style='padding-left:20px'>&nbsp;</td>";
           html += "<td><input type='button' id='KitchenCalculator_Convert' onClick='JavaScript:oKitchenCalculator.convert()' value='Convert' /></td>";
           html += "</tr>";
           html += "</table>";
		   
		   this.uiDiv.innerHTML = html;
	
	}
	
	
	this.init();
}

