
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 addCoeff () {
	var k = 0;
	for( var i = 0; i < unitsArray.length; i++ ) {

		// пропускаем единицы без коэффициентов (_ в имени)
		if( unitsArray[i].name.indexOf('_') != -1 )
			continue;
			
		for( var j = i+1; j < unitsArray.length; j++ ) {

			// пропускаем единицы без коэффициентов (_ в имени)
			if( unitsArray[j].name.indexOf('_') != -1 )
				continue;

                        // заносим прямой и обратный коэффициенты
			unitsArray[i].coef[unitsArray[j].name] = coeffArray[k];
			unitsArray[j].coef[unitsArray[i].name] = 1/coeffArray[k];

			k++;
		}
        }
}


function checkNum(str, val) {
	var text;
	if ( lang == 'ru' ) text = "Введите, пожалуйста, правильное число!";
		else  text = "Please enter a valid number!";
	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);
        }
	}
	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 );
       	}
	}
	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 = 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 == 'ru' ) text = "Это невозможно по законам природы!";
    	else text = "This is impossible due to laws of nature!";
	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;
	}
	
	
}

function fuel ( val ) {
	var text;
	if ( lang == 'ru' ) text = "Пожалуйста введите положительное число!";
    	else text = "Please enter a positive non zero value!";
	if ( Number(currentValue) < 0.000001 ) {
		alert (text);
		document.forms["main"][val].focus ();
		document.forms["main"][val].select ();
		return false;
	}
	if ( val == 'kmpl_fuel' ) {
		document.forms["main"].lp100km_fuel.value = roundOffSig ( 100/Number(currentValue), document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].mpg_fuel.value = roundOffSig ( Number(currentValue)*0.6213712/0.2641721, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].gp100m_fuel.value = roundOffSig ( 100/Number(currentValue)*0.2641721/0.6213712, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bmpg_fuel.value = roundOffSig ( Number(currentValue)*0.6213712/0.2199688, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bgp100m_fuel.value = roundOffSig ( 100/Number(currentValue)*0.2199688/0.6213712, document.forms["main"].signFig.selectedIndex+1 );
        } else if( val == 'lp100km_fuel' ) {
		document.forms["main"].kmpl_fuel.value = roundOffSig ( 100/Number(currentValue), document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].mpg_fuel.value = roundOffSig ( 100/Number(currentValue)*0.6213712/0.2641721, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].gp100m_fuel.value = roundOffSig ( Number(currentValue)*0.2641721/0.6213712, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bmpg_fuel.value = roundOffSig ( 100/Number(currentValue)*0.6213712/0.2199688, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bgp100m_fuel.value = roundOffSig ( Number(currentValue)*0.2199688/0.6213712, document.forms["main"].signFig.selectedIndex+1 );
        } else if( val == 'mpg_fuel' ) {
		document.forms["main"].kmpl_fuel.value = roundOffSig ( Number(currentValue)/0.6213712*0.2641721, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].lp100km_fuel.value = roundOffSig ( 100/Number(currentValue)*0.6213712/0.2641721, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].gp100m_fuel.value = roundOffSig ( 100/Number(currentValue), document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bmpg_fuel.value = roundOffSig ( Number(currentValue)/0.8326725, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bgp100m_fuel.value = roundOffSig ( 100/Number(currentValue)*0.8326725, document.forms["main"].signFig.selectedIndex+1 );
        } else if( val == 'gp100m_fuel' ) {
		document.forms["main"].kmpl_fuel.value = roundOffSig ( 100/Number(currentValue)*0.2641721/0.6213712, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].lp100km_fuel.value = roundOffSig ( Number(currentValue)/0.2641721*0.6213712, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].mpg_fuel.value = roundOffSig ( 100/Number(currentValue), document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bmpg_fuel.value = roundOffSig ( 100/Number(currentValue)/0.8326725, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bgp100m_fuel.value = roundOffSig ( Number(currentValue)*0.8326725, document.forms["main"].signFig.selectedIndex+1 );
        } else if( val == 'bmpg_fuel' ) {
		document.forms["main"].kmpl_fuel.value = roundOffSig ( Number(currentValue)/0.6213712*0.2199688, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].lp100km_fuel.value = roundOffSig ( 100/Number(currentValue)*0.6213712/0.2199688, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bgp100m_fuel.value = roundOffSig ( 100/Number(currentValue), document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].mpg_fuel.value = roundOffSig ( Number(currentValue)*0.8326725, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].gp100m_fuel.value = roundOffSig ( 100/Number(currentValue)/0.8326725, document.forms["main"].signFig.selectedIndex+1 );
        } else if( val == 'bgp100m_fuel' ) {
		document.forms["main"].kmpl_fuel.value = roundOffSig ( 100/Number(currentValue)*0.2199688/0.6213712, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].lp100km_fuel.value = roundOffSig ( Number(currentValue)/0.2199688*0.6213712, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].bmpg_fuel.value = roundOffSig ( 100/Number(currentValue), document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].mpg_fuel.value = roundOffSig ( 100/Number(currentValue)*0.8326725, document.forms["main"].signFig.selectedIndex+1 );
		document.forms["main"].gp100m_fuel.value = roundOffSig ( Number(currentValue)/0.8326725, document.forms["main"].signFig.selectedIndex+1 );
        } else {
        	alert("Internal Error!");
        }
	
}

