////////////////////////
//File  : blog_ajax_json_search.js
//site  : http://java.cocolog-nifty.com/
//author: naoyuki
//year  : 2006
//It belong-permits to this work the same condition of the creative commons 2. It is licensed under this day license. Please inquire to the creative commons whether to check http://creativecommons.org/licenses/by-sa/2.1/jp/to see this use permission condition by mail. The address: 559 It is Nathan Abbott Way, Stanford, California 94305, and USA. 
////////////////////////

/*--------------------------------------------------------------------------
[memo]
http://www.dakiny.com/archives/movable-type/movable_typeajyaxmt/index.php
This version is addition of the modification to the version open to the public in Mr. Dakiny's above-mentioned entry further. The explanation concerning this version is the following. 
http://hyper-text.org/archives/2007/10/ajax_search_mt.shtml
--------------------------------------------------------------------------*/


var is_loaded = false;
var backnumber_url_list;
var entries;
var search_keyword;
var result_content;
var timerId;
var limit=50;
var offset=0;

load_center_id();
function load_center_id() {
	var center = document.getElementById( 'center' );
	if ( center ) {
		ligting_search_keyword( center );
	} else {
		window.setTimeout( 'load_center_id()', 5000 );
	}
}

function ligting_search_keyword( center ) {
	var args = getHashArgs();
	var searched_keyword = args.search_word;
	if ( searched_keyword ) {
		searched_keyword = searched_keyword.replace( /([\/\\\.\*\+\?\|\(\)\[\]\{\}\$\^])/g, "\\$1" );
		searched_keyword = searched_keyword.replace( /( +|　+)/, ' ' );
		searched_keyword = searched_keyword.replace( /( |　)$/, '' );
		var keywords = searched_keyword.split(/ |　/);
		var h3 = center.getElementsByTagName( 'h3' );
		h3[0].innerHTML = highlight( h3[0].innerHTML, keywords );
		var div = center.getElementsByTagName( 'div' );
		for ( var i = 0; i < div.length; i++ ) {
			if ( div[i].className == 'entry-body-text' || div[i].className == 'comment-content' ) {	//	patched by furyu: add 'comment-content'
				div[i].innerHTML = highlight( div[i].innerHTML, keywords );
			}
		}
	}
}

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 blogAjaxJsonSearch( archive_file_path, text ,LIMIT,OFFSET) {
	location.href="#right";
//	scrollTo(0,0);
	if(LIMIT){limit=LIMIT;}
	if(OFFSET){offset=OFFSET;}
	search_keyword = text;
	/*
	var div_tag = document.getElementsByTagName('div');
	for ( var i = 0; i < div_tag.length; i ++ ) {
		if ( div_tag[i].className == 'result' ) { // Pached by Dificlo
			result_content = div_tag[i];
		}
	}*/
	result_content=document.getElementById('right');
	result_content.innerHTML = '<img class="searching" src="/img/loader.gif" width="16" height="16" alt="Searching" /> Searching .'; // modified by www watch
	added_period( result_content );
	if ( is_loaded ) {
		search();
	} else {
		new Ajax.Request( archive_file_path, {method: 'get', onComplete: function(request){ parse_archive_data( request ); } } );	
	}
}

function added_period( content ) {
	if ( !is_loaded ) {
		result_content.innerHTML += '.';
		timerId = setTimeout("added_period()", 50 );
	}
}

function parse_archive_data( request ) {
		var data_string = request.responseText;
		data_string = data_string.replace( new RegExp( '<.*?>', "i"), '' )
		entries = eval( data_string );
		search();
}

function show_all_backnumbers() {
	var text = '<ol type=1 start=1 style="text-align:left;">';
	for ( var i = 0; i < entries.length-1; i++ ) {	//	patched by furyu: entries.length => entries.length-1
		text += '<li><a href="' + entries[i].link + '">' +entries[i].title + '</a</li>';
	}
	text += '</ol>';
	document.getElementById('center').innerHTML = text;
}

