// ----------------------------------------------
// for XmlHttpRequest
// ----------------------------------------------
var req;


function extractItemSearchXML(xml)
{
  var result;
  
  // extract amazon search xml and return HTML DOM tree
  result = createHeader(xml);
  result += createList(xml);
  
  return result;
}

function createHeader(xml)
{
  var i;
  var searchReq = xml.getElementsByTagName('Arguments');
  var args = searchReq[0].childNodes;
  var q, qop, page;
  for (i=0; i<args.length; i++)
  {
    var name = args[i].getAttribute('Name');
    if (name == 'Q')
    {
      q = args[i].getAttribute('Value');
    }
    else if (name == 'Qop')
    {
      qop = args[i].getAttribute('Value');
    }
    else if (name == 'ItemPage')
    {
      page = args[i].getAttribute('Value');
    } 
  }
  
  var totalPage = xml.getElementsByTagName('TotalPages');
  var t = getText(totalPage[0]);

  var result = "<div class=\"resulttitle\">Amazon.co.jp 検索結果: \r\n";
  result += "<select id=\"pageselect\" onchange=\"loadAmazonQueryResult('a.php?q="+q+"&qop="+qop+"&page='+this.value);\">\r\n";
  for (i=1; i<=t; i++)
  {
    if (page != i)
    {
      result += "<option value=\""+i+"\">";
    }
    else
    {
      result += "<option value=\""+i+"\" selected=\"selected\">";
    }
    result += "ページ: "+i+"/"+t;
    result += "</option>\r\n";
  }
  result += "</select>\r\n";
  result += "</div>\r\n";
  return result;
}

function createList(xml)
{
  var i, j;
  var title, artist, imgURL, ASIN, detailURL

  var result = "<div class=\"amazonresult_list\" id=\"awsresult\">";
  result += "<table class=\"jsearch\" cellpadding=\"0\" cellspacing=\"0\">";
  result += "<tbody>";

  var items = xml.getElementsByTagName('Items')[0].childNodes;
  
  for (i=0; i<items.length; i++)
  {
	if (items[i].tagName !== 'Item') continue;
    imgURL = null;
     
	var item = items[i].childNodes;
	for (j=0; j<item.length; j++)
	{
	  var tagName = item[j].tagName;

	  if (tagName == 'DetailPageURL')
	  {
	    detailURL = getText(item[j]);
	  }
	  else if (tagName == 'ImageSets')
	  {
	    imgURL = getSmallImage(item[j]);
	  }
	  else if (tagName == 'ItemAttributes')
	  {
	    artist = findText(item[j], 'Artist');
	    title = findText(item[j], 'Title');
	  }
	  else if (tagName == 'ASIN')
	  {
	    ASIN = getText(item[j]);
	  }
	}

    result += "<tr class=\"item\">";
    result += "<td class=\"image\" valign=\"top\" width=\"70\">";
	if (imgURL == null)
	{
	
	  imgURL = "http://images-jp.amazon.com/images/G/09/icons/music/comingsoon_music.gif";
      result += "<img src=\""+imgURL+"\" border=\"0\"/>";	  
	}    
	else
	{
      result += "<img src=\""+imgURL+"\" border=\"0\" height=\"55\" width=\"55\"/>";
	}
    result += "</td>";
    result += "<td class=\"info\" valign=\"top\" width=\"70%\">";
    result += "<span class=\"title\">"+title+"</span>";
    result += "<br/>";
    result += "<span class=\"artist\">"+artist+"</span>";
    result += "</td>";
    result += "<td class=\"action\" valign=\"top\" align=\"right\" width=\"180\">";
    result += "<span class=\"papercaselink\">";
    result += "<a href=\"index.php?action=jview&amp;asin="+ASIN+"\">";
    result += "<img src=\"resource/createcase.gif\" border=\"0\"/>";
    result += "</a>";
    result += "</span>";
    result += "<br/>";
    result += "<span class=\"detaillink\">";
    result += "<a target=\"_blank\" href=\""+detailURL+"\">";
    result += "<img src=\"resource/seedetail.gif\" border=\"0\"/>";
    result += "</a>";
    result += "</span>";
    result += "</td>";
    result += "</tr>";
   }
   
   result += "</tbody>";
   result += "</table>";
   result += "</div>";

   return result;
}

function getSmallImage(imageSets)
{
  var i;
  
  // node is ImageSets element
  var primaryImageSet = null;
  var children = imageSets.childNodes;
  for (i=0; i<children.length; i++)
  {
    // find primary image
    var tagName = children[i].tagName;
    var category = children[i].getAttribute('Category');
    
	if (tagName == 'ImageSet' && category == 'primary')
	{
      primaryImageSet = children[i];
	}
  }
  
  if (primaryImageSet == null)
  {
    return null;
  }
  
  // find SmallImage
  children = primaryImageSet.childNodes;
  for (i=0; i<children.length; i++)
  {
    // find primary image
    var tagName = children[i].tagName;
	if (tagName == 'SmallImage')
	{
      return findText(children[i], 'URL');
	}
  }
  
  return null;
}

function findText(node, elemName)
{
   if (node.tagName == elemName)
   {
     return getText(node);
   }

   var i;
   var children = node.childNodes;
   for (i=0; i<children.length; i++)
   {
     var result = findText(children[i], elemName);
     if (result != null)
     {
       return result;
     }
   }
   
   return null;
}

function getText(node)
{
  if (node.firstChild.nodeType == 3)
  {
    return node.firstChild.nodeValue;
  }

  return null;
}

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadAmazonQueryResult(url)
{
  
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest)
  {
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send(null);

  // branch for IE/Windows ActiveX version
  }
  else if (window.ActiveXObject)
  {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req)
    {
      req.onreadystatechange = processReqChange;
      req.open("GET", url, true);
      req.send();
    }
  }
}

function processReqChange()
{
  // only if req shows "loaded"
  if (req.readyState == 4)
  {
    // only if "OK"
    if (req.status == 200)
    {
      document.getElementById('amazonresult').innerHTML = extractItemSearchXML(req.responseXML);
//      document.getElementById('amazonresult').innerHTML = req.responseText;
    }
    else
    {
      alert("There was a problem retrieving the XML data:\n" +
            req.statusText);
    }
  }
}


