/**********************************************************************
* /js/fujimi-translation-main.js
* Copyright (C) 2007-2009 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
***********************************************************************/
/**
 * require component/fujimi-chat-log.js
 * require component/fujimi-input.js
 * require component/fujimi-dictionary.js
 * require component/service-information.js
 */

var FujimiTranslation = Class.create();

var fujimiInput = null;
var fujimiChatLog = null;
var serviceInformation = null;

var LANGUAGES = ['ja','zh','ko','en','es'];
var COLORS = ["red",'blue','green','orange','hotpink','purple','brown','black'];
var INPUT_ID = {
	fujimiInput: 'input-pane',
	first: {
		container: 'left-input-container',
		colorMenu: 'left-color-menu',
		translateButton: 'left-translate',
		postButton: 'left-post-button',
		loadingImage: 'loading-left',
		tabSet: 'tab-group-left',
		originalTextarea: 'left-source',
		translationTextarea: 'left-target',
		backTranslationTextarea: 'left-back-translation',
		autocompleteContainer: 'search-container-left'
	},
	second: {
		container: 'right-input-container',
		colorMenu: 'right-color-menu',
		translateButton: 'right-translate',
		postButton: 'right-post-button',
		loadingImage: 'loading-right',
		tabSet: 'tab-group-right',
		originalTextarea: 'right-source',
		translationTextarea: 'right-target',
		backTranslationTextarea: 'right-back-translation',
		autocompleteContainer: 'search-container-right'
	}
};

