/************************************** 変数 *****************************************/

var script   = "sample.html";

var idArr    = new Array(); // 問題のIDを格納
var questArr = new Array(); // 問題を格納
var ansArr   = new Array(); // 答えを格納
var ansDsArr = new Array(); // 補足を格納
var imgArr   = new Array(); // 画像を格納

var nowCnt   = 0;           // 現時点でのカウント
var tmpCnt   = 0;           // 0～10
var cntMax   = 10;          // 1回に受信する問題数

/* 得点関係 */
var sei      = 0;           // 正解数
var hu       = 0;           // 間違った数

var distLeft = 100;           // 正否を表示させるタグの左位置

var php      = "q.php";     // PHPファイル
var oldId    = "";          // 受け取ったIDたち（「,」で区切る)

var startting= 0;

var beforId    = new Array();
var beforQuest = new Array();        // 1個前の問題
var beforAns   = new Array();        // 1個前の○×
var beforAnsDes= new Array();        // 1個前の答え補足
var beforImg   = new Array();        // 1個前の画像

var getDatas   = 0;                  // データを受け取った

var missId     = new Array();
var missQuest  = new Array();
var missAns    = new Array();
var missAnsDes = new Array();
var missImg    = new Array();

var reGame     = 0; // 1：ミスした問題だけのプレー開始合図

var startTime;
var level;          // レベル

var cntTime    = 10; // 10秒間
var refresh    = 0;  // 更新するか

/************************************** missInit *************************************/
function missInit(){
  
  if (hu == 0){
    // ミスがなければ
    document.getElementById("qq").innerHTML  = "ミスはありませんでした<br>";
    document.getElementById("qq").innerHTML += "<a href=\"" + script + "\">もう一度はじめから</a>";
    return ;
  }
  
  reGame = 1; // 1だとサーバーに結果を送信しない

  
  // ミスした問題だけを開始するための初期設定
  nowCnt = tmpCnt = 0;
  qMax = cntMax   = missQuest.length; // 最後の問題が終わるまでアクセスしない
  sei = hu        = 0;
  
  delete idArr;      idArr    = new Array();
  delete questArr;   questArr = new Array();
  /*
  */
  
  idArr     = missId;
  questArr  = missQuest;
  ansArr    = missAns;
  ansDsArr  = missAnsDes;
  imgArr    = missImg;
  
  
  // ★ 時間
  startTime = (new Date()).getTime();

  //delete missQuest; 
  missQuest = new Array();
  //delete questArr;   
  //questArr  = new Array();
  /*
  */
  gameStart();
}

/************************************** init *****************************************/
function init(){

  // ★ レベルセット
  level = getLevel();
  
  
  var firstMsg  = "<" + "span style=\"font-size:12px;\">下の「スタート」をクリックすると、問題が1問ずつ計" + qMax + "問ランダムで出題";
  firstMsg     += "されます。<br>問題を読んで正しいと思えば「○」ボタンを。誤っていると";
  firstMsg     += "思えば「×」ボタンをクリックしてください。<br>";
  firstMsg     += "その場で答え合わせが出来るので、実践と学習が出来ます。<" + "br><" + "/span>";
  firstMsg     += "総問題数約1400問以上！毎回「スタートボタン」を押すたびに違う問題が違う順序で出題！<br>書籍を超えた！？この自動車免許問題集F-Monで合格を目指せ！<br>";
  firstMsg     += "<" + "input type=\"button\" onClick=\"gameStart()\" value=\"スタート\"";
  firstMsg     += " style=\"width: 100%; font-size: 16px; font-weight: bold; color: #FD8331;\">";
  
  document.getElementById("qq").innerHTML = firstMsg;
  
  // ★ 正否を表示させるid="dist"の初期位置を格納しとく
  
  var obj = YAHOO.util.Dom.getRegion('dist');
  
  if (distLeft == 0){
    if (document.all)
      distLeft = obj.left - 550 / 2; // 初期の正否表示タグの横位置
    else
      distLeft = 30;
  }
  document.getElementById("dist").style.left = "-1500px";
  
  // ★ 時間
  startTime = (new Date()).getTime();
  
  getData(); // Ajaxで問題取得
  
}

