var map = undefined;
var marker = undefined;
var point = undefined;
var defaultPoint = undefined;
var mapsearch = undefined;
point = new GLatLng(13.911906992670394,100.49838066101074);
gLocalSearch = new GlocalSearch();
gLocalSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
gLocalSearch.setNoHtmlGeneration();
gLocalSearch.setSearchCompleteCallback(null, onLocalSearchCallback);
gLocalSearch.setCenterPoint('thailand');
var gCurrentResults = [];
var markerlist = new Array();

function loadGMap(){
	if (GBrowserIsCompatible()){
		map = new GMap2($("map"));
		smallZoomControl = new GSmallZoomControl();
                map.addControl(smallZoomControl);
	}
}

//edit location part

function setEditableMode(){
	if(!map)
	{
		loadGMap();
		isLoadGMap = true;
	}
	if($("mapeditbtn").innerHTML==_("Add Location")){
		hideElement("locationNameContainer");
		showElement('map_container');
		showElement('photomap-embedcode');
        $('quickpost-googlemapembed').style.display = 'inline';
		map.checkResize();
		point = new GLatLng(13.911906992670394,100.49838066101074);
		map.setCenter(point, 13);
	}
	showElement("mapsearchbox");
	$("mapsearchbox").scrollTo();
	if(!mapsearch){
		mapsearch = new GMap2($("mapsearch"));
		mapsearch.addControl(new GLargeMapControl());
		mapsearch.addControl(new GMapTypeControl());
		mapsearch.enableContinuousZoom();
	}
	mapsearch.checkResize();
	mapsearch.setCenter(map.getCenter(), map.getZoom());

	if($("Location").innerHTML == "&nbsp;")
		$("locationName").value = "";
	else
		$("locationName").value = $("Location").innerHTML.unescapeHTML();

	$("searchLocationGC").value = "";

	if(marker){
		map.removeOverlay(marker);
		marker = undefined;
	}

	if(defaultPoint){
		showElement("locationNameContainer");
		marker = new GMarker(point, {draggable: true});
		GEvent.addListener(marker, "dragend", function(){
			point = marker.getLatLng();
		});
		mapsearch.addOverlay(marker);
		mapsearch.panTo(point);
		$("msgdiv").innerHTML = _('Drag and drop marker on the map');
	}else{
		hideElement("mapsavebtn");
		hideElement("locationNameContainer");
		$("msgdiv").innerHTML = _('Click on the map in order to add a marker');
	}
	GEvent.addListener(mapsearch, 'click', function(overlay, p){
		if (p){
			point = p;
			if(marker){
				GEvent.clearListeners(marker, 'dragend');
				mapsearch.removeOverlay(marker);
				marker = undefined;
			}
			marker = new GMarker(point, {draggable: true});
			GEvent.addListener(marker, "dragend", function(){
				point = marker.getLatLng();
			});
			mapsearch.addOverlay(marker);
			mapsearch.panTo(point);
			showElement("mapsavebtn");
			showElement("locationNameContainer");
			$("msgdiv").innerHTML = _('Drag and drop marker on the map');
		}
	});
	isEditableMode = true;
}

function cancelEditableMode(){
	if($("mapeditbtn").innerHTML==_("Add Location")){
		hideElement('map_container');
		hideElement('photomap-embedcode');
        hideElement('quickpost-googlemapembed');
    }
	
	hideElement("mapsearchbox");

	if(marker){
		GEvent.clearListeners(marker, 'dragend');
		mapsearch.removeOverlay(marker);
		marker = undefined;
	}
	if(defaultPoint){
		point = defaultPoint
		marker = new GMarker(point);
		map.addOverlay(marker);
		map.setCenter(point, map.getZoom());
	}else{
		point = undefined;
	}
	GEvent.clearListeners(mapsearch, 'click');

	$("msgdiv").innerHTML = "";
	$("searchResultDiv").innerHTML = "";
	isEditableMode = false;
}

