var searchTextBoxId = "query";
var cline = 0;
var tline = 0;
var edited = false;

function keywordKeyDown(e) {
    var keyCode
    if(window.event != null) {
        keyCode = e.keyCode;
    } else if(e.which) { // Netscape/Firefox/Opera
        keyCode = e.which;
    }
    if(keyCode != null) {
        if(keyCode ==  9)   return;     //Tab
        if(keyCode == 13)   return;     //Enter
        if(keyCode == 16)   return;     //Shift
        if(keyCode == 17)   return;     //Ctrl
        if(keyCode == 18)   return;     //Alt
        if(keyCode == 45)   return;     //Ins
        if(keyCode == 32)   return;     //Space
        if(keyCode == 33)   return;     //PgUp
        if(keyCode == 34)   return;     //PgDn
        if(keyCode == 35)   return;     //End
        if(keyCode == 36)   return;     //Home
        if(keyCode == 37)   return;     //←
        if(keyCode == 39)   return;     //→
        if(keyCode == 240)   return;    //Caps
        if(keyCode == 38) { //↑
            if(document.getElementById("tr0") != null) {
               cline--;
               if(cline < 1) cline = tline;
               setTimeout('selectLine()', 10);
            }
            return;
        }

        if(keyCode == 40) { //↓
            if(document.getElementById("tr0") != null) {
               cline++;
               if(cline > tline) cline = 1;
               setTimeout('selectLine()', 10);
            }
            return;
        }
        edited = true;
   }
}

function callSuggestion() {
    cline = 0;
    tline = 0;
    var url = '/antares/suggest';
    var qtext = trim(document.getElementById(searchTextBoxId).value);
    if(qtext != '') {
        var queryString = paramEscape("q=" + qtext);
        execAsyncJson(url + "?" + queryString, "getSuggestion");
    } else {
        getSuggestion(null);
    }
}

function trim(value) {
    return value.replace(/^\s+|\s+$/g, "");
}

function getSuggestion(jsonData) {
    if(jsonData == null || jsonData.response.length == 0) {
        removeSuggestion();
    } else {
        setOffsets();
        tline = jsonData.response.length;
        var s = "";
        s += '<table width=100% cellpadding=0 cellspacing=0 border=0>'
        for(i=0; i<tline; ++i) {
            s += '<tr id=tr' + i + ' onclick=clickLine(' + i + ') onmouseover=trOver(' + i + ') onmouseout=trOut(' + i + ')><td colspan=2 align=left>'
            s += '<input type=hidden id=w' + i + ' value="' + removeBTag(jsonData.response[i].words) + '">'
            s += adjustCss(jsonData.response[i].words)
            s += '</td></tr>'
        }
        s += '<tr onclick="clickHeader(event)" class=s_header><td width=70% align=left></td><td width=25% align=right><a href="javascript:removeSuggestion();"><u>閉じる</u></a></td></tr>'
        s += '</table>';
        var suggestDiv = document.getElementById("suggest");
        suggestDiv.innerHTML = s;
        suggestDiv.style.visibility = "visible";
        document.onclick=function() {removeSuggestion()};
    }
}

function trOver(c_l) {
    for(i=0;i<tline;i++) {
        if(document.getElementById("tr" + i) != null) {
            if(i == c_l) {
                document.getElementById("tr" + i).style.backgroundColor="#E3EDF5";
            } else {
                document.getElementById("tr" + i).style.backgroundColor="";
            }
        }
   }
}

function trOut(c_l) {
    if(document.getElementById("tr" + c_l) != null) {
        document.getElementById("tr" + c_l).style.backgroundColor="";
    }
}

function selectLine() {
    edited = false;
    c_l = cline-1;
    for(i=0;i<tline;i++) {
        if(i == c_l) {
            if(document.getElementById("tr" + i) != null) {
                document.getElementById("tr" + i).style.backgroundColor="#E3EDF5";
                clickLine(i);
            }
        } else {
            if(document.getElementById("tr" + i) != null) {
                document.getElementById("tr" + i).style.backgroundColor="";
            }
        }
   }
}

function clickLine(i) {
    edited = false;
    cline = i+1;
    document.getElementById(searchTextBoxId).value = document.getElementById("w" + i).value;
}

function clickHeader(e) {
    var evt = e || window.event;
    if (evt.stopPropagation) {
        evt.stopPropagation();
    } else {
        evt.cancelBubble = true;
    }
}

function removeSuggestion() {
    var suggestDiv = document.getElementById("suggest");
    suggestDiv.innerHTML = "";
    suggestDiv.style.visibility = "hidden";
    document.onclick=null;
}

function adjustCss(val) {
    val = val.replace(/<b>/ig,'<font color="#0066CC">');
    val = val.replace(/<\/b>/ig,"</font>");
    return val;
}


window.onresize = function() {
    setOffsets();
}
function setOffsets() {
    var q = document.getElementById(searchTextBoxId);
    var suggestDiv = document.getElementById("suggest");
    var suffix = "px";
    var width = q.offsetWidth - 2;
    var left = q.offsetLeft;
    var top = q.offsetTop + q.offsetHeight;
    //alert("width:" + width + " left:" + left + " top:" + top);
    suggestDiv.style.width = width + suffix;
    suggestDiv.style.left = left + suffix;
    suggestDiv.style.top = top + suffix;
}


var _last;
function changeCaptureEvent() {
    var _now = document.getElementById(searchTextBoxId).value;
    if(_now != _last && edited) {
        callSuggestion();
        _last = _now;
    }
    setTimeout("changeCaptureEvent()", 500);
}

function s_init() {
    changeCaptureEvent();
}

function paramEscape(paramValue) {
    return encodeURI(paramValue);
}

//util
function getBrowserName()  {
    var aName  = navigator.appName.toUpperCase();
    var uName = navigator.userAgent.toUpperCase();
    if (uName.indexOf("SAFARI") >= 0)  return "Safari";
    if (uName.indexOf("OPERA") >= 0)  return "Opera";
    if (uName.indexOf("FIREFOX") >= 0)  return "Firefox";
    if (aName.indexOf("NETSCAPE") >= 0)  return "Netscape";
    if (aName.indexOf("MICROSOFT") >= 0) return "Explorer";
    return "";
}

function removeBTag(str) {
    return str.replace(/<\/*B>/ig,"");
}

function htmlEncode(str) {
    return   str .
             replace(/&/ig, "&amp;").
             replace(/</ig, "&lt;").
             replace(/>/ig, "&gt;").
             replace(/&apos;/ig, "&apos;").
             replace(/"/ig, "&quot;").
             replace(/ /ig, "&nbsp;");
}

function htmlDecode(str) {
    return  str.
              replace(/&nbsp;/ig, " ").
              replace(/&quot;/ig, "\"").
              replace(/&apos;/ig, "&apos;").
              replace(/&gt;/ig, ">").
              replace(/&lt;/ig, "<").
              replace(/&amp;/ig, "&");
}

