var DEFAULT_LAT = 25.087066131532644;
var DEFAULT_LNG = 121.52472138404846;
var DEFAULT_ZOOM = 17;

var map;
var markers=new Markers();
var geocoder = new GClientGeocoder();

/**
 * @class 記錄所有的 marker
 * @constructor
 */
function Markers() {
	this._lists={};
}

Markers.prototype.add=function(id, marker) {
	this._lists[id]=marker;
};

Markers.prototype.get=function(id) {
	return this._lists[id];
};

Markers.prototype.remove=function(id) {
	delete this._lists[id];
}

Markers.prototype.clear=function() {
	for(objName in this._vendorList) {
		delete this._vendorList[objName];
	}
}

/*
 * 地圖初始化
 *
 * options
 *  zoom 地圖縮放比例
 *  map_lat 緯度
 *  map_lng 經度
 *  marker 是否有標記, true 則顯示標記, 預設不顯示
 *  map_lat_id map_lat element's id, default : map_lat
 *  map_lng_id map_lng element's id, default : map_lng
 *  marker_draggable market 是否可以拖曳，預設不可以
 *  marker_title marker 的 title.
 */
function map_init(elemet_id, options, callback) {
	var zoom, map_lat, map_lng, marker, map_lat_id, map_lng_id;
	
	if(options == undefined) { options = {}; }
	zoom = (options.zoom == undefined) ? DEFAULT_ZOOM : options.zoom;
	map_lat = (options.map_lat == undefined) ? DEFAULT_LAT : options.map_lat;
	map_lng = (options.map_lat == undefined) ? DEFAULT_LNG : options.map_lng;
	marker = (options.marker == undefined) ? false : options.marker;
	map_lat_id = (options.map_lat_id == undefined) ? false : options.map_lat_id;
	map_lng_id = (options.map_lng_id == undefined) ? false : options.map_lng_id;
	marker_draggable = (options.marker_draggable == undefined) ? false : options.marker_draggable;
	marker_title = (options.marker_title == undefined) ? undefined : options.marker_title;
	
	if(GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById(elemet_id));
		map.addControl(new GSmallZoomControl3D());
		map.setCenter(new GLatLng(map_lat, map_lng), zoom);

		if(marker) {
			map_add_center_marker(marker_draggable, map_lat_id, map_lng_id, marker_title);
			if(callback)callback();
		}
		//map.setUIToDefault();
		
	}
	
	
}


// 將地圖移至該地址
function map_move_to_address(address, callback) {
  if(geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          alert("\"" +address + "\" 找不到相對應的位置，請確定您所輸入的地址是否正確。");
        } else {
          map.setCenter(point);
          //var marker = new GMarker(point);
          //map.addOverlay(marker);
          //marker.openInfoWindowHtml(address);
          if(callback!==undefined) {
			callback();
			}
        }
      } // function
    );
  } else {
  	alert('geocoder must initialize'); 
  }
}

/**
 * 在地圖中心點加入 marker
 *
 * @param marker_draggable mark 是否可以拖曳，預設 false.
 * @param lat_id lat id，若有加入此參數，拖曳 marker 後會更新 lat_id 的 value.
 * @param lng_id lng id，若有加入此參數，拖曳 marker 後會更新 lat_id 的 value.
 * @param marker_title 點擊 marker 所彈出的訊息.
 *
 * @retval 新建立的 marker
 */
function map_add_center_marker(marker_draggable, lat_id, lng_id, marker_title) {
	if(marker_draggable===undefined) {
		marker_draggable=false;
	}
	
	map.clearOverlays();
	var options = { draggable: marker_draggable	};
	if(marker_title !== undefined) {
		options.title = marker_title;
	}
	
	var marker = map_custom_marker(map.getCenter(), options);
	if(marker_title !== undefined) {
		GEvent.addListener(marker, 'click', function(){
			marker.openInfoWindow(marker_title);
		});
	}
	map.addOverlay(marker);
	
	if(lat_id !== undefined && lng_id !== undefined) {
		if(document.getElementById(lat_id) !== null && document.getElementById(lng_id) !== null) {
			GEvent.addListener(marker, "dragend", function(){
				document.getElementById(lat_id).value = marker.getPoint().lat();
				document.getElementById(lng_id).value = marker.getPoint().lng();
			});
			
			document.getElementById(lat_id).value = map.getCenter().lat();
			document.getElementById(lng_id).value = map.getCenter().lng();
		}
	}
	
	return marker;
}

