var xmlHttp;
var site;

function createXMLHttpRequest()
{
    if (window.ActiveXObject)
    {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest)
    {
        xmlHttp = new XMLHttpRequest();
    }
}

function doAjaxStuff(type, url, queryString)
{
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    if (type == "POST")
    {
        xmlHttp.open(type, url, true);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    }
    else
    {
        url = url + "?" + queryString + "&timestamp=" + new Date().getTime();
        xmlHttp.open(type, url, true);
        queryString = null;
    }
    document.getElementById("siterating").innerHTML = "Please wait...submitting your rating...";
    setTimeout("xmlHttp.send('"+queryString+"')", 1000);
}

function handleStateChange()
{
    if(xmlHttp.readyState == 4)
    {
        if(xmlHttp.status == 200)
        {
            parseResults();
        }
    }
}

function submitRating(score, site)
{
    var rating      = encodeURIComponent(score);
    site            = encodeURIComponent(site);
    var url         = "/directory/rating.php";
    var queryString = "rating=" + rating + "&site=" + site;
    doAjaxStuff("GET", url, queryString);
    return false;
}

function parseResults()
{
    var cookieName = "sites";
    var results    = xmlHttp.responseXML;
    var response   = results.getElementsByTagName("xmlresponse");
    var code       = response[0].getElementsByTagName("resultcode")[0].firstChild.nodeValue;

    if (code.indexOf('success') != -1)
    {
        document.getElementById("siterating").innerHTML = "Thank you for rating this website.";
        var ratedsites = getCookie("sites");
        if (!ratedsites)
        {
            ratedsites = site;
        }
        else
        {
            ratedsites += "|" + site;
        }
        setCookie(cookieName, ratedsites, 180);
    }
    else
    {
        document.getElementById("siterating").innerHTML = "There was an error while contacting the server.";
    }
}

function prepareRating()
{
    if (!document.getElementsByTagName) return false;
    if (!document.getElementById) return false;
    if (document.getElementById("siterating"))
    {
        site     = document.getElementById("site").getAttribute("value");
        rateform = document.getElementById("siterating");
        ratings  = rateform.getElementsByTagName("input");
        for (var i = 0; i < ratings.length; i++)
        {
            if (ratings[i].getAttribute("type") == "radio")
            {
                ratings[i].onclick = function()
                {
                    submitRating(this.getAttribute("value"), site);
                }
            }
        }
    }
}

addLoadEvent(prepareRating);
