/**********************************************************************
* /js/component/fujimi-dictionary.js
* Copyright (C) 2007-2008 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
***********************************************************************/
//* @author Daisuke Morita
//* @projectDescription	ユーザ辞書で用いるクラスの定義(富士見中学用に少しカスタマイズ)

//* クラスの名前の定義
var DataTable = Class.create();
var DataCell = Class.create();
var DataHeadCell = Class.create();
var InputWordField = Class.create();
var AddRecordButton = Class.create();
var AddLanguageButton = Class.create();
var UserDictionaryLoadButton = Class.create();
var UserDictionaryStoreButton = Class.create();
var UserDictionaryUpdateButton = Class.create();
var TermInfo = Class.create();

var ID_HEADER_USER_DICTIONARY_HEAD_CELL = 'user-dictionary-head-cell';

//* @classDescription	ユーザ辞書のVisibleなテーブル
DataTable.prototype = {
	//* コンストラクタ
	initialize: function(id,numRow,numCol){
		this.id = id;
		this.cellTableArray = new Array();
		this.cellTableArray[0] = new Array(new DataCell());
		this.tableHeadArray = new Array(new DataHeadCell(this.getSupportedLanguageArray(),0));
		this.deletedRows = new Array();

		new Insertion.Bottom($(this.id).childElements()[0], '<tr><th id="'+ID_HEADER_USER_DICTIONARY_HEAD_CELL+'0" onselectstart="return false"></th></tr>');
		this.numRow = 0;
		this.numCol = 1;
		
		for(var i=0;i<numRow;i++){
			this.addEmptyRow();
		}
		
		for(var i=1;i<numCol;i++){
			this.addCol();
		}
		
		var languageArray = new Array('ja','zh','ko','en','es');
		
		//*富士見中にカスタマイズ（言語がすでに決まっているため）
		for(var i=0;i<this.tableHeadArray.size();i++){
			this.tableHeadArray[i].setValue(languageArray[i]);
		}
		
		//* HEADの表示
		this.refreshTable();
		this.prepareDataForStore();
	},
	
	//* メソッド
	//* IDを返す
	getId: function(){
		return this.id;
	},
	
	//* テーブルの先頭に行を追加
	addEmptyRow: function(){
		
		var newRow = new Array();
		newRow[0] = new TermInfo(-1,true)
		//*↑で一番最初にtermIdを代入するので、1からスタートする
		for(i=1;i<this.getNumberOfCol()+1;i++){
			newRow[i] = new DataCell();
		}
		
		this.cellTableArray.unshift(newRow);
		this.numRow++;
		this.prepareDataForStore();
	},
	
	//*  行の配列を入れると新しい行を作成
	//*  これは下に追加していく。
	addRow: function(row){
		//*alert(row[0].getTermId()+ row[1].getValue()+row[2].getValue()+row[3].getValue()+row[4].getValue());
		this.cellTableArray[this.getNumberOfRow()] = row;
		this.numRow++;
		this.prepareDataForStore();
		
	},
	
	//* 列の追加
	addCol: function(){
		this.tableHeadArray[this.getNumberOfCol()] = new DataHeadCell(this.getSupportedLanguageArray(),this.getNumberOfCol());
		new Insertion.Bottom($$('#'+this.id+' thead tr')[0], '<th id="'+ID_HEADER_USER_DICTIONARY_HEAD_CELL+this.getNumberOfCol()+'" onselectstart="return false"></th>');
		var bodyArray = $$('#'+this.id+' tbody tr');
		for(i=0;i<this.getNumberOfRow();i++){
			var classStr = '';
			if(i % 2 == 0){ //* 奇数列
				classStr = 'class="color1"';
			} else {
				classStr = 'class="color2"';
			}
			this.cellTableArray[i][this.getNumberOfCol()] = new DataCell();
			new Insertion.Bottom(bodyArray[i], '<td id="'+i+'_'+this.getNumberOfCol()+'" '+classStr+'></td>');
		}
		//* HEADの表示
		new Insertion.Top(ID_HEADER_USER_DICTIONARY_HEAD_CELL+this.getNumberOfCol(), this.tableHeadArray[this.getNumberOfCol()].getLabel());
		
		this.numCol++;
		this.prepareDataForStore();
		return;
	},
	
	//* 操作する単語入力フィールドの指定
	//* @param {InputWordField} wordField
	setWordField: function(wordField){
		this.wordField = wordField;
	},
	
	//* 行セルの削除
	//* @param {Number} num
	removeRow: function(num){
		var tmpArrayFront = this.cellTableArray.slice(0,num);
		var tmpArrayRear = this.cellTableArray.slice(num+1);
		this.cellTableArray= tmpArrayFront.concat(tmpArrayRear);
		this.numRow--;
	},
	
	//* num列の昇順ソート
	//* @param {Object} num
	//* 富士見中の場合は使わないと判断
	sortAscending: function(num){
		var cellArray = new Array();
		var i=0;
		for(;i<this.getNumberOfRow();i+=1){
			cellArray[i] = new Pair(i,this.getCell(i,num));
		}
		cellArray = cellArray.sortBy(function(pair) {
			return pair.getSecond().getValue();
		});
		var numArray = new Array();
		cellArray.each(function(pair){
			numArray.push(pair.getFirst());
		});
		var newTableArray = new Array();
		i=0;
		for(;i<this.getNumberOfRow();i+=1){
			newTableArray[i] = this.cellTableArray[numArray[i]];
		}
		this.cellTableArray = newTableArray;
		this.refreshTable();
	},
	
	//* num列の降順ソート
	//* @param {Object} num
	sortDecending: function(num){
		var cellArray = new Array();
		var i=0;
		for(;i<this.getNumberOfRow();i+=1){
			cellArray[i] = new Pair(i,this.getCell(i,num));
		}
		cellArray = cellArray.sortBy(function(pair) {
			return pair.getSecond().getValue();
		});
		cellArray.reverse();
		var numArray = new Array();
		cellArray.each(function(pair){
			numArray.push(pair.getFirst());
		});
		var newTableArray = new Array();
		i=0;
		for(;i<this.getNumberOfRow();i+=1){
			newTableArray[i] = this.cellTableArray[numArray[i]];
		}
		this.cellTableArray = newTableArray;
		this.refreshTable();
	},
	
	//* ローカルから辞書を読み込む
	loadData: function(address){
		var fileName = address.substring(address.lastIndexOf('\\')+1 );
		
		waitDictionaryFile(fileName);
	},
	
	//* 辞書をロードする（富士見中カスタマイズ版）
	loadDictionary: function(){
		
		$('status-display').innerHTML = '辞書を読み込んでいます&nbsp;&nbsp;&nbsp;&nbsp;<img src="img/extention_fujimiparallel/ajax-loader2.gif" />';
		
		var dict = this;
		new Ajax.Request(
				 './php/ajax/fujimi-translation/load-dictionary.php',
				 {
					 method		:'post',
					 parameters	:'languages=' + LANGUAGES.join(","),
					 dict : dict,
					 onSuccess	:function(httpObj){
					 	//* レスポンスが異常な形式だった場合，エラーを通知する．
						//* オリジナル辞書Webサービス動作不良による，暫定的処置．
						try{
							var dictObj = eval("("+httpObj.responseText+")");
						}catch(e){
							alert("An error occurred during loading dictionary data. Please try a few minutes later."
							 + "　(However, you can use the translation area without the support of this dictionary.)");
						}
						 
						 dict.makeDictionaryArea(dictObj);
					 },
					 onFailure	:function(){
						 alert('Server Error.');
					 },
					 onComplete:function(){
						 $('status-display').innerHTML = '';
					 }
				 }
				 );
		
		
		
	},
	
	update2Server: function(){
		
		$('status-display').innerHTML = '辞書を更新中です&nbsp;&nbsp;&nbsp;&nbsp;<img src="img/extention_fujimiparallel/ajax-loader2.gif" />';
		
		//*削除した行のTermIdの配列を作成
		
		var deletedIds = new Array();
		var newLines = new Array();
		var newTermLines = new Array();
		var newTerms = new Array();
				
		
		//*削除すべきTermIdの配列を作成		
		for(var i=0; i<this.deletedRows.length;i++){
			deletedIds.push(this.deletedRows[i][0].getTermId());
		}
		
		
		
		var maxTermId = -1;
		
		for(var i=0; i<this.cellTableArray.length; i++){
			if(this.cellTableArray[i][0].getTermId() > maxTermId){
				maxTermId = this.cellTableArray[i][0].getTermId();
			}
		}
		
		
		maxTermId++;
		
		var priority = new Array();
		
		//*追加した行のTermを調べてテキスト形式に変換
		//*変更を加えた行の変更
		for(var i=0; i < this.cellTableArray.length; i++){
			
			if(this.cellTableArray[i][0].getChanged() == true){
				if(this.cellTableArray[i][0].getTermId() == -1){
					var terms = new Array();
					for(var n=1; n < this.cellTableArray[i].length; n++){
						terms.push(this.cellTableArray[i][n].getValue());
					}
					newLines.push(terms);
					this.cellTableArray[i][0].setTermId(maxTermId);
					maxTermId++;
					this.cellTableArray[i][0].setChangedFalse();
				}else{
					newTermLines.push(this.cellTableArray[i][0].getTermId());
					var terms = new Array();
					for(var n=1; n < this.cellTableArray[i].length; n++){
						terms.push(this.cellTableArray[i][n].getValue());
					}
					newTerms.push(terms);
					this.cellTableArray[i][0].setChangedFalse();
				}
			}
			
			//*優先度の順番を取得
			priority.push(this.cellTableArray[i][0].getTermId());
		}
		
		var nl = "";
		for(var i=0; i<newLines.length;i++){
			nl = nl + newLines[i].join("#t#");
			if(i === newLines.length-1) break;
			nl = nl + '#l#';
		}
		
		
		
		var ntl = "";
		for(var i=0; i<newTerms.length;i++){
			ntl = ntl + newTerms[i].join("#t#");
			if(i === newTerms.length-1) break;
			ntl = ntl + '#l#';
		}
		
		
		
		
		
		var callobj = '{ "deleteLines" : "' + deletedIds.join(",") + '","newLines" : "' + nl + '","newTermLines":"'
						+ newTermLines.join(',') +'","newTerms":"' + ntl + '","priority" : "' + priority.join(",") +'"}';
						
		var hash = $H(eval("("+callobj+")"));
	
		var formText=hash.toQueryString();
		
		new Ajax.Request(
			 'php/ajax/fujimi-translation/update-dictionary.php',
				 {
					 method		:'post',
					 parameters	:formText,
					 onSuccess	:function(httpObj){

						 $('status-display').innerHTML = '';
						 
						 var upDate = eval("("+httpObj.responseText+")");
						 if(upDate.status == 'ERROR'){
						 	alert(upDate.message);
						 }
						 
					 },
					 onFailure	:function(){
						 alert('Server Error.');
					 }
				 }
			 );

		
	},
	
	//* 辞書を作成する（富士見中カスタマイズ）
	makeDictionaryArea: function(response){
		var checker = new StatusProcessor(response);
		if(!checker.check()) return;
		
		response = response.contents;

		var data = response.data;
		var languages = [];

		var PRIORITY = 0;
		var TERMID = 1;
		var LANGUAGE = [ 'ja', 'zh', 'ko', 'en', 'es' ];
		var key = TERMID + 1;
		var obj = response.languages;
		for ( var lang = 0; lang < LANGUAGE.length; lang++ ) {
			for ( var i = 0; i < obj.length; i++ ) {
				if ( obj[i] == LANGUAGE[lang] ) {
					languages.push( key );
					key++;
					break;
				}
			}
		}

		for ( var i = 0; i < data.length; i++ ) {
			var record = data[i];
			var row = [];
			row.push( new TermInfo( record[1], false ) );
			for ( var lang = 0; lang < languages.length; lang++ ) {
				row.push( new DataCell( record[ languages[ lang ] ] ) );
			}
			this.addRow( row );
		}

		this.refreshTable();
	},
	
	priorityUp: function(){
		
		//*行が選択されていない場合、行が0の場合は何も起きない
		if(rowSelected === false || selectedRowNumber == 0) return;
		
		var tempNumber = selectedRowNumber-0;
		var temp = this.cellTableArray[selectedRowNumber-0];
		this.cellTableArray[selectedRowNumber] = this.cellTableArray[selectedRowNumber-1];
		this.cellTableArray[selectedRowNumber-1] = temp;
		

		this.refreshTable();
		
		rowSelected = true;
		selectedRowNumber = tempNumber-1;
		
		var tableTds = $$('#user-dictionary-table tbody td');
		tableTds.each(function(e){
			if(e.id.split('_')[0] == selectedRowNumber){
				e.addClassName('selected-row');
			}
			
		});
		
	},
	
	priorityDown: function(){
		
		//*行が選択されていない場合、行が最後の場合は何も起きない
		if(rowSelected === false || selectedRowNumber == this.cellTableArray.length-1) return;
		//alert(selectedRowNumber);
		var tempNumber = selectedRowNumber-0;
		var temp = this.cellTableArray[selectedRowNumber-0];
		this.cellTableArray[selectedRowNumber] = this.cellTableArray[selectedRowNumber-0+1];
		//alert(temp);
		this.cellTableArray[parseInt(selectedRowNumber)-0+1] = temp;
		

		this.refreshTable();
		
		rowSelected = true;
		selectedRowNumber = tempNumber-0+1;
		
		var tableTds = $$('#user-dictionary-table tbody td');
		tableTds.each(function(e){
			if(e.id.split('_')[0] == selectedRowNumber){
				e.addClassName('selected-row');
			}
			
		});
		
	},
	
	deleteRow: function(){
		
		if(rowSelected === false) return;
		
		if(this.cellTableArray[selectedRowNumber-0][0].getTermId() > 0){
			this.deletedRows.push(this.cellTableArray[selectedRowNumber-0]);
		}
		var temp = this.cellTableArray;
		
		this.cellTableArray = new Array();
		var c = 0;
		for(var i=0;i<temp.length-1;i++){
			
			if(i == selectedRowNumber-0){
				c = 1;
			}
			this.cellTableArray.push(temp[i+c]);
			
		}
		
		this.numRow--;
		this.refreshTable();
		
	},
	
	//* ローカルへ辞書を書き出すためのデータ作成
	prepareDataForStore: function(){
		var str = '';
		var i=0;
		for(;i<this.getNumberOfCol();i+=1){
			if(i!=0){
				str += ',';
			}
			
			str += this.tableHeadArray[i].getValue();
		}
		str += '\n';
		
		i=0;
		for(;i<this.getNumberOfRow();i+=1){
			//*最初にtermInfoが入っているため、１からスタートする
			for(var j=1;j<this.getNumberOfCol()+1;j+=1){
				if(j!=0){
					str += ',';
				}
				str += this.getCell(i,j).getValue();
			}
			str += '\n';
		}
		
		$('user-dictionary-textarea').value = str;
		//*alert($$('textarea')[0].value);
		//*return;
		
	},
	
	//* 行の数を返す
	getNumberOfRow: function(){
		return this.numRow;
	},
	
	//* 列の数を返す
	getNumberOfCol: function(){
		return this.numCol;
	},
	
	//* 対応言語の配列を返す
	getSupportedLanguageArray: function(){
		
		//*langridのWebサービスをたたいて、対応する言語を取得すべき
		//*富士見中カスタマイズ版なので日中韓英の順に配列に入れる
		//*これは、列の言語を選択する用のもので、富士見中の時は利用しない
		var arr = new Array('en','zh','ko','en');
		return arr;
	},
	
	//* cellDataTableからrow行col列のセルを得る
	//* @param {Number} row
	//* @param {Number} col
	getCell: function(row,col){
		return this.cellTableArray[row][col];
	},
	
	//* row行col列のセルをクリックしたときの動作
	//* @param {Number} row
	//* @param {Number} col
	onCellClick: function(row,col){
		//*this.wordField.show(row,col);
	},
	
	//* row行col列のセル値をvalueに更新
	//* @param {Number} row
	//* @param {Number} col
	//* @param {String} value
	updateCell: function(row,col,value){
		var cell = this.getCell(row,col);
		cell.setValue(value);
		$(row+'_'+col).innerHTML = cell.getValue();
		this.cellTableArray[row][0].setChangedTrue;
		this.prepareDataForStore();
	},
	
	//* テーブルの中身を返す
	getTableData: function(){
		
	},
	
	//* テーブルの表示状態を最新にする
	refreshTable: function(){
		//* THEADのリフレッシュ
		var newHeadStr = '<tr>';
		for(var i=0;i<this.getNumberOfCol();i++){
			this.tableHeadArray[i].setNumber(i);
			newHeadStr += '<th id="'+ID_HEADER_USER_DICTIONARY_HEAD_CELL+i+'" onselectstart="return false">'+this.tableHeadArray[i].getLabel()+'</th>';
		}
		newHeadStr += '</tr>';
		$$('#'+this.id+' thead tr').invoke('remove');
		new Insertion.Bottom($(this.id).childElements()[0], newHeadStr);
		
		//* TBODYのリフレッシュ
		var newStr = '';
		var classStr = '';
		
		var i=0;
		for(;i<this.getNumberOfRow();i+=1){
			newStr += '<tr >';
			if(i % 2 == 0){ //* 奇数列
				classStr = 'class="color1"';
			} else {
				classStr = 'class="color2"';
			}
			
			//*最初にtermInfoが入っているため、１からスタートする
			for(j=1;j<this.getNumberOfCol()+1;j++){
				newStr += '<td id="'+i+'_'+j+'" '+classStr+'>'+this.getCell(i,j).getValue()+'</td>';
			}
			newStr += '</tr>';
		}
		$$('#'+this.id+' tbody tr').invoke('remove');
		new Insertion.Bottom($(this.id).childElements()[1], newStr);
		this.prepareDataForStore();
		
		rowSelected = false;
		selectedRowNumber = -1;
		
	},
	
	//* テーブルの高さを返す
	getHeight: function(){
		return $(this.id).down('tbody').getHeight();
	},
	
	//* テーブルの幅を返す
	getWidth: function(){
		return $(this.id).getWidth();
	}

	

};

