var request = false;
var request_id;
var def_images = [];
var timer_id;
var the_ob;

function $(id)
{
    return document.getElementById(id);
}

function search(e, trigger)
{
    var keynum;

    if (trigger.type && trigger.type == 'text')
    {
        if (window.event) // IE
            keynum = e.keyCode
        else if (e.which) // Netscape/Firefox/Opera
            keynum = e.which
        if (keynum == 13 || keynum == 10)
        {
            _search();
            return false;
        }
        else
            return true;
    }
    else
        _search();
}

function _search()
{
    var q;
    
    q = $('searchText').value;

    if (q.length > 0)
    {
        var flag = 0;
        
        if ($('searchInNames').checked)
            flag |= 1;
        if ($('searchInDescription').checked)
            flag |= 2;
        
        if (!flag)
            flag |= 1;

        document.location = '/?q=' + encodeURIComponent(q.replace(/&/, '%26')) + '&' + 'flag=' + flag;
    }
}

function changedFlags(sender)
{
    if (!$('searchInNames').checked && !$('searchInDescription').checked)
    {
        $('searchInNames').checked = true;
        $('searchInDescription').checked = true;
        sender.checked = false;
    }
}

function vote(for_what, stars_count)
{
    if (request !== false)
        window.alert('Please wait, other information already in sending process...');
    else
    {
        request = getHTTPObject();
        if (request)
        {
            request_id = for_what;
            request.onreadystatechange = vote_callback;
            request.open("post", "vote/?", true);
            request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            request.send('for_what=' + for_what + '&stars_count=' + stars_count);
        }
        else
        {
            window.alert('Your browser doesn\'t support AJAX technology, please update it to be able to vote!');
            request = false;
        }
    }
}

function vote_callback()
{
    if (request.readyState == 4)
    {
        if (request.status == 200 || request.status == 304)
        {
            if (!isNaN(request.responseText))
            {
                if (request.responseText >= 0 && request.responseText <= 5)
                {
                    set_vote_stars(request_id, parseFloat(request.responseText))
                    set_vote_label(request_id, 'Thank you for voting!');
                }
                else if (request.responseText == 6)
                    set_vote_label(request_id, 'Unable to process your vote!');
                else if (request.responseText == 7)
                    set_vote_label(request_id, 'You have already voted for this object today!');
            }
        }
        else
            set_vote_labe('Couldn\'t send your vote, please try later.')
        request = false;
    }
}

function set_vote_stars(vs_id, vs_stars)
{
    var delta = vs_stars - parseInt(vs_stars / 0.5, 10) * 0.5;
    if (delta != 0)
    {
        if (delta < 0.25)
            vs_stars -= delta;
        else
            vs_stars += (0.5 - delta);
    }
    var full_stars_count = Math.floor(vs_stars);
    var half_stars_count = (full_stars_count == vs_stars) ? 0 : 1;
    var i = 0;
    while (i < full_stars_count)
    {
        var cur_ob = $('rat_' + vs_id + '_' + (i + 1));
        if (cur_ob)
        {
            def_images[cur_ob.id] = 'images/voting_10.gif';
            cur_ob.src = def_images[cur_ob.id];
        }
        i++;
    }
    if (half_stars_count == 1)
    {
        var cur_ob = $('rat_' + vs_id + '_' + (i + 1));
        if (cur_ob)
        {
            def_images[cur_ob.id] = 'images/voting_05.gif';
            cur_ob.src = def_images[cur_ob.id];
        }
        i++;
    }
    while (i < 5)
    {
        var cur_ob = $('rat_' + vs_id + '_' + (i + 1));
        if (cur_ob)
        {
            def_images[cur_ob.id] = 'images/voting_00.gif';
            cur_ob.src = def_images[cur_ob.id];
        }
        i++;
    }
}

function set_vote_label(vl_id, vl_label)
{
    alert(vl_label);
}

function handle_stars(ob)
{
    var my_parts = ob.id.split('_');
    for (var i = parseInt(my_parts[2], 10) + 1; i <= 5; i++)
    {
        var cur_id = my_parts[0] + '_' + my_parts[1] + '_' + i;
        if (def_images[cur_id] != undefined && def_images[cur_id] != null)
        {
            $(cur_id).src = def_images[cur_id];
            def_images[cur_id] = null;
        }
    }
    the_ob = new Object();
    the_ob.id = my_parts[0] + '_' + my_parts[1] + '_0';
}

function rat_mouse_out(ob)
{
    handle_stars(ob)
    timer_id = setTimeout('rat_mouse_out(the_ob)', 500);
}

function rat_mouse_over(ob)
{
    clearTimeout(timer_id);
    var my_parts = ob.id.split('_');
    handle_stars(ob);
    for (var i = 1; i <= parseInt(my_parts[2], 10) - 1; i++)
    {
        var cur_id = my_parts[0] + '_' + my_parts[1] + '_' + i;
        if (def_images[cur_id] == undefined || def_images[cur_id] == null)
        {
            def_images[cur_id] = $(cur_id).src;
            $(cur_id).src = 'images/voting_10_hover.gif';
        }
    }
    if (def_images[ob.id] == undefined || def_images[ob.id] == null)
        def_images[ob.id] = ob.src;
    ob.src = 'images/voting_10_hover.gif';
}

function rat_mouse_click(ob)
{
    var my_parts = ob.id.split('_');
    vote(my_parts[1], my_parts[2]);
}

function getHTTPObject()
{
    var xhr = false;
    if (window.XMLHttpRequest) // Opera, Firefox, M$ IE7, ...
        xhr = new XMLHttpRequest();
    else if (window.ActiveXObject) // M$ IE5-6
    {
        try
        {
            xhr = new ActiveXObject("Msxml2.XMLHTTP"); // Newer version
        }
        catch (e)
        {
            try
            {
                xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Older version
            }
            catch (e)
            {
                xhr = false;
            }
        }
    }
    return xhr;
}
