function testWordCountKeyPress(event) {
	
	var event = event || window.event;
	if(event.keyCode==13){   
		createTest();
	}
}

function register() {

	var form = DWRUtil.getValues("regForm");
	showWait("ProgressHint");
	
	setNullAndNotDisplay(
		{advice_userNickName:null, advice_userId:null,
		advice_userEmail:null,
		advice_userPassword:null, advice_userConfirmPassword:null});
	
	RegUserDWR.register(form, createCallBack(registerSuccess));
}

function registerSuccess() {
	
	alert("注册成功！");
	var redirectURL = $('redirectURL');
	if(redirectURL != null && redirectURL.value != "") {
		location = "/" + redirectURL.value;
	} else {
		location = "/index";
	}
}

var global_test_start_time;
var global_test_end_time;
function createTest() {
	
	showWait("loadProgress");
	
	setNullAndNotDisplay({advice_testWordCount:null});
	DWRUtil.setValues({show_result: null});
	
	var data = {testWordCount:null, testType: null, testWordRange:null};
	DWRUtil.getValues(data);
	IndexDWR.createTest(data, createCallBack(createTestSuccess));
}

var global_clock;
function createTestSuccess(params) {
	
	// start time
	global_test_start_time = new Date();
	
	$('clock').style.display = "block";
	if(global_clock == null) {
		global_clock = new Clock();
		global_clock.startClock(showClock);
	} else {
		global_clock.startClock(showClock);
	}
	
	closeWait("loadProgress");
	
	  DWRUtil.removeAllRows("test_body", { filter:function(tr) {
      return (tr.id != "pattern");
    }});
	
	var wordList = params.wordList;
	
	if(wordList.length > 0) {
		
		$('checkScore').disabled = false;
		if($('saveTest') != null) {
			$('saveTest').disabled = false;
		}
	} else {
		return;
	}
	
	var first_word_id;
	for(var i = 0; i < wordList.length; i++) {
		var wordItem = wordList[i];
		DWRUtil.cloneNode("pattern", { idSuffix:wordItem.id });
		
		$("selectWordItem" + wordItem.id).value = wordItem.id;
		DWRUtil.setValue("jpTestWord" + wordItem.id, "");
		DWRUtil.setValue("chWord" + wordItem.id, wordItem.chWord);
		DWRUtil.setValue("jpWord" + wordItem.id, wordItem.jpWord);
		DWRUtil.setValue("jpHiragana" + wordItem.id, wordItem.jpHiragana);
		DWRUtil.setValue("jpKatakana" + wordItem.id, wordItem.jpKatakana);
		DWRUtil.setValue("wordRange" + wordItem.id, wordItem.wordRange + "级");
		$("hint" + wordItem.id).alt = wordItem.jpWord + "("+wordItem.jpHiragana+")";
		$("hint" + wordItem.id).title = wordItem.jpWord + "("+wordItem.jpHiragana+")";
		if(wordItem.jpKatakana != null && wordItem.jpKatakana != "") {
			$("hint" + wordItem.id).alt += "("+wordItem.jpKatakana+")";
		}
		
		if(wordItem.optimizeWord == 1) {
			$("chWord" + wordItem.id).className = "optimizeWord";
		} else if(wordItem.errorFlag == 1) {
			$("chWord" + wordItem.id).className = "errorWord";
		}
		
		DWRUtil.setValue("createUser" + wordItem.id, wordItem.regUserNickName);

		if (Browser.isIE){
			$("pattern" + wordItem.id).style.display = "block";
		} else {
			$("pattern" + wordItem.id).style.display = "table-row";
		}
		
		if(i == 0) {
			$('jpTestWord' + wordItem.id).focus();
			first_word_id = 'jpTestWord' + wordItem.id;
		}
		
		$('jpTestWord' + wordItem.id).onkeypress = testInputKeyPress;
		$('jpTestWord' + wordItem.id).setAttribute("rowNum", (i));
	}
	$(first_word_id).focus();
	//preview mode
	if($('wordPreview') != null && $('wordPreview').checked) {
		var preview_panel = document.createElement("div");
		preview_panel.id = "preview_panel";
		preview_panel.className = "preview_panel";
		
		var preview_close = document.createElement("div");
		preview_close.className = "close_preview";
		var preview_close_link = document.createElement("a");
		preview_close_link.href = "#";
		preview_close_link.onclick = function(){close_preview();};
		preview_close_link.innerHTML = "我已经记住了，开始背单词";
		preview_close_link.className = "link1";
		preview_close.appendChild(preview_close_link);
		
		for(var i = 0; i < wordList.length; i++) {
			var wordItem = wordList[i];
			
			var preview_item = document.createElement("div");
			preview_item.className = "preview_item";
			preview_item.innerHTML = "<span class='ch_item'>" + wordItem.chWord +"</span>"+ "<br/>" +
										"<span class='jp_item'>" +
										wordItem.jpWord +
										(wordItem.jpHiragana != null?"("+wordItem.jpHiragana+")":"") +
										(wordItem.jpHiragana != null?"("+wordItem.jpHiragana+")":"") +
										"</span>";
			preview_panel.appendChild(preview_item);
		}
		preview_panel.appendChild(preview_close);
		
		ScreenConvert();
		var width = 400;
		var height = 400;
		DialogShow(preview_panel,width,height,width,height, 50);
		$('DialogMove').style.backgroundColor = "#f6fbff";
		
		function close_preview() {
			DialogHide();
			$(first_word_id).focus();
		}
	}
		
	function testInputKeyPress(event) {
		
		var env = event?event.target:(window.event ? window.event.srcElement : null);
		var event = event || window.event;
		if(event.keyCode==13){   
			
			var rowNum = parseInt(env.getAttribute("rowNum"));
			var test_body = $('test_body');
			if(rowNum == test_body.childNodes.length -2) {
				$('checkScore').focus();
				//checkScore();
			} else {
				var nextRow = test_body.childNodes[rowNum+1];
				var tds = nextRow.getElementsByTagName("td");
				tds[2].firstChild.focus();
			}
		}
	}
}

