/**
*
* @author Carsten Neuendorf
*/
var YahooMap = Class.create();
YahooMap.prototype =
{
	/**
	* @param string map_layer
	* @param array init_vars
	*/
	initialize: function(map_layer,init_vars)
	{
		this.api_key = '0ItP_BTV34EoeRfftnh90F3uafMwUiWw3fFTUhI7gcmXISC9B0OnRgzqxSw3uDvesm3pvA--';
		this.obj_map = null;
		this.init_vars = init_vars;
		this.map_layer = map_layer;

		// hier werden alle marker gelistet
		this.arr_marker = new Array();

		// default zoom wert
		this.DEFAULT_ZOOM = 5;

		// schreibt den pfad zur api in den header
		document.write('<script type="text/javascript" src="http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=' + this.api_key + '"></script>');
	},

	/**
	 *
	 * @param void
	 * @return void
	 */
	 start: function ()
	 {
	 	var url = this.init_vars['init_script'];
	 	var obj_tmp = this;

	 	var data = new Ajax.Request(url,{
			method: 'post',
			onSuccess: function(t)
			{
				arr_data = Json.evaluate(t);

				obj_tmp.initMap(arr_data);
			}
		});
	 },

	/**
	 * erzeugt das map object
	 *
	 * @param array data {
	 * 						maptype:,
	 * 						center: {
	 * 							lat:, lng:
	 * 						},
	 * 						[
	 * 						control:
	 * 							array(...),
	 * 						zoom:,
	 * 						marker:
	 * 							array(siehe fkt->setMarker)
	 * 						]
	 * 					}
	 * @return void
	 */
	 initMap: function (data)
	 {
	 	this.obj_map = new YMap($(this.map_layer));
	 	this.setCenter(data);
	 	this.setMapType(data['map_type']);

	 	// map controller werden hinzugefügt
		var arr_ctrl = data['control'];
		if(typeof(arr_ctrl) != 'undefined')
		{
			for(var i=0; i<arr_ctrl.length; i++)
			{
				this.addControl(arr_ctrl[i]);
			}
		}

		// marker der karte hinzufügen
		var arr_marker = data['marker'];
		if(typeof(arr_marker) != 'undefined')
		{
			for(var i=0; i<arr_marker.length; i++)
			{
				this.setMarker(arr_marker[i]);
			}
		}

		// Der DebugDIV
		//YLog.print(typeof(arr_marker));
	 },


	 /**
	  * Controlltype hinzufügen
	  * -- draggable
	  * -- map_type_control
	  * -- zoom_control
	  *
	  * @version 2, Roland Fiala, 29.07.2008, Controls linksbuendig ausrichten
	  * @param string type
	  * @return void
	  */
	  addControl: function (type)
	  {
	  	switch (type)
	  	{
	  		case 'draggable':
	  			// ist schon automatisch gesetzt
	  			break;
	  		case 'map_type_control':
			  	// Map Type Control steht immer oben links
	  			this.obj_map.addTypeControl();
	  			break;
	  		case 'zoom_control':
				// Zoom Control steht immer unten links
				var zoom_coord = new YCoordPoint(10,100);
				zoom_coord.translate('left','bottom');

	  			this.obj_map.addZoomLong(zoom_coord);
	  			break;
	  	}

	  },


	/**
	 * Setzt den Zoom fest auf einen Wert und lässt sich somit nicht mehr per Maus scrollen
	 *
	 * @author Roland Fiala
	 * @param num zoom_level [1-16]
	 * @return void
	 */
	disableZoom: function(zoom_level)
	{
		this.obj_map.setZoomRange(zoom_level,zoom_level);
	},

	/**
	 * setzt die karte auf center
	 *
	 * @param array data {center: {lat:, lng:}[, zoom:]}
	 * @return void
	 */
	 setCenter: function (data)
	 {
	 	var zoom = data['zoom'];
	 	var geo_data = data['center'];
	 	if(typeof(zoom) == 'undefined') zoom = this.DEFAULT_ZOOM;

	 	this.obj_map.drawZoomAndCenter(new YGeoPoint(geo_data['lat'],geo_data['lng']), zoom);
	 },

	 /**
	  * setzt den kartentype
	  * - satellite
	  * - hybride
	  * - normal
	  * @param string map_type
	  * @return void
	  */
	  setMapType: function (map_type)
	  {
	  	var type = null;
	  	switch (map_type)
	  	{
	  		case 'satellite':
	  			type = YAHOO_MAP_SAT;
	  			break;
	  		case 'hybride':
	  			type = YAHOO_MAP_HYB;
	  			break;

	  		default:
	  			type = YAHOO_MAP_REG;
	  			break;
	  	}


	  	this.obj_map.setMapType(type);
	  }

}