var result;
var search_box;
var result_default_str;
var search_box_default_str = "キーワードを入力";
var search_box_default_coloer;
var search_box_keyword = '';

window.onload = function init () {
    search_box = document.getElementById("search_box");
    search_box.value = search_box_default_str;
    search_box_default_coloer = 'rgb(128, 128, 140)';
    var d = window.document;
    result =  d.getElementById("result");
    result_default_str = result.innerHTML;
    var args = getArgs();
    if ( args.keyword ) {
        search_box.value = args.keyword;
        search( args.keyword, new Boolean(true) );
    }
    var hash_args = getHashArgs();
    if ( hash_args.keyword ) {
        search_box.value = hash_args.keyword;
        search( hash_args.keyword, new Boolean(true) );
    }
    for ( i = 0; i < window.document.links.length; i ++ ) {
	window.document.links[i].onmousedown = add_search_history;
    }
}

//window.unload = add_search_history ( search_box_keyword );

function getArgs () {
    var args = new Object();
    var query = location.search.substring(1);
    query = decodeURIComponent( query );
    var pairs = query.split("&");
    for ( var i = 0; i < pairs.length; i++ ) {
        var pos = pairs[i].indexOf('=');
        if ( pos == -1 ) continue;
        var argname = pairs[i].substring( 0, pos );
        var value = pairs[i].substring( pos + 1 );
        args[argname] = value;
    }
    return args;
}

function getHashArgs () {
    var args = new Object();
    var query = location.href.replace(/.*?#/,"");
   query = decodeURIComponent( query );
    var pairs = query.split("&");
    for ( var i = 0; i < pairs.length; i++ ) {
        var pos = pairs[i].indexOf('=');
        if ( pos == -1 ) continue;
        var argname = pairs[i].substring( 0, pos );
        var value = pairs[i].substring( pos + 1 );
        args[argname] = value;
    }
    return args;
}

function clear_search_box() {
    if ( search_box.value == search_box_default_str ) {
	// && search_box.style.color == search_box_default_coloer ) {
	search_box.value = "";
	//	 search_box.style.color = "#000";
    }
}

function set_search_box() {
    if ( search_box.value=="" ) {
	search_box.value = search_box_default_str;
	search_box.style.color = search_box_default_coloer;
	result.innerHTML = result_default_str;
    }
}

function search( text, not_found ) {
    var buf = new Array();
    var html ='';
    search_box_keyword = '';
    if ( text.length == 0 ) {
        html = result_default_str;
    } else {
        search_box_keyword = text;
        var exp = /([\/\\\.\*\+\?\|\(\)\[\]\{\}\$\^])/g;
    	text=text.replace(exp, "\\$1");
    	text = text.replace( /( +|　+)/, ' ' );
    	text = text.replace( /( |　)$/, '' );
    	var keywords = text.split(/ |　/);
    	var key = new Array();
    	for (var i= 0;i<keywords.length;i++) {
    	    key[ key.length ] = new RegExp( encodeURIComponent(keywords[i]), "i" );
        }
        for (var i= 0;i<data.length;i++) {
    	    var res_first;
    	    var flag = true;
            for ( var j= 0; j<keywords.length; j++ ) {
                var body_index = data[i].body.toLowerCase().indexOf( keywords[j].toLowerCase() );
                var title_index = data[i].title.toLowerCase().indexOf( keywords[j].toLowerCase() );
                if ( body_index == -1 && title_index == -1 ) {
                    flag = false;
                }
            }
            if ( flag ) {
                buf[ buf.length ] = data[i];
            }
        }
        html = view( buf, keywords, not_found );
        if ( html == '' ) {
            html = result_default_str;
        } else {
	    html += '<img src="http://countlink.cocolog-nifty.com/support_search.gif?keyword=' + encodeURIComponent( text )  + '" width="1" height="1">';
	}
    }
    result.innerHTML = html;
}

function view( buf, keywords, not_found ) {
    var html = '';
    for (var i= 0;i<buf.length;i++) {
	html += '<div class="match_entry"><div class="match_title"><a href="'+buf[i].link+'" onmousedown="add_search_history();">'+highlight(buf[i].title, new Boolean(false), keywords)+'</a></div><div class="match_description">'+ highlight( buf[i].body, new Boolean(true), keywords )+'</div></div>';
    }
    if ( html == '' ) {
        if ( not_found ) {
            html = '<div id="result_num">指定の条件に該当するヘルプは見つかりませんでした。</div>';        
        } else {
        	html = result.innerHTML;
        	if ( window.document.getElementById("result_num") ) {
            } else {
            }
        }
    } else {
        html = '<div id="result_num">' + buf.length + '件ヒット</div>' + html;
    }
    return html;
}

function highlight ( str, trunc, keywords ) {
    var key = new RegExp( keywords[0], "i" );
    var res_first = key.exec(str);

    if ( res_first && trunc ) {
	var index  = res_first.index;
	var length = res_first[0].length;
	var start;
	var end;

	start = index - 30;
	end = 65;
	str = str.substring( start, index ) + str.substr( index, length ) + str.substr( index + length, end );
    } else if ( !res_first && trunc ) {
	str = str.substr( 0, 60 );
    }
    var replace_keyword = '';
    for ( var i= 0; i<keywords.length; i++ ) {
        if ( i == keywords.length - 1 ) {
            replace_keyword += encodeURIComponent(keywords[i]);
        } else {
            replace_keyword += encodeURIComponent(keywords[i]) + '|'; 
        }
    }
    if ( replace_keyword ) {
        str = decodeURIComponent(encodeURIComponent(str).replace( new RegExp( '(' + replace_keyword + ')', "ig"), '<span class="match_keyword">' + "$1" + '</span>' ));
    }
    return str;
}

function add_search_history () {
    var args = getHashArgs();
    if ( search_box_keyword != '' ) {
        window.location.hash = 'keyword=' + encodeURIComponent( search_box_keyword );
    }
}