/*************************************** start ***************************************/
function gameStart(){

  // 問題を表示
  var str  = ""; var tmpArr = new Array();
  if (imgArr[0]){
    tmpArr = imgArr[tmpCnt].split("<>");
    str    = '<img src="./jpg/' + tmpArr[0] + "\" width=\"" + tmpArr[1] + '" height="' + tmpArr[2] + '" alt=""';
    str   += ' align="right">';
  }
      str += "第" + (nowCnt + 1);
      str += "問<br>";
      str += "<span style=\"font-weight:bold;\">" + questArr[tmpCnt] + "</span>";
      
  document.getElementById("qq").innerHTML = str;
  
  // 一個前シリーズに保存しとく
  beforId[0]     = idArr[0];
  beforQuest[0]  = questArr[0];        // 1個前の問題
  beforAns[0]    = ansArr[0];          // 1個前の○×
  beforAnsDes[0] = ansDsArr[0];        // 1個前の答え補足
  beforImg[0]    = imgArr[0];          // 1個前の画像
  
  startting = 1; // 開始した合図をセット
  
  // 点数表示
  showTen("ten" , qMax , 0 , 0);
}

/*************************************** check ***************************************/
function check(value){
  
  // まだ開始していなければ
  if (startting == 0)
    return ;
  
  var bl; // あっているか・・・を格納
  
  // 答えをチェックします
  if (value == "○")
    value = 0;
  else
    value = 1;

  // あっていたら
  if (ansArr[tmpCnt] == value){
    sei++;
    bl = true;
  }else{
    // 間違っていた
    sendMistake(idArr[tmpCnt]);
    bl = false;
    
    // リターンゲーム用に格納
    missId[hu]     = idArr[tmpCnt];
    missQuest[hu]  = questArr[tmpCnt];
    missAns[hu]    = ansArr[tmpCnt];
    missAnsDes[hu] = ansDsArr[tmpCnt];
    missImg[hu]    = imgArr[tmpCnt];
    hu++; // 不正解をカウントアップ
  }
  
  // 得点を表示
  showTen("ten" , qMax - nowCnt -1 , sei , hu);
  // あっていたかどうかを表示させます
  showSeiHi(bl);
  // 一個カウントする
  if (nowCnt >= qMax - 1){
    // 50問経過したら
    return ending();
  }else{
    // それ以外は
    if (tmpCnt >= cntMax - 1){
      // 10問に達したら次の問題の配列を読み込む
      getDatas = 0; // まだ受け取ってない印
      getData();
      
      return; // どうも新しい問題を取得する前に、次の問題を表示してしまうようなので、ここでリターンする
      
      tmpCnt = 0;
      nowCnt++;
    }else{
      // それ以外は普通にカウントアップ
      tmpCnt++;
      nowCnt++;
    }
  }
  
  // 次の問題を表示させる
  var str  = ""; var tmpArr = new Array();
  if (imgArr[tmpCnt]){
    tmpArr = imgArr[tmpCnt].split("<>");
    str    = '<img src="./jpg/' + tmpArr[0] + "\" width=\"" + tmpArr[1] + '" height="' + tmpArr[2] + '" alt=""';
    str   += ' align="right">';
  }
  str += "第" + (nowCnt + 1);
  str += "問<br>";
  str += "<span style=\"font-weight:bold;\">" + questArr[tmpCnt] + "</span>";
      
  document.getElementById("qq").innerHTML = str;
  // 一個前シリーズに保存しとく
  beforId[nowCnt]     = idArr[tmpCnt];
  beforQuest[nowCnt]  = questArr[tmpCnt];        // 1個前の問題
  beforAns[nowCnt]    = ansArr[tmpCnt];          // 1個前の○×
  beforAnsDes[nowCnt] = ansDsArr[tmpCnt];        // 1個前の答え補足
  beforImg[nowCnt]    = imgArr[tmpCnt];          // 1個前の画像
}

