
var unitsArray = new Array();
var currentUnit;
var currentValue;
var oldValue;

function coeffitients ( array ) {
}

function unit ( name, title, sign, group ) {
	this.name = name;
	this.title = title;
	this.sign = sign;
	this.group = group;
	this.coef = new coeffitients ();
}

function arrayOfUnits ( ) {
	var i = 0;
	var group;
	if ( mainArray[0] != "--" ) {
		group = "unique";
	}
	var j = 0;
    while ( i < mainArray.length ) {
    	if ( mainArray[i] == "--" ) {
			group = mainArray[++i];
			i+=2;
			continue;
		}
    	unitsArray[j] = new unit ( mainArray[i], mainArray[++i], mainArray[++i], group );
    	i++;
    	j++;
    }
}

function form () {
	var group;
	var text;
	var star='</td>';
	var star1 = 0;
	var star2 = 0;
	with ( document ) {
		if ( lang == '' ) text = '';
        	else text = '<div class=textBold> Cifras significativas:';
        	
		writeln ( "<div class=\"signfig\">" + text + " <select name=\"signFig\" " +
			"onChange=\"compute(currentUnit)\">" +
			"<option>1" +
			"<option>2" +
			"<option selected>3" +

			"</select></div>" );
		
		writeln ( "<table border=0 cellpadding=0 cellspacing=0 class=\"utable\">" );

		if ( lang == '' ) text = '';
        	else text = 'Convertir';

        var j = 0;
		for ( var i = 0; i < unitsArray.length; i++ ) {
			if ( group != unitsArray[i].group ) {
				group = unitsArray[i].group;
				writeln ( "<tr><td colspan=2 class=\"uemptyrow\">&nbsp;</td></tr>" +
				"<tr><td class=\"utitle\">" + group + "</td>");
				writeln ( "<td class=\"ubutton\"><input type=\"button\" value=" +
				text +
				" onClick=\"compute(currentUnit)\"></td></tr>");
				while ( mainArray[j] != unitsArray[i].group ) {
					j++;
				}
				if ( mainArray[++j] != "" )
					writeln ( "<tr><td class=\"udescription\">" + mainArray[j] + "</td></tr>" );
			}


            if ( unitsArray[i].title.substring (0, 2) == '**' ) {
            	star = '<sup><a href=\"#a\">**</a></sup>' + star;
				unitsArray[i].title = unitsArray[i].title.substring ( 2, unitsArray[i].title.length );
				star2 = 1;
			}
			else
				if ( unitsArray[i].title.substring (0, 1) == '*' ) {
					star = '<sup><a href=\"#a\">*</a></sup>' + star;
					unitsArray[i].title = unitsArray[i].title.substring ( 1, unitsArray[i].title.length );
					star1 = 1;
				}
				
            writeln ( "<tr><td class=\"uname\">" + unitsArray[i].title );
			
			
			if ( unitsArray[i].sign != '-' ) {
				writeln ( " (" + unitsArray[i].sign + ") " );
			}
			writeln ( star );
			star = '</td>';
			
			writeln ( "</td><td class=\"uvalue\">&nbsp;&nbsp;&nbsp;<input type=text name=" +
			          unitsArray[i].name +
			          " size=15" +
			          " onFocus=\"oldValue=this.value\"" +
			          " onBlur=\"currentCompute(this.name, this.value)\"></td></tr>" );
		}
        writeln ( "</table>" );
        writeln ( "<a name=\"a\"><table width=450 class=\"footnote\">" );
		
	if ( star1 ) {
		writeln ( "<tr><td colspan=2 class=\"footnote\">*" +
			( lang == '' ?
				"" :
				" El valor es aproximado.  La unidad no tiene un valor exacto. " ) +
				"</td></tr>"
			);
        }
	if ( star2 ) {
		writeln ( "<tr><td colspan=2 class=\"footnote\">**" +
			( lang == '' ?
				"" :
				" El valor es aproximado.  La unidad no tiene un valor exacto." ) +
				"</td></tr>"
			);
        }
        writeln ( "</table></a>" );

	}
	
}

