var mmap = {
    map: null,
    server: "http://www.strahotski.com/fanmap/mmap_server.php"
}

function addLoadEvent(func){
    var oldonload = window.onload;
    if(typeof window.onload != "function"){
        window.onload = func;
    }
    else {
        window.onload = function() {
            if(oldonload){
                oldonload();
            }
            func();
        }
    }
}

function addUnloadEvent(func){
    var oldonunload = window.onunload;
    if(typeof window.onunload != "function"){
        window.onunload = func;
    }
    else{
        window.onunload = function (){
            if(oldonunload){
                oldonunload();
            }
            func();
        }
    }
}

function mmapLoad() { 
    if(GBrowserIsCompatible()) {
        mmap.map = new GMap2(document.getElementById("mmapCanvas"));
        mmap.map.setCenter(new GLatLng(15, 0), 1);
        mmap.map.setUIToDefault();
        
        mmapPopulate();
        mmapPopulateTable("Country");
        mmapPopulateTable("State");
   }
}

function mmapUnload() {
    GUnload();
}

function mmapPopulate(){
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function(){
        if(xmlHttp.readyState == 4){
            var data = eval('(' + xmlHttp.responseText + ')');
            for(var i in data){
                var entry = data[i];
                var point = new GLatLng(entry.adj_lat, entry.adj_lng);
                var options = {
                    title: entry.name 
                }
                var marker = new GMarker(point, options);
                
                var infoHTML = '<div class="mmapInfo"><table><tr>';
                
                if(entry.icon != null && entry.icon.length != 0){
                    infoHTML = infoHTML + 
                        '<td><img class="mmapIcon" height="64"' + 
                        ' width="64" src="' + entry.icon + '" /></td>';
                }

                loc = entry.nicelocation == null ? entry.location : entry.nicelocation;

                infoHTML = infoHTML +
                    '<td><span class="mmapName">' + entry.name + '</span>' +
                    '<img class="mmapFlag" height=11 width=16 src="http://www.strahotski.com/fanmap/flags/' +
                    entry.country.toLowerCase() + '.png" />' +
                    '<span class="mmapLocation">' + loc + '</span>' +
                    '<span class="mmapRole ' + entry.role + '">' + 
                    entry.role + '</span></td>';
                
                infoHTML = infoHTML + "</tr></table></div>"

                marker.bindInfoWindowHtml(infoHTML);
                mmap.map.addOverlay(marker);
            }
        }
    }

    xmlHttp.open("GET", mmap.server + "?method=user", true);
    xmlHttp.send(null);
}

function mmapPopulateTable(which){
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function(){
        if(xmlHttp.readyState == 4){
            var data = eval('(' + xmlHttp.responseText + ')');
            var html = '<table>' +
                '<tr><th colspan="2">' +
                (which == "State" ? "United States" : "Worldwide") +
                '</th></tr>' +
                '<tr>' +
                '<th>' + which + '</th>' +
                '<th>#</th>' + 
                '</tr>';

            var odd = true; var total = 0;
            for(var i in data){
                var country = data[i];
                html  += '<tr class="' + (odd ? 'odd' : 'even') + '">' +
                    '<td class="name">' + 
                    (which == "Country" ? '<img class="flag" src="http://www.strahotski.com/fanmap/flags/' + country.iso.toLowerCase() + '.png" />' : '') + 
                    country.name + '</td>' +
                    '<td class="count">' + country.count + '</td></tr>';
                
                total += parseInt(country.count);
                odd = odd ? false : true;
            }

            html += '<tr><td class="empty">&nbsp;</td>' +
                '<td class="total">' + total + '</td></tr></table>';

            document.getElementById("mmap" + which).innerHTML = html;
        }
    }

    method = which == "State" ? "state" : "country";
    xmlHttp.open("GET", mmap.server + "?method=" + method, true);
    xmlHttp.send(null);
}

addLoadEvent(mmapLoad);
addUnloadEvent(mmapUnload);
