var amazonAssociateId = "bk256-1-22";
var amazonItemsPath = "/amazon-ad.txt";
var amazonElementId = "amazon-ad";
var amazonNoImageAvailableURL =
  "http://images-jp.amazon.com/images/G/09/icons/books/comingsoon_books.gif";

function createXMLHttpRequest() {
  if (this.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else {
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
}

function readAmazonItems(text) {
  var lines = text.split("\n");
  var items = [];
  for (var i = 0; i < lines.length; i++) {
    if (lines[i].charAt(0) == "#") {
      continue;
    }
    var item = lines[i].split("\t")[0];
    if (item != "") {
      items.push(item);
    }
  }
  return items;
}

function makeAmazonLink(asin) {
  var url = "http://www.amazon.co.jp/exec/obidos/ASIN/" + asin + "/" +
    amazonAssociateId + "/ref=nosim";
  return '<a href="' + url + '">' + '<img id="amazon-ad-image"></a>';
}

function replaceImage(asin) {
  var adImage = document.getElementById("amazon-ad-image");
  if (adImage == null) {  // Shouldn't happen, though.
    return;
  }
  // Workaround for the 01/09 issue.
  adImage.onload = function() {
    if (adImage.width == 1) {  // The loaded image is bogus.
      if (adImage.src.match(/\.09\./)) {
        // If 09's image is bogus, try again with 01.
        adImage.src = "http://images-jp.amazon.com/images/P/" +
        asin + ".01.MZZZZZZZ.jpg";
      } else if (adImage.src.match(/\.01\./)) {
        // If 01's image is also bogus, we give up.
        adImage.src = amazonNoImageAvailableURL;
      }
    }
  }
  // First try with 09's image.
  adImage.src = "http://images-jp.amazon.com/images/P/" + asin +
    ".09.MZZZZZZZ.jpg";
}

function chooseItem(items) {
  var i = Math.floor(Math.random() * items.length);
  return items[i];
}

function setAsyncAmazonAd() {
  req = createXMLHttpRequest();
  req.open("GET", amazonItemsPath, true);
  req.onreadystatechange = function() {
    if (req.readyState == 4 && req.status == 200) {
      var element = document.getElementById(amazonElementId);
      var items = readAmazonItems(req.responseText);
      var asin = chooseItem(items);
      element.innerHTML = makeAmazonLink(asin);
      replaceImage(asin);
    }
  }
  req.send(null);
}

setAsyncAmazonAd();