//* @classDescription	テーブルの中の各セル
DataCell.prototype = {
	//* コンストラクタ
	initialize: function(value){
		if(value == null || value == 'undefined'){
			this.value = '';
		} else {
			this.value = value;
		}
	},
	
	//* メソッド
	//* セルの値を設定
	//* @param {String} value
	setValue: function(value){
		this.value = value;
	},
	
	//* セルの値を返す
	getValue: function(){
		return this.value;
	},
	
	//* セルの値をnum文字に省略して返す
	//* @param {Number} num
	getLabel: function(num){
		
	}
};

//* @classDescription	テーブルの中の各セル
//* value 選択されている言語
//* languageArray 選択できる言語
//* number ？
DataHeadCell.prototype = {
	//* コンストラクタ
	initialize: function(languageArray,number){
		this.value = '';
		this.languageArray = languageArray;
		this.number = number;
	},
	
	//* メソッド
	//* ヘッドの値を設定
	//* @param {String} value
	setValue: function(value){
		this.value = value;
	},
	
	//* ヘッドの値を返す
	getValue: function(){
		return this.value;
	},
	
	//* ヘッドのラベル設定
	getLabel: function(){
		//* 富士見中学カスタマイズ
		if(this.getValue() == 'undefined' || this.getValue() == null || this.getValue() == ''){
			return '';
		}
		var text = '<img src="'+Language.getFlagSrcByTag(this.getValue())+'">'+Language.getNameByTag(this.getValue());
		return text;
	},
	
	//* 番号の設定
	setNumber: function(number){
		this.number = number;
	}
};

