/*@cc_on _d=document;eval('var document=_d')@*/

var currentArray = new Array( 6 );
var pushedArray = new Array( 6 );
var texts = "";
var codes = "";
var additionalCodes = "";
var charArray = null;
var index = 0;
var dateStart = null;
var stringLength = 0;
var trueCount = 0;
var falseCount = 0;
var firstPushTime = null;
var lastPushTime = null;
var timeLag = null;
var okTimeLag = 9999;

charArray = dic[ 0 ];

clearPushedArray();

function downKeys() {
	if ( dateStart == null ) {
		dateStart = ( new Date() ).getTime();
	}
	// For Time-Lag
	if ( firstPushTime == null ) {
		firstPushTime = ( new Date() ).getTime();
		timeLag = null;
		document.getElementById( "time_lag" ).style.background = "#FFFFFF";
	}
	lastPushTime = ( new Date() ).getTime();

	var codeCharNumber = judgeKeys( event.keyCode );

	if ( codeCharNumber >= 0 && codeCharNumber != 9 ) {
		currentArray[ codeCharNumber ] = 1;
		pushedArray[ codeCharNumber ] = 1;

		document.getElementById( "ten_" + codeCharNumber ).innerHTML = "●";
		document.getElementById( "ten_" + codeCharNumber ).style.color = "#FF0000";
		document.getElementById( "btn_" + codeCharNumber ).style.background = "#FF0000";
	}
}

function upKeys() {
	var tmpText = convKeyToChar( event.keyCode );

	if ( timeLag != null ) {
		document.getElementById( "time_lag" ).innerHTML = ( timeLag / 1000 ).toFixed( 3 );
		if ( timeLag > okTimeLag ) {
			tmpText = "";
			document.getElementById( "time_lag" ).style.background = "#FF0000";
		}
	}

	if ( tmpText != "" ) {
		texts = texts + tmpText;
		document.getElementById( "txt_strings" ).innerHTML = texts;
	}
}

function upKeysForTyping() {
	var tmpText = convKeyToChar( event.keyCode );

	if ( timeLag != null ) {
		document.getElementById( "time_lag" ).innerHTML = ( timeLag / 1000 ).toFixed( 3 );
		if ( timeLag > okTimeLag ) {
			tmpText = " ";
			document.getElementById( "time_lag" ).style.background = "#FF0000";
		}
	}

	if ( document.getElementById( "string_" + index ).innerHTML == tmpText ) {
		if ( tmpText != "　" ) {
			document.getElementById( "string_" + index ).style.color = "#FF0000";
		} else {
			document.getElementById( "string_" + index ).style.background = "#FF0000";
		}
		index++;
		trueCount++;
	} else if ( tmpText != "" ) {
		falseCount++;
	}

	if ( stringLength == index ) {
		totalTime = ( ( new Date() ).getTime() - dateStart ) / 1000;
		document.getElementById( "disp_totalTime" ).innerHTML = totalTime;
		document.getElementById( "disp_trueCount" ).innerHTML = trueCount;
		document.getElementById( "disp_falseCount" ).innerHTML = falseCount;
		document.getElementById( "disp_truePercent" ).innerHTML = ( trueCount / ( trueCount + falseCount ) * 100 ).toFixed( 2 );
		document.getElementById( "disp_charPerMin" ).innerHTML = ( trueCount / totalTime * 60 ).toFixed( 2 );
		document.getElementById( "disp_secPerChar" ).innerHTML = ( totalTime / trueCount ).toFixed( 2 );
	}
}

function judgeKeys( code ) {
	var codeCharNumber = -1;

	if ( code == 83 ) {
		// s
		codeCharNumber = 0;
	} else if ( code == 68 ) {
		// d
		codeCharNumber = 1;
	} else if ( code == 70 ) {
		// f
		codeCharNumber = 2;
	} else if ( code == 74 ) {
		// j
		codeCharNumber = 3;
	} else if ( code == 75 ) {
		// k
		codeCharNumber = 4;
	} else if ( code == 76 ) {
		// l
		codeCharNumber = 5;
	} else if ( code == 32 ) {
		// space key
		codeCharNumber = 9;
	}

	return codeCharNumber;
}

function clearPushedArray() {
	for ( i = 0; i < 6; i++ ) {
		pushedArray[ i ] = 0;
	}
}

function clearTextarea() {
	codes = "";
	additionalCodes = "";
	texts = "";
	document.getElementById( "txt_strings" ).innerHTML = texts;
	ctrlDisp( false, false, false, false, false );
}

