/*******************************************************************************

* KindEditor - WYSIWYG HTML Editor for Internet

* Copyright (C) 2006-2011 kindsoft.net

*

* @author Roddy <luolonghao@gmail.com>

* @site http://www.kindsoft.net/

* @licence http://www.kindsoft.net/license.php

*******************************************************************************/



// Google Maps: http://code.google.com/apis/maps/index.html



KindEditor.plugin('map', function(K) {

	var self = this, name = 'map', lang = self.lang(name + '.');

	self.clickToolbar(name, function() {

		var html = ['<div style="padding:10px 20px;">',

			'<div class="ke-dialog-row">',

			lang.address + ' <input id="kindeditor_plugin_map_address" name="address" class="ke-input-text" value="" style="width:200px;" /> ',

			'<span class="ke-button-common ke-button-outer">',

			'<input type="button" name="searchBtn" class="ke-button-common ke-button" value="' + lang.search + '" />',

			'</span>',

			'</div>',

			'<div class="ke-map" style="width:558px;height:360px;"></div>',

			'</div>'].join('');

		var dialog = self.createDialog({

			name : name,

			width : 600,

			title : self.lang(name),

			body : html,

			yesBtn : {

				name : self.lang('yes'),

				click : function(e) {

					var geocoder = win.geocoder,

						map = win.map,

						center = map.getCenter().lat() + ',' + map.getCenter().lng(),

						zoom = map.getZoom(),

						maptype = map.getMapTypeId(),

						url = 'http://maps.googleapis.com/maps/api/staticmap';

						url += '?center=' + encodeURIComponent(center);

						url += '&zoom=' + encodeURIComponent(zoom);

						url += '&size=558x360';

						url += '&maptype=' + encodeURIComponent(maptype);

						url += '&markers=' + encodeURIComponent(center);

						url += '&language=' + self.langType;

						url += '&sensor=false';

					self.exec('insertimage', url).hideDialog().focus();

				}

			},

			beforeRemove : function() {

				searchBtn.remove();

				if (doc) {

					doc.write('');

				}

				iframe.remove();

			}

		});

		var div = dialog.div,

			addressBox = K('[name="address"]', div),

			searchBtn = K('[name="searchBtn"]', div),

			win, doc;

		var iframeHtml = ['<!doctype html><html><head>',

			'<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />',

			'<style>',

			'	html { height: 100% }',

			'	body { height: 100%; margin: 0; padding: 0; background-color: #FFF }',

			'	#map_canvas { height: 100% }',

			'</style>',

			'<script src="http://maps.googleapis.com/maps/api/js?sensor=false&language=' + self.langType + '"></script>',

			'<script>',

			'var map, geocoder;',

			'function initialize() {',

			'	var latlng = new google.maps.LatLng(31.230393, 121.473704);',

			'	var options = {',

			'		zoom: 11,',

			'		center: latlng,',

			'		disableDefaultUI: true,',

			'		panControl: true,',

			'		zoomControl: true,',

			'		mapTypeControl: true,',

			'		scaleControl: true,',

			'		streetViewControl: false,',

			'		overviewMapControl: true,',

			'		mapTypeId: google.maps.MapTypeId.ROADMAP',

			'	};',

			'	map = new google.maps.Map(document.getElementById("map_canvas"), options);',

			'	geocoder = new google.maps.Geocoder();',

			'	geocoder.geocode({latLng: latlng}, function(results, status) {',

			'		if (status == google.maps.GeocoderStatus.OK) {',

			'			if (results[3]) {',

			'				parent.document.getElementById("kindeditor_plugin_map_address").value = results[3].formatted_address;',

			'			}',

			'		}',

			'	});',

			'}',

			'function search(address) {',

			'	if (!map) return;',

			'	geocoder.geocode({address : address}, function(results, status) {',

			'		if (status == google.maps.GeocoderStatus.OK) {',

			'			map.setZoom(11);',

			'			map.setCenter(results[0].geometry.location);',

			'			var marker = new google.maps.Marker({',

			'				map: map,',

			'				position: results[0].geometry.location',

			'			});',

			'		} else {',

			'			alert("Invalid address: " + address);',

			'		}',

			'	});',

			'}',

			'</script>',

			'</head>',

			'<body onload="initialize();">',

			'<div id="map_canvas" style="width:100%; height:100%"></div>',

			'</body></html>'].join('\n');

		// TODO:用doc.write(iframeHtml)方式加载时,在IE6上第一次加载报错,暂时使用src方式

		var iframe = K('<iframe class="ke-textarea" frameborder="0" src="' + self.pluginsPath + 'map/map.html" style="width:558px;height:360px;"></iframe>');

		function ready() {

			win = iframe[0].contentWindow;

			doc = K.iframeDoc(iframe);

			//doc.open();

			//doc.write(iframeHtml);

			//doc.close();

		}

		iframe.bind('load', function() {

			iframe.unbind('load');

			if (K.IE) {

				ready();

			} else {

				setTimeout(ready, 0);

			}

		});

		K('.ke-map', div).replaceWith(iframe);

		// search map

		searchBtn.click(function() {

			win.search(addressBox.val());

		});

	});

});