var map, manager;

function createMarkerClickHandler(marker, name, description, itemId, contextPath, url){
    return function(){
        marker.openInfoWindowHtml('<h3><a href="' + contextPath + url + 'item' + itemId +'">' + name + '</a></h3>' +
        '<p>' +
        description +
        '</p>');
        return false;
    };
}

function createResortMarker(){
    var latlng = new GLatLng(centerLatitude, centerLongitude);
    
    var blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";
    
    opts = {
        "icon": blueIcon,
		"labelOffset": new GSize(-16, -16)
    };
    var marker = new GMarker(latlng, opts);
    
    return marker;
}

function createMarker(pointData, index){

    var latlng = new GLatLng(pointData.latitude, pointData.longitude);
    
    var baseIcon = new GIcon(G_DEFAULT_ICON);
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    
    
    var letter = String.fromCharCode("A".charCodeAt(0) + index);
    var letteredIcon = new GIcon(baseIcon);
    letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
    
    opts = {
        "icon": letteredIcon,
        "clickable": true,
        "labelOffset": new GSize(-16, -16)
    };
    
    var marker = new LabeledMarker(latlng, opts);
    var handler = createMarkerClickHandler(marker, pointData.name, pointData.description, pointData.itemId, pointData.contextPath, pointData.url);
    
    GEvent.addListener(marker, "click", handler);
    
    var listItem = document.createElement('li');
    listItem.innerHTML = '<a href="#">' + '<strong>' + letter + '</strong>' + " " + pointData.name + '</a>';
    listItem.getElementsByTagName('a')[0].onclick = handler;
    
    document.getElementById('sidebar-list').appendChild(listItem);
    
    return marker;
}

function init(){
    
    map = new GMap(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
    map.addControl(new GMapTypeControl());
    
    manager = new MarkerManager(map);
    
    markers.sort(function(a, b){
        return (a.name > b.name) ? +1 : -1;
    });
    
    batch = [];
    var i = 0;
    for (id in markers) {
        batch.push(createMarker(markers[id], i));
        i++;
    }
    
    batch.push(createResortMarker());
    manager.addMarkers(batch, 11);
    manager.refresh();
    
}
window.onload = init;
window.onunload = GUnload;

