/**********************************************************************
* Copyright (C) 2007 Kyoto University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-
* 1301  USA
***********************************************************************/
/*
 * This file is the JavaScript file for the main morphological analyzer page.
 */
var Analysis = Class.create();

var analyzerSelection = null;
var analyze = null;
var serviceInformation = null;

Event.observe(window,'load',function(){

	Toggler.setToggleEvent('analyze');
	Toggler.setToggleEvent('analyzer-selection');
	Toggler.setToggleEvent('service-information');

	new HelpPanel("analyze",
		'<span style="font-weight:bold;">How to Perform a Morphological Analysis on a Sentence</span><br /><br />'+
		'First, choose your analyzer from the Analyzer Selection below.<br />' +
		'Once the analyzers are selected,<br /><br />'+
		'<ul>'+
		'<li style="list-style:decimal inside;">Type in a sentence or sentences you wish to analyze.</li>'+
		'<li style="list-style:decimal inside;">Select the source language of the typed sentence.</li>'+
		'<li style="list-style:decimal inside;">Click on the "Analyze" button.</li>'+
		'</ul>');
	new HelpPanel("analyzer-selection",
		'<span style="font-weight:bold;">How to Select Analyzers</span><br /><br />'+
		'Select the analyzers you wish to use.'+
		'<br><span style="color:red;font-weight:bold;">Red</span> indicates that the analyzer is SELECTED.'+
		'<br><span style="color:green;font-weight:bold;">Green</span> indicates that the analyzer is NOT SELECTED.');
	analyzerSelection = new AnalyzerSelection('analyzers');
	analyze = new Analyze('input-text','from','to','result');
	serviceInformation = new ServiceInformation('service-information-form-area');

	$('use-all').checked = false;

	AnalyzerSelection.Event.load(analyzerSelection);
	analyzerSelection.getElement().down('table').observe('click',function(event){
		AnalyzerSelection.Event.clickButton(event,analyzerSelection);
		Analysis.Event.clickResourceButton(event);
	});
	analyzerSelection.getElement().down('table').observe('mouseover',function(event){
		AnalyzerSelection.Event.mouseoverButton(event,analyzerSelection);
	});
	analyzerSelection.getElement().down('table').observe('mouseout',function(event){
		AnalyzerSelection.Event.mouseoutButton(event,analyzerSelection);
	});
	$('use-all').observe('click',function(event){
		AnalyzerSelection.Event.clickAllButton(event,analyzerSelection);
		Analysis.Event.clickResourceAllButton(event);
	});

	analyze.getWordArea().observe('keypress',function(event){
		Analysis.Event.keypressOnWordArea(event);
	});
	$('analyze').observe('click',function(event){
		Analysis.Event.clickSearchButton(event);
	});
	analyze.getSourceLanguageMenu().getElement().observe('change',function(event){
		Analyze.Event.changeSourceLanguage(event,analyze);
	});
});

Analysis.Event = {
	clickSearchButton: function(event){
		if(analyze.isEmptyWordArea()) {
			//* cancel

			// eip kawauchi add start 20100108
			// テキストが空で解析しようとした場合、検索エリアをクリア
			$("result").innerHTML = "";
			// eip kawauchi add end 20100108

		} else if (analyze.unselectedTargetLanguages()) {
			//* cancel
		} else {
			Analysis.Ajax.search();
		}
	},

	keypressOnWordArea: function(event){
		if(event.keyCode == 13) Analysis.Event.clickSearchButton(event);
	},

	changeSourceLanguage: function(event){
		analyze.changeTargetLanguages(analyzerSelection.getTargetLanguages(analyze.getSelectedSourceLanguage()));
	},

	clickResourceButton: function(event){
		var sourceLanguages = analyzerSelection.getSourceLanguages()
		if(sourceLanguages.size() != 0){
			analyze.changeSourceLanguages(sourceLanguages);
		} else {
			analyze.resetSourceLanguages();
//			analyze.resetTargetLanguages(); // そもそも対象言語は存在しないはず
		}
	},

	clickResourceAllButton: function(event){
		Analysis.Event.clickResourceButton(event);
	}
}

Analysis.Ajax = {
	search: function(){
		$('analyzing').innerHTML = '<img src="img/anime/translation.gif" />';
		var callobj = {
			inputtext: analyze.getWordArea().value.replace(/\r\n/g," ").replace(/\n/ig," "),
			from: analyze.getSourceLanguageMenu().getSelectedLanguage(),
			toNum: analyze.getTargetLanguageMenu().getSelectedLanguages().size(),
			idNum: analyzerSelection.getIdOfSelectedResources().size()
		};
		var selectedTargetLanguageArray = analyze.getTargetLanguageMenu().getSelectedLanguages();
		for(var i=0;i<selectedTargetLanguageArray.size();i++){
			callobj['to'+i] = selectedTargetLanguageArray[i];
		}
		var selectedResourceIdArray = analyzerSelection.getIdOfSelectedResources();
		for(var i=0; i < selectedResourceIdArray.size(); i++){
			callobj['id'+i] = selectedResourceIdArray[i];
		}
		var hash = $H(callobj);
		var formText=hash.toQueryString();
		new Ajax.Request(
			'./php/ajax/morphological-analysis/morphologicalanalysis.php',
			{
				method		:'post',
				//* パラメータは (parameters):inputtext,from,dic0,dic1,dic2,dic3,dic4,dic5
				parameters	:formText,
				onSuccess	:function(httpObj){

					analyze.getResultArea().draw(httpObj.responseText,analyzerSelection);
					for (var i=0; i< httpObj.responseJSON.contents.size();i++) {
						serviceInformation.update(httpObj.responseJSON.contents[i]);
					}
				},
				onFailure	:function(){
					alert('Server Error.');
				},
				onComplete	:function(){
					$('analyzing').innerHTML = '';
				}
			});
	}
}

