var AMAZON = {
 "startItemId": "4054017622",
 "amazonBaseURL": "http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=1YWFBYWQJT2CPH4N6C02&AssociateTag=thepagenameri-22",
 "putItemId": {},
 "putItemCount": 0,
 "maxPutItemCount": 20,
 "addedItemId": {},
 "addedItemCount": 0,
 "maxAddedItemCount": 50,
 "depth": 1,
 "searchMode": "",
 "cartId": "",
 "HMAC": "",
 "URLEncodedHMAC": "",
 "PurchaseURL": "",
 "cartSubTotal": "",
 "cartItemId": {},
 "waitMessage": "金額なんて気にするな<br /><img src=\"img/ajax-loader.gif\" alt=\"\" />",
 "finishHideItem": true,
 "timer": {},
 "timerInterval": 300,
 "amazonSimilarityLookup": function(asin, callback) {
  var url = [
   this.amazonBaseURL,
   "Operation=SimilarityLookup",
   "ResponseGroup=Medium",
   "ItemId=" + asin
  ].join("&");
  url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=" + callback;
  this.appendScript(url);
 },
 "amazonItemSearch": function(keyword, searchIndex, callback) {
  var url = [
   this.amazonBaseURL,
   "Operation=ItemSearch",
   "ResponseGroup=Medium",
   "Keywords=" + keyword,
   "SearchIndex=" + searchIndex
  ].join("&");
  url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=" + callback;
  this.appendScript(url);
 },
 "amazonBrowseNodeLookup": function(nodeValue, callback) {
  var url = [
   this.amazonBaseURL,
   "Operation=BrowseNodeLookup",
   "ResponseGroup=TopSellers",
   "BrowseNodeId=" + nodeValue
  ].join("&");
  url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=" + callback;
  this.appendScript(url);
 },
 "amazonItemLookupArray": function(json) {
  json = eval(json);
  var topSeller = json.BrowseNodes.BrowseNode.TopSellers.TopSeller;
  for (var i = 0; i < topSeller.length; i++) {
   var url = [
    this.amazonBaseURL,
    "Operation=ItemLookup",
    "ResponseGroup=Medium",
    "ItemId=" + topSeller[i].ASIN
   ].join("&");
   url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.putItems";
   this.appendScript(url);
  }
 },
 "amazonItemLookup": function(asin) {
  var url = [
   this.amazonBaseURL,
   "Operation=ItemLookup",
   "ResponseGroup=Medium",
   "ItemId=" + asin
  ].join("&");
  url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.putItems";
  this.appendScript(url);
 },
 "showSimilarItems": function(asin) {
  this.amazonSimilarityLookup(asin, "AMAZON.putItemsRecursive");
 },
 "putAnItem": function(item) {
  if (this.putItemId[item.ASIN] == undefined) {
   this.putItemCount++;
   this.putItemId[item.ASIN] = true;

   var book = document.createElement("div");
   book.className = "item";
   book.id = "item_" + item.ASIN;

   var img = document.createElement("img");
   if (item.MediumImage != undefined) {
    img.src = item.MediumImage.URL;
   }
   else if (item.SmallImage != undefined) {
    img.src = item.SmallImage.URL;
   } else {
    img = document.createElement("span");
    img.appendChild(document.createTextNode(item.ItemAttributes.Title));
    book.style.width = '130px';
   }
   img.border = 0;
   img.id = "image_" + item.ASIN;
   img.style.cursor = "pointer";

   var link2 = document.createElement("a");
   //link2.id = "link_" + item.ASIN;
   //link2.href = item.ASIN;
   link2.title = item.ItemAttributes.Title;
   link2.appendChild(img);

   book.appendChild(link2);

   var checkBox = document.createElement("input");
   checkBox.type = "checkbox";
   checkBox.id = "check_" + item.ASIN;
   if (this.addedItemId[item.ASIN]) {
    checkBox.checked = true;
   }

   var link1 = document.createElement("a");
   link1.href = item.DetailPageURL;
   link1.title = "Amazonで見る";
   link1.target = "_blank";
   link1.appendChild(document.createTextNode("Amazonで見る"));

   var p1 = document.createElement("p");
   p1.appendChild(checkBox);
   p1.appendChild(document.createTextNode(" "));
   p1.appendChild(link1);
   book.appendChild(p1);

   var price = document.createElement("span");
   if (item.OfferSummary.LowestNewPrice != undefined) {
    price.appendChild(document.createTextNode(item.OfferSummary.LowestNewPrice.FormattedPrice));
   }
   else if (item.ItemAttributes.ListPrice != undefined) {
    price.appendChild(document.createTextNode(item.ItemAttributes.ListPrice.FormattedPrice));
   }

   var p2 = document.createElement("p");
   p2.appendChild(price);
   book.appendChild(p2);

   $("container").appendChild(book);
  }
  //$("loading-image").style.display = 'none';
 },
 "putItems": function(json) {
  $("purchase").disabled = true;
  json = eval(json);
  if (json.Items.Item == undefined && this.searchMode == "ItemSearch") {
   alert("該当する商品は見当たりません");
   return;
  }
  if (json.Items.Item.length) {
   var count = json.Items.Item.length;
   for (var i = 0; i < count && this.putItemCount < this.maxPutItemCount; i++) {
    var item = json.Items.Item[i];
    this.putAnItem(item);
   }
  } else {
   var item = json.Items.Item;
   this.putAnItem(item);
  }
  $("purchase").disabled = false;
 },
 "putItemsRecursive": function(json) {
  json = eval(json);
  this.depth++;
  var count = json.Items.Item.length;
  for (var i = 0; i < count; i++) {
   var item = json.Items.Item[i];
   if (this.depth < 2) {
    this.amazonSimilarityLookup(item.ASIN, "AMAZON.putItemsRecursive");
   } else {
    this.amazonSimilarityLookup(item.ASIN, "AMAZON.putItems");
   }
  }
 },
 /**
  * Cart Operation
  */
 "getCartInfo": function(json) {
  json = eval(json);
  this.cartId = json.Cart.CartId;
  this.HMAC = json.Cart.HMAC;
  this.URLEncodedHMAC = json.Cart.URLEncodedHMAC;
  if (json.Cart.CartItems != undefined) {
   if (json.Cart.CartItems.CartItem.length != undefined) {
    this.addedItemCount = json.Cart.CartItems.CartItem.length;
    for (var i in json.Cart.CartItems.CartItem) {
     var cartItem = json.Cart.CartItems.CartItem[i];
     this.cartItemId[cartItem.ASIN] = cartItem.CartItemId;
    }
   } else {
    this.addedItemCount = 1;
    this.cartItemId[json.Cart.CartItems.CartItem.ASIN] = json.Cart.CartItems.CartItem.CartItemId;
   }
  }
  if (json.Cart.PurchaseURL != undefined) {
   this.PurchaseURL = json.Cart.PurchaseURL;
   $("go-amazon").href = this.PurchaseURL;
  }
  if (json.Cart.SubTotal != undefined) {
   this.cartSubTotal = json.Cart.SubTotal.FormattedPrice;
   $("subtotal").innerHTML = this.cartSubTotal;
  } else {
   $("subtotal").innerHTML = "￥ 0";
  }
  if (this.addedItemCount > 0) {
   $("go-amazon").style.display = 'inline';
  } else {
   $("go-amazon").style.display = 'none';
   $("purchase").disabled = false;
  }
  $("itemnum").innerHTML = this.addedItemCount;
  $("process_message").innerHTML = "";
  AMAZON.timer = setInterval(function(){AMAZON.checkAddedItem();}, AMAZON.timerInterval);
 },
 "cartCreate": function(asin) {
  /* カートが作られているなら CartAdd へ */
  if (this.cartId != "") {
   AMAZON.cartAdd(false);
  } else {
   if (!asin) {
    /* 全アイテム */
    $("purchase").disabled = true;
    var itemQuery = [];
    var i = 1;
    var preAddedItemCount = this.addedItemCount;
    var preAddedItemId = this.addedItemId;
    for (var id in this.putItemId) {
     $("check_" + id).checked = true;
     itemQuery[i - 1] = "Item." + i + ".ASIN=" + id + "&Item." + i + ".Quantity=1";
     this.addedItemId[id] = true;
     this.addedItemCount++;
     i++;
    }
    if (this.addedItemCount > this.maxAddedItemCount) {
     this.addedItemCount = preAddedItemCount;
     this.addedItemId = preAddedItemId;
     for (var id in this.putItemId) {
      $("check_" + id).checked = false;
     }
     alert("カートの商品数は50個までです。Amazonのカートに移せば空になります。");
     $("process_message").innerHTML = "";
    } else {
     var url = [
      this.amazonBaseURL,
      "Operation=CartCreate",
      itemQuery.join("&")
     ].join("&");
     url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.getCartInfo&usecache=0";
     this.appendScript(url);
     $("process_message").innerHTML = this.waitMessage;
    }
   } else {
    /* 単一アイテム */
    this.addedItemId[asin] = true;
    this.addedItemCount++;
    if (this.addedItemCount > this.maxAddedItemCount) {
     this.addedItemCount--;
     this.addedItemId[asin] = false;
     $("check_" + asin).checked = false;
     alert("カートの商品数は50個までです。Amazonのカートに移せば空になります。");
     $("process_message").innerHTML = "";
    } else {
     var url = [
      this.amazonBaseURL,
      "Operation=CartCreate",
      "Item." + 1 + ".ASIN=" + asin + "&Item." + 1 + ".Quantity=1"
     ].join("&");
     url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.getCartInfo&usecache=0";
     this.appendScript(url);
     $("process_message").innerHTML = this.waitMessage;
    }
   }
   //this.debug(url);
  }
 },
 "cartAdd": function(asin) {
  var url = "";
  if (!asin) {
   var itemQuery = [];
   var i = 1;
   var nowAddedItem = {}
   for (var id in this.putItemId) {
    if (!$("check_" + id).checked) {
     $("check_" + id).checked = true;
     itemQuery[i - 1] = "Item." + i + ".ASIN=" + id + "&Item." + i + ".Quantity=" + 1;
     this.addedItemId[id] = true;
     nowAddedItem[id] = true;
     this.addedItemCount++;
     i++;
    }
   }
   if (i == 1) {
    return;
   }
   if (this.addedItemCount > this.maxAddedItemCount) {
    for (var id in nowAddedItem) {
     this.addedItemCount--;
     this.addedItemId[id] = false;
     $("check_" + id).checked = false;
    }
    alert("カートの商品数は50個までです。Amazonのカートに移せば空になります。");
    $("process_message").innerHTML = "";
   } else {
    url = [
     this.amazonBaseURL,
     "Operation=CartAdd",
     itemQuery.join("&"),
     "CartId=" + this.cartId,
     "HMAC=" + this.URLEncodedHMAC
    ].join("&");
    //this.debug(url);
    url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.getCartInfo&usecache=0";
    this.appendScript(url);
    $("process_message").innerHTML = this.waitMessage;
   }
  } else {
   $("check_" + asin).checked = true;
   this.addedItemId[asin] = true;
   this.addedItemCount++;
   if (this.addedItemCount > this.maxAddedItemCount) {
    this.addedItemCount--;
    this.addedItemId[asin] = false;
    $("check_" + asin).checked = false;
    alert("カートの商品数は50個までです。Amazonのカートに移せば空になります。");
    $("process_message").innerHTML = "";
   } else {
    url = [
     this.amazonBaseURL,
     "Operation=CartAdd",
     "Item.1.ASIN=" + asin + "&Item.1.Quantity=1",
     "CartId=" + this.cartId,
     "HMAC=" + this.URLEncodedHMAC
    ].join("&");
    //this.debug(url);
    url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.getCartInfo&usecache=0";
    this.appendScript(url);
    $("process_message").innerHTML = this.waitMessage;
   }
  }
 },
 "cartModify": function(asin) {
  var url = "";
  if (this.cartId == "") {
   this.cartCreate(asin);
  } else {
   if (!this.addedItemId[asin]) {
    /* add item */
    this.cartAdd(asin);
   } else {
    /* remove item */
    this.addedItemId[asin] = false;
    this.addedItemCount--;
    url = [
     this.amazonBaseURL,
     "Operation=CartModify",
     "Item.1.CartItemId=" + this.cartItemId[asin] + "&Item.1.Quantity=0",
     "CartId=" + this.cartId,
     "HMAC=" + this.URLEncodedHMAC
    ].join("&");
   }
   //this.debug(url);
   url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.getCartInfo&usecache=0";
   this.appendScript(url);
   $("process_message").innerHTML = this.waitMessage;
  }
 },
 "cartClear": function() {
  if (this.cartId == "") {
   return;
  } else {
   this.addedItemCount = 0;
   this.addedItemId = {};
   for (var id in this.putItemId) {
    $("check_" + id).checked = false;
   }
   var url = [
    this.amazonBaseURL,
    "Operation=CartClear",
    "CartId=" + this.cartId,
    "HMAC=" + this.URLEncodedHMAC
   ].join("&");
   url = "http://api.fkoji.com/xml_to_json.php?url=" + encodeURIComponent(url) + "&callback=AMAZON.getCartInfo&usecache=0";
   this.appendScript(url);
   $("process_message").innerHTML = this.waitMessage;
  }
 },
 "init": function(asin) {
  this.initialize("SimilaritySearch", "");
  if (asin == undefined) {
   asin = this.startItemId;
  }
  this.showSimilarItems(asin);
 },
 "initialize": function(mode, asin) {
  this.putItemId = {};
  this.putItemCount = 0;
  if (asin != "") {
   this.putItemId[asin] = true;
   this.putItemCount = 1;
  }
  this.searchMode = mode;
  this.depth = 1;
  var item = document.getElementsByTagName("div");
  for (var i = 0; i < item.length; i++) {
   if (item[i].className == "item") {
    if (asin == "" || item[i].id != 'item_' + asin) {
     AMAZON.hideItem(item[i]);
    }
   }
  }
 },
 "hideItem": function(elem) {
  Effect.Fade(elem, {"duration":2.0, "afterFinishInternal": function(){document.getElementById("container").removeChild(elem);}});
 },
 "clickObserver": function(event) {
  event = event || window.event;
  var target = event.target || event.srcElement;
  if (target.id) {
   if (target.id.match(/^image_([0-9a-zA-Z]+)$/)) {
    var asin = RegExp.$1;
    AMAZON.initialize("ItemSearch", asin);
    AMAZON.showSimilarItems(asin);
   }
   else if (target.id.match(/^check_([0-9a-zA-Z]+)$/)) {
    clearInterval(AMAZON.timer);
    var asin = RegExp.$1;
    AMAZON.cartModify(asin);
   }
   else if (target.id == "show-cart-item") {
    AMAZON.initialize("ItemLookup", "");
    for (var id in AMAZON.addedItemId) {
     if (AMAZON.addedItemId[id])
      AMAZON.amazonItemLookup(id);
    }
   }
   else if (target.id == "search") {
    AMAZON.initialize("ItemSearch", "");
    AMAZON.amazonItemSearch(document.f.q.value, document.f.i[document.f.i.selectedIndex].value, "AMAZON.putItems");
   }
   else if (target.id == "top-sellers") {
    AMAZON.initialize("BrowseNodeLookup", "");
    var index = document.f.i[document.f.i.selectedIndex].value;
    var nodeValue = "";
    switch (index) {
     case "Books": nodeValue = "465392"; break;
     case "ForeignBooks": nodeValue="52033011"; break;
     case "DVD": nodeValue="561958"; break;
     case "Music": nodeValue="561956"; break;
     case "Classical": nodeValue="701040"; break;
     case "VideoGames": nodeValue="637394"; break;
     case "Electronics": nodeValue="3210981"; break;
     case "Software": nodeValue="637392"; break;
     case "Toys": nodeValue="13299531"; break;
     case "Hobbies": nodeValue="13321861"; break;
     case "Kitchen": nodeValue="3828871"; break;
     case "HealthPersonalCare": nodeValue="160384011"; break;
     case "SportingGoods": nodeValue="14304371"; break;
     default: break;
    }
    AMAZON.amazonBrowseNodeLookup(nodeValue, "AMAZON.amazonItemLookupArray");
   }
   else if (target.id == "go-amazon") {
    target.style.display = "none";
    var input = document.getElementsByTagName("input");
    for (var i in input) {
     if (input[i].type == "checkbox") {
      input[i].checked = false;
     }
    }
   }
   else if (target.id == "help") {
    $("help-container").style.display = 'block';
   }
   else if (target.id == "help-close") {
    $("help-container").style.display = 'none';
   }
  }
 },
 "checkAddedItem": function() {
  for (var i in this.addedItemId) {
   if (this.addedItemId[i] && $("check_" + i)) {
    $("check_" + i).checked = true;
   }
  }
 },
 "appendScript": function(src) {
  var script = document.createElement("script");
  script.src = src;
  script.charset = "UTF-8";
  script.type = "text/javascript";
  document.lastChild.appendChild(script);
 },
 "debug": function(str) {
  var input = document.createElement("input");
  input.type = "text";
  input.value = str;
  document.getElementsByTagName("body")[0].appendChild(input);
 }
}

AMAZON.timer = setInterval(function(){AMAZON.checkAddedItem();}, AMAZON.timerInterval);