var defaultLong = -0.074458122253418;
var defaultLat = 51.4266813930895;
var defaultZoom = 2;

var clusterer;

function showPopup(marker, loc) {
		var qs = location.search;
		qs = qs.replace(/&/g, '%26').replace(/%26val=/g, "&val=").replace(/%26q=/g, "&q=").replace(/%26phr=/g, "&phr=").replace(/%26size=/g, "&size=").replace(/%26Facet=/g, "&Facet=").replace(/%26coll=/g, "&coll=").replace(/%26P=/g, "&P=").replace(/%26sort=/g, "&sort=").replace(/%26oa=/g, "&oa=");
		qs = qs.replace(/%26start-year=/g, "&start-year=").replace(/%26start-month=/g, "&start-month=").replace(/%26start-day=/g, "&start-day=").replace(/%26start-day=/g, "&start-day=").replace(/%26end-year=/g, "&end-year=").replace(/%26end-month=/g, "&end-month=").replace(/%26end-day=/g, "&end-day=");
		if (qs.charAt(0) != "?") qs = "?" + qs;
		qs += "&map=" + loc.getAttribute("g");
		
		var articles = loc.getAttribute("a");
		
		Ext.Ajax.request({
			url: '/xqueries/google-popup.xqy' + qs,
			disableCaching : false,
			success: function(r) {
				try {
					var arts = articles.toString() + " Article" + ((articles > 1)? "s" : "");
					marker.openInfoWindowHtml(r.responseText.replace("#articles#", arts));
				}
				catch(e) {}
			}
		});
}



function addMarker(point, icon, loc)
{
	var marker = new GMarker(point, {icon: icon});	
	GEvent.addListener(marker, "click", function() { 
		showPopup(marker, loc);
	});
	return marker;
}

var map;

var GMapEventHandler = {
    addEvent: function(elm, evType, fn, useCapture) {
        if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        }
        else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            return r;
        }
        else {
            elm['on' + evType] = fn;
        }
    },

    load: function(qs) {
                qs = qs.replace(/&/g, '%26').replace(/%26val=/g, "&val=").replace(/%26q=/g, "&q=").replace(/%26phr=/g, "&phr=").replace(/%26size=/g, "&size=").replace(/%26Facet=/g, "&Facet=").replace(/%26coll=/g, "&coll=").replace(/%26P=/g, "&P=").replace(/%26sort=/g, "&sort=").replace(/%26oa=/g, "&oa=");
                qs = qs.replace(/%26start-year=/g, "&start-year=").replace(/%26start-month=/g, "&start-month=").replace(/%26start-day=/g, "&start-day=").replace(/%26start-day=/g, "&start-day=").replace(/%26end-year=/g, "&end-year=").replace(/%26end-month=/g, "&end-month=").replace(/%26end-day=/g, "&end-day=");
                if (qs.indexOf("?") == 0) qs = qs.substring(1);
        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map"));
            map.addControl(new GSmallMapControl());

            map.enableDoubleClickZoom();
            map.enableContinuousZoom();
            map.enableScrollWheelZoom();
            map.getContainer().style.overflow = "hidden";

            GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", GMapEventHandler.wheelevent);
            GMapEventHandler.addEvent(map.getContainer(), 'mousewheel', GMapEventHandler.wheelevent);

            //map.setCenter(new GLatLng(defaultLat,defaultLong), defaultZoom);


            /* Icon array for colour coding*/
            var icons = []
            for (var i = 1; i < 6; i++) {
                var icon = new GIcon();
                icon.image = "/images/gmap/clusters/" + i + "s.png";
                icon.smallImage = "/images/gmap/clusters/" + i + "s.png";
                icon.shadow = "/images/gmap/small_shadow.png";
                icon.iconSize = new GSize(16,27); //small
                icon.shadowSize = new GSize(37,35);
                icon.iconAnchor = new GPoint(13, 20);
                icon.infoWindowAnchor = new GPoint(12, 0);
                icons.push(icon);
            }

            GDownloadUrl("/xqueries/google.xqy?" + qs,
								function(data, responseCode) {
							
								    //read from xml
								    var xml = GXml.parse(data);
										var locs = xml.documentElement.getElementsByTagName("l");
								    GMapEventHandler.MapMarkers = new Array(locs.length);

								    clusterer = new Clusterer(map);

								    for (var i = 0; i < locs.length; i++) {
								        var geo = locs[i].getAttribute("g").split(",");
								        var articles = locs[i].getAttribute("a");
								        var heat = parseInt(locs[i].getAttribute("h"));

								        var m = addMarker(new GLatLng(geo[1], geo[0]), icons[heat - 1], locs[i]);
								        GMapEventHandler.MapMarkers = m;
								        clusterer.AddMarker(m, heat);
												
												if (i == 0) {
													defaultLat = geo[1];
													defaultLong = geo[0];
												}
								    }
										
										//calc bounds of points
								    var points = xml.documentElement.getElementsByTagName("p");

								    if (points.length > 0) {
								        var bounds = new GLatLngBounds();
								        for (var p = 0; p < points.length; p++) {
								            bounds.extend(new GLatLng(points[p].getAttribute("lat"), points[p].getAttribute("long")))
								        }
								        var zoom = map.getBoundsZoomLevel(bounds);
								        if (zoom > 11) zoom = 11;
								        map.setCenter(bounds.getCenter(), zoom);
								    }
								    else {
								        map.setCenter(new GLatLng(defaultLat, defaultLong), defaultZoom);
								    }
								}
						);
        }
    },
    wheelevent: function(e) {
        if (!e) e = window.event;
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    }

}

//GMapEventHandler.addEvent(window, 'load', GMapEventHandler.load, false);
GMapEventHandler.addEvent(window, 'unload', GUnload, false);




/* override Clusterer functions*/
Clusterer.PopUp = function(cluster) {
  map.setCenter(cluster.marker.getPoint(), map.getZoom()+1);
}


