var request = null;
var msgarray = null;
var pointer = 0;
var playstat = false;
var minspeed = 1100;
var speed = 0;


function init(){
	//Getリクエスト取得
	var getpara = getGetRequest();
	//Getリクエスト内にurlが存在するか？
	if(getpara['url']){
		//存在すれば読込処理
		var url = getpara['url'];
		document.getElementById("url").value = unescape(url);
		getHtml();
	}
	document.getElementById("btnPlay").style.visibility="hidden";
}

function getGetRequest() {
	var query = window.location.search.substring(1);
	var parms = query.split('&');
	var getpara = new Object;
	for (var i=0; i<parms.length; i++) {
		var pos = parms[i].indexOf('=');
		if (pos > 0) {
			var key = parms[i].substring(0,pos);
			var val = parms[i].substring(pos+1);
			getpara[key] = val;
		}
	}
	return getpara;
}

function createRequest() {
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = null;
			}
		}
	}
	if (request == null)
		alert("Error creating request object!");
}

function getHtml() {
	//読込中を表示
	//document.getElementById("loading").style.visibility="visible";
	try{
		document.getElementById("btnPlay").style.visibility="hidden";
		document.getElementById("msg").innerHTML = "<img alt='Loading...' src='img/loading.gif' />" ;
		createRequest();
		var url = "../../cgi-bin/sokudoku/getHtml.pl?url=" + document.getElementById("url").value;
		request.open("GET", url, true);
		request.onreadystatechange = updatePage;
		request.send(null);
	}catch(e){
		alert("読込に失敗しました。");
		var msgEl = document.getElementById("msg");
		replaceText(msgEl, "読込に失敗しました。");
	}
}
function updatePage() {
	if (request.readyState == 4) {
		var body = request.responseText;
		var msgEl = document.getElementById("msg");
		readBody(body);
		replaceText(msgEl, "読込完了しました。再生ボタンを押してください。");
		document.getElementById("btnPlay").style.visibility="visible";
	}
}


function readBody(body){
	msgarray = new Array();
	pointer = 0;
	var len = body.length;
	var size = 20;
	var i = 0;
	do{
		if(i*size+size < len){
			msgarray[i] = body.substring(i*size,i*size+size);
		}else{
			msgarray[i] = body.substring(i*size,len);
		}
		i++;
	}while(i*size < len)
}
function play(){
	if(playstat){
		playUI();
	}else{
		pauseUI();
		output();
	}
}

function playUI(){
	playstat = false;
    var btnPlay = document.getElementById("btnPlay");
    btnPlay.className = "play";
}

function pauseUI(){
	playstat = true;
    var btnPlay = document.getElementById("btnPlay");
    btnPlay.className = "pause";
}

function output(){
	if(pointer >= msgarray.length){
		pointer = 0;
		playUI();
		return;
	}
	if(!playstat){
		return;
	}
	var el = document.getElementById("msg");
	clearText(el);
	var newNode = document.createTextNode(msgarray[pointer]);
	el.appendChild(newNode);
	pointer++;
	setTimeout(output, minspeed - speed);
}

function replaceText(el, text) {
	try{
		if (el != null) {
			clearText(el);
			var newNode = document.createTextNode(text);
			el.appendChild(newNode);
		}
	}catch(e){
		alert("replaceTextでエラーが発生しました。");
	}

}

function clearText(el) {
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        el.removeChild(childNode);
      }
    }
  }
}

function getText(el) {
  var text = "";
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        if (childNode.nodeValue != null) {
          text = text + childNode.nodeValue;
        }
      }
    }
  }
  return text;
}
function slide(){
	$("#helpPanel").slideToggle("slow");
}
