function Ajax()
{
    // экземпляр XMLHttpRequest
    var req;

    /**
    * Создает объект XMLHttpRequest
    * 
    * @param void
    * @return XMLHttpRequest|null
    */
    this.createRequestObject = function()
    {
        if (window.XMLHttpRequest) {
            try {
                req = new XMLHttpRequest();
            } catch (e){}
        } else if (window.ActiveXObject) {
            try {
                req = new ActiveXObject('Msxml2.XMLHTTP');
            } catch (e){
              try {
                  req = new ActiveXObject('Microsoft.XMLHTTP');
              } catch (e){}
            }
        }

        if (!req)
        {
            alert('Ваш броузер не поддерживает XMLHttpRequest');
            return;
        }
    }
    
    this.createRequestObject();

    /**
    * Отправляет GET-запрос по адресу url
    * 
    * @param string url
    * @return void
    */
    this.get = function(url)
    {
        req.open('GET', url, false);
        req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
        req.send(null);

        try
        {
            if (!req.status == 200)
            {
                alert("Error XMLHttpRequest!\nreq.readyState: " + req.readyState + ", req.status: " + req.status);
            }
        }
        catch (e)
        {
            alert('Error: ' + e.toString());
        }
    }

    /**
    * Создает хеш-массив id => value из XML-представления ответа.
    *
    * @param void
    * @return array  
    */
    this.getXml2Hash = function()
    {
        var xmlDomDoc = req.responseXML; // объект типа xmldomdocument
        var arr = new Array();

        if (!xmlDomDoc || !xmlDomDoc.getElementsByTagName('root')[0])
        {
            arr[0] = 
            {
                'fio': 'Временные трудности на сервере',
                'count': '-1',
                'f': '',
                'i': '',
                'o': ''
            }

            return arr;
        }

        var nodes = xmlDomDoc.getElementsByTagName('root')[0].childNodes;

        for (var i=0; i <nodes.length; i++)
        {
            if (nodes.item(i).nodeType == 1)
            {
                if (nodes.item(i).firstChild)
                {
                    arr[i] =
                    {
                        'fio': nodes.item(i).firstChild.nodeValue,
                        'count': nodes.item(i).getAttribute('count'),
                        'f': nodes.item(i).getAttribute('f'),
                        'i': nodes.item(i).getAttribute('i'),
                        'o': nodes.item(i).getAttribute('o')
                    }
                }
            }
        }

        return arr;
    }
}

function dom_remove_trs(node)
{
    while (node.firstChild.nextSibling &&
           node.firstChild.nextSibling.nodeType == 1 &&
           node.firstChild.nextSibling.getAttribute('class') && 
           node.firstChild.nextSibling.getAttribute('class') == 'online_tr')
    {
        node.removeChild(node.firstChild.nextSibling);
    }
}

function make_tr(results)
{
    var tr = document.createElement('tr');
    tr.setAttribute('class', 'online_tr');
    
    // ФИО
    var td = document.createElement('td');
    td.setAttribute('class', 'fio');
    td.appendChild( document.createTextNode(results['fio']) );
    tr.appendChild(td);
    
    // count
    var td = document.createElement('td');
    td.setAttribute('class', 'center bold');
    td.appendChild( document.createTextNode(results['count']) );
    tr.appendChild(td);
    
    // Яндекс
    var td = document.createElement('td');
    var a = document.createElement('a');
    a.setAttribute('target', '_blank');
    a.setAttribute('href', 'http://yandex.ru/yandsearch?text=' + encodeURI(results['fio']));
    var img = document.createElement('img');
    img.setAttribute('width', 36);
    img.setAttribute('src', '/icon_ya.gif');
    img.setAttribute('alt', 'Посмотреть информацию о ' + results + ' в Яндексе');
    img.setAttribute('title', 'Посмотреть информацию о ' + results + ' в Яндексе');
    a.appendChild(img);
    td.appendChild(a);
    tr.appendChild(td);
    
    // Google
    var td = document.createElement('td');
    var a = document.createElement('a');
    a.setAttribute('target', '_blank');
    a.setAttribute('href', 'http://www.google.ru/search?source=ig&hl=ru&rlz=&q=' + encodeURI(results['fio']));
    var img = document.createElement('img');
    img.setAttribute('width', 60);
    img.setAttribute('src', '/icon_google.gif');
    img.setAttribute('alt', 'Посмотреть информацию о ' + results['fio'] + ' в Google');
    img.setAttribute('title', 'Посмотреть информацию о ' + results['fio'] + ' в Google');
    a.appendChild(img);
    td.appendChild(a);
    tr.appendChild(td);
    
    // поехали
    var td = document.createElement('td');
    td.setAttribute('class', 'vote');
    var a = document.createElement('a');
    a.setAttribute('href', '/?f=' + (results['f']) + '&i=' + (results['i']) + '&o=' + (results['o']) + '#form');
    a.appendChild( document.createTextNode('поехали!') );
    td.appendChild(a);
    tr.appendChild(td);
    
    return tr;
}

function query()
{
    var ajax = new Ajax();
    ajax.get('/ajax.php');
    return ajax.getXml2Hash();
}

function run()
{
    var table = document.getElementById('rating').firstChild;
    dom_remove_trs(table);
   
    var results = query();
    
    if (results)
    {
        for (var i=0; i<results.length; i++)
        {
            var tr = make_tr(results[i]);
            table.appendChild(tr);
        }
    }
}