var searching  = false;
var no_suggest = false;
var item_search_flag    = false;
var tag_search_flag     = false;
var koto_search_flag    = false;
var similar_search_flag = false;
var search_query = '';
var onQueryChanged = function(element, value) {
    if (no_suggest) {
        no_suggest = false;
    } else {
        $('result').innerHTML = '';
        $('tag_result').innerHTML = '';
        $('koto_result').innerHTML = '';
        $('items').innerHTML = '';
        loadGoogleSuggest();
    }
    if (value == '') clearAll();
}
function bodyOnLoad() {
    new Form.Element.Observer('query', 1, onQueryChanged);
    if ($F('query') != '') searchWeb(null, null, true);
}
var sendRPCDone = function(n, input_str, suggest_array, count_array, f) {
    var buf = '';
    buf += '<div style="margin-left:2px;">';
    for (var i = 0; i < suggest_array.length; i ++ ) {
        buf += '<span style="cursor:pointer; color:green;" onclick="updateQuery(\'' + suggest_array[i] + '\'); searchWeb(\'' + suggest_array[i] + '\', 1, true)">' + suggest_array[i] + '</span><br />';
    }
    if (suggest_array.length) buf += '<div style="font-size:10px; color:#ccc;">by Google Suggest</div>';
    buf += '</div>';
    $('suggest').innerHTML = buf;
};
var updateQuery = function(query) {
    no_suggest = true;
    $('query').value = query;
}
function loadGoogleSuggest() {
    if (searching) return;

    loading('suggest', 'Google Suggest');

    var query = $F('query');

    if ('' == query) {
        $('suggest').innerHTML = '';
        return;
    }

    $('suggest').style.display = 'block';

    var google_path = "http://www.google.co.jp/complete/search?hl=ja&js=true&qu=";
    var url_str = encodeURIComponent($F('query'));
    var s = document.createElement('script');
    s.src = google_path + url_str;
    s.charset = 'UTF-8';
    document.body.appendChild(s);
}
function searchKoto(query) {
    var query = encodeURIComponent(query);
    var pars  = 'mode=qooqle&act=get_kotosearch_result&query='+query;
    new Ajax.Request('/', {parameters:pars, onComplete:updateKotoResult});
    loading('koto_loading', 'Kotonoha');
}
function updateKotoResult(r) {
    var result = r.responseText;
    if (result != 0) {
        $('koto_result').style.display = 'block';
        $('koto_result').innerHTML = result;
    }
    $('koto_loading').innerHTML = '';
    $('koto_loading').style.display = 'none';
}
function searchTag(query) {
    var query = encodeURIComponent(query);
    var pars  = 'mode=qooqle&act=get_tagsearch_result&query='+query;
    new Ajax.Request('/', {parameters:pars, onComplete:updateTagResult});
    loading('tag_loading', 'Hatena');
}
function updateTagResult(r) {
    var result = r.responseText;
    if (result != 0) {
        $('tag_result').style.display = 'block';
        $('tag_result').innerHTML = r.responseText;
    }
    $('tag_loading').innerHTML = '';
    $('tag_loading').style.display = 'none';
}
function searchWeb(query, page, clear) {
    if (searching) return;

    $('suggest').style.display = 'none';

    if (query == undefined) query = $F('query');
    if (page == undefined) page = 1;
    if (clear == true) $('result').innerHTML = '';

    if (query == '') return;

    if (page == 1) {
        tag_search_flag  = true;
        koto_search_flag = true;
//      $('item_result').style.display = 'none';
//      $('tag_result').style.display = 'none';
    }

    var query = encodeURIComponent(query);
    var pars  = 'mode=qooqle&act=get_search_result&query='+query+'&page='+page;//+'&needbm='+needbm;
    new Ajax.Request('/', {parameters:pars, onComplete:updateResult});
    loading('loading', 'Yahoo! + Hatena');

    if (page == 1) {
        item_search_flag = true;
        search_query = query;
    }

    searching = true;
}
function updateResult(r) {
    searching = false;

    $('suggest').style.display = 'none'; // 暫定 searchWebのdisplay:noneで消えないことがあるので
    $('result').style.display = 'block';
    var result = r.responseText;

    $('loading').innerHTML = '';
//  $('loading').style.display = 'none';

    if (result == -1) {
        $('result').innerHTML = $('result').innerHTML + '<br /><br />Yahoo! APIの検索上限数に達したか、高負荷のため結果を取得できませんでした。。。<br />すみませんが、また時間を空けてご利用ください。';
        return;
    }

    if (result == 0) {
        $('result').innerHTML = '<div style="text-align:center;">not found</div>';
        item_search_flag = false;
        $('loading').innerHTML = '';
        return;
    }

    $('result').innerHTML = $('result').innerHTML + r.responseText;
    $('clear').style.display = "inline";

    if ($F('option_search_item') == 'on' && item_search_flag) {
        searchAmazon();
        item_search_flag = false;
    }

    if ($F('option_search_tag') == 'on' && tag_search_flag) {
        searchTag(search_query);
        tag_search_flag = false;
    }

    if ($F('option_search_koto') == 'on' && koto_search_flag) {
        searchKoto(search_query);
        koto_search_flag = false;
    }
}
function clearAll() {
    $('result').innerHTML = '';
    $('result').style.display = 'none';
    $('loading').style.display = 'none';
    $('tag_result').innerHTML = '';
    $('tag_result').style.display = 'none';
    $('tag_loading').style.display = 'none';
    $('koto_result').innerHTML = '';
    $('koto_result').style.display = 'none';
    $('koto_loading').style.display = 'none';
    $('similar_words').innerHTML = '';
    $('similar_words').style.display = 'none';
    $('query').value = '';
    $('items').innerHTML = '';
    $('items').style.display = 'none';
    $('clear').style.display = 'none';
    item_shown = false;
    no_suggest = false;

    $('suggest').style.display = 'none';

    item_search_flag    = false;
    tag_search_flag     = false;
    koto_search_flag    = false;
    similar_search_flag = false;
    search_query = '';

    $('query').focus();
}
function searchAmazon() {
    var keywords = $F('query');
    var search_index = $('amazon_search_index').innerHTML;

    keywords     = encodeURIComponent(keywords);
    search_index = encodeURIComponent(search_index);

    var pars = 'mode=qooqle&act=get_items&keywords='+keywords+'&search_index='+search_index;
    new Ajax.Request('/', {parameters:pars, onComplete:updateItems});

    $('items').style.display = 'block';

    if (search_index) {
        loading('items', 'Amazon('+search_index+')');
    } else {
        loading('items', 'Amazon');
    }
}
function updateItems(r) {
    $('items').style.display = 'block';

    var result = r.responseText;
    if (result != 0) {
        $('items').innerHTML = r.responseText;
    } else {
        $('items').style.display = 'none';
    }

    item_shown = true;
}
function updateItemInfo(info) {
    if (info == undefined || info == null) info = '&nbsp;';
    $('item_info').innerHTML = info;
}
function loading(id, msg) {
    $(id).style.display = 'block';
    html = '<img src="/images/spinner.gif" alt="now on loading align="absmiddle" />';
    if (msg != undefined) {
        html += '<br /><span style="font-size:10px;">'+msg+'</span>';
    }
    $(id).innerHTML = html;
}

function searchSimilar(query) {
    if (similar_search_flag) return;
    if (query == '') return;
    var pars = 'mode=qooqle&act=get_similar&query='+query;
    new Ajax.Request('/', {parameters:pars, onComplete:updateSimilar});
    $('query').value = query;
    similar_search_flag = true;
    loading('similar_words', 'similar search');
}
function updateSimilar(r) {
    $('similar_words').innerHTML = r.responseText;
    similar_search_flag = false;
}
function closeSimilar() {
    $('similar_words').innerHTML = '';
    $('similar_words').style.display = 'none';
}
//function showInfo(title, summary, url) {
//    $html = '<span style="font-size:15pt; font-weight:bold;">'+title+'</span><br />';
//    $html += summary+'<br />';
//    $html += url+'<br />';
//    $('infobox').innerHTML = $html;
//    $('infobox').style.display = 'block';
//    cursor.x
//}
//function hideInfo() {
//    $('infobox').innerHTML = '';
//    $('infobox').style.display = 'none';
//}
