// JavaScript Document

var Calculation = {
	
	numDigs: 15,
	
	init: function() {
				
		var valueFrom = document.getElementById("valuefrom");
		var valueTo = document.getElementById("valueto");
		var unitFrom = document.getElementById("unitfrom");
		var unitTo = document.getElementById("unitto");
		
		var campos = [valueFrom, valueTo, unitFrom, unitTo]; // alternativa para passar valores as funcoes

		
		Core.addEventListener(valueFrom, "keyup", Calculation.convertListener);
		//alert("1º listener passou");         
		Core.addEventListener(valueTo, "keyup", Calculation.convertBackListener);
		//alert("2º listener passou");
		Core.addEventListener(unitFrom, "change", Calculation.convertListener);
		//alert("3º listener passou");
		Core.addEventListener(unitTo, "change", Calculation.convertListener);
		//alert("4º listener passou");

		//alert("ultima linha do init()");         
	},
	
	convertListener: function(event){
		//alert("entrou em convertListener()");         
		
		var vFrom = document.getElementById("valuefrom").value;
		//alert("Valor no campo \'From\' é:  " + vFrom);         
		
		if(isNaN(vFrom) || vFrom == ""){   
			document.getElementById("valueto").value = "";
		}
		else{
			vFrom = parseFloat(vFrom);
			var unitTypeFromIndex = document.getElementById("unitfrom").selectedIndex;
			var unitTypeToIndex = document.getElementById("unitto").selectedIndex;
			//alert("Index 1 é:  " + unitTypeFromIndex + "  e o Indice 2 é:  " + unitTypeToIndex);  
			document.getElementById("valueto").value = Calculation.convert( vFrom, unitTypeFromIndex, unitTypeToIndex);
		}
		
		//alert("fim de convertListener()");         
	},
	
	convertBackListener: function(event){
		//alert("entrou em convertBackListener()");         
		
		var vTo = document.getElementById("valueto").value;
		//alert("Valor no campo \'To\':  " + vTo);         
		if(isNaN(vTo) || vTo == ""){   
			document.getElementById("valuefrom").value = "";
		}
		else{
			vTo = parseFloat(vTo);
			var unitTypeFromIndex = document.getElementById("unitfrom").selectedIndex;
			var unitTypeToIndex = document.getElementById("unitto").selectedIndex;
			//alert("Index 1 é:  " + unitTypeFromIndex + "  e o Indice 2 é:  " + unitTypeToIndex);  
			document.getElementById("valuefrom").value = Calculation.convert( vTo, unitTypeToIndex, unitTypeFromIndex);
		}
		
		//alert("fim de convertListener()");         
	},
	
	convert: function(value, uTypeFromIndex, uTypeToIndex){
		var uTypeFrom = units[uTypeFromIndex];
		var uTypeTo   = units[uTypeToIndex];;
		
		if (!isNaN(uTypeFrom[1])) {
		value = value * uTypeFrom[1];
		}
		else {
		value = eval(uTypeFrom[1]);
		}
		
		if (!isNaN(uTypeTo[1])) {
		value = value / uTypeTo[1];
		}
		else {
		value = eval(uTypeTo[2]);
		}
		
		return Calculation.formatFloat(value, Calculation.numDigs);
	},
	
	formatFloat: function(number,X) {
	// rounds number to X decimal places, default is 6
		X = (!X ? 6 : X);
		return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
	}
	
};

Core.start(Calculation);