/* 	GlobalDissemination.js
	Delirant class for Google is not the map project (2008)

	Usage:
	*	var gd = new GlobalDissemination( MapObject, options);
	
	Parameters:
	*	MapObject:GMap Object > The GMap Object (not the DOM element container!) you want to disseminate. 
	*	options:Object > {
			
			
			icons:Array > an array containing divverent Marker Options (for Icon Styling)
			infoWindowContent:String > a string for InfoWindow Content
		
		}
	
	Methods:
	*	start():Void > start the dissemination. Enjoy it ;-)
	*	loop(period:Number):void > Every period time, loop the dissemination
	
*/




var GlobalDissemination = new Class({
		
			initialize:function(mapContainer,options) {
				this.mapContainer = mapContainer;
				this.options = {
					
					markerNumber:150,
					icons:[],
					infoWindowContent:false
					
				}
				$extend(this.options, options);
				this.disseminatedMarkers = [];
				return this;
			},
			createMarker:function(point) {
				
				MarkerOptions = (this.options.icons.length>0) ? {icon:this.options.icons[$random(0,this.options.icons.length-1)]} : {};
				
				var Marker = new GMarker(point, MarkerOptions);
				
				//	Verifying that infoWindowContent has been declared by user
				if (this.options.infoWindowContent) {
					GEvent.addListener(Marker, "click", (function() {
						Marker.openInfoWindowHtml(this.options.infoWindowContent);
					}).bind(this));
				}
				
				return Marker;
				
			},
			start:function() {
			
				this.mapContainer.clearOverlays();
				
				var bounds = this.mapContainer.getBounds();
				var southWest = bounds.getSouthWest();
				var northEast = bounds.getNorthEast();
				var lngSpan = northEast.lng() - southWest.lng();
				var latSpan = northEast.lat() - southWest.lat();
				
				for (var i = 0; i < this.options.markerNumber; i++) {
				
					var point = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
					this.disseminatedMarkers[i] = this.createMarker(point)
					
					this.mapContainer.addOverlay(this.disseminatedMarkers[i]);
				  
				}
				
				return this;
			
			},
			
			disseminateAgain:function() {
				bounds = this.mapContainer.getBounds();
				southWest = bounds.getSouthWest();
				northEast = bounds.getNorthEast();
				lngSpan = northEast.lng() - southWest.lng();
				latSpan = northEast.lat() - southWest.lat();
			
				this.disseminatedMarkers.each(function(m) {
					point = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
					m.setLatLng(point)
					
				})
				
			},
			
			loop:function(time) {
				time =  (time*1>0) ? time : 5000;
				this.disseminateAgain.periodical(time,this)
				return this;
			}
			
		
		});