var qNum1 = 1;
var a;
var clickedImg;
var httpObj;
var active = true;
var flickering = 0;
var flickerCount = 0;
var activeTimeout;
var timeAtStop;
var timeAtFeatured = 0;
var bannedImages = new Array();
var response;
var totalMs;
var myPercentage;
var myColor;
var userID;
var featured = false;
var d, t, nddif;
var flickerClockColor = '#de0000';
var toSkipFeatured = false;
var selectedHofTab = 'web';

function changeLoading(){
  obj = document.getElementById("wait");
  if (obj == undefined) return;
  switch (loadingStep){
    case 1: t = "<font color='#8AC58A'>..."; break;
    case 2: t = ".<font color='#8AC58A'>.."; break;
    case 3: t = "..<font color='#8AC58A'>."; break;
    case 4: t = "..."; break;
  }
  obj.innerHTML = "Loading" + t;
  if (loadingStep++ == 4) loadingStep = 1;
}

var loadingInterval = setInterval(changeLoading, 400);
var loadingStep = 1;
var curPage = 0;

function preloadImages(){
  clearInterval(loadingInterval);
  document.getElementById("wait").style.display = "none";
  document.getElementById("start").style.display = "block";
}


function start(){
  document.getElementById("quiz").style.display = "block";
  document.getElementById("intro").style.display = "none";
  d = new Date();
  t = setInterval(updateTime, 10);
}

function updateTime(){
  var nd = new Date();
  nddif = new Date(0);
  nddif.setHours(0);
  if (featured)
    nddif.setMilliseconds(timeAtFeatured - d);
  else
    nddif.setMilliseconds(nd - d);
  m = '' + nddif.getMinutes();
  if (m.length == 1) m = '0' + m;
  s = '' + nddif.getSeconds();
  if (s.length == 1) s = '0' + s;
  ms = '' + Math.floor(nddif.getMilliseconds() / 10);
  if (ms.length == 1) ms = '0' + ms;
  document.getElementById('time').innerHTML = 'Your time: ' + m + ':' + s + ':' + ms;
}


function checkAnswer(obj, curNum){
  if (!active) return;
  for (i in bannedImages){
    if (bannedImages[i] == obj) return;
  }
  clickedImg = obj;
  imgNameSplit = obj.src.split('_');
  a = imgNameSplit[1].charAt(0);
  qNum = curNum;
  clearInterval(flickering);
  clock = document.getElementById("time");
  clock.style.color = 'black';
  flickerCount = 0;
  active = false;
  for (i = 1; i <= 6; i++){
    if (i == curNum)
      document.getElementById('img' + i).className = 'quiz_img2';
    else
      document.getElementById('img' + i).className = 'quiz_img1';
  }
  totalMs = nddif.getHours() * 3600000 + nddif.getMinutes() * 60000 +  + nddif.getSeconds() * 1000 + nddif.getMilliseconds();
  dUrl = 'index.php?q=' + q + '&a=' + a + '&t=' + totalMs + '&p=' + curPage + '&v=' + version;
  httpObj = createRequestObject();
  httpObj.open('get', dUrl, true);
  httpObj.onreadystatechange = handleDownloadResponse;
  httpObj.send(null);
}

function handleDownloadResponse(){
  if(httpObj.readyState == 4){
    response = httpObj.responseText.split('|');
    if (response[0] == '1'){
      q = response[1];
      document.getElementById('mark_' + qNum).src = 'images/_right.gif';
      clearInterval(t);
      timeAtStop = new Date();
      switch(q){
        case '0':
          if (featured){
            if (toSkipFeatured) {
              curPage = new Number(response[6]);
              wallOfFame();
              return;
            } else {
              d.setSeconds(d.getSeconds() + 5);
              flickerClockColor = '#008000';
              updateTime();
              flickerClock();
            }
          }
          activeTimeout = setTimeout(wallOfFame, 1000);
          curPage = new Number(response[6]);
          break;
        case 'featured':
          timeAtFeatured = new Date();
          featured = true;
        default:
          activeTimeout = setTimeout(nextQuestion, 1500);
      }
    } else {
      bannedImages.push(clickedImg);
      if (featured) {
        clickedImg.src = 'images/featured/' + response[3] + '_' + a + '_w.gif';
      } else {
        clickedImg.src = 'images/' + version + '/' + q + '_' + a + '_w.gif';
      }
      d.setSeconds(d.getSeconds() - 2);
      updateTime();
      flickerClock();
      active = true;
      for (i = 1; i <= 6; i++){
        img = document.getElementById('img' + i);
        if (img.src.indexOf('_w.gif') > -1)
          img.className = 'quiz_img1';
        else
          img.className = 'img_hs quiz_img1';
      }
    }
  }
}

