suggest words within a textbox as user types

[ permalink ] [ download ]
function xmlhttpPost(strURL) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage();
        }
    }
    self.xmlHttpReq.send(getquerystring());
}

function getquerystring() {
    var form = document.forms['f1'];
    var word = form.word.value;
    form.word.typed = word;
    qstr = 'typed=' + escape(word);  // NOTE: no '?' before querystring
    return qstr;
}

function updatepage(){
    xml = self.xmlHttpReq.responseXML;
    str = self.xmlHttpReq.responseText;

    if (xml.getElementsByTagName("a").length > 0)
    {
      var new_word = xml.getElementsByTagName("a")[0].firstChild.data
      if (document.fast_writting==0){
         fill_field(new_word)
      }
      suggestion_div = document.getElementById("suggestions")
      suggestion_div.innerHTML = str;
      suggestion_div.style.height = (xml.getElementsByTagName("a").length * 20) + 'px';
      suggestion_div.style.visibility = 'visible';
    } else
    {
      suggestion_div = document.getElementById("suggestions")
      suggestion_div.style.visibility = 'hidden';
    }

}

function fill_field(new_word){
    var form = document.forms['f1'];
    form.word.value = new_word;
    var iStart = form.word.typed.length;
    var iLength = (new_word.length);
    if (form.word.createTextRange) {
        var oRange = form.word.createTextRange();
        oRange.moveStart("character", iStart);
        oRange.moveEnd("character", iLength - form.word.value.length);
        oRange.select();
    } else if (form.word.setSelectionRange) {
        form.word.setSelectionRange(iStart, iLength);
    }
    form.word.focus();
}

function handleKeyDown(oEvent) {
    document.fast_writting=1;
};

function handleKeyUp(oEvent) {
    document.fast_writting=0;
    var iKeyCode = oEvent.keyCode;

    if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)) 
    {
      suggestion_div = document.getElementById("suggestions");
      suggestion_div.style.visibility = 'hidden';
    } else 
    {
      xmlhttpPost("pasarteas_suggest")
    }
}
hits counter