function showClock(hour, minunte, second) {
	
	$('hour').innerHTML = getTimeStr(hour)+ ":";
	$('minunte').innerHTML = getTimeStr(minunte)+ ":";
	$('second').innerHTML = getTimeStr(second);
	
	function getTimeStr(value) {
		
		if(value <= 0) return "00";
		if(value < 10) return "0" + value;
		return value;
	}
}
	
function checkScore() {
	
	if(!global_clock.isRunning()) {
		createTest();
		return;
	}
	
	global_test_end_time = new Date();
	
	if(global_clock != null) {
		global_clock.stopClock();
	}

	var tbody = $('test_body');
	
	var error_words = [];
	var right_words = [];
	
	var right_count = 0;
	var error_count = 0;	
	for(var i = 0; i < tbody.rows.length; i++) {
		
		var row = tbody.rows[i];
		if(row.id == "pattern") {
			continue;
		}
		var id = row.id.substr("pattern".length, row.id.length);
		
		var jpTestWord = trim($('jpTestWord' + id).value);
		var jpWord = trim($('jpWord' + id).value);
		var jpHiragana = trim($('jpHiragana' + id).value);
		var jpKatakana = trim($('jpKatakana' + id).value);
		
		if(jpTestWord == jpWord ||
			(jpHiragana != "" && jpTestWord == jpHiragana) ||
			(jpKatakana != "" && jpTestWord == jpKatakana)) {
			
			$('test_result' + id).className = 'test_result_right';
			
			right_count ++;
			right_words.push(id);
			
		} else {
		
			$('test_result' + id).className = 'test_result_error';
			
			error_count++;
			error_words.push(id);
		}
	}
	
	var show_result = '正确数:' + right_count + "，错误数:" + error_count;
	
	var all_count = error_count + right_count;	
	var rate = error_count*100/(all_count);
	var ext_msg = '';
	if( rate >= 80) {
		ext_msg = '看来你得多加把劲了！！';
	} else if(rate >= 60) {
		ext_msg = '看来还得加强记忆呀！';
	} else if(rate >= 50) {
		ext_msg = '看来结果还勉强可以接受。';
	}  else if(rate >=30) {
		ext_msg = '单词掌握的不错，加油！';
	} else if(rate >= 10) {
		ext_msg = '已经掌握的这么熟练了，恭喜恭喜！';
	} else if(rate == 0) {
		ext_msg = '全部正确，再接再厉！';
	}
	
	var cost_time = 0;
	if(global_test_start_time != null) {
		cost_time = (global_test_end_time.getTime() - global_test_start_time.getTime())/1000;
		var final_score = 0;
		if(cost_time > 0) {
			var right_rate = right_count*all_count*90 / (all_count);
			final_score = Math.round(right_rate / cost_time, 0);
		}
		
		ext_msg += "本轮得分：" + final_score + "分";
	}
	
	show_result += "<br/>" + ext_msg;
	DWRUtil.setValue('show_result', show_result, { escapeHtml:false });
	
	if(global_test_start_time != null) {
		
		var right_rate = right_count*100/(all_count);
		var data = {finalScore: final_score, 
					rightRate:right_rate, 
					errorWords:error_words,
					rightWords:right_words,
					costTimeSecond:parseInt(cost_time)};
		
		global_test_start_time = null;
		
		IndexDWR.updateWordTestScore(data, createCallBack(updateWordTestScoreSuccess));
		
	} else {
		$('reTest').disabled = false;
	}
	function updateWordTestScoreSuccess(param) {
	
		$('reTest').disabled = false;
		if(param != null && param.wordTestScore != null && $('show_wordTestScore') != null) {
			var wordTestScore = param.wordTestScore;
			$('show_wordTestScore').innerHTML = wordTestScore;
		}
		
	}
}

