/*
 * Ajax Incremental Search lib.
 */

var global_var;
var target_div;
var is_complete=false;
var keyword;

var objtooltip;
var objstyle;
var tooltip=false;
var targetnum;

function trim_body( body ){
    var regex = new RegExp( keyword, "i" );
    var longstr = false;
    var tmpstr = regex.exec( body );
    if( tmpstr ){
        var idx = tmpstr.index;
        if( body.length > tmpstr.index+20 ){
            longstr = true;
        }
        body = body.substring( idx-15, idx+20 );
    }else{
        if( body.length > 35 ){
            longstr = true;
        }
        body = body.substring( 0, 35 );
    }
    if( longstr ){
       body += "...";
    }
    return body;
}

function trim_body2( body ){
    var longstr = false;
    if( body.length > 60 ){
        longstr = true;
    }
    body = body.substring( 0, 60 );
    if( longstr ){
       body += "...";
    }
    return body;
}

function disp_keyword( body ){
    var tmpstr = trim_body( body );
    return tmpstr.replace( new RegExp( keyword , "ig" ) , "<strong class='searchWord'>" + keyword + "</strong>" );
}

function search_inner(){
    var start_time = (new Date()).getTime();
    var search_result = new Array();
    var contents = eval( global_var );
    var key = new RegExp( keyword, "i" );
    var hit_contents=0;
    for( var i=0; i<contents.length; i++){
        var hit=true;
        var title = key.exec( contents[i].title );
        var body = key.exec( contents[i].body );
        if( !title && !body ){
            hit = false;
        }
        if( hit ){
            search_result[ search_result.length ] = contents[i];
            hit_contents++;
            if( hit_contents > 30 ){
               break;
            }
        }
    }
    var end_time = (new Date()).getTime();
    if( search_result.length == 0 ){
        target_div.innerHTML = "見つかりませんでした。";
    }else{
        var html="";
	if( hit_contents > 30 ){
	    html += "<strong class='fs14'>検索結果が30件以上あります。新しい記事から30件を表示します</strong><br>";
        }else{
	    html += "<strong class='fs14'><span class='searchWord'>"+keyword+"</span>の検索結果は約"+search_result.length+"件</strong><br>";
        }
        html += "<span class='fs12' style='color:#666666'>検索時間："+((end_time-start_time)/1000)+"秒</span>";
        html += '<ol type=1 start=1 style="text-align:left;" class="ajaxresultList">';
        for( var i=0; i<search_result.length; i++){
            html += '<li class="fs12"><a href="' + search_result[i].link + '#search_word=' + keyword + '" target="_blank">';
            html += search_result[i].title + '</a><br>';
            html += disp_keyword(search_result[i].body) + '</li>';
        }
        html += '</ol>';
        target_div.innerHTML = html;
    }
}

function complete( request ){
    var tmpText = request.responseText;
    global_var = tmpText.replace(new RegExp( '<.*?>', "i"), '' );
    is_complete = true;
    search_inner();
}

function complete2( request ){
    var tmpText = request.responseText;
    global_var = tmpText.replace(new RegExp( '<.*?>', "i"), '' );
    is_complete = true;
    settarget_text();
}

function complete3( request ){
    objtooltip.innerHTML = request.responseText;
}

function complete4( request ){
    var tmpText = request.responseText;
    global_var = tmpText.replace(new RegExp( '<.*?>', "i"), '' );
    is_complete = true;
    settarget_title();
}

function ajaxIncrementalSearch( key ){
    var tags = document.getElementsByTagName('div');
    for( var i=0; i<tags.length; i++){
        if( tags[i].className == 'ajaxsearch-result' ){
            target_div = tags[i];
        }
    }
    keyword = key;
    if( keyword.length == 0 ){
        target_div.innerHTML = "";
        return;
    }
    target_div.innerHTML = 'please wait...';
    if( is_complete == false ){
        var myAjax = new Ajax.Request( '/abw/search_data.txt',
                                          {
                                            method:     'get',
                                            onComplete: complete
                                          }
                                      );
    }else{
        search_inner();
    }
}

/* tooltip window core script */
function settarget_text(){
    var contents = eval( global_var );
    var key = RegExp( targetnum, "i" );
    for( var i=0; i<contents.length; i++ ){
        var title = key.exec( contents[i].hash );
        if( title ){
            objtooltip.innerHTML = trim_body2(contents[i].body);
            break;
	}        
    }
}

