$(document).ready(function(){
	loadConversionOptions($("#convert-type").val());
	
	var tempVal = 0;
	
	$('#convert-type').change(function() {
	   //conversion type changed, we need to swap in the new values
	   loadConversionOptions($("#convert-type").val());
	});
   
	$('#value1').change(function() {
	   tempVal = $('#value1').val();
       tempVal = $.parseNumber(tempVal, {format:"#,###", locale:"us"});
	   $('#value2').val(calculate(tempVal, $("#convert-type").val(), $("#unit1").val(), $("#unit2").val()));
	   $('#value2').formatNumber({format:"0,000.######", locale:"us"});
	});
	
	$('#value2').change(function() {
	   tempVal = $('#value2').val();
       tempVal = $.parseNumber(tempVal, {format:"#,###", locale:"us"});
	   $('#value1').val(calculate(tempVal, $("#convert-type").val(), $("#unit2").val(), $("#unit1").val()));
	   $('#value1').formatNumber({format:"0,000.######", locale:"us"});
	});
	
	$('#value1').keyup(function() {
	   tempVal = $('#value1').val();
       tempVal = $.parseNumber(tempVal, {format:"#,###", locale:"us"});
	   $('#value2').val(calculate(tempVal, $("#convert-type").val(), $("#unit1").val(), $("#unit2").val()));
	   $('#value2').formatNumber({format:"0,000.######", locale:"us"});
	});
	
	$('#value2').keyup(function() {
	   tempVal = $('#value2').val();
       tempVal = $.parseNumber(tempVal, {format:"#,###", locale:"us"});
	   $('#value1').val(calculate(tempVal, $("#convert-type").val(), $("#unit2").val(), $("#unit1").val()));
	   $('#value1').formatNumber({format:"0,000.######", locale:"us"});
	});
	
	$('#unit1').change(function() {
	   if($('#value1').val() != '') {
	      tempVal = $('#value1').val();
          tempVal = $.parseNumber(tempVal, {format:"#,###", locale:"us"});
		  $('#value1').val(calculate(tempVal, $("#convert-type").val(), $('#unit1').data('oldValue'), $("#unit1").val()));
		  $('#value1').formatNumber({format:"0,000.######", locale:"us"});
	   }
	   
	   $('#unit1').data('oldValue', $('#unit1').val());
	});
	
	$('#unit2').change(function() {
	   if($('#value2').val() != '') {
	      tempVal = $('#value2').val();
          tempVal = $.parseNumber(tempVal, {format:"#,###", locale:"us"});
		  $('#value2').val(calculate(tempVal, $("#convert-type").val(), $('#unit2').data('oldValue'), $("#unit2").val()));
		  $('#value2').formatNumber({format:"0,000.####", locale:"us"});
	   }
	   
	   $('#unit2').data('oldValue', $('#unit2').val());
	});
	
	$('.convert-link').click(function() {
	   changeSelection($(this).attr('id'));
	});
});

