// 処理連発防止タイマID
var localTimerId;

// 入力値保持用
var Keywords;
var Sort;

var Amazon;
var Rakuten;
var Bidders;
var Storemix;

var SearchIndex;
var Genre;
var Categ;

// フォームエレメント保持用
var KeywordsText;

var SortBestsellingCheck;
var SortNewestCheck;
var SortLowPriceCheck;
var SortHighPriceCheck;

var AmazonCheck;
var RakutenCheck;
var BiddersCheck;
var StoremixCheck;

var SearchIndexCombo;
var GenreCombo;
var CategCombo;

// ショップ名保持用
var ShopName;

// インタラクティヴ表示用divエレメント保持用
var InfoDiv;
var ResultsDiv;
var BookmarksDiv;
var ErrorDiv;

// 初期処理
function init(e) {
    localTimerId = false;
    Keywords     = "";
    Sort         = "";

    Amazon       = false;
    Rakuten      = false;
    Bidders      = false;
    Storemix     = false;

    SearchIndex  = "";
    Genre        = "";
    Categ        = "";

    KeywordsText           = document.getElementById('Keywords');

    SortBestsellingCheck   = document.getElementById('SortBestselling');
    SortNewestCheck        = document.getElementById('SortNewest');
    SortLowPriceCheck      = document.getElementById('SortLowPrice');
    SortHighPriceCheck     = document.getElementById('SortHighPrice');

    AmazonCheck            = document.getElementById('Amazon');
    RakutenCheck           = document.getElementById('Rakuten');
    BiddersCheck           = document.getElementById('Bidders');
    StoremixCheck          = document.getElementById('Storemix');

    SearchIndexCombo       = document.getElementById('SearchIndex');
    GenreCombo             = document.getElementById('Genre');
    CategCombo             = document.getElementById('Categ');

    ShopName               = new Array();
    ShopName["amazon"]     = "アマゾン";
    ShopName["rakuten"]    = "楽天";
    ShopName["bidders"]    = "ビッダーズ";
    ShopName["storemix"]   = "ストアミックス";

    InfoDiv                = new Array();
    ResultsDiv             = new Array();
    BookmarksDiv           = new Array();
    ErrorDiv               = new Array();

    for(shop in ShopName) {
        InfoDiv[shop]      = document.getElementById(shop + 'info');
        ResultsDiv[shop]   = document.getElementById(shop + 'results');
        BookmarksDiv[shop] = document.getElementById(shop + 'bookmarks');
        ErrorDiv[shop]     = document.getElementById(shop + 'error');
    }

    addListener(KeywordsText,         'keyup',  invoke, false);
    addListener(KeywordsText,         'click',  invoke, false);

    addListener(SortBestsellingCheck, 'click',  invoke, false);
    addListener(SortNewestCheck,      'click',  invoke, false);
    addListener(SortLowPriceCheck,    'click',  invoke, false);
    addListener(SortHighPriceCheck,   'click',  invoke, false);

    addListener(AmazonCheck,          'click',  invoke, false);
    addListener(RakutenCheck,         'click',  invoke, false);
    addListener(BiddersCheck,         'click',  invoke, false);
    addListener(StoremixCheck,        'click',  invoke, false);

    addListener(SearchIndexCombo,     'change', invoke, false);
    addListener(GenreCombo,           'change', invoke, false);
    addListener(CategCombo,           'change', invoke, false);
}

// 終了時処理
function conclude(e) {
    for(objname in httpObj) {
        abortXMLHttpRequest(objname);
    }
}

// 実際に行われる処理
function invoke() {
    // 処理の連発を防止する
    if(!localTimerId) {
        localTimerId = setTimeout('Search()',1000);
    }
}