function searchLocation(){
	if($("searchLocationGC").value == "") return;
	showElement("postingimg");
	$("searchLocationGC").readonly = true;

	searchMobileCellLocation($("searchLocationGC").value);
}
function searchMobileCellLocation(value){
	var searchResultDiv = $("searchResultDiv");
	searchResultDiv.innerHTML = "";
	var opt = {
		parameters: {value:encodeURIComponent(value)},
		onSuccess: function(t) {
			searchResults = t.responseText.evalJSON();

			gCurrentResults.length = 0;
			if(searchResults.results.length > 0){
				if(marker){
					GEvent.clearListeners(marker, 'dragend');
					mapsearch.removeOverlay(marker);
					marker = undefined;
				}
				for (var i = 0; i < searchResults.results.length; i++) {
					var localResult = new LocalResult(searchResults.results[i])
					gCurrentResults.push(localResult);
				}

				var first = searchResults.results[0];
				point = new GLatLng(Number(first.lat), Number(first.lng));
				marker = new GMarker(point, {draggable: true});
				GEvent.addListener(marker, "dragend", function(){
					point = marker.getLatLng();
				});

				mapsearch.addOverlay(marker);
				mapsearch.panTo(point);
			}
			gLocalSearch.execute(value);
		},
		onFailure: function(t) {
			gLocalSearch.execute(value);
		}
	}
	new Ajax.Request("/"+page+"/searchMobileCellLocationName", opt);
}
function onLocalSearchCallback(){
	var searchResultDiv = $("searchResultDiv");

	if (gLocalSearch.results && gLocalSearch.results.length > 0){
		var attribution = gLocalSearch.getAttribution();
		if(attribution){
			searchResultDiv.appendChild(attribution);
		}

		if(gCurrentResults.length == 0){
			if(marker){
				GEvent.clearListeners(marker, 'dragend');
				mapsearch.removeOverlay(marker);
				marker = undefined;
			}

			var first = gLocalSearch.results[0];
			point = new GLatLng(Number(first.lat), Number(first.lng));
			marker = new GMarker(point, {draggable: true});
			GEvent.addListener(marker, "dragend", function(){
				point = marker.getLatLng();
			});
			mapsearch.addOverlay(marker);
			mapsearch.panTo(point);
		}

		for (var i = 0; i < gLocalSearch.results.length && gCurrentResults.length <= 15; i++) {
			var localResult = new LocalResult(gLocalSearch.results[i])
			gCurrentResults.push(localResult);
		}
	}
	
	GEvent.clearListeners(mapsearch, 'click');
	if(gCurrentResults.length > 0){
		$("msgdiv").innerHTML = _('Location name match on search keyword');
		showElement("mapsavebtn");
		showElement("locationNameContainer");
	}else{
		if(defaultPoint && $("searchLocationGC").value == $("Location").innerHTML){
			if(marker){
				GEvent.clearListeners(marker, 'dragend');
				mapsearch.removeOverlay(marker);
				marker = undefined;
			}
			point = defaultPoint;
			marker = new GMarker(point, {draggable: true});
			GEvent.addListener(marker, "dragend", function(){
				point = marker.getLatLng();
			});
			mapsearch.addOverlay(marker);
			mapsearch.panTo(point);
			$("msgdiv").innerHTML = _('Drag and drop marker on the map');
		}else{
			if(marker)
				$("msgdiv").innerHTML = _('Cannot find location');
			else{
				hideElement("mapsavebtn");
				hideElement("locationNameContainer");
				GEvent.addListener(mapsearch, 'click', function(overlay, p){
					if (p){
						point = p;
						if(marker){
							GEvent.clearListeners(marker, 'dragend');
							mapsearch.removeOverlay(marker);
							marker = undefined;
						}
						marker = new GMarker(point, {draggable: true});
						GEvent.addListener(marker, "dragend", function(){
							point = marker.getLatLng();
						});
						mapsearch.addOverlay(marker);
						mapsearch.panTo(point);
						showElement("mapsavebtn");
						showElement("locationNameContainer");
						$("msgdiv").innerHTML = _('Drag and drop marker on the map');
					}
				});
				$("msgdiv").innerHTML = _('Click on the map in order to add a marker');
			}
		}
	}
	hideElement("postingimg");
}

function LocalResult(result) {
	this.result_ = result;
	this.resultNode_ = this.createResultNode();
	$("searchResultDiv").appendChild(this.resultNode_);
}

LocalResult.prototype.createResultNode = function() {
	var li = document.createElement("li");
	var a = document.createElement("a");
	a.href = "javascript:void(0);";
	a.innerHTML = this.result_.title;
	li.appendChild(a);

	GEvent.bindDom(a, "click", this, function() {
		if(marker){
			GEvent.clearListeners(marker, 'dragend');
			mapsearch.removeOverlay(marker);
			marker = undefined;
		}

		point = new GLatLng(Number(this.result_.lat), Number(this.result_.lng));
		marker = new GMarker(point, {draggable: true});
		GEvent.addListener(marker, "dragend", function(){
			point = marker.getLatLng();
		});
		mapsearch.addOverlay(marker);
		mapsearch.panTo(point);
	});
	return li;
}
