/**
 * $Id: miniclubs.js 130 2006-04-20 19:00:25Z blalor $
 */

var mapDiv = null;
var loadingDiv = null;
var map = null;

var baseUrl = '.';

var markers = null;

var markerColumns = 2;
var markersList = new Array(markerColumns);
var clubInd = 0;

var timeOut = 5;
var intervalId = 0;

var icon = null;

var bounds = new GLatLngBounds();

var clubList = getClubs();

// {{{ modPopper
function modPopper(popper, marker, html) {
    var fn = function() {
            	 // map.centerAndZoom(marker.point, 13);
                 marker.openInfoWindow(html);
                 return true;
             };

    GEvent.addListener(marker, "click", fn);

    popper.href = "#map";
    popper.onclick = fn;
}
// }}}

// {{{ mapOneMarker
function mapOneMarker() {
    var moreToProcess = false;
    
    if (clubInd < clubList.length) {
        var club = clubList[clubInd];

        var point = club["point"];
        bounds.extend(point); 
        
        var marker = new GMarker(point, icon);
        map.addOverlay(marker);

        /*
        <div class="clubdetail">
    	    <a href="{url}"><xsl:value-of select="name" /></a>
    	    <blockquote>
    	        <xsl:copy-of select="node()" />
    	    </blockquote>
    	</div>
	    */
        var infoHtml = document.createElement("div");
        infoHtml.setAttribute("class", "clubdetail");

        var infoLink = infoHtml.appendChild(document.createElement("a"));

        infoLink.href = club["url"];
        infoLink.appendChild(document.createTextNode(club["name"]));
        
        if (club["comments"] != null) {
            var comments = infoHtml.appendChild(document.createElement("blockquote"))
            comments.innerHTML = club["comments"];
        }
        
        /*
            <li><a class="markerPopper"><xsl:value-of select="name" /></a></li>
        */
        var li = document.createElement("li");
        markersList[clubInd % markerColumns].push(li);
        
        var a = li.appendChild(document.createElement("a"));
        a.setAttribute("class", "markerPopper");
        a.appendChild(document.createTextNode(club["name"]));
        
        modPopper(a, marker, infoHtml);
        
        clubInd += 1;
        moreToProcess = true;
        
        if (loadingDiv != null)
            loadingDiv.firstChild.nodeValue = "Loading: " + Math.round((clubInd / clubList.length)*100) + "%";
        
        window.setTimeout(mapOneMarker, timeOut);
    } else {
        // reached the end of the markers; show the list
        for (var i = 0; i < markersList.length; i++) {
            var node = document.getElementById("clubList-" + i);
            for (var j = (markersList[i].length - 1); j >= 0 ; j--) {
                node.appendChild(markersList[i][j]);
            }
        }

        map.setZoom(map.getBoundsZoomLevel(bounds));
        
        
        if (loadingDiv != null)
            loadingDiv.parentNode.removeChild(loadingDiv);
    }
    
    return moreToProcess;
}
// }}}

// {{{ doOnLoad
function doOnLoad(u) {
    baseUrl = u;
	mapDiv = document.getElementById("mapDiv");

    loadingDiv = document.getElementById("loadingDiv");

	map = new GMap2(mapDiv);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());

    // Lebanon, KS, the unofficial geographic center of the lower 48
	map.setCenter(new GLatLng(39.809841, -98.553902), 4);

    // Create our "tiny" marker icon
    icon = new GIcon();
    icon.image = baseUrl + "/images/mm_20_red.png";
    icon.shadow = baseUrl + "/images/mm_20_shadow.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GLatLng(20, 6);
    icon.infoWindowAnchor = new GLatLng(1, 5);

    for (var i = 0; i < markersList.length; i++) {
        markersList[i] = new Array();
    }

    var chicagoClub = new GLatLng(41.811929, -87.687320);
    clubList.sort(function(a, b) {
        return chicagoClub.distanceFrom(a["point"]) - chicagoClub.distanceFrom(b["point"]);
    });
    clubList.reverse();
    
    window.setTimeout(mapOneMarker, timeOut);
}
// }}}