function skipFeatured(){
  toSkipFeatured = true;
  active = false;
  dUrl = 'index.php?q=featured&a=1&t=' + totalMs + '&p=' + curPage + '&v=' + version;
  httpObj = createRequestObject();
  httpObj.open('get', dUrl, true);
  httpObj.onreadystatechange = handleDownloadResponse;
  httpObj.send(null);
}

function wallOfFame(){
  myPercentage = new Number(response[3]);
  var usersSplit = response[4].split(',');
  var curUser, curTime, m, s, ms, curUserTime, curName, curUserRank;
  m = '' + nddif.getMinutes();
  if (m.length == 1) m = '0' + m;
  s = '' + nddif.getSeconds();
  if (s.length == 1) s = '0' + s;
  ms = '' + Math.floor(nddif.getMilliseconds() / 10);
  if (ms.length == 1) ms = '0' + ms;
  document.getElementById("results_time").innerHTML = m + ':' + s + ':' + ms;
  document.getElementById("results_rank").innerHTML = myPercentage + "%";
  document.getElementById('featured_header').style.display = 'none';
  document.getElementById('game_header').style.display = 'block';
  for (var i = 0; i < 10; i++){
    curUserTime = curUserRank = curName = '&nbsp;';
    curColor = "black";
    pf = sf = '';
    if (i < usersSplit.length){
      curUser = usersSplit[i].split(':');
      curTime = new Date(0);
      curTime.setMilliseconds(curUser[0]);
      m = '' + curTime.getMinutes();
      if (m.length == 1) m = '0' + m;
      s = '' + curTime.getSeconds();
      if (s.length == 1) s = '0' + s;
      ms = '' + Math.floor(curTime.getMilliseconds() / 10);
      if (ms.length == 1) ms = '0' + ms;
      curUserTime = m + ':' + s + ':' + ms;
      curName = curUser[1];
      curUserRank = curUser[2];
    }
    if (curUser[3] == userID){
      if (curUserRank != myPercentage){
        document.getElementById("results_rank").innerHTML = myPercentage + "%";
      }
      pf = "<b>";
      sf = "</b>";
      curColor = myColor
    }
    document.getElementById("results_num_" + i).style.color = curColor;
    document.getElementById("results_name_" + i).style.color = curColor;
    document.getElementById("results_score_" + i).style.color = curColor;
    document.getElementById("results_time_" + i).style.color = curColor;
    document.getElementById("results_num_" + i).innerHTML = (curUserTime == "&nbsp;") ? "" : curPage * 10 + (i + 1);
    document.getElementById("results_name_" + i).innerHTML = pf + curName + sf;
    document.getElementById("results_score_" + i).innerHTML = pf + curUserRank + sf;
    document.getElementById("results_time_" + i).innerHTML = pf + curUserTime + sf;
  }
  if (myPercentage > 66){
    myColor = "#008000";
    myText = "Very Good!"
  } else if (myPercentage > 33){
    myColor = "#FF9900";
    myText = "Hmmm."
  } else {
    myColor = "#CC3300";
    myText = "Ooops."
  }
  document.getElementById("results_header").style.background = myColor;
  document.getElementById("results_rank").style.color = myColor;
  document.getElementById("results_rank1").style.color = myColor;
  document.getElementById("results_submit").style.background = myColor
  document.getElementById("results_mark").innerHTML = myText;
  document.getElementById("results_next").style.display = (response[5] == '1') ? "inline" : "none";
  document.getElementById("results_prev").style.display = (curPage > 0) ? "inline" : "none";
  document.getElementById("results").style.display = "block";
  document.getElementById("quiz").style.display = "none";
}

