	/**
	 * Class TechDivision.Geo
	 * This class handles geocoordinates  
	 *
	 * @author Johann Zelger <j.zelger@techdivision.com>
	 */
	TechDivision.Geo = Class.create({
		
		/**
		 * Parse mapSettings JSON-String by initializing the Class
		 */
		initialize: function(mapSettings) {
			if (mapSettings) this.settings = mapSettings.evalJSON();
		},
		
		/**
		 * Coverts geoCoords into pixelCoords
		 * 
		 * @param float lat
		 * @param float lon
		 * @return Object convCoords
		 */
		convert: function(lat, lon) {
			if (this.settings) {
				convCoords = new Object();
	            convCoords.alpha = (parseFloat(this.settings.rotation)/180)
	            	*Math.PI;
	            convCoords.alphan = -1*convCoords.alpha;
	            convCoords.faktor_x = parseFloat(this.settings.faktor_x);
	            convCoords.faktor_y = parseFloat(this.settings.faktor_y);
	            convCoords.geo_lon = lon;
	            convCoords.geo_lat = lat;
	            convCoords.rp1_x = parseFloat(this.settings.refpoint1_x);
	            convCoords.rp1_y = parseFloat(this.settings.refpoint1_y);
	            convCoords.gp1_x = parseFloat(this.settings.refpoint1_lon);
	            convCoords.gp1_y = parseFloat(this.settings.refpoint1_lat);
	            
	            convCoords.rp1i_x = (convCoords.rp1_x 
	            		*Math.cos(convCoords.alpha))
	            		+(convCoords.rp1_y *Math.sin(convCoords.alpha));
	            convCoords.rp1i_y = (convCoords.rp1_y 
	            		*Math.cos(convCoords.alpha))
	            		-(convCoords.rp1_x *Math.sin(convCoords.alpha));
	            
	            convCoords.geo_x = convCoords.rp1i_x + ((convCoords.geo_lon 
	            		- convCoords.gp1_x)/convCoords.faktor_x);
	            convCoords.geo_y = convCoords.rp1i_y + ((convCoords.geo_lat 
	            		- convCoords.gp1_y)/convCoords.faktor_y);
	            
	            convCoords.x = (convCoords.geo_x * Math.cos(convCoords.alphan))
	            			+(convCoords.geo_y * Math.sin(convCoords.alphan));
	            convCoords.y = (convCoords.geo_y * Math.cos(convCoords.alphan))
	            			-(convCoords.geo_x * Math.sin(convCoords.alphan));
	            return convCoords;
			} else {
				return false;
			}
		},
		
		/**
		 * This function allows to point real geoCoords on the given map Object
		 * 
		 * @param float lat: Geocoord. lat
		 * @param float lan: Geocoord. lon
		 * @param string map: ID of flashObject
		 * @param string image: Url to image
		 * @param string pointText1
		 * @param string pointText2
		 * @param string pointText3
		 * @param string link: Url for homepagelink
		 * @return void
		 */
		point: function(lat, lon, map, image, pointText1, pointText2, 
						pointText3, link) {
			var delimiter = ':::';

			if (this.settings) {
				var convCoords = this.convert(lat, lon);
				MM_controlShockwave(map,'',convCoords.x + delimiter + 
											convCoords.y + delimiter +
											image + delimiter +
											pointText1 + delimiter +
											pointText2 + delimiter +
											pointText3 + delimiter +
											link + delimiter);
			} else {
				return false;
			}
		}
		
	});

