//アマゾン　Kitchen　用 ブラウズ　( disp_n で表示広告数を決める）

//グローバル変数の定義
var httpObj;              // HTTP通信用オブジェクト
var timerId;              // HTTP通信用タイマーオブジェクト
var timeout_sec;          // HTTP通信タイムアウト秒数

// アマゾンアクセス用引数
var index_item='Kitchen';  // 商品種類
var index_data='Medium'; // ResponseGroup 商品情報
var browse_list;           // browse ID
var disp_n;           　// 広告表示数

// アマゾン用ソート種類リスト
var sort_list = new Array();          //ボタンごとのSortSearchの定義
sort_list['search1'] = 'salesrank';  //売り上げ順
//新製品順'-release-date'
sort_list['search3'] = 'price';         //安い順


// xmlファイルからHTLMに書き込み表示
function dispXmlElement(xml) {
    // 記事要素のリストを抽出する
    var items = xml.getElementsByTagName('Item');
    // 記事要素の内容を解析する
    var displayframe = document.getElementById('displayframe');
    var itemframe = document.getElementById('itemframe');
    for (i=0; i<disp_n; i++) {  //ファイルの広告数は items.length
        // ページURL
        var DetailPageURL = items[i].getElementsByTagName('DetailPageURL')[0];
        var page_url = DetailPageURL.firstChild.nodeValue;
        // 画像
        var SmallImages = items[i].getElementsByTagName('SmallImage');
        var image_url = '';
          if(SmallImages.length > 0) {
               if(SmallImages[0].getElementsByTagName('URL').length > 0) {
                 SmallImageURL = SmallImages[0].getElementsByTagName('URL')[0];
                 image_url = SmallImageURL.firstChild.nodeValue;
             }
         }
        // ItemAttributesノードの参照
        var ItemAttributes = items[i].getElementsByTagName('ItemAttributes')[0];
        // 販売者
         var item_publisher = ''; //Publisherが無い場合
        	if(ItemAttributes.getElementsByTagName('Publisher')[0]) {//Publisherがある場合
        var Publisher = ItemAttributes.getElementsByTagName('Publisher')[0];
         item_publisher = Publisher.firstChild.nodeValue;
        	}//Publisher社ある場合終わり
        // 商品名
        var Title = ItemAttributes.getElementsByTagName('Title')[0];
        var item_title = Title.firstChild.nodeValue;

        // OfferSummaryノードの参照
        var OfferSummary = items[i].getElementsByTagName('OfferSummary')[0];
        // 価格
         var price = ''; //FormattedPriceが無い場合
        	if(OfferSummary.getElementsByTagName('FormattedPrice')[0]) {//FormattedPriceがある場合
        var FormattedPrice =  OfferSummary.getElementsByTagName('FormattedPrice')[0];
         price = FormattedPrice.firstChild.nodeValue;
        	}//FormattedPriceある場合終わり
        	
        // EditorialReviewsノードの参照　EditorialReview
        var editorial = ''; //EditorialReviewが無い場合
        if(items[i].getElementsByTagName('EditorialReviews')[0]) {
        // EditorialReviewsがある場合
        	var EditorialReviews = items[i].getElementsByTagName('EditorialReviews')[0];
        // 解説
        if(EditorialReviews.getElementsByTagName('EditorialReview')[0]) { //EditorialReviewがある場合
        var EditorialReview  =  EditorialReviews.getElementsByTagName('EditorialReview')[0];
         editorial = EditorialReview.firstChild.nodeValue;
        	}//EditorialReviewある場合終わり
        //EditorialReviewの文字数制限
        if(editorial.length>49){
        	editorial = editorial.slice(0,49) + '・・・'
        }
        }
        // テンプレートとなるタグ要素を複製
        var new_itemframe = itemframe.cloneNode(true);
        new_itemframe.removeAttribute('id');
        new_itemframe.id = 'item' + i;
        // 書籍情報をタグに格納する
        var divs = new_itemframe.getElementsByTagName('div');
        
        divs[0].innerHTML = (i+1) + '.' + '<a href="' + page_url + '" target="_blank">' + item_title + '</a>'; //(i+1)は、ランキング表示
        
        if(image_url != '') {
            var image_tag = '';
            image_tag += '<a href="' + page_url + '" target="_blank">';
            image_tag += '<img src="' + image_url + '" border="0" />';
            image_tag += '</a>';
        	divs[1].innerHTML = image_tag;
        }
        
        divs[2].innerHTML = 'メーカー：' + item_publisher;
        divs[3].innerHTML = '価格：' + price;
        divs[4].innerHTML = '解説：' + editorial;
        // 生成したタグ要素をドキュメントに追加し表示する
        displayframe.appendChild(new_itemframe);
        new_itemframe.style.display = 'block';
    }
}

