//	romanize.js

var CGI_URL = "http://www.kawa.net/works/ajax/romanize/romanize.cgi";

function get_romanized ( formelem ) {
    var mode = get_radio_value( formelem, "mode" );
    var str = formelem.q.value;

    var hash = {
        "mode": mode,
        "q":    str
    };
    var query = hash_to_query( hash );
    display_here( "result_here", "Now loading..." );

	var err = function ( mess ) {
	    display_here( "result_here", "Error: "+mess );
	};

    var http = new JKL.ParseXML( CGI_URL, query );
    http.setOutputArrayElements( ["li","span"] );
    http.async( ruby_display );
    http.onerror( err );
    var data = http.parse();
}

function ruby_display ( data ) {
    if ( ! data ) return;
    if ( ! data.ul ) return;
    if ( ! data.ul.li ) return;

    var fragment = document.createDocumentFragment();

    for( var i=0; i<data.ul.li.length; i++ ) {
        var table = document.createElement( "table" );
        var tbody = document.createElement( "tbody" );
        var tr_ruby = document.createElement( "tr" );
        var tr_str  = document.createElement( "tr" );
        var line = data.ul.li[i];
        for( var j=0; j<line.span.length; j++ ) {
            var tdruby = document.createElement( "td" );
            var tdstr  = document.createElement( "td" );
            if ( typeof(line.span[j]) == "string" ) {
                var txtstr  = document.createTextNode( line.span[j] );
                tdstr.appendChild( txtstr );
            } else if ( typeof(line.span[j]) == "object" ) {
				var text = line.span[j]["#text"];
				if ( typeof(text) != "string" ) continue;
                var txtstr  = document.createTextNode( text );
                tdstr.appendChild( txtstr );
                var ruby = line.span[j]["title"];
                if ( typeof(ruby) == "string" ) {
                    var spruby = ruby.split( /\// );
                    for( var k=0; k<spruby.length; k++ ) {
                        if ( k>0 ) {
                            var br = document.createElement( "br" );
                            tdruby.appendChild( br );
                        }
						var tonal = '';
						if ( spruby[k].match( /[^0-9][1-9]$/ )) {
							tonal = spruby[k].charAt(spruby[k].length-1);
							spruby[k] = spruby[k].substr(0,spruby[k].length-1);
						}
                        var txtruby = document.createTextNode( spruby[k] );
                        tdruby.appendChild( txtruby );
						if ( tonal ) {
	                        var txttonal = document.createTextNode( tonal );
	                        var sup = document.createElement( 'sup' );
	                        sup.appendChild( txttonal );
	                        tdruby.appendChild( sup );
						}
                    }
                }
            }
            tdruby.className = "ruby";
            tdstr.className  = "Asian";
            tr_ruby.appendChild( tdruby );
            tr_str.appendChild( tdstr );
        }
        tbody.appendChild( tr_ruby );
        tbody.appendChild( tr_str );
        table.appendChild( tbody );
        fragment.appendChild( table );
    }
    display_here( "result_here", fragment );
}
function display_here ( area, elem ) {
    if ( typeof(elem) == "string" ) {
        elem = document.createTextNode( elem );
    }
    var target = document.getElementById( area );
    while ( target.childNodes.length ) {
        target.removeChild( target.firstChild );
    }
    target.appendChild( elem );
}
function hash_to_query ( hash ) {
    var array = [];
    for( var key in hash ) {
        array[array.length] = encodeURIComponent(key)+"="+encodeURIComponent(hash[key]);
    }
    return array.join("&");
}
function get_radio_value ( form1, keyname ) {
    for( var i=0; i < form1.elements.length; i++ ) {
        if ( form1.elements[i].name != keyname ) continue;
        if ( form1.elements[i].type != "radio" ) continue;
        if ( ! form1.elements[i].checked ) continue;
        return form1.elements[i].value;
    }
}