/*************************************** showSeiHi ***********************************/
// 問題の正解か不正解かを表示させる

function showSeiHi(bl){
  var obj = document.getElementById("dist");
  obj.style.left = distLeft + "px";
  
  if (beforAns[nowCnt] == 0)
    var s = "○";
  else
    var s = "×";
  
  obj.innerHTML = "";
  
  if (beforImg[nowCnt]){
    var tmpArr = beforImg[nowCnt].split("<>");
    obj.innerHTML   = '<img src="./jpg/' + tmpArr[0] + "\" width=\"" + tmpArr[1] + '" height="' + tmpArr[2] + '" alt="" align="right">';
  }

  obj.innerHTML += "<a href=\"javascript:void(0)\" onClick=\"closeSeiHi()\"><img src=\"../jpg/close.gif\" width=\"15\" height=\"15\" alt=\"閉じます\" border=\"0\"> CLOSE</a><br> <span style=\"color:#333333; text-align: left;\">第" + (nowCnt + 1) + "問 " + beforQuest[nowCnt] + "</span><br><br>";
  if (bl){
    obj.style.backgroundColor = "#B2E3E4";
    obj.innerHTML += "<span style=\"font-size:28px; color: #13BAFF;\">正解です<br><br>あなたが押したのは" + s + "のボタンです</span><br><br>";
  }else{
    obj.style.backgroundColor = "#FFC5FE";
    obj.innerHTML += "<span style=\"font-size:28px; color: #FF17FC;\">不正解です<br><br>正解は" + s + " です</span><br><br>";
  }
      
  // 答えの説明
  obj.innerHTML += "<span style=\"color:#333333; text-align: left; font-size:80%;\">" + beforAnsDes[nowCnt] + "</span>";
  obj.innerHTML += "";
  //obj.innerHTML += "<br>誤字脱字がありましたら <a href=\"./forMaster.php?id=" + idArr[nowCnt] + "\" target=\"ab\">こちらをクリック</a> してください。";
}
/*************************************** closeSeiHi **********************************/
function closeSeiHi(){
  var obj = document.getElementById("dist");
  obj.style.left = "-1500px";
}
/*************************************** showTen *************************************/
function showTen(ele , zan , seikai , hu){
  
  // 残りの問題数や正解数を表示させます
  // 第一引数：点数等を表示させるエレメント名。普通は「id="ten"」
  // 第二引数：残りの問題数
  // 第三引数：正解数
  // 第四引数：間違った数
  
  var str = '<img src="../jpg/yajirushi00.gif" width="3" height="10" alt=""> ';
  str    += "残り問題数 : " + zan + " 問 ";
  str    += '<img src="../jpg/yajirushi00.gif" width="3" height="10" alt=""> ';
  str    += "正解数 : " + seikai + " 問 ";
  str    += '<img src="../jpg/yajirushi00.gif" width="3" height="10" alt=""> ';
  str    += "不正解数 : " + hu + " 問 ";
  
  document.getElementById(ele).innerHTML = str;

}


/************************************* getMon **************************************/
function getMon(){
  
  var tmp = new Array();
  var arr = new Array();
  var arr1= new Array();
  
  tmp     = mondai.split("---");
  mondai  = null;
  
  //var max = tmp.length;

  for(var i = 0; i < cntMax; i++){
    arr1        = tmp[i].split(",");
    idArr[i]    = arr1[0]; // 問題のIDを格納
    questArr[i] = arr1[1]; // 問題を格納
    ansArr[i]   = arr1[2]; // ○×を格納
    ansDsArr[i] = arr1[3]; // 答え補足を格納
    imgArr[i]      = arr1[4]; // 画像
    if (i == 0)
      oldId     =  arr1[0];
    else
      oldId      += "," + arr1[0];
  }
  
}


