/* JavaScriptサンプル */

function getSignature(){
  var str_imestamp = getISO8601Timestamp();
  var access_key = document.getElementById("access_key").value;
  var secret_key = document.getElementById("secret_key").value;
  var keyword = document.getElementById("keyword").value;
  var associate_tag = document.getElementById("associate_tag").value;
  var item_page = document.getElementById("item_page").value;

  var url = "xml-jp.amznxslt.com";

  var category_books = document.getElementById("category_books").checked;
  var category_all = document.getElementById("category_all").checked;
  var category = "";
  if (category_books == true){
    category = "Books";
  }else if (category_all == true){
    category = "All";
  }

  var para = {
    "Service":"AWSECommerceService",
    "AWSAccessKeyId":access_key,
    "Operation":"ItemSearch",
    "ResponseGroup":"Large",
    "Keywords":keyword,
    "AssociateTag":associate_tag,
    "ItemPage":item_page,
    "SearchIndex":category,
    "Version":"2009-07-01",
    "ContentType":"text/html",
    "Style":"http://www.ajaxtower.jp/amadoc/xml/amadoc.xsl",
    "Timestamp":str_imestamp
  };

  var para_array = [];

  for(var pname in para){
    var tmp = encodeURIComponent(para[pname]);
    tmp = tmp.replace("(", "%28");
    tmp = tmp.replace(")", "%29");
    tmp = tmp.replace("!", "%21");
    para_array.push(pname + "=" + tmp);
  }

  para_array.sort();

  var str_para = para_array.join('&');
  var str_signature = "GET" + "\n" + url + "\n" + "/onca/xml" + "\n" + str_para;

  HMAC_SHA256_init(secret_key);
  HMAC_SHA256_write(str_signature);
  var array_hash = HMAC_SHA256_finalize();

  var str_hash = "";
  for (var i = 0; i < array_hash.length; i++) {
    str_hash += String.fromCharCode(array_hash[i]);
  }

  var signature = Base64.encode(str_hash);
  var para_signature = "&Signature=" + encodeURIComponent(signature);

  location.href = "http://" + url + "/onca/xml?" + str_para + para_signature;
}

function getISO8601Timestamp(){
  var d = new Date();

  var ye = d.getUTCFullYear();
  var mo = zeroPlus(d.getUTCMonth() + 1);
  var da = zeroPlus(d.getUTCDate());
  var ho = zeroPlus(d.getUTCHours());
  var mi = zeroPlus(d.getUTCMinutes());
  var se = zeroPlus(d.getUTCSeconds());

  return ye + "-" + mo + "-" + da + "T" + ho + ":" + mi + ":" + se + "Z";
}

function zeroPlus(value){
  return ("0" + value).slice(-2);
}