function addCoeff () {
	for ( var i = 0; i < coeffArray.length-2; i += 3 ) {
		var k = 0, l = 0;
		for ( var j = 0; j < unitsArray.length; j++ ) {
			( unitsArray[j].name == coeffArray[i] ) ? k = j :
				( ( unitsArray[j].name == coeffArray[i+1] ) ? l = j : 1 );
		}
		unitsArray[k].coef[coeffArray[i+1]] = coeffArray[i+2];
		unitsArray[l].coef[coeffArray[i]] = 1/coeffArray[i+2];

	}
}


function checkNum(str, val) {
	var text;
	if ( lang == '' ) text = "";
		else  text = "¡Ingrese un numero valido! Ej. 1/4 de taza = 0.25";
	for (var i=0; i<str.length; i++) {
		var ch = str.substring(i, i + 1)
		if (ch!="." && ch!="+" && ch!="-" && ch!="e" && ch!="E" && (ch < "0" || ch > "9")) {
			alert(text);
			document.forms["main"][val].focus ();
			document.forms["main"][val].select ();
			return false;
		}
    }
	return true;
	
}

function roundOffSig ( value, precision ) {
	precision = parseInt(precision);
	var result;
	value = String(value);
	var shift;
	var expPart = '';
	var signPart = '';
	if  ( value.indexOf( "e" ) != -1 ) {
		expPart = value.substring( value.indexOf( "e" ), value.length );
		value = value.substring( 0, value.indexOf( "e" ) );
	}
	else {
        if  ( value.indexOf( "E" ) != -1 ) {
        	expPart = value.substring( value.indexOf( "E" ), value.length );
        	value = value.substring( 0, value.indexOf( "e" ) );
        }
        if ( value.substring( 0, 1 ) == '-' ) {
        	signPart = '-';
        	value = value.substring( 1, value.length);
        }
//        alert ("value=" + value + "\nexpPart=" + expPart);
	}
	if ( parseFloat(value) >= 1.0 ) {
		var point = value.indexOf( "." );
		if ( point == -1 ) {
			point = value.length;
		}
		shift = point-precision;
	}
	else {
		var notNull=String(value).lastIndexOf ( '.' ) + 1;
		if ( notNull == 1 ) notNull += 1;
		while ( String(value).charAt ( notNull ) == '0' ) {
			notNull++;
		}
		notNull -= 2;
        
		shift = -(precision+notNull);
	}

	result = Math.round(value/Math.pow(10, shift));
	if ( shift >=0 ) {
		for ( var i=1; i<=shift; i++ ) {
			result += '0';
		}
	}
	else {
		result += '';
		if ( result.length+shift>0 ) {
			result = result.substring ( 0, result.length+shift ) + '.' + result.substring ( result.length+shift, result.length );
		}
		else {
           	var result1 = '0.';
           	for ( var i=-1; i>=result.length+shift; i-- ) {
           		result1 += '0';
           	}
           	result = result1 + result;
		}
       	while ( result.charAt(result.length-1) == '0' ) {
       		result = result.substring ( 0, result.length-1 );
       	}
       	if ( result.charAt(result.length-1) == '.' ) {
       		result = result.substring ( 0, result.length-1 );
       	}
	}
//	if ( result <= 0 && result >= 0 ) expPart = '';
	result = signPart + result + expPart;
	return result;
	
}

function compute ( val ) {
	
	if ( !currentUnit || !currentValue ) return;
	if ( currentValue && checkNum ( currentValue, val ) ) {
		if ( val.indexOf ( "_" ) != -1 ) {
			var func = val.substring ( val.indexOf( "_" ) + 1, val.length ) + "('" + val +"')";
			eval ( func );
			return;
		}
		for ( var i = 0; i < unitsArray.length; i++ ) {
			if ( val == unitsArray[i].name ) break;
		}
		for ( var j in unitsArray[i].coef ) {
//			document.forms["main"][j].value = unitsArray[i].coef[j]*document.forms["main"][val].value;
			document.forms["main"][j].value = roundOffSig ( unitsArray[i].coef[j]*currentValue, document.forms["main"].signFig.selectedIndex+1 );
		}
		document.forms["main"][val].value = roundOffSig ( currentValue, document.forms["main"].signFig.selectedIndex+1 );
	}
}

