/*
 * Ext JS Library 1.1
 * Copyright(c) 2006-2007, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://www.extjs.com/license
 */
var Mapper = function(){
    // private variables accessible by member functions
    var ds; //data store
    var map; //the google map
        
    return {
        init : function(){
			document.body.onUnload = GUnload(); 
            var reader = new Ext.data.XmlReader({record: 'item'},
                ['title', {name:'pubDate', type:'date'}, 'link', 'description', {name:'lat', mapping: 'lat'}, {name:'lng', mapping: 'long'},{name: 'point', mapping: 'point'} ]
            );

            ds = new Ext.data.Store({
                proxy: new Ext.data.HttpProxy({
                    url: url
                }),
                reader : reader
            });
            
            ds.on('load', this.onLoad, this);
            ds.on('loadexception', this.onLoadException, this);
            //load the map
            if (GBrowserIsCompatible()) {
                map = new GMap2(document.getElementById("map"));
		        map.addControl(new GLargeMapControl());
                map.setCenter(new GLatLng(54, -1.5), 5);
	        }
	        //open the feed
            this.loadFeed();           
        },
               
        onLoad : function(){
        	var bounds = new GLatLngBounds();
        	 //add markers
            map.clearOverlays();
	       	ds.each(function(record){
	       		var copy = '<h1>' + record.data.title + '</h1><p>' +
   				record.data.pubDate + '</p><p>' + record.data.description +
   				'</p><a href="' + record.data.link + '" title="link to ' +
   				record.data.title + '">View ' + record.data.title + '</a>';
   				if (record.data.lat.length > 0){
	       			map.addOverlay(this.createMarker(parseFloat(record.data.lat), parseFloat(record.data.lng), copy));
	       			bounds.extend(new GLatLng(parseFloat(record.data.lat), parseFloat(record.data.lng)));
   				}
	       	},this);
	       	//pan and zoom
	       	map.setCenter(bounds.getCenter(), 5);       	
	       	map.panTo(bounds.getCenter());
	       	map.setZoom(map.getBoundsZoomLevel(bounds));
        },
        
        onLoadException : function(){
        	alert('what now');
        },
        
        loadFeed : function(){
            ds.load({params:{'articleaction' : 'get_feed_internal'}});
        },
        
       	createMarker : function(lat, lng, copy){
       		var marker = new GMarker(new GLatLng(lat, lng, true));
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(copy);
			});
			return marker;
		}
    };
}();
Ext.onReady(Mapper.init, Mapper);