function submitScore(){
  window.open('submit.htm','Submit','status=yes,resizable=yes,width=430,height=350');
}

function restart(){
  q = dq;
  qNum1 = 0;
  active = true;
  flickering = 0;
  flickerCount = 0;
  featured = false;
  flickerClockColor = '#de0000';
  bannedImages = new Array();
  toSkipFeatured = false;
  document.getElementById("quiz").style.display = "block";
  document.getElementById("results").style.display = "none";
  nextQuestion();
  d = new Date();
  updateTime();
  document.getElementById("results_submit").disabled = false;
}

function prevScore(){
  nextPage = curPage - 1;
  dUrl = 'index.php?q=lastQ&t=' + totalMs + '&p=' + nextPage + '&v=' + version + "&device=" + selectedHofTab;
  httpObj = createRequestObject();
  httpObj.open('get', dUrl, true);
  httpObj.onreadystatechange = handleDownloadResponse;
  httpObj.send(null);
}

function nextScore(){
  nextPage = curPage + 1;
  dUrl = 'index.php?q=lastQ&t=' + totalMs + '&p=' + nextPage + '&v=' + version + "&device=" + selectedHofTab;
  httpObj = createRequestObject();
  httpObj.open('get', dUrl, true);
  httpObj.onreadystatechange = handleDownloadResponse;
  httpObj.send(null);
}

function nextQuestion(){
  for (i = 0; i < 6; i++){
    imgObj = document.getElementById('img' + (i + 1));
    if (featured)
      imgObj.src = 'images/featured/' + response[3] + '_' + response[2].charAt(i) + '.gif';
    else
      imgObj.src = 'images/' + version + '/' + q + '_' + response[2].charAt(i) + '.gif';
    imgObj.className = 'img_hs quiz_img1';
    imgObj = document.getElementById('mark_' + (i + 1));
    imgObj.src = 'images/' + (i + 1) + '.gif';
  }
  bannedImages = new Array();
  active = true;
  qNum1++;
  if (featured){
    document.getElementById('numbox').innerHTML = '';
    document.getElementById('game_header').style.display = 'none';
    document.getElementById('featured_header').style.display = 'block';
    document.getElementById('wrong').style.display = 'none';
    document.getElementById('featured_link').style.display = 'block';
  } else {
    var nd = new Date();
    var dif = nd - timeAtStop;
    d.setTime(d.getTime() + dif)
    document.getElementById('numbox').innerHTML = qNum1 + ' of 10';  
    document.getElementById('wrong').style.display = 'block';
    document.getElementById('featured_link').style.display = 'none';
    document.getElementById('game_header').style.display = 'block';
    document.getElementById('featured_header').style.display = 'none';
    t = setInterval(updateTime, 10);
  }
}

function flickerClock(){
  clearInterval(flickering);
  clock = document.getElementById("time");
  clock.style.color = flickerClockColor;
  flickerCount = 0;
  flickering = setTimeout(flickerClock1, 100);
}

function flickerClock1(){
  clearInterval(flickering);
  clock.style.color = 'white';
  flickering = setTimeout(flickerClock2, 100);
}

function flickerClock2(){
  clearInterval(flickering);
  clock.style.color = flickerClockColor;
  flickering = setTimeout(flickerClock3, 100);
}

function flickerClock3(){
  clearInterval(flickering);
  clock.style.color = 'white';
  flickering = setTimeout(flickerClock4, 100);
}

function flickerClock4(){
  clearInterval(flickering);
  clock.style.color = 'black';
}