Event.observe(window,'load',function(){
	//* サービス情報表示モジュールの作成
	serviceInformation 	= new ServiceInformation('service-information-form-area');
	
	//* コンポーネントのバーの部分を生成
	Toggler.setToggleEvent('chat-log');
	Toggler.setToggleEvent('fujimi-dictionary');
	Toggler.setToggleEvent('service-information');//* デフォルトはクローズ
	//* var name = 'service-information';
	//* Toggler.toggleFast(name+'-form-area');
	//* $('img-close-'+name).hide();
	//* $('img-open-'+name).show();
	
	fujimiChatLog		= new FujimiChatLog('log-table-body','logger-font','delete-log','language-left','language-right');
	fujimiInput 		= new FujimiInput(INPUT_ID,LANGUAGES,COLORS,serviceInformation);
	FujimiInput.Event.load(fujimiInput);
	
	
	//* ユーザ辞書
	dataTable = new DataTable('user-dictionary-table',0,5);
	addRecordButton = new AddRecordButton(dataTable,'add-record');
	
	inputWordField = new InputWordField(dataTable);
	
	dataTable.setWordField(inputWordField);
	
	Event.observe('add-record', 'click', function(){addRecordButton.addRecord();});
//*	Event.observe('input-word-field-ok-button', 'click', function(){inputWordField.submit();});
//*	Event.observe('input-word-field-cancel-button', 'click', function(){inputWordField.hide();});
		
	//*クリックしたときは、行選択
	Event.observe($('user-dictionary-table').down('tbody'), 'click', function(event) {
		var cells;
		if ( selectedRowNumber >= 0 ) {
			cells = $('user-dictionary-table').down('tbody')
			.getElementsByTagName( 'tr' )[selectedRowNumber]
			.getElementsByTagName( 'td' );
			for ( var i = cells.length - 1; i >= 0; i-- ) {
				Element.removeClassName( cells[i], 'selected-row' );
			}
		}
		cells = Event.element( event ).up( 'tr ' ).getElementsByTagName( 'td' );
		for ( var i = cells.length - 1; i >= 0; i-- ) {
			Element.addClassName( cells[i], 'selected-row' );
		}
		selectedRowNumber = parseInt( cells[0].id.split( '_' )[0] );

		rowSelected = true;
		if(selectedRowNumber == 0){
				
		}else if(selectedRowNumber == dataTable.cellTableArray.length-1){
				
		}else{
				
		}
		
		
	});
	
	//*ダブルクリックしたときは単語編集
	Event.observe($('user-dictionary-table').down('tbody'), 'dblclick', function(event) {
  		var element = $(Event.element(event));
		if ( element.tagName.toUpperCase() != 'TD' ) return;
		var tablePosition = element.id.split('_');
		inputWordField.show( element, parseInt( tablePosition[0] ), parseInt( tablePosition[1] ) );
	});
	
	//*行をした状態で優先度を一つ上げる処理
	Event.observe($('priority-up'), 'click', function() {dataTable.priorityUp();});
	
	//*行をした状態で優先度を一つ下げる処理
	Event.observe($('priority-down'), 'click', function() {dataTable.priorityDown();});
	
	//*行を選択した状態で行を削除する処理
	Event.observe($('delete-record'), 'click', function() {dataTable.deleteRow();});
	
	//*辞書を更新する処理
	Event.observe($('update'), 'click', function() {dataTable.update2Server();});
	
	//* デフォルトはクローズ
	var name = 'fujimi-dictionary';
	var opened = false;
	Toggler.toggleFast(name+'-form-area');
	$('img-close-'+name).hide();
	$('img-open-'+name).show();
	$('img-open-'+name).observe('click',function(event){
		if(!opened) dataTable.loadDictionary();
		opened = true;
	});
	
	
	
	
	
	//* LOAD系イベント処理
	FujimiTranslation.Event.load(fujimiInput,fujimiChatLog);
	
	//* その他イベント処理
	fujimiInput.getLeftContainer().getLanguageTabElements().each(function(e){
		e.observe('click',function(event){
			FujimiInput.Event.clickTab(event,fujimiInput,'left');
			FujimiTranslation.Event.clickTab(event,fujimiInput,fujimiChatLog,'left');
		});
	});
	fujimiInput.getRightContainer().getLanguageTabElements().each(function(e){
		e.observe('click',function(event){
			FujimiInput.Event.clickTab(event,fujimiInput,'right');
			FujimiTranslation.Event.clickTab(event,fujimiInput,fujimiChatLog,'right');
		});
	});
	fujimiInput.getLeftContainer().getColorMenuElement().observe('change',function(event){
		FujimiInput.Event.changeColor(event,fujimiInput,'left');
	});
	fujimiInput.getRightContainer().getColorMenuElement().observe('change',function(event){
		FujimiInput.Event.changeColor(event,fujimiInput,'right');
	});
	fujimiInput.getLeftContainer().getTranslateButton().observe('click',function(event){
		FujimiInput.Event.clickTranslateButton(event,fujimiInput,'left', serviceInformation);
	});
	fujimiInput.getRightContainer().getTranslateButton().observe('click',function(event){
		FujimiInput.Event.clickTranslateButton(event,fujimiInput,'right', serviceInformation);
	});
	fujimiInput.getLeftContainer().getPostButton().observe('click',function(event){
		FujimiTranslation.Event.clickPostButton(event,fujimiInput,fujimiChatLog,'left');
	});
	fujimiInput.getRightContainer().getPostButton().observe('click',function(event){
		FujimiTranslation.Event.clickPostButton(event,fujimiInput,fujimiChatLog,'right');
	});
	
	fujimiChatLog.getFontMenuElement().observe('change',function(event){
		FujimiChatLog.Event.changeFont(event,fujimiChatLog);
	});
	fujimiChatLog.getDeleteButtonElement().observe('click',function(event){
		FujimiChatLog.Event.clickDeleteButton(event,fujimiChatLog);
	});
});

FujimiTranslation.Event = {
	load: function(fujimiInput,fujimiChatLog){
		fujimiChatLog.getLeftLogArea().setLanguage(fujimiInput.getLeftContainer().getLanguage());
		fujimiChatLog.getRightLogArea().setLanguage(fujimiInput.getRightContainer().getLanguage());
	},
	
	clickTab: function(event,fujimiInput,fujimiChatLog,leftOrRight){
		var language = fujimiInput.getContainer(leftOrRight).getLanguage();
		fujimiChatLog.getLogArea(leftOrRight).setLanguage(language);
		fujimiChatLog.draw();
	},
	
	clickPostButton: function(event,fujimiInput,fujimiChatLog,leftOrRight){
		fujimiChatLog.pushLog(fujimiInput.getContainer(leftOrRight).getColor(),
			fujimiInput.getContainer(leftOrRight).getTranslationTextarea().getTextPairs());
		//* 2回drawしないとFireFoxでの表示がおかしい
		fujimiChatLog.draw();
		fujimiChatLog.draw();
		fujimiInput.getContainer(leftOrRight).clearAllTextarea();
	}
}

