var wide = {
    "１":"1",
    "２":"2",
    "３":"3",
    "４":"4",
    "５":"5",
    "６":"6",
    "７":"7",
    "８":"8",
    "９":"9",
    "０":"0",
    "．":"."
};

function check_number(n)
{
    // Remove commas and leading and trailing whitespace
    var givenvalue = n.replace(/,/g, '');
    givenvalue = givenvalue.replace(/\s+/g, '');
    for (var i in wide) {
//	alert ("Replacing "+i+" with "+wide[i]);
	givenvalue = givenvalue.replace (i, wide[i], "g");
    }
    var ValidChars = "0123456789.-";
    var IsNumber=true;
    for (i = 0; i < givenvalue.length && IsNumber == true; i++) {
	Char = givenvalue.charAt(i);
	if (ValidChars.indexOf(Char) == -1)
	    IsNumber = false;
    }
    if (!IsNumber) {
	alert(n+' is not a valid number');
	return 0;
    }
    givenvalue=givenvalue-0;
    //force cast as a number
    return givenvalue;
}

var precision = 4;

function process(field,units_array,form)
{
    var givenvalue = check_number(field.value);
    if (givenvalue == 0) {
	return;
    }
    var d = units_array[field.name];
    if (!d) {
	alert ("Bug: undefined field "+field.name);
	return;
    }
    var unit;
    for (unit in units_array) 
	if (form[unit]) {
	    if (form[unit].name != field.name) {
		var v = givenvalue * units_array[unit] / d;
		v = v.toPrecision(precision);
		form[unit].value = v;
	    }
	}
}

var metre_to_inch = 1/0.0254;
var shaku_to_metre = 10/33;
var inch_to_mile = 63360;
var length_units = new Array();

length_units["mile"] = shaku_to_metre*metre_to_inch/inch_to_mile;
length_units["yard"] = shaku_to_metre*metre_to_inch/36;
length_units["foot"] = shaku_to_metre*metre_to_inch/12;
length_units["inch"] = shaku_to_metre*metre_to_inch;
length_units["kilometre"] = 0.001*shaku_to_metre;
length_units["metre"] = 1*shaku_to_metre;
length_units["decimetre"] = 10*shaku_to_metre;
length_units["centimetre"] = 100*shaku_to_metre;
length_units["millimetre"] = 1000*shaku_to_metre;
length_units["mou"] = 10000;
length_units["rin"] = 1000;
length_units["bu"] = 100;
length_units["sun"] = 10;
length_units["shaku"] = 1;
length_units["ken"] = 1/6.0;
length_units["hiro"] = 1/6.0;
length_units["jou"] = 1/10.0;
length_units["chou"] = 1/60.0;
length_units["ri"] = 1/(36*60);

function process_length(field)
{
    process(field,length_units,document.lengthform);
}

var tsubo_to_sqm = (6*shaku_to_metre)*(6*shaku_to_metre);

var area_units = new Array();
area_units["area_shaku"] = 100;
area_units["area_gou"]   = 10;
area_units["area_jou"]   = 2;
area_units["area_tsubo"] = 1;
area_units["area_bu"]    = 1;
area_units["area_se"]    = 1/10;
area_units["area_tan"] = 1/100;
area_units["area_choubu"]   = 1/3000;
area_units["squaremile"] = 36*length_units["mile"]*length_units["mile"];
area_units["squarefoot"] = 36*length_units["foot"]*length_units["foot"];
area_units["squareyard"] = 36*length_units["yard"]*length_units["yard"];
area_units["squareinch"] = 36*length_units["inch"]*length_units["inch"];
area_units["acre"] = area_units["squareyard"]/4840;
area_units["squarekilometre"] = tsubo_to_sqm/1000000;
area_units["hectare"] = tsubo_to_sqm/10000;
area_units["squaremetre"] = tsubo_to_sqm;
area_units["squarecentimetre"] = tsubo_to_sqm*10000;

function process_area(field)
{
    process(field,area_units,document.areaform);
}

var shou_to_litre = 2401/1331;
var volume_units = new Array();

volume_units["cyard"] = 0.0006848;
volume_units["cfoot"] = 0.01849;
volume_units["ukfluidounces"] = 63.49;
volume_units["ukpint"] = 63.49/20;
volume_units["usfluidounces"] = 61;
volume_units["uspint"] = 61/16;
volume_units["litre"] = shou_to_litre;
volume_units["millilitre"] = shou_to_litre*1000;
volume_units["volume_shaku"] = 100;
volume_units["volume_gou"] = 10;
volume_units["volume_shou"] = 1;
volume_units["volume_to"] = 1/10;
volume_units["volume_koku"] = 1/100;
volume_units["ukgallon"] = shou_to_litre / 4.54609;
volume_units["usgallon"] = shou_to_litre / 3.785411784 ;


function process_volume(field)
{
    process(field,volume_units,document.volumeform);
}

var weight_units = new Array();
weight_units["fun"] = 10;
weight_units["momme"] = 1;
weight_units["hyakume"] = 1/100;
weight_units["kanme"] = 1/1000;
weight_units["kin"] = 1/160;
weight_units["stone"] = 15/(4*453.59237*14);
weight_units["pound"] = 15/(4*453.59237);
weight_units["ounce"] = 4*15/(453.59237);
weight_units["tonne"] = 15/4000000;
weight_units["kilogram"] = 15/4000;
weight_units["gram"] = 15/4;
weight_units["milligram"] = 15000/4;

function process_weight(field)
{
    process(field,weight_units,document.weightform);
}

function clear(units_array,form)
{
    for (var unit in units_array) 
	if (form[unit])
	    form[unit].value = '';
}

function clear_weight()
{
    clear(weight_units,document.weightform);
}
function clear_volume()
{
    clear(volume_units,document.volumeform);
}
function clear_area()
{
    clear(area_units,document.areaform);
}
function clear_length()
{
    clear(length_units,document.lengthform);
}