function reTest() {
	
	if(global_clock != null) {
		global_clock.startClock(showClock);
	}
	
	var tbody = $('test_body');
	
	for(var i = 0; i < tbody.rows.length; i++) {
		
		var row = tbody.rows[i];
		if(row.id == "pattern") {
			continue;
		}
		var id = row.id.substr("pattern".length, row.id.length);
		
		DWRUtil.setValue('jpTestWord' + id, null);
		
		$('test_result' + id).className = 'test_answer test_result_normal';
		
		if(i == 0) {
			$('jpTestWord' + id).focus();
		}
	}
	
	$('reTest').disabled = true;
	DWRUtil.setValues({show_result: null});
}

function saveTest() {

	var tbody = $('test_body');
	
	var saveIds = '';
	for(var i = 0; i < tbody.rows.length; i++) {
		
		var row = tbody.rows[i];
		if(row.id == "pattern") {
			continue;
		}
		var id = row.id.substr("pattern".length, row.id.length);
		if(i == 0) {
			saveIds += id;
		} else {
			saveIds += ',' + id;
		}
	}
	if(saveIds == '') {
		alert("您还是先生成一份试卷再保存吧。");
		return;
	}
	saveIds = '[' + saveIds + ']';
	eval('var saveIdArray = ' + saveIds);
	
	showWait("loadProgress");
	
	showedMyTest = null;
	
	IndexDWR.saveTestRecord(saveIdArray, createCallBack(saveTestRecordSuccess));
}

function notLoginHint(msg) {
	if(confirm(msg)) {
		location = '/register';
	}
}

function saveTestRecordSuccess(mapData) {
	
	closeWait("loadProgress");
	
	showMyTestByPageSuccess(mapData);
	
	$('saveTest').disabled = true;
}

var showedMyTest = null;

function showMyTest(testRecordId) {
	
	if(!confirm("您确定要载入这个测试记录吗？")) {
		return false;
	}
	
	if(showedMyTest != null) {
		
		showedMyTest.className = "link1";
	}
	showedMyTest = $('myTestLink_' + testRecordId);
	showedMyTest.className = "showedMyTest";
	
	showWait("loadProgress");
	
	DWRUtil.setValues({show_result: null});
	
	IndexDWR.loadTest(testRecordId, createCallBack(createTestSuccess));
	
	return false;
}

function showMyTestByPage(page) {
	
	IndexDWR.showMyTestByPage(page, createCallBack(showMyTestByPageSuccess));
	return false;
}

