var d;
var w;
var result;
var search_box;
var result_default_str;
var search_box_default_str = "カテゴリを検索";
var search_box_default_coloer;
var search_box_keyword;
var mode = 'new';
var search_keyword = '';

window.onload = function init () {
renderReaderAd();
    search_box = document.getElementById("search_box");
    search_box.value = search_box_default_str;
    search_box_default_coloer = search_box.style.color;
    d = window.document;
    w = window;
    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) );

	var div = d.getElementsByTagName('div');
	for ( i = 0; i < div.length; i ++ ) {
	    if ( div[i].className == 'tab' ) {
		var a = div[i].getElementsByTagName('a');
		a[0].href = a[0].href + '#keyword=' + hash_args.keyword;
	    }
	}
	for ( i = 0; i < d.links.length; i ++ ) {
	    d.links[i].onclick = add_search_history;
	}
    }
}

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 === void 0){setTimeout("clear_search_box();", 100);return;}
    if ( search_box.value == search_box_default_str ) {
	// && search_box.style.color == search_box_default_coloer ) {
	search_box.value = "";
	search_box.style.color = "#000000";
    }
}
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;
	if ( location.href.search(/#.*/) > -1 ) {
	    location = location.href.replace(/#.*/,"");
	}
	var div = d.getElementsByTagName('div');
	for ( i = 0; i < div.length; i ++ ) {
	    if ( div[i].className == 'tab' ) {
		var a = div[i].getElementsByTagName('a');
		a[0].href = a[0].href.replace(/#.*/,"");
	    }
	}
	for ( i = 0; i < d.links.length; i ++ ) {
	    d.links[i].onclick = '';
	}
    }
}

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( keywords[i], "i" );
        }
        for (var i= 0;i<data.length;i++) {
    	    var res_first;
    	    var flag = true;
    	    for (var j= 0;j<key.length;j++) {
                var res_title = key[j].exec( data[i].title );
                if ( !res_title ) {
                    flag = false;
                }
            }
            if ( flag ) {
                buf[ buf.length ] = data[i];
            }
        }
        html = view( buf, keywords, not_found );
        if ( html == '' ) {
            html = result_default_str;
        }
    }
    current_num = -1;
    result.innerHTML = html;
}

function view( buf, keywords, not_found ) {
    var html = '';
    for (var i= 0;i<buf.length;i++) {
	html += '<li id="cat' + i + '" class="cat-over"><a href="http://www.cocolog-nifty.com'+buf[i].link+'#keyword=' + search_box_keyword + '" onClick="add_search_history();">' + buf[i].title + '</a></li>';
    }
    if ( html == '' ) {
	html = result.innerHTML;
    }
    return html;
}

function highlight ( keyword ) {
        keyword = keyword.replace( /([\/\\\.\*\+\?\|\(\)\[\]\{\}\$\^])/g, "\\$1" );
        keyword = keyword.replace( /( +|　+)/, ' ' );
        keyword = keyword.replace( /( |　)$/, '' );
	var has_not_encoded = false;
        var keywords = keyword.split(/ |　/);
	var keywords_str = '';
        for ( var i= 0; i<keywords.length; i++ ) {
        	if( keywords[i].search(/^[a-zA-Z0-9\%]+$/) != -1 ) {
              		has_not_encoded = true; 
        	}
	}
	for ( var i= 0; i<keywords.length; i++ ) {
	    if ( i == keywords.length - 1 ) {
		if( has_not_encoded ) {
                        keywords_str += keywords[i];
		} else {
                        keywords_str += encodeURIComponent(keywords[i]);
		}
	    } else {
                if( has_not_encoded ) {
                        keywords_str += keywords[i] + '|';
                } else {
                        keywords_str += encodeURIComponent(keywords[i]) + '|';
                }
	    }
	}
	var spans = document.getElementsByTagName('span');
	for (var i=0; i<spans.length; i++ ) {
	    if( spans[i].className == 'entry-title' ) {
		if ( has_not_encoded ) {
                        entry_title = spans[i].getElementsByTagName('a')[0].innerHTML;
                        spans[i].getElementsByTagName('a')[0].innerHTML = entry_title.unEscape().replace( new RegExp( '(' + keywords_str + ')', "ig"), '<span class="ret">' + "$1" + '</span>');
		} else {
                        entry_title = encodeURIComponent(spans[i].getElementsByTagName('a')[0].innerHTML);
                        spans[i].getElementsByTagName('a')[0].innerHTML = decodeURIComponent(entry_title.unEscape().replace( new RegExp( '(' + keywords_str + ')', "ig"), '<span class="ret">' + "$1" + '</span>' ) );
		}
	    }
	}
	var divs = document.getElementsByTagName('div');
	for (var i=0; i<divs.length; i++ ) {
	    if( divs[i].className == 'entry-text' ) {
                if ( has_not_encoded ) {
                        entry_text = divs[i].innerHTML;
                        divs[i].innerHTML = entry_text.unEscape().replace( new RegExp( '(' + keywords_str + ')', "ig"), '<span class="ret">' + "$1" + '</span>' );
		} else {
                        entry_text = encodeURIComponent(divs[i].innerHTML);
                        divs[i].innerHTML = decodeURIComponent(entry_text.unEscape().replace( new RegExp( '(' + keywords_str + ')', "ig"), '<span class="ret">' + "$1" + '</span>' ));
		}
	    }
	}
}

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

String.prototype.unEscape = function() {
	var str = this;
	str = str.replace(/&quot;/g, "\"");
	str = str.replace(/&lt;/g, "<");
	str = str.replace(/&gt;/g, ">");
	str = str.replace(/&amp;/g, "&");
	return str;
}

String.prototype.surround = function (front, keyword, back) {
    if( this.length == 0 ) {
        return '';
    }
    var index = this.toLowerCase().indexOf( keyword.toLowerCase() );
    if ( index == -1 ) {
        return this;
    }
    var before = this.substr(0, index);
    var match = this.substr(index, keyword.length);
    var after   = this.substr(index + keyword.length);
    return before + front + match + back + after.surround(front, keyword, back);
}

function highlightNode(keyword, node) {
    if (node.hasChildNodes) {
        for (var i=0; i<node.childNodes.length; i++) {
            node.childNodes[i] = highlightNode(keywords, node.childNodes[i]);
        }
    }
    if ( node.nodeType == 3 ) {
        node.nodeValue = node.nodeValue.surround('<a href="#">', keywords, '</a>');
    }
    return node;
}