//* @classDescription	セルをクリックしたときに現れるダイアログ
InputWordField.prototype = {
	//* コンストラクタ
	initialize: function(table){
		this.table = table;
		this.row = null;
		this.col = null;
		this.oldValue = '';

		var input = document.createElement( 'input' );
		input.type = 'text';
		Event.observe( input, 'blur', this.cancel.bind( this ) );
		Event.observe( input, 'keypress', this.onkeypress.bindAsEventListener( this ) );
		this.input = input;
	},
	
	//* メソッド
	//* ダイアログの表示
	//* @param {Number} width
	//* @param {Number} height
	//* @param {Number} row
	//* @param {Number} col
	show : function( element, row, col ) {
		var value = this.table.getCell( row, col ).getValue();
		this.oldValue = value
		this.row = row;
		this.col = col;
		this.input.value = value;
		while ( element.firstChild ) element.removeChild( element.firstChild );
		element.appendChild( this.input );
		Field.activate(this.input);
	},
	
	//* ダイアログの非表示
	hide: function(){
		var td = this.input.parentNode;
		this.input.parentNode.removeChild( this.input );
		td.appendChild( document.createTextNode( this.input.value ) );
	},

	cancel: function() {
		this.input.value = this.oldValue;
		this.hide();
	},
	
	//* データを送信
	submit: function(){
		this.hide();
		if ( this.input.value != this.oldValue ) {
			var value = this.input.value;
			this.table.updateCell(this.row,this.col,value);
			this.table.cellTableArray[this.row][0].setChangedTrue();
		}
	},

	onkeypress : function(event) {
		switch ( event.keyCode ) {
		case Event.KEY_RETURN:
			this.submit();
			break;
		case Event.KEY_ESC:
			this.cancel();
			break;
		}
	}
};