var formatter_global = {};
function formatter(data) {
	
	return '<a href="#" id="myTestLink_'+data.id+'" class="link1" onclick="showMyTest(\''+data.id+'\');return false;">' + formatDate1(data.created) + '</a>' +
			'&nbsp;&nbsp;&nbsp;' +
			'<a href="#" class="link1" onclick="deleteMyTest(\''+data.id+'\',\''+formatter_global.pageCount+'\');return false;">'+
			'<img src="/images/delete.gif" width="16" height="16" alt="删除测试">'+'</a>';
}

function showMyTestByPageSuccess(mapData) {
	
	var pageData = {
					itemList: mapData.userTestRecords,
					startPage: mapData.startPage,
					endPage: mapData.endPage,
					pageCount: mapData.pageCount,
					currentPage: mapData.myTestCurrentPage
					};
	
	formatter_global.pageCount = mapData.pageCount;
	showDataPage(pageData, 'testRecordUL', 'testRecordPageUL', formatter, 'showMyTestByPage');
	formatter_global.pageCount = null;
}

function showNoticeByPage(page) {

	IndexDWR.showNoticeByPage(page, createCallBack(showNoticeByPageSuccess));
}

function showNoticeByPageSuccess(mapData) {

	var pageData = {
					itemList: mapData.noticeList,
					startPage: mapData.noticeStartPage,
					endPage: mapData.noticeEndPage,
					pageCount: mapData.noticePageCount,
					currentPage: mapData.noticeCurrentPage
					};
	
	showDataPage(pageData, 'noticeListUL', 'noticeListPageUL', formatterNoticePage, 'showNoticeByPage');
	
}

function formatterNoticePage(data) {
	
	return '<a href="/showNotice/'+data.id+'" class="link1" target="_blank">' + data.noticeTitle + '</a>';
}

function showDataPage(mapData, list_div, page_div, formatter_function, show_function_name) {
	
	var itemList = mapData.itemList;
	
	var pageUL = $(page_div);
	var startPage = mapData.startPage;
	var endPage = mapData.endPage;
	var pageCount = mapData.pageCount;
	var currentPage = mapData.currentPage;
	
	DWRUtil.removeAllOptions(list_div);
	DWRUtil.addOptions(list_div, itemList, formatter_function, { escapeHtml:false });
	
	DWRUtil.removeAllOptions(page_div);	
	
	if(startPage - 1 > 0) {
		
		var li = document.createElement("li");
		li.innerHTML = '<a href="#" onclick="'+show_function_name+'('+(startPage-1)+');return false;">&lt;&lt;</a>';
		pageUL.appendChild(li);
	}
	
	for(var i = startPage; i <= endPage && i <= pageCount; i++) {
		
		var li = document.createElement("li");
		
		if(i == currentPage) {
			li.innerHTML = i;
			li.className = "currentPage";
		} else {
			li.innerHTML = '<a href="#" onclick="'+show_function_name+'('+i+');return false;">'+i+'</a>';
		}
		pageUL.appendChild(li);
	}
	 
	if(endPage + 1 < pageCount) {
		
		var li = document.createElement("li");
		li.innerHTML = '<a href="#" onclick="'+show_function_name+'('+(endPage + 1)+');return false;">&gt;&gt;</a>';
		pageUL.appendChild(li);
	}
}

function postWords() {
	
	var form = DWRUtil.getValues("postWordForm");
	showWait("PostWordProgressHint");
	
	setNullAndNotDisplay(
		{advice_allError:null, advice_chWord:null,
		advice_jpWord:null, advice_jpHiragana: null,
		advice_jpKatakana:null, advice_categoryIds: null});
	
	var data = {chWord: $('chWord').value, jpWord: $('jpWord').value,
				jpHiragana: $('jpHiragana').value, jpKatakana: $('jpKatakana').value,
				wordRange: $('wordRange').value,
				categoryIds: getCheckBoxArrayFromName('categoryIds'),
				wordNoteIds: getCheckBoxArrayFromName('wordNoteIds')};
	
	PostWordDWR.postWords(data, createCallBack(postWordsSuccess));
}

function postWordsSuccess() {

	closeWait("ProgressHint");
	
	alert("添加成功!贡献的单词需要管理员审核，在此期间，此单词仅可以供您个人使用。");
	
	DWRUtil.setValues(
		{chWord:null, jpWord:null, jpHiragana: null,
		jpKatakana:null, advice_categoryIds: null});
		
	$('chWord').focus();
}

