/**
 * used: all
 */
function initGlobals () {
  enterRollover = new Image();
  enterRollover.src = "images/enter_rollover.jpg";
  star = new Image(32, 30);
  star.src = "img/star.gif"
  starHalf = new Image(16, 30);
  starHalf.src = "img/half_star.gif"
  var passedQuery = location.search.substr(1);
  var yearPassedOk = false;
  var today = new Date();
  var i = 1998;
  
  // TOM:  The line that follows has to contain the latest year
  // that's up on the site, e.g.:
  // while (!yearPassedOk && i < <latest year>) {
  while (!yearPassedOk && i < 2010) {
    if (parseInt(passedQuery) == i) {
      yearPassedOk = true;
      currentYear = passedQuery;
    } // end if
    i++;
  } // end while
  if (!yearPassedOk) {
    currentYear = today.getFullYear();
  } // end if
  xmlDocLoaded = new Array(false, false);
} // end initGlobals

/**
 * used: /timeline/
 */
function highlightCurrentYear() {
  document.getElementById(currentYear + "").innerHTML = "<span class=\"bigYear\">" + currentYear + "</span>";
} // end highlightCurrentYear

/**
 * used: /reviews/
 */
function getMovieName() {
  if (location.search == "?" || location.search == "") {
    movieName = "2004/once_upon_a_time_in_mexico.xml";
  } else {
    movieName = location.search.substr(1) + ".xml";
  }
  return movieName;
} // end getMovieName

/**
 * used: /reviews/
 */
function writeReviewFooter() {
  var copyrightPhrase = "<span class=\"copyright\">Copyright &copy; <a href=\"mailto:andarko@andarkos100movies.com\">Andarko</a></span>"
  document.getElementById("backLink").innerHTML = "<a href=\"/timeline/index.shtml?" + movieName.substr(0, 4) + "\">" + "Back to Andarko's 100 Movies &mdash; " + movieName.substr(0, 4) + "</a><br>" + copyrightPhrase;
} // end writeReviewFooter

/**
 * used: all
 */
function getFilmstripHeight(passedStrip) {
  if (navigator.userAgent.indexOf("MSIE") != -1) {
    document.getElementById(passedStrip).height = document.body.offsetHeight;
  } else {
    // for non-ms browers, set bg filmstrip height guaranteed taller than page
    document.getElementById(passedStrip).height = 1200;
  } // end if
} // end getFilmstripHeight

/**
 * used: /main/
 */
function getContentWidth(pane) {
  document.getElementById(pane).width = (document.body.offsetWidth - 386) / 2;
} // end getContentWidth

/**
 * used: /main/
 */
function fitDocumentBody() {
  getFilmstripHeight("mainStrip");
  getContentWidth("contentPaneLeft");
  getContentWidth("contentPaneRight");
} // end fitDocumentBody

/**
 * used: /
 */
function changeEnterCell(cell, state) {
  if (state == "on") {
    cell.style.background = "url(" + enterRollover.src + ")";
    cell.style.cursor = "pointer";
  } else {
    cell.style.background = "url(images/spacer.gif)";
  }
} // end changeEnterCell

/**
 * used: /index.shtml
 */
function navTo(loc) {
  location.href = loc;
} // end navTo

/**
 * openCredits
 * used: /main/index.shtml
 */
function openCredits() {
  var crWinHeight = 280;
  var crWinWidth = 392;
  var crWinTop = (screen.availHeight - crWinHeight) / 2;
  var crWinLeft = (screen.availWidth - crWinWidth) / 2;
  window.open("/main/copy/credits.html", "credits", "width=" + crWinWidth + ",height=" + crWinHeight + ",top=" + crWinTop + ",left=" + crWinLeft);
} // end openCredits

/* --- XML --- */
/**
 * used: /timeline/
 */