/************************************ getData *************************************/
function getData(){
  xmlHttp = createXMLHttpRequest();
  if (xmlHttp){
    var dataObj = new Date();
    
    xmlHttp.onreadystatechange = httpCheck;
    //xmlHttp.open("post" , php + "?" + dataObj.getTimezoneOffset() , true);
    //xmlHttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");


// これじゃないとロリポップではエラーになる
xmlHttp.open("POST","q.php",true);
xmlHttp.setRequestHeader("content-type",  "application/x-www-form-urlencoded;charset=UTF-8");


    //xmlhttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
    xmlHttp.send("oldId=" + encodeURI(oldId) + "&level=" + level);
  }
}
/************************************ httpCheck ***********************************/
function httpCheck(){
if (xmlHttp.readyState == 2){
  // alert("2"); とりあえずデータを読み込んだ状態
}else if (xmlHttp.readyState == 1){
  // alert("1");  データの読み込み中
}else  if (xmlHttp.readyState == 3){
  // alert("3");  読み込んだデータを解析中
}else  if (xmlHttp.readyState == 0){
  // alert("0");  読み込みが開始されていない状態
}
else  if (xmlHttp.readyState == 4 && xmlHttp.status == 200){

// 4: 読み込んだデータの解析完了、または失敗した
  // 200: ファイルを見つけた
  // 404: ファイルがなかった
    mondai = xmlHttp.responseText;
//alert(mondai);
  if (mondai == ""){
    refresh = 0;
    document.getElementById("qq").innerHTML  = "頻繁に更新ボタンをクリックしないでください。<br>";
    document.getElementById("qq").innerHTML += "更新する場合は、なるべく" + qMax + "問解いてからにしてください。<br>";
    document.getElementById("qq").innerHTML += "また、ブラウザ以外のツールによるアクセスは絶対におやめください。";
    document.getElementById("qq").innerHTML += cntTime + "秒お待ちください。<br>";
    document.getElementById("qq").innerHTML += "<" + "input type=\"button\" name=\"reset\" value=\"" + cntTime + " 秒お待ちください\" onClick=\"if (refresh == 1) init();\" >";
    //document.getElementById("qq").innerHTML += "
    timerId = setInterval("countDown()" , 1000);
    
    return;
  }
    if (nowCnt == 0){
      getMon(); // スタート時だけ
      return;
    }
    tmpCnt = 0;
    nowCnt++;
    
    getDatas = 1;
    
//alert(mondai);
    getMon();
    // 次の問題を表示させる
    var str  = ""; var tmpArr = new Array();
    if (imgArr[tmpCnt]){
      tmpArr = imgArr[tmpCnt].split("<>");
      str    = '<img src="./jpg/' + tmpArr[0] + "\" width=\"" + tmpArr[1] + '" height="' + tmpArr[2] + '" alt=""';
      str   += ' align="right">';
    }
    str += "第" + (nowCnt + 1);
    str += "問<br>";
    str += questArr[tmpCnt];
        
    document.getElementById("qq").innerHTML = str;
    // 一個前シリーズに保存しとく
    beforId[nowCnt]     = idArr[tmpCnt];
    beforQuest[nowCnt]  = questArr[tmpCnt];        // 1個前の問題
    beforAns[nowCnt]    = ansArr[tmpCnt];          // 1個前の○×
    beforAnsDes[nowCnt] = ansDsArr[tmpCnt];        // 1個前の答え補足
    beforImg[nowCnt]    = imgArr[tmpCnt];          // 1個前の画像
  }else if (xmlHttp.readyState == 4 && xmlHttp.status == 304){
    alert("aaaaaaaaaaaa");
  }else{
    alert("5555555");
    mondai = xmlHttp.responseText;
    document.getElementById("qq").innerHTML = mondai;
  }

}
/************************************ createXMLHttpRequest ***********************/
function createXMLHttpRequest(){
  var XMLhttpObject = null;
  try{
    XMLhttpObject = new XMLHttpRequest();
  }catch(e){
    try {
      XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
        XMLhttpObject = new ActiveXObject("microsoft.XMLHTTP");
      }catch(e){
        return null;
      }
    }
  }
  return XMLhttpObject;
}
/*********************************** sendMistake **********************************/