function editMyInfo() {

	showWait("ProgressHint");
	
	$('userPhotoPathStr').value = encodeURI($('userPhoto').value);
	$('editForm').submit();
}

function uploadUserPhotoError(error_list) {
	
	closeWait("ProgressHint");
	showError(error_list);
}

function addNewBoardItem() {

	setNullAndNotDisplay({advice_boardContent:null});
	showWait("PostNoticeProgressHint");
	var data = {boardContent:null};
	DWRUtil.getValues(data);
	IndexDWR.addNewBoardItem(data, createCallBack(addNewBoardItemSuccess));
}

function addNewBoardItemSuccess() {
	
	location = "/viewBoard";
}

function deleteMyTest(testRecordId, pageNumber) {

	if(!confirm("您确定要删除这个测试纪录吗？")) {
		return false;
	}
	
	showWait("loadProgress");
	
	IndexDWR.deleteMyTest(testRecordId, pageNumber, createCallBack(deleteMyTestSuccess));
	
	return false;
}

function deleteMyTestSuccess(mapData) {

	closeWait("loadProgress");
	
	showMyTestByPageSuccess(mapData);
}

function testTypeChange() {

	var testType = $('testType');
	IndexDWR.testTypeChange(testType.value, createCallBack(testTypeChangeSuccess));
}

function testTypeChangeSuccess(param) {

	var testWordRange = $('testWordRange');
	testWordRange.options.length = 0;
	var testRange = param.testRange;
	for(var i = 0; i < testRange.length; i++) {
		testWordRange.options[i] = new Option(testRange[i].value, testRange[i].key);
	}
}

function changeSelectWordItemStatus(sender) {

	var tbody = $('test_body');
	var checked = sender.checked;
	for(var i = 0; i < tbody.rows.length; i++) {
		
		var row = tbody.rows[i];
		if(row.id == "pattern") {
			continue;
		}
		var id = row.id.substr("pattern".length, row.id.length);
		$('selectWordItem' + id).checked = checked;
	}
}

function getSelectWordItem() {

	var tbody = $('test_body');
	var item = [];
	for(var i = 0; i < tbody.rows.length; i++) {
		
		var row = tbody.rows[i];
		if(row.id == "pattern") {
			continue;
		}
		var id = row.id.substr("pattern".length, row.id.length);
		if($('selectWordItem' + id).checked) {
			item.push($('selectWordItem' + id).value);
		}
	}
	return item;
}

function getSearchWordSelectItem() {
	
	var resultCheckBoxList = document.getElementsByName('resultCheckBox');
	var item = [];
	for(var i = 0; resultCheckBoxList!=null && i < resultCheckBoxList.length; i++) {
		if(resultCheckBoxList[i].checked) {
			item.push(resultCheckBoxList[i].value);
		}
	}
	return item;
}

function saveToWordNote() {

	_saveToWordNote(getSelectWordItem);
}

function saveSearchWordToWordNote() {
	_saveToWordNote(getSearchWordSelectItem);
}