function convKeyToChar( keyCode ) {
	var flg = true;
	var codeCharNumber = judgeKeys( keyCode );
	var strings = "";

	if ( codeCharNumber >= 0 ) {
		if ( codeCharNumber != 9 ) {
			currentArray[ codeCharNumber ] = 0;
		}

		for ( i = 0; i < 6; i++ ) {
			if ( currentArray[ i ]  == 1 ) {
				flg = false;
				break;
			}
		}

		if ( flg ) {
			// All Clear
			for ( i = 0; i < 6; i++ ) {
				codes = codes + pushedArray[ i ];
				pushedArray[ i ] = 0;

				document.getElementById( "ten_" + i ).innerHTML = "○";
				document.getElementById( "ten_" + i ).style.color = "#000000";
				document.getElementById( "btn_" + i ).style.background = "#FFFFFF";
			}

			// Get Time-Lag
			timeLag = lastPushTime - firstPushTime;
			firstPushTime = null;
			lastPushTime = null;

			// For space key
			if ( codeCharNumber == 9 ) {
				// space key codes
				codes = "999999";
			}

			if ( charArray[ codes ] != undefined ) {
				if ( charArray[ codes ] == "拗音" ) {
					// 拗音
					additionalCodes = codes;
					ctrlDisp( true, false, false, false, false );
				} else if ( charArray[ codes ] == "濁音" ) {
					// 濁音
					additionalCodes = codes;
					ctrlDisp( false, true, false, false, false );
				} else if ( charArray[ codes ] == "半濁音" ) {
					// 半濁音
					additionalCodes = codes;
					ctrlDisp( false, false, true, false, false );
				} else if ( charArray[ codes ] == "拗音＋濁音" ) {
					// 拗音＋濁音
					additionalCodes = codes;
					ctrlDisp( true, true, false, false, false );
				} else if ( charArray[ codes ] == "拗音＋半濁音" ) {
					// 拗音＋半濁音
					additionalCodes = codes;
					ctrlDisp( true, false, true, false, false );
				} else if ( charArray[ codes ] == "拗音＋濁音＋半濁音" ) {
					// 拗音＋濁音＋半濁音
					additionalCodes = codes;
					ctrlDisp( true, true, true, false, false );
				} else if ( charArray[ codes ] == "数符" ) {
					// 数符
					additionalCodes = codes;
					ctrlDisp( false, false, false, true, false );
				} else if ( charArray[ codes ] == "？" ) {
					// ？
					additionalCodes = codes;
				} else if ( charArray[ codes ] == "。" ) {
					// 。
					additionalCodes = codes;
				} else if ( charArray[ codes ] == "、" ) {
					// 、
					// 外字符としても使用
					additionalCodes = codes;
					ctrlDisp( false, false, false, false, true );
				} else {
					if ( charArray[ additionalCodes + codes ] != undefined ) {
						strings = strings + charArray[ additionalCodes + codes ];
					} else if ( charArray[ additionalCodes ] == "？" ) {
						// ？
						strings = strings + charArray[ additionalCodes ] + charArray[ codes ];
					} else if ( charArray[ additionalCodes ] == "。" ) {
						// 。
						strings = strings + charArray[ additionalCodes ] + charArray[ codes ];
					} else if ( charArray[ additionalCodes ] == "、" ) {
						// 、
						strings = strings + charArray[ additionalCodes ] + charArray[ codes ];
					}
					if ( charArray[ additionalCodes ] == "数符" || charArray[ additionalCodes ] == "、" ) {
						// 数符 or 外字符
						if ( charArray[ additionalCodes + codes ] == "つなぎ符" ) {
							additionalCodes = "";
							ctrlDisp( false, false, false, false, false );
						} else if ( charArray[ additionalCodes + codes ] == undefined ) {
							ctrlDisp( false, false, false, false, false );
							if ( charArray[ codes ] != undefined && charArray[ additionalCodes ] == "数符" ) {
								strings = strings + charArray[ codes ];
							}
							additionalCodes = "";
						}
					} else {
						additionalCodes = "";
						ctrlDisp( false, false, false, false, false );
					}
				}
			} else {
				additionalCodes = "";
				ctrlDisp( false, false, false, false, false );
			}

			codes = "";
		}
	}

	return strings;
}

