var map;
var jmarkers = new Array();
var jmarkers_map = {}
var init_flag;
var nav_index = -1;
var points = []
var pmarkers;

var startn;
var endn;
var camn;

var M_PHOTO = 1;
var M_START = 2;
var M_END = 3;

var startMarker;
var endMarker;

function TMarker(a, b) {
	this.inheritFrom = GMarker;
	this.inheritFrom(a,b);
	this.removed = false;
	this.ty = 0;
	this.index = 0;
	this.lv = 0;
	this.oPoint = 0;
	this.photo_src = null;
}
TMarker.prototype = new GMarker(new GLatLng(1, 1));

TMarker.prototype.initialize = function(a) {
	GMarker.prototype.initialize.call(this, a);
}

TMarker.prototype.setRemoved = function(a) {
	this.removed = a;
}
TMarker.prototype.isRemoved = function() {
	return this.removed;
}

function onMapPanelLoad() {
	if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(25.12, 121.46), 10);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMenuMapTypeControl());
	//map.getMapTypes().length = 0;  
	map.removeMapType( G_HYBRID_MAP );  
	map.addMapType( G_NORMAL_MAP );  
	map.addMapType( G_SATELLITE_MAP );  
	map.addMapType( G_PHYSICAL_MAP ); 
	map.disableDoubleClickZoom();

	camn = new GIcon();
	camn.image = "/img/marker/cam2.png";
	camn.iconSize = new GSize(20, 20);
	//camn.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	//camn.shadowSize = new GSize(22, 20);
	camn.iconAnchor = new GPoint(11, 11);
	camn.infoWindowAnchor = new GPoint(5, 1);

	startn = new GIcon();
	startn.image = "/img/marker/start.png";
	startn.shadow = "/img/marker/shadow.png";
	startn.iconSize = new GSize(22, 30);
	startn.shadowSize = new GSize(39, 30);
	startn.iconAnchor = new GPoint(11, 30);
	startn.infoWindowAnchor = new GPoint(5, 1);

	endn = new GIcon(startn);
	endn.image = "/img/marker/end.png";

	marker_init_get();
	}
}

function marker_init_get() {	
	//alert("marker_init_get");

	var AjaxObject = {
		handleSuccess:function(o){
			//console.log("asyncRequest handleSuccess");
			this.processResult(o);
		},

		handleFailure:function(o){
			//console.log("asyncRequest handleFailure");
			// Failure handler
		},
		processResult:function(o){
			// This member is called by handleSuccess
			onMarkerInitComplete(o);
		},
		startRequest:function() {
		YAHOO.util.Connect.asyncRequest('POST', '/activity/mapviewdata/' + activity_id + '/', callback, "type=article");
		}
	};

	var callback =
	{
		success:AjaxObject.handleSuccess,
		failure:AjaxObject.handleFailure,
		timeout: 60000,
		scope: AjaxObject
	};

	AjaxObject.startRequest();
}