//* @classDescription	行を追加するボタン
AddRecordButton.prototype = {
	//* コンストラクタ
	//* @param {DataTable} table
	initialize: function(table){
		this.table = table;
	},
	
	//* メソッド
	//* 行の追加
	addRecord: function(){
		this.table.addEmptyRow();
		this.table.refreshTable();
	}
};

//* @classDescription	列を追加するボタン
AddLanguageButton.prototype = {
	//* コンストラクタ
	//* @param {DataTable} table
	initialize: function(table){
		this.table = table;
	},
	
	//* メソッド
	//* 列の追加
	addLanguage: function(){
		this.table.addCol();
	}
};

//* @classDescription	ローカルファイルからデータを読み込むボタン
UserDictionaryLoadButton.prototype = {
	//* コンストラクタ
	initialize: function(){
		this.paneID = 'user-dictionary-load-pane';
		new Insertion.Bottom($$('body')[0],
		'<div id="user-dictionary-load-pane" class="input-box">'+
		'<form target="uploader" enctype="multipart/form-data" action="http://www.langrid.org/association/playground/php/CollaborativeTranslation/UserDictionaryFileManager.php" method="POST">'+
		'<Input type="file" NAME="UserDictionaryUpload" id="dictfile" class="btn-gray"><br />'+
		'<INPUT TYPE="submit" NAME="load" VALUE="OK" class="button-blue" onclick="userDictionaryLoadButton.hidePane();dataTable.loadData($(\'dictfile\').value);">'+
		'<input type="button" value="Cancel" onclick="userDictionaryLoadButton.hidePane();" class="button-gray" /></form></div>');
		this.hidePane();
	},
	
	//* メソッド
	//* データの読み込み
	showPane: function(x,y){
		$(this.paneID).setStyle({
			position : 'absolute' ,
			left : x+'px' ,
			top : y+'px' 
		});
		$(this.paneID).show();
	},
	
	hidePane: function(){
		$(this.paneID).hide();
	}
};

