// instantiate sender XMLHttpRequest object
var senderXMLHttpObj = getXMLHttpRequestObject();
// instantiate receiver XMLHttpRequest object
var receiverXMLHttpObj = getXMLHttpRequestObject();

// Create the XMLHttpRequestObject
function getXMLHttpRequestObject()
{
    var xmlobj;
    // Check for existing requests
    if (xmlobj!=null&&xmlobj.readyState!=0&&xmlobj.readyState!=4) {
        xmlobj.abort();
    }
    try {
        // Instantiate object for Mozilla, Nestcape, etc.
        xmlobj=new XMLHttpRequest();
    }
    catch(e) {
        try {
            // Instantiate object for Internet Explorer
            xmlobj=new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e) {
            // Ajax is not supported by the browser
            xmlobj=null;
            return false;
        }
    }
    return xmlobj;
};

// Check status of sender object
function senderStatusChecker()
{
    // Check if request is completed
    if(senderXMLHttpObj.readyState==4) {
        if(senderXMLHttpObj.status==200) {

            // If status == 200 display chat data
            //displayChatData(senderXMLHttpObj);
            // alert(senderXMLHttpObj);
        }
        else {
            var post=document.getElementById('content');
            var error_message = document.createTextNode('Failed to get response :'+ senderXMLHttpObj.statusText);
            post.appendChild(error_message);
        }
    }
};

// Check status of receiver object
function receiverStatusChecker() {
    // If request is completed
    if(receiverXMLHttpObj.readyState==4) {
        if(receiverXMLHttpObj.status==200) {
            // If status == 200 display chat data
            //alert(receiverXMLHttpObj.status);
            fillSuggest(receiverXMLHttpObj);
        }
        else {
            var post=document.getElementById('content');
            var error_message = document.createTextNode('Failed to get response :'+ receiverXMLHttpObj.statusText);
            post.appendChild(error_message);
        }
    }
};

// Get messages
function getChatData(){
    $word=document.getElementById('searchtext').value;
    receiverXMLHttpObj.open('GET','/suggest.php?word='+$word+'',false);
    // Если true, то асинхронный вызов.
    receiverXMLHttpObj.onreadystatechange=receiverStatusChecker;
    receiverXMLHttpObj.send(null);
    receiverStatusChecker();
};

function fillSuggest()
{
    var xmldoc = receiverXMLHttpObj.responseXML;
    var nodes = xmldoc.getElementsByTagName('w');

    var keywords='';
    for (i = 0; i < nodes.length; i++)
    {
        keywords+=nodes[i].firstChild.nodeValue+', ';
    }
    document.getElementById("skeywords").innerHTML=keywords;
};

var defaultText="";