function loadConversionOptions(cType) {
   //clear any entered values
   $("#value1").val('');
   $("#value2").val('');
   
   //clear all current options
   $("#unit1 option").remove();
   $("#unit2 option").remove();
   
   switch(cType) {
	 case 'Convert Area':
		 $("#unit1").append('<option value="acre" selected="selected">Acre</option>');
		 $("#unit1").append('<option value="are">Are</option>');
		 $("#unit1").append('<option value="hectare">Hectare</option>');
		 $("#unit1").append('<option value="square_foot">Square Foot</option>');
		 $("#unit1").append('<option value="square_meter">Square Meter</option>');
		 $("#unit1").append('<option value="square_kilometer">Square Kilometer</option>');
		 $("#unit1").append('<option value="square_inch">Square Inch</option>');
		 $("#unit1").append('<option value="square_yard">Square Yard</option>');
		 $("#unit1").append('<option value="square_mile">Square Mile</option>');
		 $("#unit1").append('<option value="aankadam">Aankadam</option>');
		 $("#unit1").append('<option value="perch">Perch</option>');
		 $("#unit1").append('<option value="cent">Cent</option>');
		 $("#unit1").append('<option value="chatak">Chatak</option>');
		 $("#unit1").append('<option value="kottah">Kottah (B)</option>');
		 $("#unit1").append('<option value="guntha">Guntha</option>');
		 $("#unit1").append('<option value="ground">Ground</option>');
		 $("#unit1").append('<option value="marla">Marla</option>');
		 $("#unit1").append('<option value="rood">Rood</option>');
		 $("#unit1").append('<option value="bigha_I">Bigha I</option>');
		 $("#unit1").append('<option value="bigha_II">Bigha II</option>');
		 $("#unit1").append('<option value="kanal">Kanal</option>');
		 $("#unit1").append('<option value="biswa_I">Biswa I</option>');
		 $("#unit1").append('<option value="biswa_II">Biswa II</option>');
		 
		 $("#unit2").append('<option value="acre">Acre</option>');
		 $("#unit2").append('<option value="are">Are</option>');
		 $("#unit2").append('<option value="hectare" selected="selected">Hectare</option>');
		 $("#unit2").append('<option value="square_foot">Square Foot</option>');
		 $("#unit2").append('<option value="square_meter">Square Meter</option>');
		 $("#unit2").append('<option value="square_kilometer">Square Kilometer</option>');
		 $("#unit2").append('<option value="square_inch">Square Inch</option>');
		 $("#unit2").append('<option value="square_yard">Square Yard</option>');
		 $("#unit2").append('<option value="square_mile">Square Mile</option>');
		 $("#unit2").append('<option value="aankadam">Aankadam</option>');
		 $("#unit2").append('<option value="perch">Perch</option>');
		 $("#unit2").append('<option value="cent">Cent</option>');
		 $("#unit2").append('<option value="chatak">Chatak</option>');
		 $("#unit2").append('<option value="kottah">Kottah (B)</option>');
		 $("#unit2").append('<option value="guntha">Guntha</option>');
		 $("#unit2").append('<option value="ground">Ground</option>');
		 $("#unit2").append('<option value="marla">Marla</option>');
		 $("#unit2").append('<option value="rood">Rood</option>');
		 $("#unit2").append('<option value="bigha_I">Bigha I</option>');
		 $("#unit2").append('<option value="bigha_II">Bigha II</option>');
		 $("#unit2").append('<option value="kanal">Kanal</option>');
		 $("#unit2").append('<option value="biswa_I">Biswa I</option>');
		 $("#unit2").append('<option value="biswa_II">Biswa II</option>');
		 break;
	 case 'Convert Length':
		 $("#unit1").append('<option value="millimeter" selected="selected">Millimeter</option>');
		 $("#unit1").append('<option value="centimeter">Centimeter</option>');
		 $("#unit1").append('<option value="decimeter">Decimeter</option>');
		 $("#unit1").append('<option value="meter">Meter</option>');
		 $("#unit1").append('<option value="kilometer">Kilometer</option>');
		 $("#unit1").append('<option value="foot">Foot</option>');
		 $("#unit1").append('<option value="inch">Inch</option>');
		 $("#unit1").append('<option value="mile">Mile</option>');
		 $("#unit1").append('<option value="yard">Yard</option>');
		 
		 $("#unit2").append('<option value="millimeter">Millimeter</option>');
		 $("#unit2").append('<option value="centimeter">Centimeter</option>');
		 $("#unit2").append('<option value="decimeter">Decimeter</option>');
		 $("#unit2").append('<option value="meter">Meter</option>');
		 $("#unit2").append('<option value="kilometer">Kilometer</option>');
		 $("#unit2").append('<option value="foot">Foot</option>');
		 $("#unit2").append('<option value="inch" selected="selected">Inch</option>');
		 $("#unit2").append('<option value="mile">Mile</option>');
		 $("#unit2").append('<option value="yard">Yard</option>');
		 break;
	 case 'Convert Pressure':
		 $("#unit1").append('<option value="pascal" selected="selected">Pascal</option>');
		 $("#unit1").append('<option value="kilopascal">Kilopascal</option>');
		 $("#unit1").append('<option value="torr">Torr</option>');
		 $("#unit1").append('<option value="bar">Bar</option>');
		 $("#unit1").append('<option value="millibar">Millibar</option>');
		 $("#unit1").append('<option value="psi">PSI</option>');
		 
		 $("#unit2").append('<option value="pascal">Pascal</option>');
		 $("#unit2").append('<option value="kilopascal">Kilopascal</option>');
		 $("#unit2").append('<option value="torr">Torr</option>');
		 $("#unit2").append('<option value="bar">Bar</option>');
		 $("#unit2").append('<option value="millibar">Millibar</option>');
		 $("#unit2").append('<option value="psi" selected="selected">PSI</option>');
		 break;
	 case 'Convert Temperature':
		 $("#unit1").append('<option value="celsius">Celsius</option>');
		 $("#unit1").append('<option value="fahrenheit" selected="selected">Fahrenheit</option>');
		 $("#unit1").append('<option value="kelvin">Kelvin</option>');
		 
		 $("#unit2").append('<option value="celsius" selected="selected">Celsius</option>');
		 $("#unit2").append('<option value="fahrenheit">Fahrenheit</option>');
		 $("#unit2").append('<option value="kelvin">Kelvin</option>');
		 break;
	 case 'Convert Time':
		 $("#unit1").append('<option value="day" selected="selected">Day</option>');
		 $("#unit1").append('<option value="hour">Hour</option>');
		 $("#unit1").append('<option value="minute">Minute</option>');
		 $("#unit1").append('<option value="year">Year</option>');
		 
		 $("#unit2").append('<option value="day">Day</option>');
		 $("#unit2").append('<option value="hour">Hour</option>');
		 $("#unit2").append('<option value="minute" selected="selected">Minute</option>');
		 $("#unit2").append('<option value="year">Year</option>');	    
		 break;
	 case 'Convert Volume':
		 $("#unit1").append('<option value="cubic_foot">Cubic Foot</option>');
		 $("#unit1").append('<option value="cubic_inch" selected="selected">Cubic Inch</option>');
		 $("#unit1").append('<option value="cubic_mile">Cubic Mile</option>');
		 $("#unit1").append('<option value="cubic_yard">Cubic Yard</option>');
		 $("#unit1").append('<option value="cup">Cup</option>');
		 $("#unit1").append('<option value="imperial_gallon">Imperial Gallon</option>');
		 $("#unit1").append('<option value="us_gallon">US Gallon</option>');
		 $("#unit1").append('<option value="liter">Liter</option>');
		 $("#unit1").append('<option value="imperial_fluid_ounce">Imperial Fluid Ounce</option>');
		 $("#unit1").append('<option value="us_fluid_ounce">US Fluid Ounce</option>');
		 $("#unit1").append('<option value="imperial_pint">Imperial Pint</option>');
		 $("#unit1").append('<option value="us_liquid_pint">US Pint (liquid)</option>');
		 $("#unit1").append('<option value="us_dry_pint">US Pint (dry)</option>');
		 $("#unit1").append('<option value="imperial_quart">Imperial Quart</option>');
		 $("#unit1").append('<option value="us_liquid_quart">US Quart (liquid)</option>');
		 $("#unit1").append('<option value="us_dry_quart">US Quart (dry)</option>');
		 $("#unit1").append('<option value="tablespoon">Tablespoon</option>');
		 $("#unit1").append('<option value="teaspoon">Teaspoon</option>');
		 
		 $("#unit2").append('<option value="cubic_foot">Cubic Foot</option>');
		 $("#unit2").append('<option value="cubic_inch">Cubic Inch</option>');
		 $("#unit2").append('<option value="cubic_mile">Cubic Mile</option>');
		 $("#unit2").append('<option value="cubic_yard">Cubic Yard</option>');
		 $("#unit2").append('<option value="cup">Cup</option>');
		 $("#unit2").append('<option value="imperial_gallon">Imperial Gallon</option>');
		 $("#unit2").append('<option value="us_gallon">US Gallon</option>');
		 $("#unit2").append('<option value="liter" selected="selected">Liter</option>');
		 $("#unit2").append('<option value="imperial_fluid_ounce">Imperial Fluid Ounce</option>');
		 $("#unit2").append('<option value="us_fluid_ounce">US Fluid Ounce</option>');
		 $("#unit2").append('<option value="imperial_pint">Imperial Pint</option>');
		 $("#unit2").append('<option value="us_liquid_pint">US Pint (liquid)</option>');
		 $("#unit2").append('<option value="us_dry_pint">US Pint (dry)</option>');
		 $("#unit2").append('<option value="imperial_quart">Imperial Quart</option>');
		 $("#unit2").append('<option value="us_liquid_quart">US Quart (liquid)</option>');
		 $("#unit2").append('<option value="us_dry_quart">US Quart (dry)</option>');
		 $("#unit2").append('<option value="tablespoon">Tablespoon</option>');
		 $("#unit2").append('<option value="teaspoon">Teaspoon</option>');
		 break;
	 case 'Convert Weight':
		 $("#unit1").append('<option value="milligram">Milligram</option>');
		 $("#unit1").append('<option value="gram" selected="selected">Gram</option>');
		 $("#unit1").append('<option value="kilogram">Kilogram</option>');
		 $("#unit1").append('<option value="carat">Carat</option>');
		 $("#unit1").append('<option value="grain">Grain</option>');
		 $("#unit1").append('<option value="ounce">Ounce</option>');
		 $("#unit1").append('<option value="pennyweight">Pennyweight</option>');
		 $("#unit1").append('<option value="pound">Pound</option>');
		 $("#unit1").append('<option value="stone">Stone</option>');
		 $("#unit1").append('<option value="slug">Slug</option>');
		 $("#unit1").append('<option value="metric_ton">Metric Ton</option>');
		 $("#unit1").append('<option value="long_ton">Long Ton</option>');
		 $("#unit1").append('<option value="short_ton">Short Ton</option>');
		 
		 $("#unit2").append('<option value="milligram">Milligram</option>');
		 $("#unit2").append('<option value="gram">Gram</option>');
		 $("#unit2").append('<option value="kilogram">Kilogram</option>');
		 $("#unit2").append('<option value="carat">Carat</option>');
		 $("#unit2").append('<option value="grain">Grain</option>');
		 $("#unit2").append('<option value="ounce" selected="selected">Ounce</option>');
		 $("#unit2").append('<option value="pennyweight">Pennyweight</option>');
		 $("#unit2").append('<option value="pound">Pound</option>');
		 $("#unit2").append('<option value="stone">Stone</option>');
		 $("#unit2").append('<option value="slug">Slug</option>');
		 $("#unit2").append('<option value="metric_ton">Metric Ton</option>');
		 $("#unit2").append('<option value="long_ton">Long Ton</option>');
		 $("#unit2").append('<option value="short_ton">Short Ton</option>');
		 break;
   }
   
   //update old value
   $('#unit1').data('oldValue', $('#unit1').val());
   $('#unit2').data('oldValue', $('#unit2').val());
}