function showMovieTitles() {
  var records;
  var finalContent;

  for (var i = 0; i < xmlDocs.length; i++) {

    records = xmlDocs[i].responseXML.getElementsByTagName("movie");

    finalContent = "<ol";
    if (i == 1) {
      finalContent += " start=\"51\">";
    } else {
      finalContent += ">";
    }

    for (j = 0; j < records.length; j++) {
      if (records[j].getElementsByTagName("uri").length == 0) {
        // display title without a link
        finalContent += "<li>" + records[j].getElementsByTagName("title")[0].firstChild.nodeValue + "</li>";
      } else {
        // display title with a link
        finalContent += "<li><a href=\"" + records[j].getElementsByTagName("uri")[0].firstChild.nodeValue + "\">" + records[j].getElementsByTagName("title")[0].firstChild.nodeValue + "</a></li>";
        // *** Safari died here ***
      } // end if
    } // end for

    finalContent += "</ol>";
    document.getElementById("titlesCol" + (i + 1)).innerHTML = finalContent;
  } // end for

} // end showMovieTitles

/**
 * used: /reviews/
 */
function getReviewContent() {
  var records = xmlDocs[0].responseXML.getElementsByTagName("review");
  var starsContainer;
  var currNode;

  // construct text fields having no anchors
  document.getElementById("title").innerHTML = "<a href=\"" + records[0].getElementsByTagName("url")[0].firstChild.nodeValue + "\" target=\"_blank\">" + records[0].getElementsByTagName("title")[0].firstChild.nodeValue + "</a>";
  document.getElementById("format").innerHTML = records[0].getElementsByTagName("format")[0].firstChild.nodeValue;
  document.getElementById("revDate").innerHTML = records[0].getElementsByTagName("revDate")[0].firstChild.nodeValue;
  document.getElementById("comment").innerHTML = records[0].getElementsByTagName("comment")[0].firstChild.nodeValue;

  // construct review text (has anchors)
  for (i=0; i < records[0].getElementsByTagName("text")[0].childNodes.length; i++) {
    currNode = records[0].getElementsByTagName("text")[0].childNodes[i];
    if (currNode.nodeName == "i") {
      document.getElementById("text").innerHTML += "<i>" + currNode.firstChild.nodeValue + "</i>";
    } else if (currNode.nodeName == "br") {
      document.getElementById("text").innerHTML += "<br>";
    } else if (currNode.nodeName == "a") {
      document.getElementById("text").innerHTML += "<a href=\"" + currNode.childNodes[1].firstChild.nodeValue + "\" target=\"blank\">" + currNode.firstChild.nodeValue + "</a>";
    } else {
      document.getElementById("text").innerHTML += currNode.nodeValue;
    }
  }
  
  // construct "why seen" (has anchors)
  for (i=0; i < records[0].getElementsByTagName("whySeen")[0].childNodes.length; i++) {
    currNode = records[0].getElementsByTagName("whySeen")[0].childNodes[i];
    if (currNode.nodeName == "i") {
      document.getElementById("whySeen").innerHTML += "<i>" + currNode.firstChild.nodeValue + "</i>";
    } else if (currNode.nodeName == "br") {
      document.getElementById("whySeen").innerHTML += "<br>";
    } else if (currNode.nodeName == "a") {
      document.getElementById("whySeen").innerHTML += "<a href=\"" + currNode.childNodes[1].firstChild.nodeValue + "\" target=\"blank\">" + currNode.firstChild.nodeValue + "</a>";
    } else {
      document.getElementById("whySeen").innerHTML += currNode.nodeValue;
    }
  }

  // construct stars
  var numberStars = parseInt(records[0].getElementsByTagName("stars")[0].firstChild.nodeValue);
  var finalStarsCont = "";
  
  // write whole stars
  for (i=0; i < numberStars; i++) {
    elem = document.createElement("img");
    elem.setAttribute("src", star.src);
    elem.setAttribute("width", star.width);
    elem.setAttribute("height", star.height);
    starsContainer = document.getElementById("stars");
    starsContainer.appendChild(elem); 
  }
  
  // write half star
  if (parseFloat(records[0].getElementsByTagName("stars")[0].firstChild.nodeValue) > numberStars) {
    elem = document.createElement("img");
    elem.setAttribute("src", starHalf.src);
    elem.setAttribute("width", starHalf.width);
    elem.setAttribute("height", starHalf.height);
    starsContainer = document.getElementById("stars");
    starsContainer.appendChild(elem);
  }
  
  writeReviewFooter();
} // end getReviewContent

