var polldiv = new Array();
var divbars = new Array();
var barpct  = new Array();
var divsize = new Array();
var cursize = new Array();
//these two lines preload the bar image, although it would be rad if we didn't have to hardcode it here =/
var prld = new Image();
prld.src = '/img/pollbar.gif';

function initPolls() {
    var polls = getElementsByAttribute("class", "gotopoll");

    for (var i = 0; i < polls.length; i++) {
        var frm = polls[i].getElementsByTagName("form")[0];
        var btn = frm['btn'];
        attachEventListener(btn, 'click', showResults);
        var ht = polls[i].offsetHeight;
        polls[i].style.height = (ht - 16) +"px";
    }
}
//addLoadListener(initPolls);

function triggerPoll() {
    showResultsForPoll(getElementsByAttribute("class", "gotopoll")[0]);
}

function showResults(event) {
    if (typeof event == 'undefined')
        event = window.event;


    showResultsForPoll(getEventTarget(event).parentNode.parentNode);
}

function showResultsForPoll(target) {
    if (typeof target == 'undefined' || !hasClass(target, "gotopoll"))
        return false;
    var pollnum = polldiv.length;
    polldiv[pollnum] = target;
    
    //hide the button
    var frm = target.getElementsByTagName("form")[0];
    if (typeof frm['btn'] != 'undefined')
        frm['btn'].style.display = 'none';

    //hide the pollnote
    var divs = target.getElementsByTagName("div");
    var plswaitexist = false;
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className == 'pollnote')
            divs[i].style.display = 'none';
        if (divs[i].className == 'pls')
            plswaitexist = true;
    }

    //show a "please wait"
    if (!plswaitexist) {
        var plsdiv = document.createElement("div");
        plsdiv.appendChild(document.createTextNode("Please wait..."));
        addClass(plsdiv, "pls");
        target.appendChild(plsdiv);
    }

    //get the pollkey
    var pollkey = frm['poll_key'].value;

    //get the selectedanswer
    var answ = '';
    if (typeof frm['ans'] != 'undefined') {
        for (var i = 0; i < frm['ans'].length; i++) {
            if (frm['ans'][i].checked)
                answ = frm['ans'][i].value;
        }
    }

    //make ajax call
    g_ajax.CallXMLHTTPObjectPOSTParam('/pollvote.php?poll_key='+ pollkey +'&answer='+ answ, pollCallback, pollnum);
}

function pollCallback(in_text, pollnum) {
    var target = polldiv[pollnum];
    if (in_text.substring(0, 7) != "SUCCESS") {
        var vals = in_text.split(',');
        var ansdiv = target.getElementsByTagName("div");
        for (var i = 0; i < ansdiv.length; i++) {
            if (ansdiv[i].className == "pls")
                ansdiv[i].innerHTML = 'ERROR: '+ vals[1];
        }
        return;
    }
    var vals = in_text.split(',');
    var pct = new Array();
    var multfactor = 0;
    for (var i = 2; i < vals.length; i++) {
        pct[i-2] = Math.round(100 * parseInt(vals[i], 10) / parseInt(vals[1], 10));
        if (pct[i-2] > multfactor)
            multfactor = pct[i-2];
    }
    multfactor = (target.offsetWidth - 60) / multfactor;

    target.style.height = 'auto';
    
    var ansdiv = target.getElementsByTagName("div");
    for (var i = 0; i < ansdiv.length; i++) {
        clearDiv(ansdiv[i]);
        if (ansdiv[i].className == "pls") // set it to display votes taken
            ansdiv[i].innerHTML = 'Total Votes: '+ vals[1];
    }

    var spans = target.getElementsByTagName("span");
    for (var i = 0; i < spans.length; i++) {
        if (typeof spans[i].style.styleFloat != 'undefined')
            spans[i].style.styleFloat = "none";
        else
            spans[i].style.cssFloat = "none";
        spans[i].style.display = "block";
        addClass(spans[i], 'shrink');
    }

    //set a placeholder in the arrays
    var quiznum = divbars.length;
    divbars[quiznum] = new Array();
    barpct[quiznum]  = pct;
    divsize[quiznum] = new Array();
    cursize[quiznum] = new Array();

    var barcnt = 0;
    for (var i = 0; i < ansdiv.length; i++) {
        var tmp = addBar(ansdiv[i]);
        if (tmp) {
            divbars[quiznum][barcnt] = tmp;
            divsize[quiznum][barcnt] = Math.round(pct[barcnt] * multfactor);
            cursize[quiznum][barcnt] = 30;
            barcnt++;
        }
    }

    growBars(quiznum);
}

function clearDiv(dv) {
    if (dv.className == "ans") {
        var inp = dv.getElementsByTagName("input")[0];
        if (typeof inp != 'undefined')
            dv.removeChild(inp);
    }
}

function addBar(dv) {
    if (dv.className == "ans") {
        var divbar = document.createElement("div");
        addClass(divbar, "bar");
        var chld = document.createElement("div");
        chld.appendChild(document.createTextNode("-"));
        addClass(chld, "pct");
        divbar.appendChild(chld);
        return dv.appendChild(divbar);
    }
    else
        return false;
}

function growBars(quiznum) {
    var bars = divbars[quiznum];
    var ln = bars.length;
    var stop = true;
    for (var i = 0; i < ln; i++) {
        cursize[quiznum][i] += 4;
        var cur = cursize[quiznum][i];
        if (cur < (divsize[quiznum][i] +30)) {
            bars[i].style.width =  cur +"px";
            stop = false;
        }
    }
    if (!stop)
        setTimeout("growBars("+ quiznum +")", 25);
    else {
        for (var i = 0; i < ln; i++)
            bars[i].getElementsByTagName("div")[0].innerHTML = barpct[quiznum][i] +"%";
    }
}