function settarget_title(){
    var contents = eval( global_var );
    var key = RegExp( targetnum, "i" );
    for( var i=0; i<contents.length; i++){
        var title = key.exec( contents[i].image );
	if( title ){
	    objtooltip.innerHTML = contents[i].title;
	    break;
        }
    }
}

function showtarget( key ){
    objtooltip = document.getElementById("dhtmltooltip");
    objstyle = document.getElementById("dhtmltooltip").style;
    objstyle.visibility = 'visible';
    objstyle.width = '182px';
    new Effect.Opacity('dhtmltooltip', { from: 1, to: 1 } );

    targetnum = key;
    if( is_complete == false ){
        objtooltip.innerHTML = '<font color="#ffcc33">Ajax request. please wait..</font>';
        var myAjax = new Ajax.Request( "/abw/search_data.txt",
                                          {
                                            method:     'get',
                                            onComplete: complete2
                                          }
                                      );

    }else{
        objtooltip.innerHTML = '<font color="#ffcc33">Cache request. please wait..</font>';
        settarget_text();
    }
    tooltip=true;
}

function showtitle( key ){
    objtooltip = document.getElementById("dhtmltooltip");
    objstyle = document.getElementById("dhtmltooltip").style;
    objstyle.visibility = 'visible';
    objstyle.width = '182px';
    new Effect.Opacity('dhtmltooltip', { from: 1, to: 1 } );

    targetnum = key;
    if( is_complete == false ){
        objtooltip.innerHTML = '<font color="#ffcc33">Ajax request. please wait..</font>';
        var myAjax = new Ajax.Request( "/abw/search_data.txt",
                                          {
                                            method:     'get',
                                            onComplete: complete4
                                          }
                                      );

    }else{
        objtooltip.innerHTML = '<font color="#ffcc33">Cache request. please wait..</font>';
        settarget_title();
    }
    tooltip=true;
}

function showbitworks(key){
    var contents = eval( global_var );
    var key = RegExp( targetnum, "i" );
    for( var i=0; i<contents.length; i++ ){
        var title = key.exec( contents[i].image );
        if( title ){
            window.open(contents[i].link);
            break;
	}        
    }
}

function showimage( key ){
    objtooltip = document.getElementById("dhtmltooltip");
    objstyle = document.getElementById("dhtmltooltip").style;
    //return false; // little bit's tricky..

    objstyle.visibility = 'visible';
    objstyle.width = '162px';
    new Effect.Opacity('dhtmltooltip', { from: 0.8, to: 0.8 } );

    objtooltip.innerHTML = "please wait..";
    var thumbCGI = "/abw/cgi/thumb.cgi?url=" + key;
    var myAjax = new Ajax.Request( thumbCGI,
                                   {
                                      requestHeaders: ['REFERER',document.URL],
                                      method: 'get',
                                      onComplete: complete3
                                   }
                                 );

    tooltip=true;
}

function hidetarget(){
    objstyle.visibility = 'hidden';
    objstyle.left = '-300px';
    tooltip=false;
}

function movepos(evt){
    if( tooltip ){
        if( !!document.all ){ /* IE */
            objstyle.left = event.clientX + document.documentElement.scrollLeft + 20 + 'px';
            objstyle.top  = event.clientY + document.documentElement.scrollTop + 20 + 'px';
        }else{                /* FireFox */
            objstyle.left = evt.pageX + 20 + 'px';
            objstyle.top  = evt.pageY + 20 + 'px';
        }
    }
}

function startPrelink(rel){
    showimage(rel.href);
}

function initPrelink(){
    var anchors = document.getElementsByTagName('a');
    for(i=0;i<anchors.length;i++){
        var anchor = anchors[i];
        var relAttr = String(anchor.getAttribute('rel'));
        if (anchor.getAttribute('href') && (relAttr.toLowerCase().match('prelink'))){
            anchor.onmouseover = function() { startPrelink(this); };
            anchor.onmouseout = function() { hidetarget(); };
        }
    }
    //alert('hoge');
}

function addLoadEvent(func){
    var oldonload = window.onload;
    if( typeof window.onload != 'function'){
        window.onload = func;
    }else{
        window.onload = function(){
            oldonload();
            func();
        }
    }
}

/* event handler */
document.onmousemove = movepos;

//addLoadEvent(initPrelink);