var onMarkerInitComplete = function onMarkerInitComplete(res)
{	
	var ret = eval( "(" + res.responseText + ")" );	
	
	if(ret.type=="satellite") map.setMapType(G_SATELLITE_MAP);
	else if(ret.type=="terrain") map.setMapType(G_PHYSICAL_MAP);	

	var line = ret.line
	var rets = ret.points
	var map_bound=new GLatLngBounds();
	//var points = []
	var photos = []
	var photos_desc = []

	function importanceOrder (marker, b) {
		return GOverlay.getZIndex(marker.getPoint().lat() - 2);
	}

	point = new GLatLng( Number(ret.start[0]),	Number(ret.start[1]));
	if(!init_flag) {
		map_bound.extend(point);
		map_bound.extend(new GLatLng( Number(ret.maxp[0]),	Number(ret.maxp[1])))
		map_bound.extend(new GLatLng( Number(ret.minp[0]),	Number(ret.minp[1])))
	}
	startMarker = new TMarker(point, {icon: startn, draggable: false, title:i, zIndexProcess:importanceOrder});
	map.addOverlay(startMarker);
	GEvent.addListener(startMarker, "mouseover", function(i) {
		//pmarkers.select(i);
	});

	point = new GLatLng( Number(ret.end[0]),  Number(ret.end[1]));
	if(!init_flag) map_bound.extend(point);
	endMarker = new TMarker(point, {icon: endn, draggable: false, title:i, zIndexProcess:importanceOrder});
	map.addOverlay(endMarker);
	GEvent.addListener(endMarker, "mouseover", function(i) {
		//pmarkers.select(i);
	});


	for(var i = 0 ;i<rets.length; i++) {
		point = new GLatLng( Number(rets[i][0]),  Number(rets[i][1]));
		if(!init_flag) map_bound.extend(point);
		points.push(point);
		photos.push(rets[i][2]);
		photos_desc.push(rets[i][4]);		
		//console.log(rets[i][4]);
	}
		
	if(photos.length > 0) {
		pmarkers = new JPMarker("/activity/" + activity_id + "/photoconcat/?w=32&h=32", 32, 32, points, photos, photos_desc, "article");
		map.addOverlay(pmarkers);
		
		GEvent.addListener(pmarkers, "mouseover", function(i) {
			pmarkers.select(i);
			pmarkers.openInfoWindowHtml(i, false, false);			
		});
		GEvent.addListener(pmarkers, "mouseout", function(i) {
			pmarkers.select(jmarkers.None);
			pmarkers.closeInfoWindowHtml();			
		});
		GEvent.addListener(pmarkers, "click", function(i) {
			pmarkers.openInfoWindowHtml(i, false, true);
			this.nav_index = i;
		});
	}
	
	track = new GPolyline.fromEncoded({
	color: "#f00000",
	weight: 2,
	opacity: 0.8,
	points: line[0],
	levels: line[1],
	zoomFactor: 16,
	numLevels: 4
	})
	map.addOverlay(track);

	if(!init_flag) map.setCenter(map_bound.getCenter(), map.getBoundsZoomLevel(map_bound));
	init_flag = true;
}

var goToStart = function goToStart()
{	
	photoPaneUnSelect(nav_index);		
	nav_index = -1;
	map.panTo(startMarker.getPoint());		
	pmarkers.unselect();	
	pmarkers.closeInfoWindowHtml();	
}

var goToEnd = function goToEnd()
{	
	map.panTo(endMarker.getPoint());
	nav_index = points.length;
	pmarkers.unselect();
	pmarkers.closeInfoWindowHtml();
}

var nextPOI = function()
{	
	photoPaneUnSelect(nav_index);
	nav_index ++;

	if (nav_index>=points.length) goToEnd();
	else gotoPOI(nav_index);		
}

var previousPOI = function()
{	
	photoPaneUnSelect(nav_index);
	nav_index --;

	if(nav_index <= 0 ) goToStart();
	else gotoPOI(nav_index);			
}

var gotoPOI = function(i)
{	
	photoPaneUnSelect(nav_index);
	nav_index=i;
	map.panTo(points[nav_index]);
	pmarkers.select(i);
	pmarkers.openInfoWindowHtml(nav_index, false, true);
	photoPaneSelect(nav_index);
}

var photoPaneSelect = function(i)
{	
	if (i >= 0&& i < this.points.length) {				
		d = YAHOO.util.Dom.get("photo_" + i)
		if(d!=null) d.style.background = "#FF7800";
	}
}
var photoPaneUnSelect = function(i)
{	
	if (i >= 0 && i < this.points.length) {		
		d = YAHOO.util.Dom.get("photo_" + i)		
		if(d!=null) d.style.background = "#ffffff";
	}
}

YAHOO.util.Event.onContentReady("map", function () {
	onMapPanelLoad();
});


window.onunload = GUnload;