/**
 * used: /reviews/, /timeline/
 */
function attemptShowContent() {

  for (var i = 0; i < xmlDocs.length; i++) {
    if (xmlDocs[i].readyState == 4) {
      if (xmlDocs[i].status == 200) {
        xmlDocLoaded[i] = true;
      } else {
        document.getElementById(errMsgDest).innerHTML = "Movie data cannot be retrieved:<br>HTTP error code: " + xmlDocs[i].status + "<br>Server error message: " + xmlDocs[i].statusText;
      } // end if
    } // end if
  } // end for

  if (xmlDocs.length < 2) {
    if (xmlDocLoaded[0]) {
      getReviewContent();
    }
  } else {
    if (xmlDocLoaded[0] && xmlDocLoaded[1]) {
      showMovieTitles();
    }
  } // end if

} // end attemptShowContent


/**
 * used: /reviews/, /timeline/
 */
function prepXMLDocs(xmlDocPaths) {
  xmlDocs = new Array();

  // Mac IE -- XML not supported
  if (navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0) {
    return false;
  }
  
  if (window.XMLHttpRequest) {

    // for Mozilla & Safari
    for (var i = 0; i < xmlDocPaths.length; i++) {
      xmlDocs[i] = new XMLHttpRequest();
      xmlDocs[i].onreadystatechange = attemptShowContent;
      xmlDocs[i].open("GET", xmlDocPaths[i], true);
      xmlDocs[i].send(null); // null param is REQUIRED in Mozilla
    } // end for
    return true;

  } else if (window.ActiveXObject) {

    // IE
    for (var i = 0; i < xmlDocPaths.length; i++) {
      xmlDocs[i] = new ActiveXObject("Microsoft.XMLHTTP");
      xmlDocs[i].onreadystatechange = attemptShowContent;
      xmlDocs[i].open("GET", xmlDocPaths[i], true);
      xmlDocs[i].send();
    } // end for
    return true;

  } else {

    // No client-side XML support
    return false;

  }// end if

} // end prepXMLDocs

/**
 * used: /reviews/, /timeline/
 */
function initXML(xmlFile, code) {
  xmlDocPaths = new Array();

  if (code == 1 || code == 2) {
    // timeline movie titles requested
    xmlDocPaths[0] = "copy/" + xmlFile + "_1_50.xml";
    xmlDocPaths[1] = "copy/" + xmlFile + "_51_100.xml";
    errMsgDest = "titlesCol1";
  } else {
    // review or completely-named XML file requested
    xmlDocPaths[0] = xmlFile;
    errMsgDest = "text";
  } // end if

  if (!prepXMLDocs(xmlDocPaths)) {
    document.getElementById(errMsgDest).innerHTML = "Movie lists and reviews require a browser with JavaScript XML support, such as PC IE 5+, Mozilla 1.6+, or Safari 1.2+.\nPlease try loading this page on a supported browser.";
  } // end if
} // end initXML

/* --- end XML --- */

/**
 * used: /main/
 */
function goSearch() {
  if (document.getElementById("searchText").value == "") {
    alert("Please enter a valid movie title to search for.");
    document.getElementById("searchText").value = "";
    document.getElementById("searchText").focus();
  } else {
    location.href = "/search/index.shtml?" + encodeURI(document.getElementById("searchText").value);
  }
} // end goSearch

/**
 * used: all
 */
function fixMozillaPadding() {
  if (navigator.userAgent.indexOf("MSIE") == -1) {
    var filmCells = document.getElementsByTagName("div");
    for (var i = 0; i < filmCells.length; i++) {
      if (filmCells[i].className == "filmCell") {
        filmCells[i].style.width = 150;
      } // end if
    } // end for
  } // end if
} // end fixMozillaPadding

window.onerror = function() { return true; }
initGlobals();