function loadXml(e) {
    // 押されたラジオボタンを特定し、その参照を取得する
    var search = getTargetNode(e);
    // 読み取るべきSortIndexを決定する
    var target_sort = sort_list[search.id];
    // browse ID を指定する
    var target_browse = browse_list;
    // 現在表示されている情報を削除する
    var displayframe = document.getElementById('displayframe');
    while(displayframe.lastChild) {
        displayframe.removeChild(displayframe.lastChild);
    }
    // リクエスト先のCGI URLを決定する
    var target_url = '../amazon/amazon_ecs.cgi?browse=' + target_browse + '&sort_id=' + target_sort + '&index_item=' + index_item + '&index_data=' + index_data;
    // XMLをHTTP通信で取得
	timeout_sec = 10;
    httpXmlRequest(target_url, 'GET', '', dispXmlElement, httpError);
    // バブリングとデフォルトイベントアクションの停止
    stopDefaultAndPropagation(e);
    return false;
}

function httpError(error) {
    alert(error);
}


// 引数に与えられたURLにHTTPリクエストを行ない、Xlmファイルを取得する
function httpXmlRequest(target_url, method, data, success_func, error_func) {
    try {
        if(window.XMLHttpRequest) {
            httpObj = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            httpObj = false;
        }
    } catch(e) {
        httpObj = false;
    }
    if(! httpObj) {
        httpObjGenerateFail();
    }
    timerId = setInterval('timeoutCheck()', 1000);
    httpObj.open(method, target_url, true);
    httpObj.onreadystatechange = function() {
        if (httpObj.readyState == 4) {
            clearInterval(timerId);
            if (httpObj.status == 200) {
                success_func(httpObj.responseXML);
            } else {
                error_func(httpObj.status + ' : ' + httpObj.statusText);
                return false;
            }
        }
    }
    httpObj.send(data);
}

// HTTPタイムアウト処理
function timeoutCheck() {
    timeout_sec --;
    if(timeout_sec <= 0) {
        // タイマーをストップする
        clearInterval(timerId);
        // HTTPリクエストを中断する
        httpObj.abort();
        // エラーダイアログを表示
        alert('タイムアウトです。');
        return false;
    }
}

// ★XMLHttpRequestオブジェクト生成に失敗した場合の処理
function httpObjGenerateFail() {
    alert('ご利用のブラウザーでは、当サイトをご利用頂けません。');
    return false;
}

// バブリングとデフォルトイベントアクションの停止
function stopDefaultAndPropagation(e) {
    // バブリング停止
    if(e.stopPropagation) {
        e.stopPropagation();
    }
    if(window.event) {
        window.event.cancelBubble = true;
    }
    // デフォルトイベントアクションを停止する
    if(e.preventDefault) {
        e.preventDefault();
    }
    if(window.event) {
        window.event.returnValue = false;
    }
}

function getTargetNode(e) {
    // 対象要素の参照を取得
    var target_node;
    if(e.target) {
      target_node = e.target;
    } else {
      target_node = e.srcElement;
    }
    // Safari対策
    if (target_node.nodeType == 3) {
        target_node = target_node.parentNode;
    }
    return target_node;
}


// load時の処理
function setListeners(e) {
    //browse ID読み込み
    browse_list = document.getElementById('brows_list').firstChild.nodeValue;
    //disp_n 表示広告数読み込み
    disp_n = document.getElementById('disp_n').firstChild.nodeValue;
    
    // ラジオボタン要素にmouseupイベントリスナーをセット
    var search1 = document.getElementById('search1');
    var search3 = document.getElementById('search3');
    addListener(search1, 'mouseup', loadXml, false);
    addListener(search3, 'mouseup', loadXml, false);
    // リクエスト先のCGI URLを決定する
    var target_url = '../amazon/amazon_ecs.cgi?browse=' + browse_list + '&sort_id=' + sort_list['search1'] + '&index_item=' + index_item + '&index_data=' + index_data;
    // XMLをHTTP通信で取得
	timeout_sec = 10;
    httpXmlRequest(target_url, 'GET', '', dispXmlElement, httpError);
}

// イベントリスナー登録
function addListener(elem, eventType, func, cap) {
    if(elem.addEventListener) {
        elem.addEventListener(eventType, func, cap);
    } else if(elem.attachEvent) {
        elem.attachEvent('on' + eventType, func);
    } else {
        alert('ご利用のブラウザーはサポートされていません。');
        return false;
    }
}

// load時のイベントリスナーをセットする
addListener(window, 'load', setListeners, false);