function sendMistake(no){
  // 間違えた問題のNoを送信します
  xmlHttp2 = createXMLHttpRequest();
  if (xmlHttp2){
    
    xmlHttp2.onreadystatechange = httpCheck2;
    //xmlHttp2.open("post" , "count.php" , true);
    //xmlHttp2.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");

// これじゃないとロリポップではエラーになる
xmlHttp2.open("POST","count.php",true);
xmlHttp2.setRequestHeader("content-type",  "application/x-www-form-urlencoded;charset=UTF-8");
    xmlHttp2.send("id=" + encodeURI(no));
  }
}
/********************************* httpCheck2 **************************************/
function httpCheck2(){
  if (xmlHttp2.readyState == 4 && xmlHttp2.status == 200){
    //alert(xmlHttp2.responseText);
  }
}

/********************************* ending *******************************************/

function ending(){
  /*
    qMax  :総問題数
    sei   :正解数
    hu    :不正解数
   */
  
  // ★ 掛かった時間取得
  var ttime = Math.floor(((new Date()).getTime() - startTime) / 1000 / 60);
  var byou  = Math.floor((((new Date()).getTime() - startTime) % 60000) / 1000);
  if (ttime > 30)
    ttime = ttime + "分" + byou + "秒です。30分以上かかったので不合格です・・・";
  else
    ttime = ttime + "分" + byou + "秒です。";
  
  var str = "問題数" + qMax + "問中<br>";
  str    += sei + " 問正解し、 " + hu + " 問不正解でした。";
  str    += "かかった時間 ： " + ttime + " <br>";
  str    += "正解率 : " + (Math.round(sei / qMax * 100)) + "%";
  if (Math.round(sei / qMax * 100) < 90)
    str  += " <font size=\"-2\">残念ながら、不合格です・・・</font>";
  else
    str  += " 合格です！！！";
  if (level)
    str    += "<br><a href=\"sample-" + level + ".html\">もう一度チャレンジ</a> ";
  else
    str    += "<br><a href=\"" + location.href + "\">もう一度チャレンジ</a> ";
  if (missQuest.length > 0)
    str    += "　　　<a href=\"javascript:void(0)\" onClick=\"missInit()\">間違えた問題だけもう一度</a>";
  
  // 掲示板へのメッセージ
  str += "<br><br>学科試験を受けるにあって、意気込みを書き込んでください！ → ";
  str += '<a href="../bbs/bbs.php" target="bbs">意気込みを書き込む</a><br>問題集の感想等もお待ちしております！';
  
  document.getElementById("qq").innerHTML = str;
  // 結果を送信
  if (reGame == 0)
    sendKekka();
  
}

/*********************************** sendKekka **********************************/

function sendKekka(){
  // 間違えた問題のNoを送信します
  xmlHttpK = createXMLHttpRequest();
  if (xmlHttpK){
    
    xmlHttpK.onreadystatechange = ReKekka;
    //xmlHttpK.open("post" , "q.php" , true);
    //xmlHttpK.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
// これじゃないとロリポップではエラーになる
xmlHttpK.open("POST","q.php",true);
xmlHttpK.setRequestHeader("content-type",  "application/x-www-form-urlencoded;charset=UTF-8");
    xmlHttpK.send("mord=end&level=" + level + "&data=" + encodeURI(qMax + "," + sei + "," + hu));
  }
}
/********************************* ReKekka **************************************/
function ReKekka(){
  if (xmlHttpK.readyState == 4 && xmlHttpK.status == 200){
    return xmlHttpK.responseText;
    //document.getElementById("qq").innerHTML += xmlHttpK.responseText;
  }
}


/********************************** countDown **************************************/

function countDown(){
  
  var obj = document.getElementById("reset");
  
  cntTime--;
  obj.value = cntTime + " 秒お待ちください";
  
  if (cntTime == 0){
   clearInterval(timerId);
   obj.value = "更新する";
   refresh   = 1;
   cntTime = 10;
  }
}