this.searchfield = function(){


        // CONFIG

        var maxlistsize=15;

        // this is id of the search field you want to add this script to.
        // You can use your own id just make sure that it matches the search field in your html file.
        var id = "searchtext";

        // Text you want to set as a default value of your search field.

        // set to either true or false
        // when set to true it will generate search suggestions list for search field based on content of variable below
        var suggestion = true;

        var suggestionText = document.getElementById("skeywords").value;

        // END CONFIG (do not edit below this line, well unless you really, really want to change something :) )

        // Peace,
        // Alen

        var field = document.getElementById(id);
        var classInactive = "sf_inactive";
        var classActive = "sf_active";
        var classText = "sf_text";
        var classSuggestion = "sf_suggestion";
        this.safari = ((parseInt(navigator.productSub)>=20020000)&&(navigator.vendor.indexOf("Apple Computer")!=-1));
        if(field && !safari){
                field.value = defaultText;
                field.c = field.className;
                field.className = field.c + " " + classInactive;
                field.onfocus = function(){
                        this.className = this.c + " "  + classActive;
                        this.value = (this.value == "" || this.value == defaultText) ?  "" : this.value;
                };
                field.onblur = function(){
                        this.className = (this.value != "" && this.value != defaultText) ? this.c + " " +  classText : this.c + " " +  classInactive;
                        this.value = (this.value != "" && this.value != defaultText) ?  this.value : defaultText;
                        clearList();
                };
                if (suggestion){

                        var selectedIndex = 0;

                        field.setAttribute("autocomplete", "off");
                        var div = document.createElement("div");
                        var list = document.createElement("ul");
                        list.style.display = "none";
                        div.className = classSuggestion;
                        list.style.width = field.offsetWidth + "px";
                        div.appendChild(list);
                        field.parentNode.appendChild(div);

                        field.onkeypress = function(e){

                                var key = getKeyCode(e);

                                if(key == 13){ // enter
                                        selectList();
                                        selectedIndex = 0;
                                        return false;
                                };
                        };

                        field.onkeyup = function(e){

                                var key = getKeyCode(e);

                                switch(key){
                                case 13:
                                        return false;
                                        break;
                                case 27:  // esc
                                        field.value = "";
                                        selectedIndex = 0;
                                        clearList();
                                        break;
                                case 38: // up
                                        navList("up");
                                        break;
                                case 40: // down
                                        navList("down");
                                        break;
                                default:
                                        startList();
                                        break;
                                };
                        };

                        this.startList = function(){
                                var arr = getListItems(field.value);
                                if(field.value.length > 0){
                                        createList(arr);
                                } else {
                                        clearList();
                                };
                        };

                        this.getListItems = function(value){
                document.getElementById("skeywords").value='';
                getChatData();
                                var arr = new Array();
                suggestionText = document.getElementById("skeywords").innerHTML;
                                var src = suggestionText;
                //alert('suggestionText '+src);
                                var src = src.replace(/, /g, ",");
                                var arrSrc = src.split(",");
                count=0;
                                for(i=0;i<arrSrc.length;i++){
                                        if(arrSrc[i].substring(0,value.length).toLowerCase() == value.toLowerCase()){
                        if (count<maxlistsize)
                            {
                                arr.push(arrSrc[i]);
                                count++;
                            };
                                        };
                                };
                                return arr;
                        };

                        this.createList = function(arr){
                                resetList();
                                if(arr.length > 0) {
                                        for(i=0;i<arr.length;i++){
                                                li = document.createElement("li");
                                                a = document.createElement("a");
                                                a.href = "javascript:void(0);";
                                                a.i = i+1;
                                                a.innerHTML = arr[i];
                                                li.i = i+1;
                                                li.onmouseover = function(){
                                                        navListItem(this.i);
                                                };
                                                a.onmousedown = function(){
                                                        selectedIndex = this.i;
                                                        selectList(this.i);
                                                        return false;
                                                };
                                                li.appendChild(a);
                                                list.setAttribute("tabindex", "-1");
                                                list.appendChild(li);
                                        };
                                        list.style.display = "block";
                                } else {
                                        clearList();
                                };
                        };

                        this.resetList = function(){
                                var li = list.getElementsByTagName("li");
                                var len = li.length;
                                for(var i=0;i<len;i++){
                                        list.removeChild(li[0]);
                                };
                        };

                        this.navList = function(dir){
                                selectedIndex += (dir == "down") ? 1 : -1;
                                li = list.getElementsByTagName("li");
                                if (selectedIndex < 1) selectedIndex =  li.length;
                                if (selectedIndex > li.length) selectedIndex =  1;
                                navListItem(selectedIndex);
                        };

                        this.navListItem = function(index){
                                selectedIndex = index;
                                li = list.getElementsByTagName("li");
                                for(var i=0;i<li.length;i++){
                                        li[i].className = (i==(selectedIndex-1)) ? "selected" : "";
                                };
                        };

                        this.selectList = function(){
                                li = list.getElementsByTagName("li");
                                a = li[selectedIndex-1].getElementsByTagName("a")[0];
                                field.value = a.innerHTML;
                                clearList();
                        };

                };
        };

        this.clearList = function(){
                if(list){
                        list.style.display = "none";
                        selectedIndex = 0;
                };
        };
        this.getKeyCode = function(e){
                var code;
                if (!e) var e = window.event;
                if (e.keyCode) code = e.keyCode;
                return code;
        };
};

// script initiates on page load.

this.addEvent = function(obj,type,fn){
        if(obj.attachEvent){
                obj['e'+type+fn] = fn;
                obj[type+fn] = function(){obj['e'+type+fn](window.event );}
                obj.attachEvent('on'+type, obj[type+fn]);
        } else {
                obj.addEventListener(type,fn,false);
        };
};

flag=0;
addEvent(window,"load",searchfield);