function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == 'Microsoft Internet Explorer'){
        ro = new ActiveXObject('Microsoft.XMLHTTP');
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

function rollover(obj, state){
  if (active){
    for (i in bannedImages){
      if (bannedImages[i] == obj) return;
    }
    if (state){
      obj.className = "img_hs quiz_img2";
    } else {
      obj.className = "img_hs quiz_img1";
    }
  }
}

function updateResults(curID){
  if (curID == 0) return;
  document.getElementById("results_submit").disabled = true;
  var dUrl = "index.php?update=" + curID + "&v=" + version + "&device=" + selectedHofTab;
  httpObj = createRequestObject();
  httpObj.open('get', dUrl, true);
  httpObj.onreadystatechange = updateResultsCallback;
  httpObj.send(null);
}

function updateResultsCallback(){
  if (httpObj.readyState == 4){
    var curResponse = httpObj.responseText.split("|");
    userID = curResponse[0];
    curPage = new Number(curResponse[1]);
    usersSplit = curResponse[2].split(',');
    var pf, sf;
    for (var i = 0; i < 10; i++){
      curUserTime = curUserRank = curName = '&nbsp;';
      pf = sf = "";
      if (i < usersSplit.length){
        curUser = usersSplit[i].split(':');
        curTime = new Date(0);
        curTime.setMilliseconds(curUser[0]);
        m = '' + curTime.getMinutes();
        if (m.length == 1) m = '0' + m;
        s = '' + curTime.getSeconds();
        if (s.length == 1) s = '0' + s;
        ms = '' + Math.floor(curTime.getMilliseconds() / 10);
        if (ms.length == 1) ms = '0' + ms;
        curUserTime = m + ':' + s + ':' + ms;
        curName = curUser[1];
        curUserRank = curUser[2];
        if (curUser[3] == userID){
          if (curUserRank != myPercentage){
           document.getElementById("results_rank").innerHTML = myPercentage + "%";
           }
           pf = "<b>";
           sf = "</b>";
          document.getElementById("results_num_" + i).style.color = myColor;
          document.getElementById("results_name_" + i).style.color = myColor;
          document.getElementById("results_score_" + i).style.color = myColor;
          document.getElementById("results_time_" + i).style.color = myColor;
        } else {
          document.getElementById("results_num_" + i).style.color = 'black';
          document.getElementById("results_name_" + i).style.color = 'black';
          document.getElementById("results_score_" + i).style.color = 'black';
          document.getElementById("results_time_" + i).style.color = 'black';
          pf = sf = "";
        }
      }
      curIndex = curPage * 10 + i + 1;
      document.getElementById("results_num_" + i).innerHTML = pf + curIndex + sf;
      document.getElementById("results_name_" + i).innerHTML = pf + curName + sf;
      document.getElementById("results_score_" + i).innerHTML = pf + curUserRank + sf;
      document.getElementById("results_time_" + i).innerHTML = pf + curUserTime + sf;
    }
    document.getElementById("results_next").style.display = (curResponse[3] == '1') ? "inline" : "none";
    document.getElementById("results_prev").style.display = (curPage > 0) ? "inline" : "none";
  }
}

function selectHofTab(tabType){
  if (tabType != selectedHofTab){
    document.getElementById(selectedHofTab + "_tab").className = "tab";
    document.getElementById(tabType + "_tab").className = "tab selected_tab";
    selectedHofTab = tabType;
    curPage = 0;
    
    for (var i = 0; i < 10; i++){
      document.getElementById("results_num_" + i).innerHTML = '';
      document.getElementById("results_name_" + i).innerHTML = '';
      document.getElementById("results_score_" + i).innerHTML = '';
      document.getElementById("results_time_" + i).innerHTML = '';
    }
    dUrl = 'index.php?q=lastQ&t=' + totalMs + '&p=0&v=' + version + "&device=" + selectedHofTab;
    httpObj = createRequestObject();
    httpObj.open('get', dUrl, true);
    httpObj.onreadystatechange = handleDownloadResponse;
    httpObj.send(null);
  }
}