// 検索結果表示・共通処理
function displayresults(shop,xml) {
    ResultsDiv[shop].innerHTML = "";
    items = xml.getElementsByTagName('Item');
    buf = "";
    if(items.length>=0) {
        KeywordNode    = xml.getElementsByTagName('Keyword');
        Keyword        = KeywordNode[0].childNodes[0].nodeValue;
        WebURLNode     = xml.getElementsByTagName('WebURL');
        WebURL         = WebURLNode[0].childNodes[0].nodeValue;
        TotalCountNode = xml.getElementsByTagName('TotalCount');
        TotalCount     = TotalCountNode[0].childNodes[0].nodeValue;
        CountNode      = xml.getElementsByTagName('Count');
        Count          = CountNode[0].childNodes[0].nodeValue;

        InfoDiv[shop].innerHTML = '<hr /><p><strong><span style="color : #0000FF;">' + ShopName[shop] + '「' + Keyword + '」の 検索結果</span> ' + TotalCount + ' 件中 ' + Count + ' 件表示</p><p>(全件表示されていない場合は、<a href="' + WebURL + '">こちら</a>からご覧いただけます)</strong></p><hr />\n';

        buf += '<table style="width : 95%; margin : 0em auto 1em auto; font-size : 100%;" summary="' + shop.toUpperCase + ' RESULT" border="0" cellspacing="0" cellpadding="0"><tbody>\n';
        for(i=0;i<items.length;i++) {
            RowNumNode            = items[i].getElementsByTagName('RowNum');
            URLNode               = items[i].getElementsByTagName('URL');
            TitleNode             = items[i].getElementsByTagName('Title');
            ImageURLNode          = items[i].getElementsByTagName('ImageURL');
            FormattedPriceNode    = items[i].getElementsByTagName('FormattedPrice');
            RowNum                = RowNumNode[0].childNodes[0].nodeValue;
            URL                   = URLNode[0].childNodes[0].nodeValue;
            Title                 = TitleNode[0].childNodes[0].nodeValue;
            ImageURL              = ImageURLNode[0].childNodes[0].nodeValue;
            TypeImageURL          = "";
            Type                  = "";
            FormattedPrice        = "";
            NewFormattedPrice     = "";

            if(FormattedPriceNode[0].childNodes.length>0) {
                FormattedPrice    = FormattedPriceNode[0].childNodes[0].nodeValue;
            }

            if(shop=="amazon") {
                NewFormattedPriceNode = items[i].getElementsByTagName('NewFormattedPrice');
                if(NewFormattedPriceNode[0].childNodes.length>0) {
                    NewFormattedPrice = NewFormattedPriceNode[0].childNodes[0].nodeValue;
                }
            }
            else
            if(shop=="bidders") {
                TypeImageURLNode      = items[i].getElementsByTagName('TypeImageURL');
                TypeNode              = items[i].getElementsByTagName('Type');
                TypeImageURL          = TypeImageURLNode[0].childNodes[0].nodeValue;
                Type                  = TypeNode[0].childNodes[0].nodeValue;
            }

            if(NewFormattedPrice==""
            && Type             ==""
            && shop             !="storemix") {
                buf += '<tr><td><p>' + RowNum + '</p></td><td style="text-align : center;"><p><a href="' + URL + '"><img src="' + ImageURL + '" alt="' + Title + '" /></a></p></td><td><p><a href="' + URL + '">' + Title + '</a></p></td><td><p style="text-align : right;">' + FormattedPrice + '</p></td></tr><tr><td colspan="4"><p style="text-align : right; font-size : 80%;"><a href="#top">ページのトップへ</a></p><hr class="thin"/></td></tr>\n';
            }
            else
            if(shop             =="storemix") {
                buf += '<tr><td><p>' + RowNum + '</p></td><td style="text-align : center;"><p><a href="' + URL + '"><img src="' + ImageURL + '" width="64" alt="' + Title + '" /></a></p></td><td><p><a href="' + URL + '">' + Title + '</a></p></td><td><p style="text-align : right;">' + FormattedPrice + '</p></td></tr><tr><td colspan="4"><p style="text-align : right; font-size : 80%;"><a href="#top">ページのトップへ</a></p><hr class="thin"/></td></tr>\n';
            }
            else
            if(NewFormattedPrice=="") {
                buf += '<tr><td><p>' + RowNum + '</p></td><td style="text-align : center;"><p><a href="' + URL + '"><img src="' + ImageURL + '" width="64" alt="' + Title + '" /></a></p></td><td><p><a href="' + URL + '">' + Title + '</a></p></td><td><p style="text-align : right;"><img src="' + TypeImageURL + '" alt="' + Type + '" /><br/>' + FormattedPrice + '</p></td></tr><tr><td colspan="4"><p style="text-align : right; font-size : 80%;"><a href="#top">ページのトップへ</a></p><hr class="thin"/></td></tr>\n';
            }
            else
            if(Type             =="") {
                buf += '<tr><td><p>' + RowNum + '</p></td><td style="text-align : center;"><p><a href="' + URL + '"><img src="' + ImageURL + '" alt="' + Title + '" /></a></p></td><td><p><a href="' + URL + '">' + Title + '</a></p></td><td><p style="text-align : right;">' + FormattedPrice + '<br/> =&gt; <strong style="color : #FF0000;">' + NewFormattedPrice + '</strong></p></td></tr><tr><td colspan="4"><p style="text-align : right; font-size : 80%;"><a href="#top">ページのトップへ</a></p><hr class="thin"/></td></tr>\n';
            }
        }
        buf += '</tbody></table>\n';
    }
    ResultsDiv[shop].innerHTML   = buf;

    BookmarksDiv[shop].innerHTML = '<p><a href="#' + shop + 'info"><strong>' + ShopName[shop] + ' の検索結果へ</strong></a></p>';

    ErrMsgNode = xml.getElementsByTagName('ErrMsg');
    if(ErrMsgNode[0].childNodes.length>0) {
        ErrorDiv[shop].innerHTML = '<p><strong style="color : #FF0000;">' + ErrMsgNode[0].childNodes[0].nodeValue + '</strong></p>';
    }
    else {
        ErrorDiv[shop].innerHTML = '';
    }
}

