var jq$ = jQuery.noConflict();
var rn = 'div#result';

jq$(function() {
		jq$('form').submit(function() {
			var param = {};
			//alert(jq$('#text').val());
			param.sentence = jq$('#text').val();
			param.responce = 'feature';
			param.filter = 'uniq';
			param.format = 'json';
			param.callback = 'h_mecapiCallback';
			var url = 'http://mimitako.net/api/mecapi.cgi?'+ obj2query( param );
			/*
			jq$(document.body).append(jq$('<script>').attr('src',url).attr('type','text/javascript'));
			*/
			jq$(rn).text('');
			jq$(rn).append(jq$('<img>').attr('src','img/wait.png').attr('id', 'waitcircle'));
			var script  = document.createElement( 'script' );
		    script.type = 'text/javascript';
  			script.src  = url;
  			document.body.appendChild( script );
		});
	
	});

function h_mecapiCallback(obj) {
	
	var i,j;
	var t,tr,td;
	var ft;
	var txt;
	jq$(rn).text('');
	//jq$(rn).append(jq$('<p>').text('Clicking a baseform opens an online dictionary(tangorin.com) in a new window'));
	t = jq$('<table>');
	t.append(jq$('<tr>').append(jq$('<th>').text('surface')).append(jq$('<th>').text('pronunciation')).append(jq$('<th>').text('part-of-speech')).append(jq$('<th>').text('inflection')).append(jq$('<th>').text('baseform')).append(jq$('<th>').text('dictionary')));
	for (i = 0; i < obj.length; i ++) {
		tr = jq$('<tr>');
		// surface
		tr.append(jq$('<td>').text(obj[i].surface));
		
		// feature
		ft = obj[i].feature.split(',');
		// pronunciation
		if (ft[8]) {
			tr.append(jq$('<td>').text(kata2hira(ft[8])));
		} else {
			tr.append(jq$('<td>').text('-'));
		}
		// part-of-speech
		txt = '';
		for (j = 0; j < 4; j ++) {
			if (ft[j] != '*') { txt += (txt.length == 0)? ft[j]: (', ' + ft[j])  };
		}
		if (txt.length > 0) {
			tr.append(jq$('<td>').text(txt));
		} else {
			tr.append(jq$('<td>').text('-'));
		}
		// inflection
		txt = '';
		for (j = 4; j < 6; j ++) {
			if (ft[j] != '*') { txt += (txt.length == 0)? ft[j]: (', ' + ft[j])  };
		}
		if (txt.length > 0) {
			tr.append(jq$('<td>').text(txt));
		} else {
			tr.append(jq$('<td>').text('-'));
		}

		// baseform
		if (ft[6] != '*') {
			tr.append(jq$('<td>').text(ft[6]));
		} else {
			tr.append(jq$('<td>').text('-'));
		}
		
		// dictionary
		if (ft[6] != '*') {
			var param = {};
			param.j = ft[6];
			param.d = 'jmdict';
			var url1 = 'http://tangorin.com/words/' + ft[6];
			param = {};
			param.word = ft[6];
			var url2 = 'EdictJE.php?keepThis=true&' + obj2query( param ) +'&TB_iframe=true&height=300&width=400';
			var td;
			td = jq$('<td>').attr('class', 'dicLink');
			td.append(jq$('<a/>').attr('href', url1).attr('target', '_blank').text('Tangorin'));
			td.append('<br/>');
			td.append(jq$('<a/>').attr('href', url2).attr('class', 'thickbox2').text('EDICT'));
			tr.append(td);
		} else {
			tr.append(jq$('<td>').text('-'));
		}
		
		
		// append to the table
		t.append(tr);
	}
	var tbox;
	tbox = jq$('script').attr('src', 'js/thickbox.js').attr('type', 'text/javascript');
	jq$(rn).append(t);
	//jq$(rn).append(tbox);
	tb_init('a.thickbox2');
}

/*
*
* util
*
*/

function obj2query ( obj ) {
    var list = [];
    for( var key in obj ) {
        var k = encodeURIComponent(key);
        var v = encodeURIComponent(obj[key]);
        list[list.length] = k+'='+v;
    }
    var query = list.join( '&' );
    return query;
}

function is_hira(c) { return ((c >= 12353 && c <= 12435) || c == 12445 || c == 12446); }

function is_kata(c) { return ((c >= 12353 + 96 && c <= 12435 + 96) || c == 12445 + 96 || c == 12446 + 96); }

function hira2kata(src) {
    var str = new String;
    var len = src.length;
    for (var i = 0; i < len; i++) {
        var c = src.charCodeAt(i);
        if (is_hira(c)) { 
            str += String.fromCharCode(c + 96);
        } else {
            str += src.charAt(i);
        } 
    }
    return str;
}

function kata2hira(src) {
    var str = new String;
    var len = src.length;
    for (var i = 0; i < len; i++) {
        var c = src.charCodeAt(i);
        if (is_kata(c)) { 
            str += String.fromCharCode(c - 96);
        } else {
            str += src.charAt(i);
        } 
    }
    return str;
}