function _saveToWordNote(selectWordFunc) {

	var wordItem = selectWordFunc();
	if(wordItem.length == 0) {
		alert("请至少选择一个测试的单词。");
		return;
	}
	showWait("optionProgressHint");
	IndexDWR.getWordNoteList(createCallBack(getWordNoteListSuccess));
	
	function getWordNoteListSuccess(param) {
	
		var popWordNote = $('popWordNote');
		popWordNote.className = 'popWordNote';
		
		var wordNoteList = param.wordNoteList;
		if(wordNoteList != null && wordNoteList.length > 0) {
			
			var popWordNoteList = $('popWordNoteList');
			popWordNoteList.innerHTML = '';
			for(var i = 0; i < wordNoteList.length; i++) {
				var div = document.createElement("div");
				div.className = "left_align";
				div.innerHTML = "<input type='checkbox' name='addToWordNote' value='"+wordNoteList[i].id+"'>" + wordNoteList[i].wordNoteName;
				popWordNoteList.appendChild(div);
			}
		} else {
			if(confirm("您现在还没有建立生词本，想现在就创建一个吗？")) {			
				location = "/myWordNote";
				return;
			}
		}
		
		setPosition(popWordNote, $('saveToWordNote'),0,-100);
		
		// function assgin
		
		// document.onmousedown
		var oldOnMouseDown = document.onmousedown;
		document.onmousedown = doBlur;
		
		// addToWordNote.onclick
		var addToWordNote = $('addToWordNoteBtn');
		addToWordNote.onclick = doAddToWordNote;
		
		function doBlur(event) {
		
			var env = event?event.target:(window.event ? window.event.srcElement : null);
			
			var hide = true;
			var parent = env.parentNode;
			while(parent != null) {
				if(parent.id == "popWordNote") {
					hide = false;
					break;
				}
				parent = parent.parentNode;
			}
			if(hide) {
				hidePopWordNote();
			}
		}
		
		function hidePopWordNote() {
			popWordNote.className = 'popWordNote hide';
			document.onmousedown = oldOnMouseDown;
		}
		
		function doAddToWordNote() {
		
			var addToWordNoteArray = document.getElementsByName('addToWordNote');
			var wordNote = [];
			for(var i = 0; addToWordNoteArray != null && i < addToWordNoteArray.length; i++) {
				if(addToWordNoteArray[i].checked) {
					wordNote.push(addToWordNoteArray[i].value);
				}
			}
			if(wordNote.length == 0) {
				alert("请选择一个单词本。");
				return;
			}
			var wordItem = selectWordFunc();
			if(wordItem.length == 0) {
				alert("请至少选择一个测试的单词。");
				return;
			}
			showWait("optionProgressHint");
			var data = {selectWordNote: wordNote, selectWordItem: wordItem};
			IndexDWR.addToWordNote(data, createCallBack(addToWordNoteSuccess));
			
		}
		function addToWordNoteSuccess() {
			alert("成功加入生词本中！");
			hidePopWordNote();
		}
		// function assgin --end		
	}
}



function addWordNote(callbackUrl) {

	if(callbackUrl == null) {
		callbackUrl = '/myWordNote';
	}

	showWait("myWordNoteProgressHint");
	
	setNullAndNotDisplay(
		{advice_wordNoteName:null,
		advice_wordNoteDesc:null});
	
	var data = {wordNoteName:null, wordNoteDesc:null};
	DWRUtil.getValues(data);
	IndexDWR.addWordNote(data, createCallBack(addWordNoteSuccess));
	
	function addWordNoteSuccess() {
		location = callbackUrl;
	}
}

function deleteMyWordNote(wordNoteId, callbackUrl) {
	
	if(callbackUrl == null) {
		callbackUrl = '/myWordNote';
	}
	
	if(!confirm("您确定要删除这个但单词本吗？")) return;
	showWait("myWordNoteProgressHint");
	IndexDWR.deleteWordNote(wordNoteId, createCallBack(deleteMyWordNoteSuccess));
	
	
	function deleteMyWordNoteSuccess() {
		location = callbackUrl;
	}
}


function deleteWordNoteItem(wordNoteId, wordNoteItemId, viewWordNoteItemsCurrentPage, callbackUrl) {

	if(!confirm("您确定要删除这个单词吗？")) return;
	
	if(callbackUrl == null) {
		callbackUrl = "/viewWordNote/";
	}
	
	IndexDWR.deleteWordNoteItem(wordNoteId, wordNoteItemId, viewWordNoteItemsCurrentPage, createCallBack(deleteWordNoteItemSuccess));
	
	function deleteWordNoteItemSuccess(param) {

		location = callbackUrl+param.wordNoteId + "/" + param.viewWordNoteItemsCurrentPage;
	}
}



function saveWordNote(callbackUrl) {
	
	if(callbackUrl == null) {
		callbackUrl = '/myWordNote';
	}
	
	if(!confirm("您确定要保存对单词本所作的修改吗？")) return;
	showWait("myWordNoteProgressHint");
	
	setNullAndNotDisplay(
		{advice_wordNoteName:null,
		advice_wordNoteDesc:null});
	
	var data = {wordNoteId:null, wordNoteName:null, wordNoteDesc:null};
	DWRUtil.getValues(data);
	IndexDWR.saveWordNote(data, createCallBack(saveWordNoteSuccess));
	
	
	function saveWordNoteSuccess() {
		location = callbackUrl;
	}
}

