/************************************************************************/
/* SIlive v1.0                                                          */
/* ===========================                                          */
/*   Release date:   24-04-2009                                         */
/*                                                                      */
/*   Written by Ulrik Nielsen - ulriknielsen@gmail.com                  */
/*   Freelance Web Developer - PHP, Ruby and Javascript programming     */
/*   This program is copyrighted. You are not allowed to use,           */
/*   redistribute and/or modify it without permission.                  */
/************************************************************************/

var xmlHttp;
var targetDiv;
var maxid;
var rclass;
var iTime = 10;
var cTime = iTime;

function pushPage(userURL,userGET,userDIV){
        xmlHttp=GetXmlHttpObject();
        if (xmlHttp==null){
                alert ("Your browser does not support AJAX!");
                return;
        }
        var url=userURL;
        url=url+"?sid="+Math.random();
        url=url+userGET;
        targetDiv = userDIV;
        xmlHttp.onreadystatechange=stateChanged;
        xmlHttp.open("GET",url,true);
        xmlHttp.send(null);
}

function GetXmlHttpObject()
{
        var xmlHttp=null;
        try
        {
                // Firefox, Opera 8.0+, Safari
                xmlHttp=new XMLHttpRequest();
        }
        catch (e)
        {
                // Internet Explorer
                try
                {
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e)
                {
                        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
        }
        return xmlHttp;
}

function stateChanged()
{
        if (xmlHttp.readyState==4)
        {// 4 = "loaded"
                if (xmlHttp.status==200)
                {// 200 = "OK"
                        if(targetDiv != "") document.getElementById(targetDiv).innerHTML=xmlHttp.responseText;
                }
                else
                {
                        alert("Problem retrieving data:" + xmlHttp.statusText);
                }
        }
}

function stateChanged_updateList(){
        if (xmlHttp.readyState==4)
        {// 4 = "loaded"
                if (xmlHttp.status==200)
                {// 200 = "OK"
                        var response = xmlHttp.responseText;
                        if(response.length > 0){
                                var runners = response.split("#");
                                for (runno in runners){
                                        var rundata = runners[runno].split(";@;");
                                        maxid = putRunner(rundata);
                                }
                                var table=document.getElementById('livetable');
                                for(var key=1;key<table.rows.length;key++){
                                        table.rows[key].cells[0].innerHTML = key;
                                        table.rows[key].style.backgroundColor = (key%2==1?"#fafafa":"white");
                                }
                        }
                        document.getElementById('timestamp').innerHTML = dateString();
                }
                else
                {
                        alert("Problem retrieving data:" + xmlHttp.statusText);
                }
        }
}

function getData(){
        xmlHttp=GetXmlHttpObject();
        if (xmlHttp==null){
                alert ("Your browser does not support AJAX!");
                return;
        }
        var url= './php/live_ajax.php?maxid='+maxid+'&class='+rclass;
        xmlHttp.onreadystatechange= function() {
                stateChanged_updateList();
        };
        xmlHttp.open("GET",url,true);
        xmlHttp.send(null);
}

function hms2s(hms){
        var tempval = hms.split(":");
        var returnval = parseInt(tempval[0],10)*3600+parseInt(tempval[1],10)*60+parseInt(tempval[2],10);
        return returnval;
}

function s2hms(inputval){
        var unith = 3600;
        var unitm = 60;
        var hh = parseInt(inputval / unith,10);
        var ss_remaining = (inputval - (hh * unith));
        var mm = parseInt(ss_remaining / unitm,10);
        var ss = (ss_remaining - (mm * unitm));
        return hh+":"+(mm<10?"0":"")+mm+":"+(ss<10?"0":"")+ss;
}

function putRunner(rundata){
        var time = rundata[3];
        var table=document.getElementById('livetable');

        if(table.rows.length == 1){
                putRow(rundata,1);
                return rundata[0];
        }

        for(var key=1;key<table.rows.length;key++){
                var rowtime = hms2s(table.rows[key].cells[3].innerHTML);
                if(time<=rowtime || (key+1)==table.rows.length){
                        if(time>rowtime && (key+1)==table.rows.length) key++;
                        putRow(rundata,key);
                        break;
                }
        }
        return rundata[0];
}

function putRow(rundata,key){
        var table=document.getElementById('livetable');
        var row = table.insertRow(key);
        for(var ckey=0;ckey<table.rows[0].cells.length;ckey++){
                var tempcell=row.insertCell(ckey);
                if(ckey==3){
                        tempcell.innerHTML = s2hms(rundata[ckey]);
                }else{
                        tempcell.innerHTML = rundata[ckey];
                }
                if(ckey==0 || ckey==3) tempcell.style.textAlign = 'right';
        }
        return true;
        //row.style.backgroundColor = 'red';
}

function countDown() {
        if (cTime<=0) {
                getData();
                cTime = iTime;
                countDown();
        }else{
                cTime--;
                setTimeout('countDown()', 1000);
        }
}

function dateString(){
        var d = new Date();
        var hour = d.getHours();
        var min = d.getMinutes();
        var sec = d.getSeconds();
        var date = d.getDate();
        var month = d.getMonth()+1;
        var year = d.getFullYear();
        hour = (hour<10?'0'+hour:hour);
        min = (min<10?'0'+min:min);
        sec = (sec<10?'0'+sec:sec);
        date = (date<10?'0'+date:date);
        month = (month<10?'0'+month:month);
        return hour+":"+min+":"+sec+" "+date+"-"+month+"-"+year;
}

