var mainArray = new Array (
	"--", "Metric", "",
	"bar", "bar", "-",
	"kilopascal", "kilopascal", "kPa",
	"millibar", "millibar", "-",
	"pascal", "pascal", "Pa",
	"kgcmsq", "kilogram per square centimeter", "kg/cm<sup>2</sup>",
	"kgmsq", "kilogram per square meter", "kg/m<sup>2</sup>",
	"--", "Avoirdupois (U.S.)", "",
	"psi", "pound per square inch", "psi",
	"psf", "pound per square foot", "-",
	"--", "Mercury", "",
	"in*mercury", "inch of mercury", "-",
	"cm*mercury", "centimeter of mercury", "-",
	"mm*mercury", "millimeter of mercury (torr)", "-",
	"--", "Water (at 39.2<sup>o</sup>F, 4<sup>o</sup>C)", "",
	"mwater", "meter of water", "-",
	"cmwater", "centimeter of water", "-",
	"inwater", "inch of water", "-",
	"--", "Atmosphere", "",
	"atm", "physical atmosphere", "atm",
	"techatm", "technical atmosphere", "-");

var coeffArray = new Array ( 
	"mwater", "cm*mercury",  7.3554096,
	"mwater", "atm",  0.096781437,
	"mwater", "cmwater",  100,
	"mwater", "kgmsq",  999.97238,
	"mwater", "kilopascal",  9.8063791,
	"mwater", "pascal",  9806.3791,
	"mwater", "bar",  0.098063791,
	"mwater", "techatm",  0.099997238,
	"mwater", "kgcmsq",  0.099997238,
	"mwater", "in*mercury",  2.8958305,
	"mwater", "psf",  204.81049,
	"mwater", "inwater",  39.370079,
	"mwater", "mm*mercury",  73.554096,
	"mwater", "millibar",  98.063791,
	"mwater", "psi",  1.422295,
	"cm*mercury", "atm",  0.013157858,
	"cm*mercury", "cmwater",  13.595436,
	"cm*mercury", "kgmsq",  135.9506,
	"cm*mercury", "kilopascal",  1.33322,
	"cm*mercury", "pascal",  1333.22,
	"cm*mercury", "bar",  0.0133322,
	"cm*mercury", "techatm",  0.01359506,
	"cm*mercury", "kgcmsq",  0.01359506,
	"cm*mercury", "in*mercury",  0.39370079,
	"cm*mercury", "psf",  27.844879,
	"cm*mercury", "inwater",  5.3525339,
	"cm*mercury", "mm*mercury",  10,
	"cm*mercury", "millibar",  13.3322,
	"cm*mercury", "psi",  0.19336721,
	"atm", "cmwater",  1033.256,
	"atm", "kgmsq",  10332.275,
	"atm", "kilopascal",  101.325,
	"atm", "pascal",  101325,
	"atm", "bar",  1.01325,
	"atm", "techatm",  1.0332275,
	"atm", "kgcmsq",  1.0332275,
	"atm", "in*mercury",  29.921343,
	"atm", "psf",  2116.2166,
	"atm", "inwater",  406.7937,
	"atm", "mm*mercury",  760.0021,
	"atm", "millibar",  1013.25,
	"atm", "psi",  14.695949,
	"cmwater", "kgmsq",  9.9997238,
	"cmwater", "kilopascal",  0.098063791,
	"cmwater", "pascal",  98.063791,
	"cmwater", "bar",  0.00098063791,
	"cmwater", "techatm",  0.00099997238,
	"cmwater", "kgcmsq",  0.00099997238,
	"cmwater", "in*mercury",  0.028958305,
	"cmwater", "psf",  2.0481049,
	"cmwater", "inwater",  0.39370079,
	"cmwater", "mm*mercury",  0.73554096,
	"cmwater", "millibar",  0.98063791,
	"cmwater", "psi",  0.01422295,
	"kgmsq", "kilopascal",  0.00980665,
	"kgmsq", "pascal",  9.80665,
	"kgmsq", "bar",  9.80665e-05,
	"kgmsq", "techatm",  0.0001,
	"kgmsq", "kgcmsq",  0.0001,
	"kgmsq", "in*mercury",  0.0028959105,
	"kgmsq", "psf",  0.20481614,
	"kgmsq", "inwater",  0.039371166,
	"kgmsq", "mm*mercury",  0.073556127,
	"kgmsq", "millibar",  0.0980665,
	"kgmsq", "psi",  0.0014223343,
	"kilopascal", "pascal",  1000,
	"kilopascal", "bar",  0.01,
	"kilopascal", "techatm",  0.010197162,
	"kilopascal", "kgcmsq",  0.010197162,
	"kilopascal", "in*mercury",  0.29530069,
	"kilopascal", "psf",  20.885434,
	"kilopascal", "inwater",  4.0147417,
	"kilopascal", "mm*mercury",  7.5006376,
	"kilopascal", "millibar",  10,
	"kilopascal", "psi",  0.14503774,
	"pascal", "bar",  1e-05,
	"pascal", "techatm",  1.0197162e-05,
	"pascal", "kgcmsq",  1.0197162e-05,
	"pascal", "in*mercury",  0.00029530069,
	"pascal", "psf",  0.020885434,
	"pascal", "inwater",  0.0040147417,
	"pascal", "mm*mercury",  0.0075006376,
	"pascal", "millibar",  0.01,
	"pascal", "psi",  0.00014503774,
	"bar", "techatm",  1.0197162,
	"bar", "kgcmsq",  1.0197162,
	"bar", "in*mercury",  29.530069,
	"bar", "psf",  2088.5434,
	"bar", "inwater",  401.47417,
	"bar", "mm*mercury",  750.06376,
	"bar", "millibar",  1000,
	"bar", "psi",  14.503774,
	"techatm", "kgcmsq",  1,
	"techatm", "in*mercury",  28.959105,
	"techatm", "psf",  2048.1614,
	"techatm", "inwater",  393.71166,
	"techatm", "mm*mercury",  735.56127,
	"techatm", "millibar",  980.665,
	"techatm", "psi",  14.223343,
	"kgcmsq", "in*mercury",  28.959105,
	"kgcmsq", "psf",  2048.1614,
	"kgcmsq", "inwater",  393.71166,
	"kgcmsq", "mm*mercury",  735.56127,
	"kgcmsq", "millibar",  980.665,
	"kgcmsq", "psi",  14.223343,
	"in*mercury", "psf",  70.725992,
	"in*mercury", "inwater",  13.595436,
	"in*mercury", "mm*mercury",  25.4,
	"in*mercury", "millibar",  33.863788,
	"in*mercury", "psi",  0.49115272,
	"psf", "inwater",  0.19222687,
	"psf", "mm*mercury",  0.35913247,
	"psf", "millibar",  0.47880259,
	"psf", "psi",  0.0069444444,
	"inwater", "mm*mercury",  1.868274,
	"inwater", "millibar",  2.4908203,
	"inwater", "psi",  0.036126294,
	"mm*mercury", "millibar",  1.33322,
	"mm*mercury", "psi",  0.019336721,
	"millibar", "psi",  0.014503774);