function searchWord() {
	setNullAndNotDisplay(
		{advice_searchWord:null});
	showWait("SearchWordProgressHint");
	var searchWord = $('searchWord');
	var searchType = getRadioObjFromName('searchType');
	var data = {searchWord:searchWord.value, searchType:searchType.value};
	IndexDWR.searchWord(data, createCallBack(searchWordSuccess, "SearchWordProgressHint"));
}

function searchWordSuccess(param) {
	var wordList = param.wordList;
	var resultTbody = $('tbody');
	while(resultTbody.firstChild != null) {
		resultTbody.removeChild(resultTbody.firstChild);
	}
	var div_template = $('tr_template');
	
	for(var i = 0; i < wordList.length; i++) {
		var word = wordList[i];
		var div = div_template.cloneNode(true);
		var div_html = div.innerHTML;
		div_html = div_html.replace("%1%", word.chWord);
		div_html = div_html.replace("%2%", word.jpWord);
		div_html = div_html.replace("%3%", word.jpHiragana==null||word.jpHiragana==""?"&nbsp;":word.jpHiragana);
		div_html = div_html.replace("%4%", word.jpKatakana==null||word.jpKatakana==""?"&nbsp;":word.jpKatakana);
		div_html = div_html.replace("%5%", word.regUserId);
		div_html = div_html.replace("%6%", word.id);
		div.innerHTML = div_html;
		var table = div.getElementsByTagName("table")[0];
		var tbody = table.getElementsByTagName("tbody")[0];
		var tr = tbody.getElementsByTagName("tr")[0];
		resultTbody.appendChild(tr);
	}
	
	if(param.sentenceList != null && param.sentenceList.length > 0) {
		loadDailyJpSuccess(param);
	}
}

function searchChEnJpWord() {
	setNullAndNotDisplay(
		{advice_searchWord:null});
	hide("japaneseThird");
	hide("chineseThird");
	hide("wholeTranslate");
	showWait("SearchWordProgressHint");
	var searchWord = $('searchWord');
	var searchType = getRadioObjFromName('searchType');
	var data = {searchWord:searchWord.value, searchType:searchType.value};
	IndexDWR.searchChEnJpWord(data, createCallBack(searchChEnJpWordSuccess, "SearchWordProgressHint"));
}

