//-------------------------------------------------------//

function get(str)
{
    return document.getElementById(str);
}

function getDef(str,def)
{
    return (str==null)? def : str;
}

function inch(x)  { return scale_unit(x,25.4,"in");    }
function feet(x)  { return scale_unit(x,304.8,"ft");   }
function miles(x) { return scale_unit(x,1609344,"mi"); }

function km(x)  { return scale_unit(x,1000000,"km");   }
function m(x)   { return scale_unit(x,1000,"m");       }
function cm(x)  { return scale_unit(x,10,"cm");        }
function mm(x)  { return scale_unit(x,1,"mm");         }

function scale_unit(x,d,p)
{
    var mm = x[0];
    var t  = x[1];
    
    if(mm>=d)
        return [mm % d, t+" "+Math.floor(mm/d)+p];
    else
        return x;
}

function metricToUS(val, u)
{
    var mm;

    // convert to mm
    if(u=="mm")
    {
        mm = val;
    } else if(u=="cm")
    {
        x=val*10;
    } else if(u=="dm")
    {
        x=val*100;
    } else if(u=="m")
    {
        x=val*1000;
    } else if(u=="km")
    {
        x=val*1000000;
    } else
    {
        return "";
    }
    return inch(feet(miles([x,""])))[1];
}

function USToMetric(ft, inc)
{
    var xmm = 25.4*inc+304.8*ft
    return mm(cm(m(km([xmm,""]))))[1];
}

function conv()
{
    var txt = getDef( get("input").value, "");
    var res="";
    
    if(txt.match( /^\s*(\d+(\.\d+)?)\s*((ft)|(\'))\s*$/ ) )
    {
        var ft  = parseFloat(RegExp.$1);
        res = USToMetric(ft, 0);
    } else if(txt.match( /^\s*(\d+(\.\d+)?)\s*(\"|(in))\s*$/) )
    {
        var inc  = parseFloat(RegExp.$1);
        res = USToMetric(0, inc);
    }  else if(txt.match( /^\s*(\d+(\.\d+)?)\s*(\'|(ft))\s*(\d+(\.\d+)?)\s*(\"|(in))\s*$/) )
    {
        var ft   = parseFloat(RegExp.$1);
        var inc  = parseFloat(RegExp.$5);
        res = USToMetric(ft, inc);
    } else if(txt.match( /^\s*(\d+(\.\d+)?)\s*([a-z]+)\s*$/ ))
    {
        var val  = parseFloat(RegExp.$1);
        var u = RegExp.$3;
        res = metricToUS(val, u);
        if(res=="")
        {
            alert("Unknown unit");
            return;
        }
    } else
    {
        alert("Bad input! See examples above.");
        return;
    }

    get("res").innerHTML = "<b>" + res + "</b>";
}