function ctrlDisp( yo, daku, handaku, su, gaiji ) {
	if ( yo ) {
		document.getElementById( "disp_yo" ).style.background = "#FF0000";
	} else {
		document.getElementById( "disp_yo" ).style.background = "#FFFFFF";
	}
	if ( daku ) {
		document.getElementById( "disp_daku" ).style.background = "#FF0000";
	} else {
		document.getElementById( "disp_daku" ).style.background = "#FFFFFF";
	}
	if ( handaku ) {
		document.getElementById( "disp_handaku" ).style.background = "#FF0000";
	} else {
		document.getElementById( "disp_handaku" ).style.background = "#FFFFFF";
	}
	if ( su ) {
		document.getElementById( "disp_su" ).style.background = "#FF0000";
	} else {
		document.getElementById( "disp_su" ).style.background = "#FFFFFF";
	}
	if ( gaiji ) {
		document.getElementById( "disp_gaiji" ).style.background = "#FF0000";
	} else {
		document.getElementById( "disp_gaiji" ).style.background = "#FFFFFF";
	}
}

function selectInputType( no ) {
	charArray = dic[ no ];
}

function selectTimeLag( sec ) {
	okTimeLag = sec * 1000;
}

function convertText( value ) {
	var length = value.length;
	var textValue = "";

	for ( i = 0; i < length; i++ ) {
		textValue = textValue + "<span id=\"string_" + i + "\">";
		textValue = textValue + value.charAt( i );
		textValue = textValue + "</span>";
	}

	document.getElementById( "txt_strings" ).innerHTML = textValue;
}

function init() {
	document.getElementById( "input_type_0" ).checked = true;
	document.getElementById( "input_time_lag_0" ).checked = true;
}

function typingLevel1() {
	var value = "あいうえおかきくけこさしすせそ";
	convertText( value );
	stringLength = value.length;
}

/*
function upKeys_() {
	var flg = true;
	var codeCharNumber = judgeKeys( event.keyCode );

	if ( codeCharNumber >= 0 ) {
		if ( codeCharNumber != 9 ) {
			currentArray[ codeCharNumber ] = 0;
		}

		for ( i = 0; i < 6; i++ ) {
			if ( currentArray[ i ]  == 1 ) {
				flg = false;
				break;
			}
		}

		if ( flg ) {
			// All Clear
			for ( i = 0; i < 6; i++ ) {
				codes = codes + pushedArray[ i ];
				pushedArray[ i ] = 0;

				document.getElementById( "ten_" + i ).innerHTML = "○";
				document.getElementById( "ten_" + i ).style.color = "#000000";
				document.getElementById( "btn_" + i ).style.background = "#FFFFFF";
			}

			// For space key
			if ( codeCharNumber == 9 ) {
				// space key codes
				codes = "999999";
			}

			if ( charArray[ codes ] != undefined ) {
				if ( codes == "000100" ) {
					// 拗音
					additionalCodes = codes;
					ctrlDisp( true, false, false, false, false );
				} else if ( codes == "000010" ) {
					// 濁音
					additionalCodes = codes;
					ctrlDisp( false, true, false, false, false );
				} else if ( codes == "000001" ) {
					// 半濁音
					additionalCodes = codes;
					ctrlDisp( false, false, true, false, false );
				} else if ( codes == "000110" ) {
					// 拗音＋濁音
					additionalCodes = codes;
					ctrlDisp( true, true, false, false, false );
				} else if ( codes == "000101" ) {
					// 拗音＋半濁音
					additionalCodes = codes;
					ctrlDisp( true, false, true, false, false );
				} else if ( codes == "000111" ) {
					// 拗音＋濁音＋半濁音
					additionalCodes = codes;
					ctrlDisp( true, true, true, false, false );
				} else if ( codes == "100111" ) {
					// 数符
					additionalCodes = codes;
					ctrlDisp( false, false, false, true, false );
				} else if ( codes == "010001" ) {
					// ？
					additionalCodes = codes;
				} else if ( codes == "010011" ) {
					// 。
					additionalCodes = codes;
				} else if ( codes == "000011" ) {
					// 、
					// 外字符としても使用
					additionalCodes = codes;
					ctrlDisp( false, false, false, false, true );
				} else {
					if ( charArray[ additionalCodes + codes ] != undefined ) {
						texts = texts + charArray[ additionalCodes + codes ];
					} else if ( additionalCodes == "010001" ) {
						// ？
						texts = texts + charArray[ additionalCodes ] + charArray[ codes ];
					} else if ( additionalCodes == "010011" ) {
						// 。
						texts = texts + charArray[ additionalCodes ] + charArray[ codes ];
					} else if ( additionalCodes == "000011" ) {
						// 、
						texts = texts + charArray[ additionalCodes ] + charArray[ codes ];
					}
					if ( additionalCodes == "100111" || additionalCodes == "000011" ) {
						// 数符 or 外字符
						if ( charArray[ additionalCodes + codes ] == "つなぎ符" ) {
							additionalCodes = "";
							ctrlDisp( false, false, false, false, false );
						} else if ( charArray[ additionalCodes + codes ] == undefined ) {
							ctrlDisp( false, false, false, false, false );
							if ( charArray[ codes ] != undefined && additionalCodes == "100111" ) {
								texts = texts + charArray[ codes ];
							}
							additionalCodes = "";
						}
					} else {
						additionalCodes = "";
						ctrlDisp( false, false, false, false, false );
					}
				}
			} else {
				additionalCodes = "";
				ctrlDisp( false, false, false, false, false );
			}

			codes = "";
			document.getElementById( "txt_strings" ).innerHTML = texts;
		}
	}
}
*/

