function setCookie(name, value, expiredays) {
    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
}

function getCookie(name) {
    var start, end;

    if (document.cookie.length > 0) {
        start = document.cookie.indexOf(name + "=");
        if (start != -1) {
            start = start + name.length + 1;
            end = document.cookie.indexOf(";", start);
            if (end == -1) {
                end = document.cookie.length;
            }
            return unescape (document.cookie.substring (start, end));
        }
    }
    return '';
}

function getFormData(sender) {
    var rankNodeID = document.getElementById("RankNodeID");
    var rankSubmit = sender.value ? sender.value : 0;
    
    if (rankNodeID && rankNodeID.value) {
        rankNodeID = rankNodeID.value;
    } else {
        rankNodeID = null;
    }
    if (rankNodeID && rankSubmit) {
        return 'RankSubmit=' + rankSubmit +
            '&SingleVote=True&RankNodeID=' + rankNodeID +
            '&mode=Poll&ajax=true';
    }
    return null;
}

function updateResults(results) {
    for (var id in results) {
        var elem = document.getElementById(id);
        if (elem) {
            while (elem.firstChild) {
                elem.removeChild(elem.firstChild);
            }
            elem.appendChild (document.createTextNode (results[id]));
        }
    }
}

function setDisabled (elem) {
    if (typeof (elem) === "string") {
        elem = document.getElementById(elem);
        setDisabled(elem);
    } else {
        try {
            elem.disabled = false;
        }
        catch (x) {
            inspect(x);
        }
        if (elem.childNodes && elem.childNodes.length > 0) {
            for (var x = 0; x < elem.childNodes.length; x++) {
                setDisabled(elem.childNodes[x]);
            }
        }
    }
}

function disableControls() {
    var buttons = YAHOO.util.Dom.getElementsByClassName('RankBtn');
    //setDisabled("rating");
    if (buttons && buttons.length) {
        for (var i = 0; i < buttons.length; i++) {
            var button = buttons[i];
            YAHOO.util.Dom.addClass(button, 'disabled');
            button.disabled = true;
            button.src = "/images/" + button.id + "_grey.jpg";
        }
    }
}

function sendRanking(rankData) {
    var callback = {
        success: function(response) {
            try {
                updateResults(YAHOO.lang.JSON.parse(response.responseText));
                disableControls();
                if (rankNodeId && rankNodeId.value) {
                    setCookie("Poll" + rankNodeId.value, "True", 365);
                }
            } catch (x) {
                inspect(x);
                alert("Couldn't update the results.");
            }
        },
        failure: function(response) {
            if (!YAHOO.util.Connect.isCallInProgress(response)) {
                alert("Failed to submit news ranking.");
            }
        }
    };
    YAHOO.util.Connect.asyncRequest('POST', document.location, callback, rankData);
}

function handleRanking(event) {
    var sender = null, formData;
    var cookie = getCookie("Poll" + rankNodeId.value);
    if (cookie != "True") {
        if (event.srcElement) {
            sender = event.srcElement;
        } else if (event.target) {
            sender = event.target;
        }

        if (sender) {
            formData = getFormData(sender);
            if (formData) {
                sendRanking(formData);
            }
        }
    } else {
        var msg = document.getElementById("responseMsg");
        if (msg) {
            msg.appendChild(document.createTextNode("You have already voted for this item"));
            msg.appendChild(document.createElement("br"));
        }
    }
}

function setFormHooks() {
    YAHOO.util.Event.addListener("Ranking_Good",    "click", handleRanking);
    YAHOO.util.Event.addListener("Ranking_Neutral", "click", handleRanking);
    YAHOO.util.Event.addListener("Ranking_Bad",     "click", handleRanking);
    YAHOO.util.Event.addListener("rating", "submit", function(event) {
        if (event && event.preventDefault) {
            event.preventDefault();
        }
        return false
    });
}

var rankNodeId = null;

YAHOO.util.Event.onDOMReady(function() {
    rankNodeId = document.getElementById("RankNodeID");
    if (rankNodeId && rankNodeId.value) {
        setFormHooks();
    }
});
