var lastupdate = -1;
var betfairLastUpdate = -1;
var betotoLastupdate = -1;
var previousUpdated = new Array();
var gamesList;
var updateMinutes = -1;
var liveStatusIds = new Array(2, 3, 4, 8, 9, 13, 14, 61, 67, 68, 72, 92, 93, 94, 95);
var finishedStatusIds = new Array(7, 51, 66, 69, 96);
var play_sound = true;

function toggle_sound_pref(){
    play_sound = !play_sound;
    var sound_control = document.getElementById("sound_button");    
    if (play_sound) {
        sound_control.style.backgroundImage = 'url(/images/sound_button_on.jpg)';
            
    } else {
        sound_control.style.backgroundImage = 'url(/images/sound_button_off.jpg)';            
    }
}

function containsId(array, number){
    for (var k = 0; k < array.length; k++) {
        if (array[k] == number) {
            return true;
        }
    }
    return false;
}

var ie = false;

function getMClass(myEl){
    if (ie) 
        return myEl.getAttribute('className');
    else 
        return myEl.getAttribute('class');
}

function setMClass(myEl, cl){
    if (ie) 
        myEl.setAttribute('className', cl);
    else 
        myEl.setAttribute('class', cl);
}


//Browser Support Code
function ajaxFunction(changeSet, leagueId, dateStr){
    var ajaxRequest;
    
    try {
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
        
        if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
            ie = true;
        }
    } catch (e) {
        // Internet Explorer Browsers
        try {
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            ie = true;
        } catch (e) {
            try {
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                ie = true;
            } catch (e) {
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if (ajaxRequest.readyState == 4) {
            var jsonString = ajaxRequest.responseText;
            var jsonObject = eval('(' + jsonString + ')');
            if (jsonString == "") {
                return;
            }
            if (jsonObject.v != 0) {
                lastupdate = jsonObject.v;
            }
            if (jsonObject.vbetoto != 0) {
                betotoLastupdate = jsonObject.vbetoto;
            }
            if (jsonObject.vbetfair != 0) {
                betfairLastUpdate = jsonObject.vbetfair;
            }            
            var games = jsonObject.games.length;
            var betotoGames = jsonObject.betotoGames.length;
            var betfairGames = jsonObject.betfairGames.length;
            if (games > 0) {
                for (var i = 0; i < games; i++) {
                    var gameTr = document.getElementById("game" + jsonObject.games[i].id);
                    if (gameTr != null) {
                        var hasStartedOrEnded= false;
                        var hasEnded= false;
                        var isLiveNow = false;   
                        if (containsId(liveStatusIds, jsonObject.games[i].statusid) ||
                            containsId(finishedStatusIds, jsonObject.games[i].statusid)) {
                            hasStartedOrEnded = true;
                        }
                        if (containsId(finishedStatusIds, jsonObject.games[i].statusid)) {
                            hasEnded = true;
                        }
                        if (containsId(liveStatusIds, jsonObject.games[i].statusid)) {
                            isLiveNow = true;
                        }                        
                        var previousScore;
                        var minute = jsonObject.games[i].minute;
                        if (minute == 45 && jsonObject.games[i].statusid == 3) {
                            minute = 46;
                        }
                        var result1X2 = evaluateResult(jsonObject.games[i].team1_so, jsonObject.games[i].team2_so, jsonObject.games[i].statusid);
                        if (leagueId == -909) {
                            var mustUpdate = false;
                            previousScore = gameTr.cells[14].innerHTML;
                            if (gameTr.cells[1].innerHTML != jsonObject.games[i].schedule) {
                                gameTr.cells[1].innerHTML = jsonObject.games[i].schedule;                                
                            }
                            if (gameTr.cells[17].innerHTML != jsonObject.games[i].score && isLiveNow) {
                                gameTr.cells[17].innerHTML = jsonObject.games[i].score;
                                if (play_sound && jsonObject.games[i].score != '0-0') { // without this the announcer runs when the game starts
                                    if(gameTr.style.display != 'none'){
                                      document.getElementById('announcer').addGoalJS(gameTr.cells[2].childNodes[0].innerHTML);    
                                    }                                    
                                    setMClass(gameTr.cells[2], "tdupdated_red");
                                    mustUpdate = true;
                                    document.getElementById("img" + jsonObject.games[i].id).src = '/images/sport_soccer.png';
                                }                                
                            }
                            var status = translateStatus(jsonObject.games[i].statusid, jsonObject.games[i].status);                           
                            gameTr.cells[19].innerHTML = jsonObject.games[i].htscore ;
                            if (isLiveNow) {
                                gameTr.cells[18].innerHTML = minute;
                                setMClass(gameTr.cells[18], "gr1lmin"); // change class for mins so they update
                            } 
                            
                            if(jsonObject.games[i].statusid == 14 && jsonObject.games[i].minute == 45 ){
                                gameTr.cells[18].innerHTML = status;
                            }                            
                            if(hasEnded){
                                gameTr.cells[18].innerHTML = '<em>'+result1X2 + '</em>';
                                setMClass(gameTr.cells[17], "ScoreCellFinishedGame"); // turn score td green
                                setMClass(gameTr.cells[18], "gr1c"); // change class for mins so they dont update anymore.
                            }
                            if (mustUpdate == true) {
                                setMClass(gameTr.cells[17], "tdupdated_red"); // this actually runs only on goals
                            }
                        } else {
                            var mustUpdate = false;
                            previousScore = gameTr.cells[6].innerHTML;
                            if (gameTr.cells[0].innerHTML != jsonObject.games[i].schedule) {
                                gameTr.cells[0].innerHTML = jsonObject.games[i].schedule;
                                mustUpdate = true;
                            }
                            if (gameTr.cells[6].innerHTML != jsonObject.games[i].score && hasStartedOrEnded) {
                                gameTr.cells[6].innerHTML = jsonObject.games[i].score;
                                mustUpdate = true;
                            }
                            var status = translateStatus(jsonObject.games[i].statusid, jsonObject.games[i].status);
                            if (gameTr.cells[10].innerHTML != status) {
                                gameTr.cells[10].innerHTML = status;
                                mustUpdate = true;
                            }
                            gameTr.cells[7].innerHTML = result1X2;
                            if (hasStartedOrEnded) {
                                gameTr.cells[9].innerHTML = minute;
                            }
                            if (mustUpdate == true) {
                                setMClass(gameTr.cells[6], "tdupdated");
                            }
                        }
                        var statusId = jsonObject.games[i].statusid;
                        if (previousScore != jsonObject.games[i].score) {
                            var preScores = previousScore.split("-");
                            var newScores = jsonObject.games[i].score.split("-");
                            if (preScores.length == 2 && newScores.length == 2) {
                                if (preScores[0] != newScores[0]) {
                                    var teamTd = document.getElementById("home" + jsonObject.games[i].id);
                                    setMClass(teamTd, "tdupdated_red align_left");
                                }
                                if (preScores[1] != newScores[1]) {
                                    var teamTd = document.getElementById("away" + jsonObject.games[i].id);
                                    setMClass(teamTd, "tdupdated_red align_right");
                                }
                            }
                        }
                        //fill game data table
                        if (jsonObject.games[i].data.length > 0) {
                            //show info image
                            var infoImage = document.getElementById("img" + jsonObject.games[i].id);
                            setMClass(infoImage, "showinfo");
                            var gameDataDiv = document.getElementById("gamedata" + jsonObject.games[i].id);
                            var temp;
                            temp = "<table class='in'>";
                            temp += "<tr>";
                            temp += "<td class='r'>" + jsonObject.games[i].homeTeam + "</td>";
                            temp += "<td class='c'>[" + jsonObject.games[i].score + "]</td>";
                            temp += "<td class='l'>" + jsonObject.games[i].awayTeam + "</td>";
                            temp += "</tr>";
                            var homeGoals = 0;
                            var awayGoals = 0;
                            var classId = 1;
                            document.getElementById("home_cards" + jsonObject.games[i].id).innerHTML = "";
                            document.getElementById("away_cards" + jsonObject.games[i].id).innerHTML = "";
                            for (var j = 0; j < jsonObject.games[i].data.length; j++) {
                                var team = jsonObject.games[i].data[j].team;
                                var minute = jsonObject.games[i].data[j].minute;
                                var player = jsonObject.games[i].data[j].player;
                                var type = jsonObject.games[i].data[j].type;
                                if (classId == 1) {
                                    classId = 0;
                                } else {
                                    classId = 1;
                                }
                                if (type == 0 || type == 1 || type == 3) {
                                    if (team == 1) {
                                        homeGoals++;
                                    } else {
                                        awayGoals++;
                                    }
                                }
                                //construct eventData string                           
                                var space = "&nbsp;";
                                var imgTag = "";
                                switch (type) {
                                    case 0:
                                        imgTag = "<img src=\"images/g.gif\" alt=\"\">";
                                        break;
                                    case 1:
                                        imgTag = "<img src=\"images/ps.gif\" alt=\"\">";
                                        break;
                                    case 2:
                                        imgTag = "<img src=\"images/pm.gif\" alt=\"\">";
                                        break;
                                    case 3:
                                        imgTag = "<img src=\"images/own.gif\" alt=\"\">";
                                        break;
                                    case 4:
                                        imgTag = "<img src=\"images/y.gif\" alt=\"\">";
                                        break;
                                    case 5:
                                        imgTag = "<img src=\"images/y.gif\" alt=\"\">" + space + "<img src=\"images/y.gif\" alt=\"\">";
                                        break;
                                    case 6:
                                        imgTag = "<img class='red_card' src=\"images/r.gif\" alt=\"\">";                                        
                                        if (team == 1) {
                                            document.getElementById("home_cards" + jsonObject.games[i].id).innerHTML += imgTag;
                                        } else {                                           
                                            document.getElementById("away_cards" + jsonObject.games[i].id).innerHTML += imgTag;                                           
                                        }
                                        break;
                                    case 7:
                                        imgTag = "<img src='images/out.gif' alt=''>";
                                        break;
                                    case 8:
                                        imgTag = "<img src='images/in.gif' alt=''>";
                                        break;
                                }
                                var homeData = "";
                                var awayData = "";
                                if (team == 1) {
                                    homeData = player;
                                    if (type >= 0 && type <= 3) {
                                        homeData += space + "<b>[" + homeGoals + "-" + awayGoals + "]</b>";
                                    }
                                    homeData += space + imgTag;
                                } else {
                                    awayData = imgTag;
                                    if (type >= 0 && type <= 3) {
                                        awayData += space + "<b>[" + homeGoals + "-" + awayGoals + "]</b>";
                                    }
                                    awayData += space + player;
                                }
                                temp += "<tr>";
                                temp += "<td class='r" + classId + "'>" + homeData + "</td>";
                                temp += "<td class='c" + classId + "'>" + minute + "'</td>";
                                temp += "<td class='l" + classId + "'>" + awayData + "</td>";
                                temp += "</tr>";
                            }
                            temp += "</table>";
                            gameDataDiv.innerHTML = temp;
                        }
                    }
                } //for loop ends
            }
            if (betotoGames > 0) {
                var enetId;
                for (var i = 0; i < betotoGames; i++) {
                    enetId = jsonObject.betotoGames[i].enetId;
                    var gameTr = document.getElementById("game" + enetId);
                    if (gameTr != null) {
                        if (leagueId == -909) {
                            var mustUpdate = false;                            
                            if (gameTr.cells[4].childNodes[0].innerHTML != jsonObject.betotoGames[i].oddHome) {
                                document.getElementById("br1_" + enetId).innerHTML = jsonObject.betotoGames[i].oddHome;
                                setMClass(document.getElementById("br1_" + enetId), "yellbg");
                                mustUpdate = true;
                            }
                            if (gameTr.cells[8].innerHTML != jsonObject.betotoGames[i].oddDraw) {
                                document.getElementById("brX_" + enetId).innerHTML = jsonObject.betotoGames[i].oddDraw;
                                setMClass(document.getElementById("brX_" + enetId), "yellbg");
                                mustUpdate = true;
                            }
                            if (gameTr.cells[12].innerHTML != jsonObject.betotoGames[i].oddAway) {
                                document.getElementById("br2_" + enetId).innerHTML = jsonObject.betotoGames[i].oddAway;
                                setMClass(document.getElementById("br2_" + enetId), "yellbg");
                                mustUpdate = true;
                            }
                            if (mustUpdate == true) {
                                //setMClass(gameTr.cells[11],"tdupdated");    
                            }
                        } else {
                            var mustUpdate = false;
                            if (gameTr.cells[1].innerHTML != jsonObject.betotoGames[i].oddHome) {
                                var link = document.getElementById("br1_" + enetId).href;
                                link = link.replace(/&ResultOdds=(\d*\.\d*)&/,'&ResultOdds='+ jsonObject.betotoGames[i].oddHome +'&');                                    
                                document.getElementById("br1_" + enetId).innerHTML = jsonObject.betotoGames[i].oddHome;
                                document.getElementById("br1_" + enetId).href = link;
                                setMClass(gameTr.cells[1], "lilbold");
                                mustUpdate = true;
                            }
                            if (gameTr.cells[3].innerHTML != jsonObject.betotoGames[i].oddDraw) {
                                var link = document.getElementById("brX_" + enetId).href;
                                link = link.replace(/&ResultOdds=(\d*\.\d*)&/,'&ResultOdds='+ jsonObject.betotoGames[i].oddDraw +'&'); 
                                document.getElementById("brX_" + enetId).innerHTML = jsonObject.betotoGames[i].oddDraw;
                                document.getElementById("brX_" + enetId).href = link;
                                setMClass(gameTr.cells[3], "lilbold");
                                mustUpdate = true;
                            }
                            if (gameTr.cells[5].innerHTML != jsonObject.betotoGames[i].oddAway) {
                                var link = document.getElementById("br2_" + enetId).href;
                                link = link.replace(/&ResultOdds=(\d*\.\d*)&/,'&ResultOdds='+ jsonObject.betotoGames[i].oddAway +'&');
                                document.getElementById("br2_" + enetId).innerHTML = jsonObject.betotoGames[i].oddAway ;
                                document.getElementById("br2_" + enetId).href = link;
                                setMClass(gameTr.cells[5], "lilbold");
                                mustUpdate = true;
                            }
                            if (mustUpdate == true) {
                                //setMClass(gameTr.cells[6], "tdupdated");
                            }
                        }
                    }
                }
            }
            if (betfairGames > 0) {
                var enetId;
                for (var i = 0; i < betfairGames; i++) {
                    enetId = jsonObject.betfairGames[i].enetId;
                    var gameTr = document.getElementById("game" + enetId);
                    if (gameTr != null) {
                        if (leagueId == -909) {
                            if (trim(document.getElementById("betfair1_" + enetId).innerHTML) != jsonObject.betfairGames[i].oddHome) {
                                document.getElementById("betfair1_" + enetId).innerHTML = jsonObject.betfairGames[i].oddHome;
                                setMClass(document.getElementById("betfair1_" + enetId), "yellbg");
                            }
                            if (trim(document.getElementById("betfairX_" + enetId).innerHTML) != jsonObject.betfairGames[i].oddDraw) {
                                document.getElementById("betfairX_" + enetId).innerHTML = jsonObject.betfairGames[i].oddDraw;
                                setMClass(document.getElementById("betfairX_" + enetId), "yellbg");
                            }
                            if (trim(document.getElementById("betfair2_" + enetId).innerHTML) != jsonObject.betfairGames[i].oddAway) {
                                document.getElementById("betfair2_" + enetId).innerHTML = jsonObject.betfairGames[i].oddAway;
                                setMClass(document.getElementById("betfair2_" + enetId), "yellbg");
                            }
                        }
                    }
                }
            }            
        }
    }
    if (gamesList == null) {
        ajaxRequest.open("GET", "enet?leagueid=" + leagueId + "&lastupdate=" + lastupdate + "&sport=soccer&date=" + dateStr + 
            "&betotoLastUpdate=" + betotoLastupdate +
            "&betfairLastUpdate=" + betfairLastUpdate +
            "&ts=" +new Date().getTime(), true);
    } else {
        ajaxRequest.open("GET", "enet?leagueid=" + leagueId + "&lastupdate=" + lastupdate + "&sport=soccer&date=" + dateStr +
            "&liveonly=" + gamesList +
            "&betotoLastUpdate=" + betotoLastupdate +
            "&betfairLastUpdate=" + betfairLastUpdate +
            "&ts=" + new Date().getTime(), true);
    }
    ajaxRequest.send(null);
}
function timeMsg(leagueId, firstTimestamp, firstBetotoTimestamp, firstBetfairTimestamp, dateStr, gameIds){
    lastupdate = firstTimestamp;
    betotoLastupdate = firstBetotoTimestamp;
    if (firstBetfairTimestamp != null) { 
        betfairLastUpdate = firstBetfairTimestamp;
    }else{
        betfairLastUpdate = 0;
    }
    gamesList = gameIds;
    var t = setTimeout("timeAlert(" + leagueId + ",'" + dateStr + "')", 1000);
}

function timeAlert(leagueId, dateStr){
    var t = setTimeout("timeAlert(" + leagueId + ",'" + dateStr + "')", 30000);
    if (updateMinutes == 0) {
        updateMinutes = 1
    } else {
        if (updateMinutes == 1) {
            incrementMinutes();
            clearUpdateStyles();
        }
        updateMinutes = 0;
    }
    ajaxFunction(lastupdate, leagueId, dateStr);
}
function incrementMinutes(){
    var minutesTD = document.getElementsByClassName("gr1lmin");
    var minute = -1;
    for (var j = 0; j < minutesTD.length; j++) {
        try {
            minute = parseInt(minutesTD[j].innerHTML);
            if ((minute >= 1 && minute < 45) || (minute >= 46 && minute < 90) || (minute >= 91 && minute < 120)) {
                minute++;
                minutesTD[j].innerHTML = minute;
            }
        } catch (err) {
        }
    }
}
function clearUpdateStyles(){
    // Reset ta odds    
    var oddsTDs = document.getElementsByClass("yellbg");
    for (var j = 0; j < oddsTDs.length; j++) {
        setMClass(oddsTDs[j], "");
    }
    // reset gipedouxous pou skorarane
    var gameIdTDs = document.getElementsByClassName("tdupdated_red align_left");
    for (var j = 0; j < gameIdTDs.length; j++) {
        setMClass(gameIdTDs[j], "gr1c align_left");
    }
    // reset filoksenoumenous pou skorarane
    var gameIdTDs = document.getElementsByClassName("tdupdated_red align_right");
    for (var j = 0; j < gameIdTDs.length; j++) {
        setMClass(gameIdTDs[j], "gr1c align_right");
    }
    // reset A/A agona me gkol
    var teamScoreTDs = document.getElementsByClassName("tdupdated_red");
    for (var j = 0; j < teamScoreTDs.length; j++) {
        setMClass(teamScoreTDs[j], "gr1c");
    }
    var teamTDs = document.getElementsByClassName("gr1cbold");
    for (var j = 0; j < teamTDs.length; j++) {
        setMClass(teamTDs[j], "gr1c");
    }
    var imgs = document.getElementsByClass("showinfo");
    for (var j = 0; j < imgs.length; j++) {
        imgs[j].src = '/images/lsnf.gif';
    }
}
document.getElementsByClass = function(classname, node){
    if (!node) 
        node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for (var i = 0, j = els.length; i < j; i++) {
        if (re.test(els[i].className)) 
            a.push(els[i]);
    }
    return a;
}



document.getElementsByClassName = function(cl){
    var retnode = [];
    var myclass = new RegExp('\\b' + cl + '\\b');
    var elem = this.getElementsByTagName("td");
    for (var t = 0; t < elem.length; t++) {
        var classes = elem[t].className;
        if (myclass.test(classes)) 
            retnode.push(elem[t]);
    }
    return retnode;
};
function populate(o){
    var soccerSelection = document.getElementById('sLeagues');
    var basketSelection = document.getElementById('bLeagues');
    if (o.selectedIndex == 0) {
        setMClass(basketSelection, "hide");
        basketSelection.disabled = true;
        soccerSelection.disabled = false;
        setMClass(soccerSelection, "show");
    } else {
        setMClass(soccerSelection, "hide");
        soccerSelection.disabled = true;
        basketSelection.disabled = false;
        setMClass(basketSelection, "show");
    }
}
function translateStatus(statusId, statusName){
    var result = "";
    switch (statusId) {
        case 1:
            result = "Δεν ξεκίνησε";
            break;
        case 2:
            result = "1ο ημίχρονο";
            break;
        case 3:
            result = "2ο ημίχρονο";
            break;
        case 4:
            result = "Πέναλτι";
            break;
        case 6:
            result = "Αναβλήθηκε";
            break;
        case 7:
            result = "Τελείωσε";
            break;
        case 9:
            result = "Παράταση 1ο ημ.";
            break;
        case 13:
            result = "Παράταση 2ο ημ.";
            break;
        case 14:
            result = "Ημίχρονο";
            result = "ΗΜ";
            break;
        case 51:
            result = "Τελείωσε (παράταση)";
            break;
        case 66:
            result = "Τελείωσε (πέναλτι)";
            break;
        case 70:
            result = "Διακόπηκε";
            break;
        case 177:
            result = "Ακυρώθηκε";
            break;
    }
    if (result == "") {
        result = statusName;
    }
    return result;
}
function evaluateResult(team1So, team2So, statusId){
    var allFinishedStatusIds = new Array(7, 51, 66, 69, 96);
    var runningAfter2ndHalfStatusIds = new Array(4, 8, 9, 13, 67, 68, 72, 92, 93, 94, 95);
    var result = "";
    if (containsId(allFinishedStatusIds, statusId) || containsId(runningAfter2ndHalfStatusIds, statusId)) {
        if (team1So > team2So) {
            result = "1";
        } else 
            if (team1So < team2So) {
                result = "2";
            } else 
            if (team1So == team2So) {
                result = "X";
            }
    }
    return result;
}

function trim(str){
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
