/**
 * use ajax to cast a metavote.
 */
function metavote(id,val) {
    var d = loadJSONDoc("/metavote?" + queryString({ "id": id, "val":val, "tg_format" : "json"}));
    d.addCallback(receiveMetavote);
}
function receiveMetavote(result) {
    if(!result["status"]){
        return;
    }
    var vote = result["vote"];
    var id = result["id"];
    if(vote == 0){
        setElementClass("metavote_plus" + id, "m");
        setElementClass("metavote_minus" + id, "m");
    }
    else if(vote > 0){
        setElementClass("metavote_plus" + id, "selected");
        setElementClass("metavote_minus" + id, "");
    }
    else{
        setElementClass("metavote_plus" + id, "");
        setElementClass("metavote_minus" + id, "selected");
    }
    if(result["metasum"] == 0){
        if(result["metasum_string"] == ''){
            addElementClass("toggle_metavote_no_detail" + id,"dispnone");
            addElementClass("toggle_metavote_detail" + id, "dispnone");
            removeElementClass("toggle_metavote_none" + id, "dispnone");
        }
        else{
            removeElementClass("toggle_metavote_no_detail" + id,"dispnone");
            addElementClass("toggle_metavote_detail" + id, "dispnone");
            addElementClass("toggle_metavote_none" + id, "dispnone");
        }
    }
    else{
        replaceChildNodes("metavote_detail" + id, SPAN(result["metasum_string"]));
        //can't use hide/show as they're not block but inline.
        addElementClass("toggle_metavote_none" + id, "dispnone");
        addElementClass("toggle_metavote_no_detail" + id,"dispnone");
        removeElementClass("toggle_metavote_detail" + id, "dispnone");
    }
}

/**
 * Erase and restore default values for text fields.
 * Based on http://www.yourhtmlsource.com/forms/clearingdefaulttext.html
 * but modified for Mochikit.
 */
connect(window, 'onload',
    function () {
        var formInputs = document.getElementsByTagName('input');
        for (var i = 0; i < formInputs.length; i++) {
            var theInput = formInputs[i];
        
            if (theInput.type == 'text' && theInput.className.match(/\bcleardefault\b/)) {  
                /* Add event handlers */          
                connect(theInput, 'onfocus', function(e) {
                    var target=e.target();

                    if (target.value == target.defaultText) {
                        target.value = '';
                    }
                });
                
                connect(theInput, 'onblur', function(e) {
                    var target=e.target();

                    if (target.value == '' && target.defaultText) {
                        target.value = target.defaultText;
                    }
                });
            
                /* Save the current value */
                if (theInput.value != '') {
                    theInput.defaultText = theInput.value;
                }
            }
        }
    }
);