/*
function upKeysForTyping() {
	var flg = true;
	var codeCharNumber = judgeKeys( event.keyCode );

texts="";

	if ( codeCharNumber >= 0 ) {
		if ( codeCharNumber != 9 ) {
			currentArray[ codeCharNumber ] = 0;
		}

		for ( i = 0; i < 6; i++ ) {
			if ( currentArray[ i ]  == 1 ) {
				flg = false;
				break;
			}
		}

		if ( flg ) {
			// All Clear
			for ( i = 0; i < 6; i++ ) {
				codes = codes + pushedArray[ i ];
				pushedArray[ i ] = 0;

				document.getElementById( "ten_" + i ).innerHTML = "○";
				document.getElementById( "ten_" + i ).style.color = "#000000";
				document.getElementById( "btn_" + i ).style.background = "#FFFFFF";
			}

			// For space key
			if ( codeCharNumber == 9 ) {
				// space key codes
				codes = "999999";
			}

			if ( charArray[ codes ] != undefined ) {
				if ( codes == "000100" ) {
					// 拗音
					additionalCodes = codes;
					ctrlDisp( true, false, false, false, false );
				} else if ( codes == "000010" ) {
					// 濁音
					additionalCodes = codes;
					ctrlDisp( false, true, false, false, false );
				} else if ( codes == "000001" ) {
					// 半濁音
					additionalCodes = codes;
					ctrlDisp( false, false, true, false, false );
				} else if ( codes == "000110" ) {
					// 拗音＋濁音
					additionalCodes = codes;
					ctrlDisp( true, true, false, false, false );
				} else if ( codes == "000101" ) {
					// 拗音＋半濁音
					additionalCodes = codes;
					ctrlDisp( true, false, true, false, false );
				} else if ( codes == "000111" ) {
					// 拗音＋濁音＋半濁音
					additionalCodes = codes;
					ctrlDisp( true, true, true, false, false );
				} else if ( codes == "100111" ) {
					// 数符
					additionalCodes = codes;
					ctrlDisp( false, false, false, true, false );
				} else if ( codes == "010001" ) {
					// ？
					additionalCodes = codes;
				} else if ( codes == "010011" ) {
					// 。
					additionalCodes = codes;
				} else if ( codes == "000011" ) {
					// 、
					// 外字符としても使用
					additionalCodes = codes;
					ctrlDisp( false, false, false, false, true );
				} else {
					if ( charArray[ additionalCodes + codes ] != undefined ) {
						texts = texts + charArray[ additionalCodes + codes ];
					} else if ( additionalCodes == "010001" ) {
						// ？
						texts = texts + charArray[ additionalCodes ] + charArray[ codes ];
					} else if ( additionalCodes == "010011" ) {
						// 。
						texts = texts + charArray[ additionalCodes ] + charArray[ codes ];
					} else if ( additionalCodes == "000011" ) {
						// 、
						texts = texts + charArray[ additionalCodes ] + charArray[ codes ];
					}
					if ( additionalCodes == "100111" || additionalCodes == "000011" ) {
						// 数符 or 外字符
						if ( charArray[ additionalCodes + codes ] == "つなぎ符" ) {
							additionalCodes = "";
							ctrlDisp( false, false, false, false, false );
						} else if ( charArray[ additionalCodes + codes ] == undefined ) {
							ctrlDisp( false, false, false, false, false );
							if ( charArray[ codes ] != undefined && additionalCodes == "100111" ) {
								texts = texts + charArray[ codes ];
							}
							additionalCodes = "";
						}
					} else {
						additionalCodes = "";
						ctrlDisp( false, false, false, false, false );
					}
				}
			} else {
				additionalCodes = "";
				ctrlDisp( false, false, false, false, false );
			}

			codes = "";
			if ( document.getElementById( "string_" + index ).innerHTML == texts ) {
				if ( texts != "　" ) {
					document.getElementById( "string_" + index ).style.color = "#FF0000";
				} else {
					document.getElementById( "string_" + index ).style.background = "#FF0000";
				}
				index = index + 1;
			}
		}
	}
}
*/

