var is_loaded = false;
var is_first = true;
var searched_keyword = '';

function do_search( text ) {
    searched_keyword = text;
    var celeb_search = document.getElementById('result').innerHTML = "<h3>日刊ココログガイド検索結果</h3><p>検索中...</strong></p>";
    load_search_data();
}

function load_search_data() {
    if(is_loaded) {
	search();
	return;
    } else if(is_first) {
	is_first = false;
	var s=document.createElement('script');
	s.charset='UTF-8';
	s.src= "http://guide.cocolog-nifty.com/guide/search_data.js";
	document.body.appendChild(s);
    }
    setTimeout( 'load_search_data()', 100 );
}

function search() {
    var result_data = new Array();
    search_keyword = searched_keyword.replace( /([\/\\\.\*\+\?\|\(\)\[\]\{\}\$\^])/g, "\\$1" );
    search_keyword = search_keyword.replace( /( +|　+)/, ' ' );
    search_keyword = search_keyword.replace( /( |　)$/, '' );

    var keywords = search_keyword.split(/ |　/);
    var key = new Array();
    for ( var i= 0; i<entries.length; i++ ) {
        var is_match = true;
        for ( var j= 0; j<keywords.length; j++ ) {
            var body_index = entries[i].body.toLowerCase().indexOf( keywords[j].toLowerCase() );
            var title_index = entries[i].title.toLowerCase().indexOf( keywords[j].toLowerCase() );
            if ( body_index == -1 && title_index == -1 ) {
                is_match = false;
            }
        }

        if ( is_match ) {
            result_data.push( entries[i] );
        }
    }
    var result_html = '';
    if ( result_data.length == 0 || search_keyword == '' || search_keyword == ' ' ) {
        result_html =  '<h3>日刊ココログガイド検索結果</h3><p><strong>この指定の条件に該当する頁は見つかりませんでした。</strong></p>';   } else {
        result_html = build_search_result_html( result_data, keywords );
    }
    document.getElementById('result').innerHTML = result_html;
}

function build_search_result_html( result_data, keywords ) {
    var html = '<h3>日刊ココログガイド検索結果</h3><ul>';
    for ( var i= 0; i<result_data.length; i++ ) {
    	html += '<li><a href="' + result_data[i].link + '#search_word=' + search_keyword + '" target="_blank">' + highlight( result_data[i].title, keywords ) + '</a><br />' + highlight( trunc( result_data[i].body, keywords[0] ), keywords ) + '</li>';
    }
    html += '</ul>';
    return html;
}

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 += encodeURIComponent(keywords[i]);
        } else {
            keyword += encodeURIComponent(keywords[i]) + '|'; 
        }
    }
    return decodeURIComponent( encodeURIComponent(text).replace( new RegExp( '(' + keyword + ')', "ig"), '<em>' + "$1" + '</em>' ) );
}
