var MAX_WATCHES = 15;
var watchList = new Array(MAX_WATCHES);

var timestamp = new Date().getTime();
var lastTimestamp = 0;

function getEntry(bracketId, watchId) {
    if (bracketId) {
        new Entry(bracketId, watchId);
    }
}

function Entry(bracketId, watchId) {
        this.serverSidePage = "/ncaa/madness/bracket/"+bracketId+".js";
        this.watchId = watchId;
        this.bracketId = bracketId;
    
        this.init();
}

Entry.prototype.init = function() {
        var ref = this;
        var loader = new net.ContentLoader(this.serverSidePage, finishRequest, notFound, "GET", "");

        function finishRequest() {
            var rawData=this.req.responseText;
            var data = eval('(' + this.req.responseText + ')');
            var name = data.bracket.name;
            var id = data.bracket.id;

            var points = data.bracket.score;
            var rank = data.bracket.rank;

            document.getElementById(ref.watchId+"_name").innerHTML = "[<a href=\"\" onClick=\"removeWatch('"+id+"'); return false;\">x</a>] <a href=\"/ncaa/madness/bracket/view/?"+id+"\">"+name+"</a>";
            document.getElementById(ref.watchId+"_points").innerHTML = points;
            document.getElementById(ref.watchId+"_rank").innerHTML = rank;
            document.getElementById(ref.watchId+"_removelinks").innerHTML = "<a href=\"\" onClick=\"javascript:removeWatch('"+id+"'); return false;\">Remove</a>";
        }

        function notFound() {    
            document.getElementById(ref.watchId+"_name").innerHTML = "";
            document.getElementById(ref.watchId+"_points").innerHTML = "";
        }
}

function sortByName(a, b) {
    if (a == null) { return -1; }
    if (b == null) { return 1; }
    var nameA = a.bracket.name.toLowerCase();
    var nameB = b.bracket.name.toLowerCase();
    if (nameA < nameB) { return -1; }
    if (nameA > nameB) { return 1; }
    return 0;
}

function getKey(data) {
    if (sortBy == "name") {
        return data.bracket.name;
    }    
}

function printWatches() {
    var idString = getWatches();
    i=0;

    for (i=0; i < MAX_WATCHES; i++) {
        // Clear out existing data
        name   = document.getElementById(i+"_name");
        points = document.getElementById(i+"_points");
        rank   = document.getElementById(i+"_rank");
        links  = document.getElementById(i+"removelinks");
        if (name   != null) { name.innerHTML = ""; }
        if (points != null) { points.innerHTML = ""; }
        if (rank   != null) { rank.innerHTML = ""; }
        if (links  != null) { links.innerHTML = ""; }
    }

    if (idString != null && idString != "") {
        for (i=0; i < watchList.length && i < MAX_WATCHES; i++) {
            if (watchList[i] != null && watchList[i] != "") { 
                getEntry(""+watchList[i], i);
            }
        }    
    }
}

function addWatches(ids) {
    if (!ids) { return; }
    var idString = "";
    for (i=0; i < ids.length; i++) {
        idString += ids[i]+",";
    }
    document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
}

function addWatch(id) {
    if (!id) { return; }

    var idString = readCookie("brackets");    
    if (!idString || idString=="") {
        idString = id; 
        document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
        printWatches();
    } else {
        var idList = idString.split(",");
        if (idList.length > MAX_WATCHES) {
            alert("The maximum number of watches is 15.\nTime to make some tough choices.");
            return false;
        }
        var re = new RegExp(id);
        if (idString.match(re)) {
        } else {
            idString += ","+id;
            document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
            printWatches();
        }
    }
    return false;
}

function addWatch_noPrint(id) {
    var idString = readCookie("brackets");    
    if (!idString || idString=="") {
        idString = id; 
        document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
    } else {
        var idList = idString.split(",");
        if (idList.length > MAX_WATCHES) {
            alert("The maximum number of watches is 15.\nTime to make some tough choices.");
            return false;;
        }
        var re = new RegExp(id);
        if (idString.match(re)) {
        } else {
            idString += ","+id;
            document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
        }
    }
    return true;
}

function readCookie(name)
{
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++)
    {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function getWatches() {
    var idString = readCookie("brackets");    
    if (!idString) { return ""; }
    if (idString == "") {
        //clear list
        watchList = new Array();
    } else {
        watchList = idString.split(",");
    }
    return idString;
}

function clearWatches() {
    var idString = "";
    document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
    printWatches();    
}

function removeWatch(id) {
    if (!id) { return; }
    idString = "";
    for (i=0; i < watchList.length; i++) {
        if (id != watchList[i]) {
            if (idString == "") { idString = watchList[i]; }
            else { idString += "," + watchList[i]; }
        } else {
        }    
    }
    document.cookie = 'brackets='+idString+'; expires=Wed, 30 Apr 2008 00:00:00 UTC; path=/';
    printWatches();
}

//function reloadPage() {
//    document.location.href = "top50.shtml";
    //printWatches();
//}

function getPoints(picks) {
        var totalPoints = 0;
        var pick_array = picks.split('');
        for (i=0; i < pick_array.length; i++) {
                var team = pick_array[i];
                var pts = teamPoints[team];
                if (!isNaN(pts)) {
                        totalPoints += parseInt(pts);
                }
        }
        return totalPoints;
}

function getRank(points) {
        return ranks[points];
}