/***************************************************************/
/* translator.js script used at http://www.convert-me.com      */
/* Copyright (c) 2000 by Anna Gershtein                        */
/* Unauthorized duplication is strictly prohibited             */
/* Contact webmaster@convert-me.com if you have any questions  */
/***************************************************************/

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 == 'ru' ) text = 'Количество значащих цифр:';
        	else text = 'Significant figures:';
        	
		writeln ( "<div class=\"signfig\">" + text + " <select name=\"signFig\" " +
			"onChange=\"compute(currentUnit)\">" +
			"<option>1" +
			"<option>2" +
			"<option>3" +
			"<option selected>4" +
			"<option>5" +
			"<option>6" +
			"<option>7" +
			"</select></div>" );
		
		writeln ( "<table border=0 cellpadding=0 cellspacing=0 class=\"utable\">" );

		if ( lang == 'ru' ) text = 'Посчитать';
        	else text = 'Convert';

        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=100% class=\"footnote\">" );
		
	if ( star1 ) {
		writeln ( "<tr><td colspan=2 class=\"footnote\">*" +
			( lang == 'ru' ?
				" Величина не имеет точного значения. Используется приближенное." :
				" The value is approximate. The unit does not have an exact value. " ) +
				"</td></tr>"
			);
        }
	if ( star2 ) {
		writeln ( "<tr><td colspan=2 class=\"footnote\">**" +
			( lang == 'ru' ?
				" К сожалению, нам неизвестно точное значение этой величины." +
				" Если Вы обладаете такой информацией, пожалуйста, <a href=mailto:unitinfo@convert-me.com>сообщите нам " +
				"ее источник</a>." :
				" The value is approximate. We do not know the exact value of this unit." +
				" Would you have such information we'll appreciate if you kindly <a href=mailto:unitinfo@convert-me.com>share it with us</a>." ) +
				"</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 == '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);
        }
//        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;
		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 == '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;
	}
	
	
}
