/**
 *	KANJI NAME (0.0.1) alpha 
 *	Copyright(C) 2008 Hajime KOBAYASHI
 */
var GSKanjiName = {};
GSKanjiName.Main = Class.create();
GSKanjiName.Main.prototype = {
	initialize: function(){
		Event.observe( $('knForm'), 'submit', this.onsubmit_form.bindAsEventListener( this ) );
	},

	onsubmit_form: function( aEvent ){
		var onfailureFunc = ( function( e ){
			typeof(e) == "string" ? alert( e ) : alert("unknown error!");
			$('knForm').enable();
		} ).bind( this );

		new Ajax.Request( './kn.php', {
			method: 'post',
			postBody: $('knForm').serialize(),
			onSuccess: ( function( aReq ){
				try{
					var res = aReq.responseText.evalJSON();
					if( ! res ){
						throw "It has been failed to make it.";
					}
					else if( res.err_msg ){
						onfailureFunc( res.err_msg );
						return;
					}
					
					var list = res.ResultSet.Result.SegmentList.Segment;
					
					if( ! ( list instanceof Array ) ){
						throw "Invalid result value";
					}
					else {
						var nameStrArray = [];
						list.each( function( Segment ){
							Candidates = Segment.CandidateList.Candidate;

							if( Candidates instanceof Array ){
							
								var s = Candidates.find( function( Candidate ){
										return ! Candidate.match( /[ｱｰﾝア-ンあ-ん]/ );
								} );

								nameStrArray[nameStrArray.length] = ( s === undefined ? Candidates[0] : s );
							}
							else {
								nameStrArray[nameStrArray.length] = Candidates;
							}
						} );
						
						$('result').innerHTML = 'Your name is <span id="kanjiName">' + nameStrArray.join('') + '</span>';
						$('result').show();
					}

					$('knForm').enable();
				}
				catch( e ){
					onfailureFunc( e );
				}
			} ).bind( this ),
			onFailure: onfailureFunc,
			onException: onfailureFunc
		} );

		$('result').hide();
		$('knForm').disable();
		Event.stop( aEvent );
		return false;
	}
	
};

Event.observe( window, 'load', function(){
	new GSKanjiName.Main();
} );