/**
 * 移動地圖至某個商圈
 */
function map_move_to_trading_area(trading_area) {
	var lat, lng, zoom=16;
	
	switch(trading_area) {
		// 士林
		case 'shihlin':
			lat=25.087066131532644;
			lng=121.52472138404846;
			break;
		// 饒河
		case 'raohe':
			lat=25.050428592980534;
			lng=121.57577991485596;
			break;
		// 萬華
		case 'wanhua':
			lat=25.03694672064591;
			lng=121.50049567222595;
			break;
		// 師大
		case 'normal':
			lat=25.024309157456425;
			lng=121.5296995639801;
			break;
		// 樂華
		case 'lehua':
			lat=25.010445226088965;
			lng=121.50911092758179;
			break;
		// 東海
		case 'tunghai':
			lat=24.180975095462145;
			lng=120.59224605560303;
			break;
		// 逢甲
		case 'fengchia':
			lat=24.178626086562698;
			lng=120.64558982849121;
			break;
		// 一中
		case 'one':
			lat=24.151237368167696;
			lng=120.68586587905884;
			break;
		// 瑞豐
		case 'ruifeng':
			lat=22.665561234039572;
			lng=120.30617237091064;
			break;
		// 六合
		case 'liouhe':
			lat=22.632173542117716;
			lng=120.29918789863586;
			break;
		// 新崛江&原宿玉竹夜市
		case 'newhorie':
			lat=22.62267656857659;
			lng=120.30247092247009;
			break;
		// 公館
		case 'mansion':
			lat=25.015646814408665;
			lng=121.53305768966675;
			break;
		default:
			lat=25.087066131532644;
			lng=121.52472138404846;
			break;
	}
	map.setCenter(new GLatLng(lat, lng), zoom);
}

/**
 * 商圈代碼對應商圈名字
 */
function trading_area_id_corresponding_trading_area(trading_area_id) {

	var trading_area;
	switch(trading_area_id) {
		//士林夜市
		case '1':
			trading_area = 'shihlin';
			break;
		//饒河夜市
		case '2':
			trading_area = 'raohe';
			break;
		//萬華夜市
		case '3':
			trading_area = 'wanhua';
			break;
		//師大夜市
		case '4':
			trading_area = 'normal';
			break;
		//樂華夜市
		case '5':
			trading_area = 'lehua';
			break;
		//一中夜市
		case '6':
			trading_area = 'one';
			break;
		//逢甲夜市
		case '7':
			trading_area = 'fengchia';
			break;
		//東海夜市
		case '8':
			trading_area = 'tunghai';
			break;
		//瑞豐夜市
		case '9':
			trading_area = 'ruifeng';
			break;
		//六合夜市
		case '10':
			trading_area = 'liouhe';
			break;
		//新崛江&原宿玉竹夜市
		case '11':
			trading_area = 'newhorie';
			break;
		//公館夜市
		case '12':
			trading_area = 'mansion';
			break;
	}
	
	map_move_to_trading_area(trading_area);
}

/*
function map_add_marker(id, name, content, lat, lng) {
	var marker=new GMarker(new GPoint(lng, lat),{title:name});
	map.addOverlay(marker);
	GEvent.addListener(marker, 'click', function(){
		marker.openInfoWindowHtml(content);
	});
	
	marker.click=function() {
		this.openInfoWindowHtml(content);
	}
	
	markers.add(id, marker);
}
*/

/**
 * 建立自訂的 gmarker
 */
function map_custom_marker(latlng, options) {
	var icon=new GIcon();
	icon.image='http://www.i-city.com.tw/img/markers/m01.png';
	icon.iconSize = new GSize(64,50);
	//icon.iconSize = new GSize(64,64);
	icon.iconAnchor = new GPoint(32,40);
	icon.infoWindowAnchor = new GPoint(32,25);
	options.icon = icon;
	return new GMarker(latlng, options);
}
