/**
 * Simple Map with Markers
 *
 * @author Andi Dittrich <andi.dittrich@a3non.org>
 * @license MIT Style X11 License
 * @copyright 2010-2011 Andi Dittrich
 */		
var SimpleMap = new Class({
	Implements: [Options, Events],
	
	options: {
		mapLimits: {
			latMin: 0.0,
			latMax: 90.0,
			longMin: 0.0,
			longMax: 90.0	
		},
		markerOffset: {
			x: 0,
			y: 0	
		}
	},
	
	mapInstance: null,
	mapData: null,
	
	initialize: function(mapInstance, mapData, options){
		this.setOptions(options);
		this.mapInstance = document.id(mapInstance);
		this.mapData = mapData;
		this.render();
	},
	
	render: function(){
		// validate instances
		if (this.mapInstance == null || this.mapData == null){
			return;	
		}
		
		// get map size
		var mapSize = this.mapInstance.getSize();
		
		// get absolute map position
		var mapPos = this.mapInstance.getPosition();		
		
		// dgenerate markers
		this.mapData.each(function(data){
			// calc coord differrences
			var diffX = this.options.mapLimits.longMax-this.options.mapLimits.longMin;
			var diffY = this.options.mapLimits.latMax-this.options.mapLimits.latMin;
			
			// calc normlized position
			var normPosX = 1-(this.options.mapLimits.longMax-data.long)/diffX;
			var normPosY = (this.options.mapLimits.latMax-data.lat)/diffY;
			
			// calc relative position
			var posX = mapSize.x*normPosX;
			var posY = mapSize.y*normPosY;
			
			// create marker
			var marker = new Element('div', {
				'class': (data.css != null ? data.css : 'marker'),
				styles: {
					top: posY + this.options.markerOffset.y,
					left: posX + this.options.markerOffset.x	
				}
			});
			
			// mouseover
			marker.addEvent('mouseover', function(){
				this.fireEvent('select', [data, {x: posX, y: posY}]);
			}.bind(this));
			
			// append marker
			this.mapInstance.grab(marker);
		}.bind(this));
	}
});