//* @classDescription	ローカルファイルにデータを書き出すボタン
UserDictionaryStoreButton.prototype = {
	//* コンストラクタ
	initialize: function(){
	},
	
	//* メソッド
	//* データの書き出し
	store: function(){
		document.myForm.submit();
	}
};

//* @classDescription	データをCoreに送り出すボタン
UserDictionaryUpdateButton.prototype = {
	//* コンストラクタ
	initialize: function(){
		this.userDict = userDict;
	},
	
	//* メソッド
	//* データの更新
	update: function(){
		this.userDict.update();
	}
};

//* @classDescription	ユーザ辞書のTermに関する情報を保持
//* 一行に対してひとつのTermInfoを割り当て、
//* 更新する際に参考にする。
TermInfo.prototype = {
	//* コンストラクタ
	//* 新しい行が生成された際はIdはまず-1を代入
	initialize: function(Id,change){
		this.termId = Id;
		this.changed = change;
	},
	
	//* termIdを得る
	getTermId: function(){
		return this.termId;
	},
	
	//* termIdを設定する
	setTermId: function(Id){
		this.termId = Id;
	},
	
	//* changedを得る
	getChanged: function(){
		return this.changed;
	},
	//* changedをtrueにする
	setChangedTrue: function(){
		this.changed = true;
	},
	
	//* changedをfalseにする
	setChangedFalse: function(){
		this.changed = false;
	}

};

