//	typewriter
//	(c)opation project
// 改変は許可しますが再配布は禁止します。
// 著作権はオパチオンプロジェクトにあります。
// http://ait.zive.net

//ココから
var REPEAT_TIME_PRESET = 100;
var REST_TIME_1 = 200;
var REST_TIME_2 = 500;
var CURSOR_TYPE_PRESET = "_";
//ココまで

var cnt = new Object;
var timerOfType = new Object;
var opMsg = new Object;
var cursorType = CURSOR_TYPE_PRESET;

function typeWriter(ObjName,Msg,Rep,mode){
	
	if (document.getElementById){

	if (mode == "static"){
		clearText(ObjName);
		appendText(ObjName,Msg);
		return;
	}
	try{clearTimeout(timerOfType[ObjName]);}
	catch(err){}
	
	if (!cnt[ObjName] || opMsg[ObjName] != Msg) {
		cnt[ObjName] = 0;
		clearText(ObjName);
		opMsg[ObjName] = Msg
	}
	repeat_time = REPEAT_TIME_PRESET;
	
		if (cnt[ObjName]>opMsg[ObjName].length) {
			removeText(ObjName,1);
			cnt[ObjName] = false;
			
			if (Rep == "true") {
				cnt[ObjName] = 0;
				clearText(ObjName);
			}else {
				clearTimeout(timerOfType[ObjName]);
				return;
			}
		}
		opStr = opMsg[ObjName].substring(cnt[ObjName],cnt[ObjName]+1);
		
		switch(opStr){
			case "<":
			i = opMsg[ObjName].indexOf(">",cnt[ObjName]);
			opStr = opMsg[ObjName].substring(cnt[ObjName],i + 1);
			cnt[ObjName] = i;
			
			default:
			removeText(ObjName,1);
			appendText(ObjName,opStr);
			appendText(ObjName,cursorType);
			break;
			
			case "~":
			removeText(ObjName,2);
			appendText(ObjName,cursorType);
			break;
			
			case "#":
			repeat_time = REST_TIME_1;
			break;
			
			case "$":
			repeat_time = REST_TIME_2;
			break;
			
			case "@":
			clearText(ObjName);
			break;
			
		}
		cnt[ObjName]++;
		timerOfType[ObjName] = setTimeout("typeWriter('"+ObjName+"','"+Msg+"','"+Rep+"')",repeat_time);
	}
}

function removeText(obj,removeNum){
	if (!document.getElementById) return;
	nStr = document.getElementById(obj).innerHTML;
	document.getElementById(obj).innerHTML = nStr.substring(0, nStr.length - removeNum);
	return;
}
function appendText(obj,str){
	if (!document.getElementById) return;
	document.getElementById(obj).innerHTML = document.getElementById(obj).innerHTML + str;
	return;
}
function clearText(obj){
	if (!document.getElementById) return;
	document.getElementById(obj).innerHTML = "";
	return;
}