var jquery_loader         = 'http://www.asaka.co.jp/images/ajax-loader.gif';
var json_search_data      = 'http://www.asaka.co.jp/search_data.mtml';
var json_search_keyword   = '';
var json_search_is_loaded = false;
var json_search_entries;
 
function json_search_archive()
{
    var result_data = new Array();
 
    json_search_keyword = json_search_keyword.replace(/([\/\\\.\*\+\?\|\(\)\[\]\{\}\$\^])/g, "\\$1");
    json_search_keyword = json_search_keyword.replace(/( +|　+)/, ' ');
    json_search_keyword = json_search_keyword.replace(/( |　)$/, '');
 
    var keywords = json_search_keyword.split(/ |　/);
    var key      = new Array();
 
    for (var i = 0;i < keywords.length;i++)
    {
        key[key.length] = new RegExp(keywords[i], "i");
    }
 
    for (var i = 0;i < json_search_entries.length - 1;i++)
    {
        var is_match = true;
 
        for (var j = 0;j < key.length;j++)
        {
            var res_body  = key[j].exec( json_search_entries[i].body );
            var res_title = key[j].exec( json_search_entries[i].title );
 
            if (!res_body && !res_title)
            {
                is_match = false;
            }
        }
 
        if (is_match)
        {
            result_data[result_data.length] = json_search_entries[i];
        }
    }
 
    var result_html = '';
 
    if (result_data.length == 0)
    {
        result_html = build_no_result_html( result_data, keywords ); 
    }
    if ( keywords == '' ) {
	result_html = build_no_keyword_html( result_data, keywords );
    }
    else
    {
        result_html = json_search_result_html(result_data, keywords);
    }

   $('#Main-kill').css('display', 'none');

    $('#Search-Main').css('height', 'auto')
                        .css('background-image', 'none')
                        .html(result_html);
}
 
function json_search_result_html(result_data, keywords)
{
    var html = '<h2>「'+keywords+'」の検索結果（' + result_data.length + '件ヒット ）</h2><dl>';
 
    for (var i= 0;i < result_data.length;i++)
    {
        html += '<dt><a href="' + result_data[i].link + '">' + result_data[i].title + '</a></dt><dd>' + highlight( trunc( result_data[i].body, keywords[0] ), keywords ) + '...</dd>';
    }
 
    html += '</dl><p class="search_back"><a href="javascript:void(0);" onclick="location.reload(true); return false;" onkeypress="location.reload(true); return false;">前のページに戻る</a></p>';
 
    return html;
}

function build_no_result_html(result_data, keywords)
{
    var html = '<h2>「' + keywords + '」の検索結果（0件）</h2><br /><p>該当するエントリーはありませんでした。</p><br />';

    html += '<p class="search_back"><a href="javascript:void(0);" onclick="location.reload(true); return false;" onkeypress="location.reload(true); return false;">前のページに戻る</a></p>';
 
    return html;
}

function build_no_keyword_html(result_data, keywords)
{
    var html = '<h2>検索キーワード未入力</h2><br /><p>&nbsp;&nbsp;&nbsp;&nbsp;検索キーワードが入力されていません。キーワードを指定してください。</p><br />';

    html += '<p class="search_back"><a href="javascript:void(0);" onclick="location.reload(true); return false;" onkeypress="location.reload(true); return false;">前のページに戻る</a></p>';
 
    return html;
}
 
function json_search()
{
    json_search_keyword = $('input#search_box').val();
 
    $('#Search-Main').html('')
                        .css('height', '100px')
                        .css('background', 'transparent url(' + jquery_loader + ') no-repeat center center');
 
    if (json_search_is_loaded)
    {
        json_search_archive();
    }
    else
    {
        $.ajax({url: json_search_data, type: 'GET', dataType: 'xml', timeout: 1500,
            error: function() {
                $('#Search-Main').css('height', 'auto')
                                    .css('background-image', 'none')
                                    .html('！検索に失敗しました。しばらくしてから再度お試しください。');
            },
            complete: function(xml) {
                var data_string = xml.responseText;
 
                data_string         = data_string.replace(new RegExp('<.*?>', "i"), '');
                json_search_entries = eval(data_string);
 
                json_search_archive();
 
                json_search_is_loaded = true;
            }
        });
    }
}


function trunc( text, keyword ) {
    var key = new RegExp( keyword, "i" );
    var res = key.exec( text );

    if ( res ) {
    	var index  = res.index;
    	var length = res[0].length;
    	var start;
    	var end;

    	start = index - 20;
    	end = 55;
    	text = text.substring( start, index ) + text.substr( index, length ) + text.substr( index + length, end ) +'...';
    } else {
        text = text.substring( start, 50 );
    }
    return text;
}


function highlight( text, keywords ) {
    var keyword = '';
    for ( var i= 0; i<keywords.length; i++ ) {
        if ( i == keywords.length - 1 ) {
            keyword += keywords[i];
        } else {
            keyword += keywords[i] + '|'; 
        }
    }
    return text.replace( new RegExp( '(' + keyword + ')', "ig"), '<span class="keywords">' + "$1" + '</span>' ); // modified by www watch
}

var isInitialized = false;
function initialize(object) {
        if(!isInitialized) {
        object.value = "";
        object.style.color = "#333";
        isInitialized = true;
        }
}

 
function clear_block(blockid)
{
    $(blockid).html('');
}
