// This script is based on the script developed by nuFuaue for "Typing game for iPhone" (http://nufuaue.sakura.ne.jp/iphone/typing/)
// See also http://d.hatena.ne.jp/AjaxBBS/20080816/1218903561
// The changes made to the original script are marked as "KN'.

function $(id) {
  return (typeof id == 'object') ? id : document.getElementById(id);
}

var isMobileSafari = !!navigator.userAgent.match(/Mobile.*Safari/)

// from http://d.hatena.ne.jp/kotorikotoriko/20080801/1217562814

//'あいうえおかきくけこさしすせそ,たちつてとなにぬねのはひふへほ,まみむめもやゆよらりるれろわをん'.split(',');
var targetNo = 0;
var targetLen = 0; //KN

var startTime = 0;
var intervalId = 0;
var goNext = 0;

function init() {
  if (!isMobileSafari) {
    var elmInput = $('input');
    var elmCaret = document.createElement('span');
    $('output').appendChild(elmCaret).innerHTML = '|';
    elmCaret.style.textWidth = 900;
    elmCaret.style.display = 'none';
    elmInput.addEventListener('focus', function () { elmCaret.style.display = ''; }, false);
    elmInput.addEventListener('blur', function () { elmCaret.style.display = 'none'; }, false);
  }
  
  $('success').appendChild(document.createTextNode(''));
  $('error').appendChild(document.createTextNode(''));
}


function nextTarget()
{
    if (event.keyCode == 13)
	{
	    goNext = 1;
	}
}

function start() {
  
  targetNo = 0;
  targetLen = 0; //KN
  count = 0; //KN
  $('input').value = '';
  $('target').innerHTML = targets[targetNo];
  count++; $('count').innerHTML = count + '.'; //KN
  
  var inputedLen = 0;
  
  if (intervalId == 0) {
    var textNodeSuccess = $('success').firstChild;
    var textNodeError = $('error').firstChild;
    
    intervalId = setInterval(function () {
      var target = targets[targetNo];
      var inputText = $('input').value;
      var checkLen = inputText.length;
	  inputedLen--;
	  for (var i = inputedLen; i < inputText.length; i++) {
	      if (inputText.charAt(i) == target.charAt(i)) {
		  inputedLen = i + 1;
	      } else {
		  break;
	      } 
	  }

      textNodeSuccess.data = inputText.substr(0, inputedLen);
      window.status = inputText.substr(0, inputedLen);
      textNodeError.data = inputText.substr(inputedLen);


      if (inputedLen == target.length && goNext == 1 ) {
	targetLen += target.length; //KN

        targetNo++;
        if (targetNo < targets.length) {
          isMobileSafari || $('input').blur();
	  //          $('input').value = inputText.substr(inputedLen);
	  $('input').value = '';
          isMobileSafari || $('input').focus();
          $('target').innerHTML = targets[targetNo];
	count++; $('count').innerHTML = count + '.'; //KN
	goNext = 0;
        } else {
          textNodeError.data = '';
          $('input').blur();
          clearInterval(intervalId);
          intervalId = 0;

          time = Math.round( 60 / ( (new Date().getTime() - startTime) / (1000 * targetLen) ) ); //KN

	  // KN
	  if( time >= 120 ){
	      rank = "!!!!（大横綱）";
	  }else if( time >= 100 ){
	      rank = "!!!（横綱級)";
	  }else if( time >= 90 ){
	      rank = "!!（大関級）";
	  }else if( time >= 85 ){
	      rank = "!（張出大関級）";
	  }else if( time >= 80 ){
	      rank = "!（関脇級）";
	  }else if( time >= 75 ){
	      rank = "（小結級）";
	  }else if( time >= 72 ){
	      rank = "（前頭筆頭級）";
	  }else if( time >= 70 ){
	      rank = "（前頭二枚目級）";
	  }else if( time >= 69 ){
	      rank = "（前頭三枚目級）";
	  }else if( time >= 68 ){
	      rank = "（前頭四枚目級）";
	  }else if( time >= 67 ){
	      rank = "（前頭五枚目級）";
	  }else if( time >= 66 ){
	      rank = "（前頭六枚目級）";
	  }else if( time >= 65 ){
	      rank = "（前頭七枚目級）";
	  }else if( time >= 64 ){
	      rank = "（前頭八枚目級）";
	  }else if( time >= 63 ){
	      rank = "（前頭九枚目級）";
	  }else if( time >= 62 ){
	      rank = "（前頭十枚目級）";
	  }else if( time >= 60 ){
	      rank = "（前頭十二枚目級）";
	  }else if( time >= 58 ){
	      rank = "（前頭十五枚目級）";
	  }else if( time >= 50 ){
	      rank = "（十両級）";
	  }else if( time >= 40 ){
	      rank = "（幕下級）";
	  }else if( time >= 30 ){
	      rank = "（三段目級）";
	  }else if( time >= 20 ){
	      rank = "（序二段級）";
	  }else if( time >= 20 ){
	      rank = "（序ノ口級）";
	  }else{
	      rank = "（門前払い）";
	  }

	  if( clss > 100 ){
	      alert(time + '点' + rank); // KN
	      location.href = clear + '&time=' + time; // KN
	  }else if( time >= clss ){
	      alert(time + '点' + rank + '--勝負あり!'); // KN
	      location.href = clear + '&time=' + time; // KN
	  }else{ 
	      alert(time + '点' + rank + '--まだまだ!'); // KN
	      location.href = repeat; // KN
	  }

        }
        inputedLen = 0;
      }
    }, 50);
  }
  
  
  $('input').focus();
  startTime = new Date().getTime();

}


window.addEventListener('load', init, false);