function searchChEnJpWordSuccess(param) {
	$('englishResult').innerHTML = param.english;
	if(param.japanese != null) {
		var japaneseThird = $('japaneseThird_template');
		var html = japaneseThird.innerHTML;
		html = html.replace("%1%", param.japanese);
		$('japaneseThird').innerHTML = html;
		$('japaneseThird').style.display = "block";
	}
	if(param.chinese != null) {
		var chineseThird = $('chineseThird_template');
		var html = chineseThird.innerHTML;
		html = html.replace("%1%", param.chinese);
		$('chineseThird').innerHTML = html;
		$('chineseThird').style.display = "block";
	}
	
	var translateResult = param.translateResult;
	if(translateResult != null && translateResult.length > 0) {
		var wholeTranslate = $('wholeTranslate');
		var wholeTranslateContent = $('wholeTranslateContent');
		wholeTranslateContent.innerHTML = "";
		for(var i = 0; i < translateResult.length; i++) {
			var div = document.createElement("div");
			var span = document.createElement("span");
			span.className = "dictHint";
			span.innerHTML = translateResult[i];
			div.appendChild(span);
			wholeTranslateContent.appendChild(div);
		}
		wholeTranslate.style.display = "block";
	}
	
	searchWordSuccess(param);
}
function searchChEnJpKeyPress(event) {
	var event = event || window.event;
	if(event.keyCode==13){
		searchChEnJpWord();
	}
}
function searchChJpKeyPress(event) {
	var event = event || window.event;
	if(event.keyCode==13){   
		searchWord();
	}
}
function loadDailyJp() {
	showWait("SearchWordProgressHint");
	IndexDWR.loadDailyJp(createCallBack(loadDailyJpSuccess, "SearchWordProgressHint"));
}
function loadDailyJpSuccess(param) {
	
	var sentenceList = param.sentenceList;
	var sentenceContainer = $('sentenceContainer');
	sentenceContainer.innerHTML = "";
	var sentence_template = $('sentence_template');
	if(sentenceList != null && sentenceList.length > 0) {
		for(var i = 0; i < sentenceList.length; i++) {
			var sentence = sentenceList[i];
			var template = sentence_template.cloneNode(true);
			var html = template.innerHTML;
			html = html.replace("%1%", sentence.jpMeaning);
			html = html.replace("%2%", sentence.chMeaning);
			template.style.display = "block";
			template.id = "";
			template.innerHTML = html;
			sentenceContainer.appendChild(template);
		}
	}
}
function showTalkShortCut() {
	
	var talkShortcut = $('talkShortcut');
	var talkShortcutInput = $('talkShortcutInput');
	talkShortcutInput.style.display = "block";
	
	setPosition(talkShortcutInput, talkShortcut, 0, 0);
	
	var oldOnMouseDown = document.onmousedown;
	document.onmousedown = doBlur;
	
	function doBlur(event) {
	
		var env = event?event.target:(window.event ? window.event.srcElement : null);
		
		var hide = true;
		var parent = env.parentNode;
		while(parent != null) {
			if(parent.id == "talkShortcutInput" ||
				parent.id == "emote_select") {
				hide = false;
				break;
			}
			parent = parent.parentNode;
		}
		if(hide) {
			hideTalkShortcut();
		}
	}
	
	function hideTalkShortcut() {
		talkShortcutInput.style.display = "none";
		$('emote_select').style.display = "none";
		document.onmousedown = oldOnMouseDown;
	}
		
}
function postTalkShortcut() {

	var talkContent = $('talkContent').value;
	if(trim(talkContent) == "") return;
	var data = {talkContent: talkContent};
	$('talkShortCutBtn').disabled = "true";
	showWait("postTalkShortcutProgressHint");
	IndexDWR.postTalkShortcut(data, createCallBack(postTalkShortcutSuccess, "postTalkShortcutProgressHint"));
	
	function postTalkShortcutSuccess() {
	
		location = "/index";
	}
}
function addTalk() {
	postTalkShortcut();
}
var global_hint_timeout;
function wordInputOnFocus(obj) {
	
	if(!$('autoHint').checked) return;
	
	var id = obj.id.substr("jpTestWord".length, obj.id.length);
	var hint = $('hint'+id).getAttribute("alt");
	
	obj.onblur = function() { wordInputOnBlur();}
		
	global_hint_timeout = setTimeout(function(){showWordHint();}, 1000);
	
	var hintDiv = null;
	var lostCount = 5;
	function showWordHint() {
		
		if(hintDiv == null) {
			hintDiv = document.createElement("div");
			hintDiv.innerHTML = hint;
			hintDiv.className = "wordTestAutoHint";
			document.body.appendChild(hintDiv);
			setPosition(hintDiv, obj, 0, -10);
		}
		if(lostCount > 0) {
			hintDiv.innerHTML = lostCount + '...';
			lostCount--;
			global_hint_timeout = setTimeout(function(){showWordHint();}, 1000);
		} else {
			hintDiv.innerHTML = hint;
			stopTimeout();
		}
	}
	
	function stopTimeout() {
		clearTimeout(global_hint_timeout);
		global_hint_timeout = null;
	}
	
	function wordInputOnBlur() {
		stopTimeout();
		if(hintDiv != null) {
			document.body.removeChild(hintDiv);
			hintDiv = null;
			lostCount = 5;
		}
	}
}

function setPosition(obj, relateObj, xoffset, yoffset){ 
        
    var e = relateObj;

	var offsetTop = e.offsetTop;
    var offsetLeft = e.offsetLeft;
    
    var clientWidth = e.clientWidth;
    var clientHeight = e.clientHeight;
    
    while( e = e.offsetParent ) 
    { 
        offsetTop += e.offsetTop; 
        offsetLeft += e.offsetLeft; 
    }
    
    obj.style.left = (offsetLeft + clientWidth + xoffset) + "px";
	obj.style.top = (offsetTop + clientHeight + yoffset) + "px";        
}