var units = {millimeter:{type:"length",factor:"0.001"},centimeter:{type:"length",factor:"0.01"},decimeter:{type:"length",factor:"0.1"},meter:{type:"length",factor:"1"},kilometer:{type:"length",factor:"1000"},foot:{type:"length",factor:"0.3048"},inch:{type:"length",factor:"0.0254"},mile:{type:"length",factor:"1609.344"},yard:{type:"length",factor:"0.9144"},cubic_foot:{type:"volume",factor:"0.02831685"},cubic_inch:{type:"volume",factor:"1.638706E-5"},cubic_mile:{type:"volume",factor:"4168182000"},cubic_yard:{type:"volume",factor:"0.7645549"},cup:{type:"volume",factor:"0.0002365882"},imperial_gallon:{type:"volume",factor:"0.00454609"},us_gallon:{type:"volume",factor:"0.003785412"},liter:{type:"volume",factor:"0.001"},imperial_fluid_ounce:{type:"volume",factor:"2.841306E-5"},us_fluid_ounce:{type:"volume",factor:"2.957353E-5"},imperial_pint:{type:"volume",factor:"0.00056826125"},us_liquid_pint:{type:"volume",factor:"0.0004731765"},us_dry_pint:{type:"volume",factor:"0.0005506105"},imperial_quart:{type:"volume",factor:"0.00113652297"},us_liquid_quart:{type:"volume",factor:"0.0009463529"},us_dry_quart:{type:"volume",factor:"0.001101221"},tablespoon:{type:"volume",factor:"1.478676E-5"},teaspoon:{type:"volume",factor:"4.928922E-6"},milligram:{type:"weight",factor:"1.0E-6"},gram:{type:"weight",factor:"0.001"},kilogram:{type:"weight",factor:"1"},carat:{type:"weight",factor:"0.0002"},grain:{type:"weight",factor:"6.479891E-5"},ounce:{type:"weight",factor:"0.02834952"},pennyweight:{type:"weight",factor:"0.001555174"},pound:{type:"weight",factor:"0.4535924"},stone:{type:"weight",factor:"6.35029318"},slug:{type:"weight",factor:"14.5939"},metric_ton:{type:"weight",factor:"1000"},long_ton:{type:"weight",factor:"1016.047"},short_ton:{type:"weight",factor:"907.1847"},acre:{type:"area",factor:"4046.873"},are:{type:"area",factor:"100"},hectare:{type:"area",factor:"10000"},square_foot:{type:"area",factor:"0.09290304"},square_meter:{type:"area",factor:"1"},square_kilometer:{type:"area",factor:"1000000"},square_inch:{type:"area",factor:"0.00064516"},square_yard:{type:"area",factor:"0.8361274"},square_mile:{type:"area",factor:"2589988"},aankadam:{type:"area",factor:"6.69"},perch:{type:"area",factor:"25.29"},cent:{type:"area",factor:"40.47"},chatak:{type:"area",factor:"41.81"},kottah:{type:"area",factor:"66.89"},guntha:{type:"area",factor:"101.17"},ground:{type:"area",factor:"222.97"},marla:{type:"area",factor:"501.68"},rood:{type:"area",factor:"1011.71"},bigha_I:{type:"area",factor:"1618.74"},bigha_II:{type:"area",factor:"2529.29"},kanal:{type:"area",factor:"10033.53"},biswa_I:{type:"area",factor:"32374.85"},biswa_II:{type:"area",factor:"50585.71"},pascal:{type:"pressure",factor:"1"},kilopascal:{type:"pressure",factor:"1000"},torr:{type:"pressure",factor:"133.3224"},bar:{type:"pressure",factor:"100000"},millibar:{type:"pressure",factor:"100"},psi:{type:"pressure",factor:"6894.757"},day:{type:"time",factor:"86400"},hour:{type:"time",factor:"3600"},minute:{type:"time",factor:"60"},year:{type:"time",factor:"31536000"},celsius:{type:"temperature",factor:{fahrenheit:"(t/¡F - 32)/1.8",kelvin:"T/K - 273.15",celsius:"t/¡C"}},fahrenheit:{type:"temperature",factor:{celsius:"(t/¡C*1.8)+32",kelvin:"((T/K-273.15)*1.8)+32",fahrenheit:"t/¡F"}},kelvin:{type:"temperature",factor:{celsius:"t/¡C + 273.15",fahrenheit:"(t/¡F + 459.67)/1.8", kelvin:"T/K"}}};

function calculate(value, type, fromUnit, toUnit) {
   var fromFactor = units[fromUnit]['factor'];
   var toFactor = units[toUnit]['factor'];
   var converted = 0;
   if(units[fromUnit]['type'] == "temperature") {
      var equation = str_replace('t/¡C', value, str_replace('t/¡F', value, str_replace('T/K', value, units[toUnit]['factor'][fromUnit])));
      eval("converted="+equation+";");
   } else {
	  var from_convert = value * fromFactor;
	  converted = from_convert / toFactor;
   }

   return converted;	
}

function changeSelection(cType) {
   $("#convert-type").val(cType);
   loadConversionOptions(cType);
}

function str_replace(search, replace, subject)
{
var result = "";
var  oldi = 0;
for (i = subject.indexOf (search); i > -1; i = subject.indexOf (search, i))
{
result += subject.substring (oldi, i);
result += replace;
i += search.length;
oldi = i;
}
return result + subject.substring (oldi, subject.length);
}
