var is_loaded = false;
var backnumber_url_list;
var entries;
var search_keyword;
var result_content;
var timerId;

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 mu_Kana_HanToZenUTF8(p_str)
{
	p_str	= escape(p_str);
	var a_tbl = new Array(
		0x00,0x02,0x0c,0x0d,0x01,0xfb,0xf2,0xa1,0xa3,0xa5,0xa7,0xa9,0xe3,0xe5,0xe7,0xc3,
		0xfc,0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad,0xaf,0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbd,
		0xbf,0xc1,0xc4,0xc6,0xc8,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd2,0xd5,0xd8,0xdb,0xde,
		0xdf,0xe0,0xe1,0xe2,0xe4,0xe6,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xef,0xf3,0x9b,0x9c);
	var rr	= '';
	var cc	= 0;
	while (cc <= p_str.length) {
		chr = p_str.substring(cc,(cc+6));
		ch2 = p_str.substring((cc+6),(cc+12));
		add = 0;
		if (chr.substring(0,1) != '%')			add	= 1;
		else if (chr.substring(0,2) != '%u') 	add	= 3;
		else if (chr.substring(0,4) != '%uFF')	add	= 6;
		if (add != 0) {	rr = rr + unescape(chr.substring(0,add));	cc += add;	continue;}
		pp	= 0;
		ss	= parseInt("0x" + chr.substring(2,6))-65376;
		if (ss > 0 && ss <64) {
			if (ss > 21 && ss <37 && ch2 == '%uFF9E') pp = 1;
			if (ss > 41 && ss <47 && ch2 == '%uFF9E') pp = 1;
			if (ss > 41 && ss <47 && ch2 == '%uFF9F') pp = 2;
			hex = a_tbl[ss] + pp;
			hst = hex.toString(16);
			if (hst.length== 1) hst='0' + hst; 
			rr = rr + unescape( '%u30' + hst);
		}
		else 	rr = rr + unescape(chr.substring(0,6));
		cc += 6;
		if (pp != 0) cc += 6;
	}
	return rr;
}

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].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 ) {
	if(text == '') {
		return;
	} else {
	    search_keyword = z2h_ascii(text);
	    search_keyword = mu_Kana_HanToZenUTF8(search_keyword);
	    var div_tag = document.getElementsByTagName('div');
	    for ( var i = 0; i < div_tag.length; i ++ ) {
	        if ( div_tag[i].className == 'article_list' ) {
	            result_content = div_tag[i];
	        }
	    }
	    result_content.innerHTML = '検索中です。しばらくお待ちください.';
	    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; i++ ) {
        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; i++ ) {
        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 =  '一致しませんでした';
    } 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 == 'article_list' ) {
//			content = div[i];
//			original_content_html = content.innerHTML;
//		}
//	}
    is_loaded = true;
    clearTimeout(timerId);
    result_content.innerHTML = result_html;
}

function z2h_ascii(src) {
    var str = new String;
    var len = src.length;
    for (var i = 0; i < len; i++) {
        var c = src.charCodeAt(i);
        if (c >= 65281 && c <= 65374 && c != 65340) {
            str += String.fromCharCode(c - 65248);
        } else if (c == 8217) {
            str += String.fromCharCode(39);
        } else if (c == 8221) {
            str += String.fromCharCode(34);
        } else if (c == 12288) {
            str += String.fromCharCode(32);
        } else if (c == 65507) {
            str += String.fromCharCode(126);
        } else if (c == 65509) {
            str += String.fromCharCode(92);
        } else {
            str += src.charAt(i);
        } 
    }
    return str;
}

function build_search_result_html( result_data, keywords ) {
    var html = '<dl><dt>検索結果</dt><dd>' + result_data.length + '件ヒット</dd></dl><table cellpadding="0" cellspacing="1" border="0" id="ive"><thead><tr><th nowrap="nowrap">物件種別</th><th>物件名</td><th nowrap="nowrap">所在地</th><th nowrap="nowrap">交通</th><th nowrap="nowrap">価格(万円)</th><!--<th nowrap="nowrap">土地面積(平米)</th>--><th nowrap="nowrap">専有面積(平米)</th><!--<th nowrap="nowrap">建物面積(平米)</th>--><th nowrap="nowrap">築年数</th><th nowrap="nowrap">詳細</th><th nowrap="nowrap">お気に入り</td></tr></thead><tbody>';       
    for ( var i= 0; i<result_data.length; i++ ) {
		var body_data = result_data[i].body.split("\n");
		var link_data = result_data[i].link;
		var id_data = result_data[i].id;
		var title_data = result_data[i].title.split(":");
		title_data = title_data[0];
		var access = body_data[3].replace(/_/g, "<br />");
		price = String( body_data[4] );
		id_link = String( body_data[41] );
		p1 = price.indexOf("-", 0);
		if(p1 == -1) {
			while( price != ( price = price.replace( /^(\d+)(\d{3})/ , "$1,$2" ) ) ){}
		} else {
			var haifuns = price.split("-");
			while( haifuns[0] != ( haifuns[0] = haifuns[0].replace( /^(\d+)(\d{3})/ , "$1,$2" ) ) ){}
			while( haifuns[1] != ( haifuns[1] = haifuns[1].replace( /^(\d+)(\d{3})/ , "$1,$2" ) ) ){}
			price = haifuns[0] + "-" + haifuns[1];
		}
    	//共通検索用
    	var put_data = '<tr><td>';
		put_data += title_data;
		put_data += '</td><td class="text">';
		put_data += body_data[1];
		put_data += '</td><td class="text">';
		put_data += body_data[2];
		put_data += '<br /><a href="#" onclick="mapOpen(\'';
		put_data += encodeURI(body_data[2]);
		put_data += '\');"><img src="/imgdir/common/map_button.gif" align="地図" title="地図を見る" width="30" height="17" /></a>';
		put_data += '</td><td class="text">';
		put_data += access;
		put_data += '</td><td class="price" nowrap="nowrap">';
		put_data += price;
		put_data += '</td><td>';
		put_data += body_data[14];
		put_data += '</td><td>';
		put_data += body_data[16];
		put_data += '</td><td><a href="';
		put_data += link_data;
		put_data += '"><img src="/imgdir/common/shosai.gif" alt="詳細" title="詳細を見る" width="50" height="18" /></a></td><td><a href="https://zeroa564.securesites.net/search/cart.php?id=';
		put_data += id_data;
		put_data += '"><img src="/imgdir/common/kouho_button.gif" /></a></td></tr>';
		var last_data = put_data.replace('Needless', '-');
		html += last_data;
		html = html.replace('Needless', '-');
    	//html += '<li style="margin-bottom:6px;"><a href="' + result_data[i].link + '#search_word=' + search_keyword + '">' + highlight( result_data[i].title, keywords ) + '</a><br />' + highlight( trunc( put_data, keywords[0] ), keywords ) + '</li>';
    }
    html += '</tbody></table>';
    html = html.replace(/Needless/g, '-');
    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 += keywords[i];
        } else {
            keyword += keywords[i] + '|'; 
        }
    }
    return text.replace( new RegExp( '(' + keyword + ')', "ig"), '<span style="background-color: #FFCC33;">' + "$1" + '</span>' );
}
