//---------------------------------------------------------------
// Supporting functions
//---------------------------------------------------------------

var currentPage;
var jsonPageCache = {};

function showPage(title, callback) {
  currentPage = title;

  var page = document.getElementById("page");
  var pageTitle = document.getElementById("page-title");
  var body = document.getElementById("page-body");

  pageTitle.innerHTML = "spurkis :: " + title;
  body.innerHTML = '<div id="' + title + '-body">loading ' + title + ' page...</div>';

  page.className = "show";

  if (jsonPageCache[title] != null) {
    showJsonPage(jsonPageCache[title]);
  } else {
    if (callback == null) {
      callback = "showJsonPage";
    }
    loadJsonData("page-json/title=" + title + ".callback=" + callback);
  }
}

function showJsonPage(page) {
  jsonPageCache[page.title] = page;
  var pgBody = document.getElementById(page.title + '-body');
  pgBody.innerHTML = renderPage(page);
}

function hidePage() {
  var page = document.getElementById("page");
  page.className = "hide";
}


function loadJsonData(url, callback) {
  var xmlhttp;
  if (window.XMLHttpRequest) {
    // Mozilla et al:
    xmlhttp = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    // code for IE
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  if (xmlhttp!=null) {
    xmlhttp.open("GET", url, true);
    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4) {
        // no error handling for now...
        // alert( xmlhttp.responseText );
        if (callback != null) {
          callback( xmlhttp );
        } else {
          eval( xmlhttp.responseText );
        }
      }
    }
    xmlhttp.send(null);
  } else {
    alert("Your browser does not support XML HTTP Requests.");
  }
}