// 検索処理
function Search() {
    // タイマー無効化
    clearInterval(localTimerId);
    localTimerId = false;

    tmpKeywords    = KeywordsText.value;

    tmpSearchIndex = SearchIndexCombo.options[SearchIndexCombo.selectedIndex].value;
    tmpGenre       = GenreCombo.options[GenreCombo.selectedIndex].value;
    tmpCateg       = CategCombo.options[CategCombo.selectedIndex].value;

    tmpAmazon      = AmazonCheck.checked;
    tmpRakuten     = RakutenCheck.checked;
    tmpBidders     = BiddersCheck.checked;
    tmpStoremix    = StoremixCheck.checked;

    if(SortBestsellingCheck.checked==true) tmpSort = 'Bestselling';
    if(SortNewestCheck.checked     ==true) tmpSort = 'Newest';
    if(SortLowPriceCheck.checked   ==true) tmpSort = 'LowPrice';
    if(SortHighPriceCheck.checked  ==true) tmpSort = 'HighPrice';

    if(tmpKeywords=="") {
        return;
    }

    if(Keywords   ==tmpKeywords
    && Amazon     ==tmpAmazon
    && Rakuten    ==tmpRakuten
    && Bidders    ==tmpBidders
    && Storemix   ==tmpStoremix
    && SearchIndex==tmpSearchIndex
    && Genre      ==tmpGenre
    && Categ      ==tmpCateg
    && Sort       ==tmpSort) {
        return;
    }

    // フラグの取得
    base = (Keywords!=tmpKeywords || Sort!=tmpSort);

    InvokeAmazon   = base || (Amazon  !=tmpAmazon)  || (SearchIndex!=tmpSearchIndex);
    InvokeRakuten  = base || (Rakuten !=tmpRakuten) || (Genre      !=tmpGenre);
    InvokeBidders  = base || (Bidders !=tmpBidders) || (Categ      !=tmpCateg);
    InvokeStoremix = base || (Storemix!=tmpStoremix);

    // クエリ値の取得
    Keywords    = tmpKeywords;
    SearchIndex = tmpSearchIndex;
    Genre       = tmpGenre;
    Categ       = tmpCateg;
    Amazon      = tmpAmazon;
    Rakuten     = tmpRakuten;
    Bidders     = tmpBidders;
    Storemix    = tmpStoremix;
    Sort        = tmpSort;

    // HTTP通信を開始し、完了したら結果表示関数を実行させる
    // Amazon
    if(InvokeAmazon && Amazon) {
        httpRequest("xml_tool_amazon.php","Keywords=" + encodeURIComponent(Keywords) + "&SearchIndex=" + encodeURIComponent(SearchIndex) + "&Sort=" + encodeURIComponent(Sort),function(xml){displayresults("amazon",xml);});
    }
    else
    if(!Amazon) {
        InfoDiv['amazon'].innerHTML      = "";
        ResultsDiv['amazon'].innerHTML   = "";
        BookmarksDiv['amazon'].innerHTML = "";
        ErrorDiv['amazon'].innerHTML     = "";
    }

    // Rakuten
    if(InvokeRakuten && Rakuten) {
        httpRequest("xml_tool_rakuten.php","Keywords=" + encodeURIComponent(Keywords) + "&Genre=" + encodeURIComponent(Genre) + "&Sort=" + encodeURIComponent(Sort),function(xml){displayresults("rakuten",xml);});
    }
    else
    if(!Rakuten) {
        InfoDiv['rakuten'].innerHTML      = "";
        ResultsDiv['rakuten'].innerHTML   = "";
        BookmarksDiv['rakuten'].innerHTML = "";
        ErrorDiv['rakuten'].innerHTML     = "";
    }

    // Bidders
    if(InvokeBidders && Bidders) {
        httpRequest("xml_tool_bidders.php","Keywords=" + encodeURIComponent(Keywords) + "&Categ=" + encodeURIComponent(Categ) + "&Sort=" + encodeURIComponent(Sort),function(xml){displayresults("bidders",xml);});
    }
    else
    if(!Bidders) {
        InfoDiv['bidders'].innerHTML      = "";
        ResultsDiv['bidders'].innerHTML   = "";
        BookmarksDiv['bidders'].innerHTML = "";
        ErrorDiv['bidders'].innerHTML     = "";
    }

    // Storemix
    if(InvokeStoremix && Storemix) {
        httpRequest("xml_tool_storemix.php","Keywords=" + encodeURIComponent(Keywords),function(xml){displayresults("storemix",xml);});
    }
    else
    if(!Storemix) {
        InfoDiv['storemix'].innerHTML      = "";
        ResultsDiv['storemix'].innerHTML   = "";
        BookmarksDiv['storemix'].innerHTML = "";
        ErrorDiv['storemix'].innerHTML     = "";
    }
}

// ロードされた際に、init()関数を実行させる
addListener(window, 'load',   init,     false);

// アンロードされた際に、conclude()関数を実行させる
addListener(window, 'unload', conclude, false);
