var token = '';

var dc_count = 0;
var dc_reaped = 0;
var dc_done = 0;

var avg_pr = 0;
var total_pr = 0;
var max_pr = 0;
var min_pr = 10;

var total_time = 0;


function startPoll(url) {
    var pars = 'start&u='+url;
    var startreq = new Ajax.Request('poll.php', 
            {
                method: 'get', 
                parameters: pars, 
                onComplete: handlePollStart
            });
}

var timer;
function handlePollStart(request) {
    var result = request.responseText;
    var xmldoc = request.responseXML;

    if (xmldoc.getElementsByTagName('token').length) {
        token = xmldoc.getElementsByTagName('token').item(0).firstChild.data;
        dc_count = xmldoc.getElementsByTagName('count').item(0).firstChild.data;

        populateResult();
        document.getElementById('Progress').style.display = "block";
        timer = setTimeout("poll()", 500);

    } else {
        if (xmldoc.getElementsByTagName('error').length) {
            var error = xmldoc.getElementsByTagName('error').item(0).firstChild.data;
            alert(error);
        }

    }
}

function poll() {
    var pars = 'token='+token;
    var pollreq = new Ajax.Request('poll.php', 
            {
                method: 'get', 
                parameters: pars, 
                onComplete: handlePollResponse
            });
}

function handlePollResponse(request) {
    var result = request.responseText;
    //alert(result);

    var xmldoc = request.responseXML;

    var poll = xmldoc.getElementsByTagName('poll').item(0);
    var count = parseInt(poll.getAttribute('count'));
    if (count) {
        for (var i = 0; i < count; ++i) {
            var it = poll.getElementsByTagName('item').item(i);
            // Get data.
            var dc = it.getElementsByTagName('dc').item(0).firstChild.data;
            var pr = it.getElementsByTagName('pr').item(0).firstChild.data;
            var seq = it.getElementsByTagName('seq').item(0).firstChild.data;
            var cached = 0;
            if (it.getElementsByTagName('cached').length) {
                cached = 1;
            }
            // Update page.
            updatePR(dc, pr, cached, seq);
        }
    }

    total_time += 500;
    if ((dc_reaped < dc_count) && (total_time < 60000)) {
        if (total_time < 5000) {
            timer = setTimeout("poll()", 500);
        } else {
            timer = setTimeout("poll()", 1000);
        }
    } else {
        setTimeout('document.getElementById(\'Progress\').style.display = "none";', 500);
    }
}

function updatePR(dc, pr, cached, seq) {
    //alert('DC: '+dc+'\nPR: '+pr+'\nCached: '+cached);
    //var id = dc_done;
    var id = seq;
    dc_done++;

    // Average/Max/Min PR
    prnr = parseInt(pr);
    if (isNaN(prnr)) { prnr = 0; }
    max_pr = Math.max(max_pr, prnr);
    min_pr = Math.min(min_pr, prnr);
    ++dc_reaped;
    total_pr += prnr;
    avg_pr = Math.round((total_pr / dc_reaped) * 10) / 10;
    document.getElementById('avg_pr').innerHTML = avg_pr;
    document.getElementById('max_pr').innerHTML = max_pr;
    document.getElementById('min_pr').innerHTML = min_pr;

    // Progressbar
    var completed = (dc_reaped / dc_count) * 100;
//    alert(completed);
    document.getElementById('Progressbarcontent').style.width = completed+"%";
    if (dc_reaped == dc_count) {
        setTimeout('document.getElementById(\'Progress\').style.display = "none";', 500);
    }

    // DC
    var dc_content = "DC: <a ";
    dc_content += "href='http://"+dc+"'>"+dc+"</a>";
    document.getElementById('dc'+id).innerHTML = dc_content;
    // ToolBar
    var pr_content = "Toolbar PageRank: ";
    if (pr != "N/A") {
        pr_content += "<img height='5' width='40' src='/img/pr"+pr+".gif' alt='PR"+pr+"'/>&nbsp;("+pr+"/10)&nbsp;&nbsp;&nbsp;";
    } else {
        pr_content += "N/A&nbsp;";
    }
    document.getElementById('tb'+id).innerHTML = pr_content;
    // Live
    var cached_content = "Cached: ";
    if (cached) {
        cached_content += "Yes";
    } else {
        cached_content += "No";
    }
//    document.getElementById('cached'+id).innerHTML = cached_content;
}

function populateResult() {
    var dcinfo = '';
    for (var i = 0; i < dc_count; ++i) {
        var hdr = " <div id='dc"+i+"' class='DC'>&nbsp;Requesting data...</div>\n";
        var tb = " <div id='tb"+i+"' class='TB'></div>\n";
        var cached = " <div id='cached"+i+"' class='LPR'></div>\n";
        dcinfo += "<div id='pr"+i+"' class='PR'>\n"+hdr+tb+cached+"</div>\n";
    }
    $('result').innerHTML = dcinfo;
}