function search() {
	var result_data = new Array();
	search_keyword=search_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<keywords.length;i++) {
		key[ key.length ] = new RegExp( keywords[i], "i" );
	}
	for ( var i= 0; i<entries.length-1; i++ ) {	//	patched by furyu: entries.length => entries.length-1
		var is_match = true;
		for ( var j= 0; j<key.length; j++ ) {
			var res_body = key[j].exec( entries[i].body );
			var res_title = key[j].exec( entries[i].title );
			if ( !res_body && !res_title ) {
				is_match = false;
			}
		}
		if ( is_match ) {
			result_data[ result_data.length ] = entries[i];
		}
	}
	var result_html = '';
	if ( result_data.length == 0 ) {
		result_html = build_no_result_html( result_data, keywords ); // Pached by Digiclo
	}  if ( keywords == '' ) {
		result_html = build_no_keyword_html( result_data, keywords ); // modified by www watch
	} else {
		result_html = build_search_result_html( result_data, keywords );
	}
	var div = window.document.getElementsByTagName('div');
//	var content;
//	var original_content_html = '';
//	for ( var i = 0; i < div.length; i ++ ) {
//		if ( div[i].className == 'content' ) {
//			content = div[i];
//			original_content_html = content.innerHTML;
//		}
//	}
	is_loaded = true;
	clearTimeout(timerId);
	result_content.innerHTML = result_html;
}

// modified by www watch
function build_search_result_html( result_data, keywords ) {

	//表示件数:Natsuki
	minNum=offset+1;
	maxNum=offset+limit;
	if(result_data.length<maxNum){maxNum=result_data.length;}

	var html = '<div class="section">「' + search_keyword + '」の検索結果（' + result_data.length + ' 件中'+minNum+'～'+maxNum+'件）';
	countDisp=0;
	for ( var i= 0; i<result_data.length; i++ ) {
		if(i>=offset){
			html += '<div class="content"><h2 class="entry_header"><a href="' + result_data[i].link + '" title="' + result_data[i].title + '">' + highlight( result_data[i].title, keywords ) + '</a></h2><div class="entry_body">' + highlight( trunc( result_data[i].body, keywords[0] ), keywords ) + '</div></div>';
			if(++countDisp==limit){break;}
		}
	}

/*
<div id="pre">
<!-- PageIfBefore for PageBute --><!-- BeforeLink for PageBute --><!-- PageIfBefore for PageBute -->
│<a href="http://animezanmai.com/" title="エロアニメ三昧トップページ">HOME</a>│
<!-- PageIfNext for PageBute --><!-- NextLink for PageBute --><!-- PageIfNext for PageBute -->
</div>
*/
	html += '</dl></div><div id="pre">';

	//前へボタン:Natsuki
	if(offset!=0){
		backOffset=offset-limit;
		if(backOffset<0){backOffset=0;}
		html+='<a href="javascript:void(0);" onclick="blogAjaxJsonSearch( \'http://animezanmai.com/search_data.txt\',\''+search_keyword+'\','+limit+','+backOffset+' );" onkeypress="blogAjaxJsonSearch( \'http://animezanmai.com/search_data.txt\',\''+search_keyword+'\','+limit+','+backOffset+' );">≪前へ</a>'
	}


	html += ' | <a href="http://animezanmai.com/">home</a> | ';

	//次へボタン:Natsuki
	nextOffset=offset+limit;
	if(nextOffset<result_data.length){
		html+='<a href="javascript:void(0);" onclick="blogAjaxJsonSearch( \'http://animezanmai.com/search_data.txt\',\''+search_keyword+'\','+limit+','+nextOffset+' );" onkeypress="blogAjaxJsonSearch( \'http://animezanmai.com/search_data.txt\',\''+search_keyword+'\','+limit+','+nextOffset+' );">次へ≫</a>';
	}

	html +='</div>';
	return html;
}
function build_no_result_html( result_data, keywords ) {
var html = '<div class="section"><h2>「' + search_keyword + '」の検索結果（0 件）</h2><p>該当するエントリーはありませんでした。</p></div>';
html += '<p class="search_back"><a href="javascript:void(0);" title="元のページに戻る" 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 = '<div class="section"><h2>検索キーワード未入力</h2><p>検索キーワードが入力されていません。キーワードを指定してください。</p></div>';
html += '<p class="search_back"><a href="javascript:void(0);" title="元のページに戻る" onclick="location.reload(true); return false;" onkeypress="location.reload(true); return false;">元のページに戻る</a></p>';
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 - 100;
		end = 200;
		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
}



// modified by www watch

function gray() {
	document.getElementById('search_box').style.color = '#ccc';
}
Event.observe(window, 'load', gray, false);

var isInitialized = false;
function initialize(object) {
	if(!isInitialized) {
		object.value = "";
		object.style.color = "#333";
		isInitialized = true;
	}
}


