var XOX_Bounds;


// XOX_mapinitialize:  initializes all the XOX google maps on the page by 
// looking for elements with the CSS class given, or 'XOXMap' if none is provided.
// Currently centers them all to the same location if there is more than one.
function XOX_mapinitialize(mapclassname,startlat,startlon) {
    if (!mapclassname) mapclassname = 'XOXMap';
    var mapcanvases = XOX_getElementsByClassName(mapclassname);
    for (var i = 0; i <= mapcanvases.length - 1; i++) {
        var map = new GMap2(mapcanvases[i]);
        map.setCenter(new GLatLng(startlat, startlon), 13);
        map.setUIToDefault();
    }
    XOX_Bounds = map.getBounds();
    return map;
}

function XOX_getElementsByClassName(classname)  {
    return $('.' + classname);
}

// XOX_addMarker:  adds a marker to the map with the given data
// for the info window.
function XOX_addMarker(map,lat,lon,name,image,link,pinImage,jitter) {
    
    var markerOptions = {};
    if (pinImage) {
        var custompin = new GIcon(G_DEFAULT_ICON, pinImage);
        //custompin.image = pinImage;
        markerOptions['icon'] = custompin;
    }
    var point;
    if (jitter) {
       lon += (Math.random() / 100);
       lat += (Math.random() / 100);
       
       //alert(lon+jitter_val);
       point = new GLatLng(lat,lon);
    } else {
       point = new GLatLng(lat,lon);
    }
    //var newspot = new GLatLng(XOX_Bounds.maxY,lon);
    XOX_Bounds.extend(point);
    var marker = new GMarker(point, markerOptions);
    if (typeof window['buildinfowindow'] == 'function') {
        marker.bindInfoWindow(XOX_buildinfowindow(name,image,link));
    } else {
        marker.bindInfoWindow(XOX_buildinfowindow(name,image,link));
    }
    map.addOverlay(marker);
    
}

// XOX_buildinfowindow: the default info window, used when none is provided in the calling page.
function XOX_buildinfowindow(name,image,link) {
    var content = "<div>"+
    				  "<a href='" + link + "'><strong>" + name + "</strong></a><br/>";
    if (image != '') { 
    	content = content + "<a href='" + link + "'><img src='" + image + "' width=\"80\" height=\"80\"></a>";
    }      
    content = content + "<div class=\"clearer\"></div></div>";
    return content;
}

// XOX_zoomtobounds:  re-zooms the window to given bounds.  by default 
// the XOX_Bounds is expanded to include all of the markers.
function XOX_zoomtobounds(map,bounds) {
    if (!bounds) bounds = XOX_Bounds;
    map.setZoom(map.getBoundsZoomLevel(bounds));
    map.setCenter(bounds.getCenter());
}


// XOX_addMarkers:  adds a group of markers at once.
// expects an array of objects.  each object should look like this:
//      {
//        lat: latitude,
//        lng: longitude,
//        name: 'TheNameToUse',
//        image: 'http://example.com/foo.png',
//        link: 'http://example.com/url_to_link_to',
//        pin: 'http://example.com/pinImage.png', // this is optional.
//        jitter: 1
//      }

function XOX_addMarkers(map, markerarray) {
    for(var i=0,j=markerarray.length; i<j; i++) {
        var marker = markerarray[i];
        if (!marker['pin']) {
            marker.pin = null;
        }
        XOX_addMarker(map, marker.lat, marker.lng, marker.name, marker.image, marker.link, marker.pin, marker.jitter);
    }
}

// creates a bunch of random markers, for test purposes.
function XOX_randomentries(map) {
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat() - .008;
    var markers = new Array;
    for (var i = 0; i < 10; i++) {
      var latitude = southWest.lat() + latSpan * Math.random();
      var longitude = southWest.lng() + lngSpan * Math.random();
      markers.push({
        lat: latitude,
        lng: longitude,
        name: 'Foo' + Math.random(),
        image: 'http://ion0.com/hx/eye.png',
        link: 'http://ion0.com/',
        pin: 'http://ion0.com/hx/pin.png'
      });
    }
    XOX_addMarkers(map, markers);
}