function currentCompute ( name, value ) {
	if ( oldValue == value ) return;
	currentUnit = name;
	currentValue = value;
	compute ( name );
}

function tempr ( val ) {
	var text;
	if ( lang == '' ) text = "";
    	else text = "¡Esto es imposible!";
	if ( val == 'celsius_tempr' ) {
		if ( Number(currentValue) < -273.15 ) {
			alert (text);
			document.forms["main"][val].focus ();
			document.forms["main"][val].select ();
			return false;
		}
		document.forms["main"].farenheit_tempr.value = roundOffSig ( currentValue*1.8+32, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].kelvin_tempr.value = roundOffSig ( Number(currentValue)+273.15, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].reaumur_tempr.value = roundOffSig ( currentValue*0.8, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].rankin_tempr.value = roundOffSig ( currentValue*1.8+491.67, document.forms["main"].signFig.selectedIndex+1 );
	}
	if ( val == 'farenheit_tempr' ) {
		if ( Number(currentValue) < -459.67 ) {
			alert (text);
			document.forms["main"][val].focus ();
			document.forms["main"][val].select ();
			return false;                         
		}
		document.forms["main"].celsius_tempr.value = roundOffSig ( (currentValue-32)/1.8, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].kelvin_tempr.value = roundOffSig ( (Number(currentValue)+459.67)/1.8, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].reaumur_tempr.value = roundOffSig ( (currentValue-32)/2.25, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].rankin_tempr.value = roundOffSig ( Number(currentValue)+459.67, document.forms["main"].signFig.selectedIndex+1 );
	}
	if ( val == 'kelvin_tempr' ) {
		if ( Number(currentValue) < 0 ) {
			alert (text);
			document.forms["main"][val].focus ();
			document.forms["main"][val].select ();
			return false;                         
		}
		document.forms["main"].celsius_tempr.value = roundOffSig ( Number(currentValue)-273.15, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].farenheit_tempr.value = roundOffSig ( currentValue*1.8-459.67, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].reaumur_tempr.value = roundOffSig ( (Number(currentValue)-273.15)*0.8, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].rankin_tempr.value = roundOffSig ( Number(currentValue)*1.8, document.forms["main"].signFig.selectedIndex+1 );
	}
	if ( val == 'reaumur_tempr' ) {
		if ( Number(currentValue) < -218.52 ) {
			alert (text);
			document.forms["main"][val].focus ();
			document.forms["main"][val].select ();
			return false;                         
		}
		document.forms["main"].celsius_tempr.value = roundOffSig ( currentValue*1.25, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].farenheit_tempr.value = roundOffSig ( currentValue*2.25+32, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].kelvin_tempr.value = roundOffSig ( currentValue*1.25+273.15, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].rankin_tempr.value = roundOffSig ( currentValue*2.25+491.67, document.forms["main"].signFig.selectedIndex+1 );
	}
	if ( val == 'rankin_tempr' ) {
		if ( Number(currentValue) < 0 ) {
			alert (text);
			document.forms["main"][val].focus ();
			document.forms["main"][val].select ();
			return false;                         
		}
		document.forms["main"].celsius_tempr.value = roundOffSig ( (currentValue-491.67)/1.8, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].farenheit_tempr.value = roundOffSig ( Number(currentValue)-459.67, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].kelvin_tempr.value = roundOffSig ( currentValue/1.8, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].reaumur_tempr.value = roundOffSig ( (currentValue-491.67)/2.25, document.forms["main"].signFig.selectedIndex+1 );
	}

	if ( document.forms["main"].kelvin_tempr.value == 0 || document.forms["main"].rankin_tempr.value == 0 ) {
		document.forms["main"].kelvin_tempr.value = 0;
		document.forms["main"].rankin_tempr.value = 0;
	}
	
	
}