var map = null;
var markers = null; // array of GMarker
var ifout = "zoomout"; //表示画面にいない場合の処理タイプ 'zoomout', 'moveCenter', 'moveNear'
var bAdjustCenter = 0; //1:クリックしたらセンターに not supported

//use global 
//	tolist: array of object
//	sids: simple array of ids

var frontid = -1; //最前面のマーカーのid 


function initMap( lat, lng )
{
	markers = new Array();
	if ( GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("mapbase"));
		//map.setCenter(new GLatLng(lat,lng), 13);
		map.addControl(new GLargeMapControl()); //拡大縮小
	}
}


var timerID = null;
var timerCnt = 0;

function markerAnimeStart()
{
	timerCnt++;
	if ( !(timerCnt % 3 )) {
		markers[frontid].setImage("/img/icons/circle_white_12.png"); //orig
		//markers[frontid].setImage("/img/marker2.png"); //orig
	} else {
		markers[frontid].setImage("/img/icons/circle_blue_12.png"); //orig
		//markers[frontid].setImage("/img/marker.png"); //orig
	}
}

function markerAnimeStop()
{
	if ( timerID ) {
		clearInterval( timerID );
		timerID = null;

		if ( frontid >= 0 ) {
			//markers[frontid].setImage("/img/marker.png"); //orig
			markers[frontid].setImage("/img/icons/circle_blue_12.png"); //orig
			markers[frontid].closeInfoWindow();
		}
	}
}

function ptFocus( id )
{
/*
	if ( bAdjustCenter ) {
		point = new GLatLng( pdatas[id].y, pdatas[id].x );
		map.setCenter( point, 15 );
	}
*/
	if ( typeof(markers) == 'undefined' || markers == null ) {
		return 0;
	}

	markerAnimeStop();

	recalcPos( markers[id] );

	if ( frontid != id ) { //lastid

		//if ( tolist[id].paid == tolist[frontid].paid ) {
			map.removeOverlay( markers[id] );
			swapMarkerOrder( frontid, id );
			map.addOverlay( markers[id] );
		//}
		frontid = id;

		var resultset = { "id" : id };
		cbAdClick( resultset );
	}
	timerID = setInterval("markerAnimeStart()", 200 );

	return 1;
}

function swapMarkerOrder( m1, m2 )
{
	tmp = markers[m2].mem_zIndex;
	markers[m2].mem_zIndex = markers[m1].mem_zIndex;
	markers[m1].mem_zIndex = tmp;
}

function createMarker(latlng, id, zindex, paid )
{
	var marker;

	if ( paid ) {
		marker = new GMarker(latlng, {zIndexProcess: my_zIndexProcess});
	} else {
                ic = new GIcon();
                ic.image = '/img/icons/circle_blue_12.png';
                ic.shadow = '/img/icons/shadow_circle_12.png';
                ic.iconSize =  new GSize( 12, 12 );
                ic.shadowSize = new GSize( 19, 12 );
                ic.iconAnchor =  new GPoint( 5, 5 );
                ic.infoWindowAnchor = new GPoint( 12, 0 );

                marker = new GMarker( latlng, {icon:ic, zIndexProcess: my_zIndexProcess} );
	}

	marker.mem_zIndex = zindex;

	GEvent.addListener(marker,"click", function() {
		ptFocus( id );
		var myHtml = "<span style='font-weight:bold;'>" + tolist[id].ttl + "</span>" +
			"<p>" + tolist[id].info + "</p>";
		marker.openInfoWindowHtml(myHtml);
	});

	return marker;
}

function my_zIndexProcess(marker){     return marker.mem_zIndex; }


function recalcPos( marker )
{
	//global map
	var gb = map.getBounds();
	var point = marker.getPoint();

	
	if ( !gb.containsLatLng( point ))
	{
		if ( ifout == 'zoomout' )
		{
			//stay center.
			gb.extend( point );
			map.setCenter( map.getCenter(), map.getBoundsZoomLevel( gb ));
		} 
		else if ( ifout == 'moveCenter' )
		{
			map.panTo( point );
		} 
		else if ( ifout == 'moveNear' )
		{
			var center = map.getCenter();
			var latpad = gb.toSpan().lat() / 8.0; //X
			var lngpad = gb.toSpan().lng() / 8.0; //X
			var tlat = 0;
			var tlng = 0;

			if ( !gb.containsLatLng( new GLatLng( point.lat(), center.lng())))
			{
				if ( center.lat() < point.lat())
				{ 
					//point upper
					tlat = ( point.lat() - gb.getNorthEast().lat()) + latpad;
				}
				else
				{
					tlat = ( point.lat() - gb.getSouthWest().lat()) - latpad;
				}
			}
			if ( !gb.containsLatLng( new GLatLng( center.lat(), point.lng())))
			{
				if ( center.lng() < point.lng())
				{ 
					//easter
					tlng = ( point.lng() - gb.getNorthEast().lng()) + lngpad;
				} 
				else
				{ 	
					//wester
					tlng = ( point.lng() - gb.getSouthWest().lng()) - lngpad;
				}
				newcenter = new GLatLng( center.lat() + tlat, center.lng() + tlng )
			}
			map.panTo( new GLatLng( center.lat() + tlat, center.lng() + tlng ));
		} 
		else
		{
		}
	}
}

function initZoom()
{
	var gb;
	var bFirst = 1;

	//for ( var id in markers )

	for ( var i = 0; i < sids.length; i++ )
	{
		var id = sids[i];
		var marker = markers[id];
		if( bFirst ){
			gb = new GLatLngBounds( marker.getPoint(), marker.getPoint());
			bFirst = 0;
		}else{
			var point = marker.getPoint();
			gb.extend( point );
		}
	}
	map.setCenter( gb.getCenter(), map.getBoundsZoomLevel( gb )-1); //smaller
}

function initialize( lat, lng )
{
	var point;

	initMap( lat, lng );

	for ( i = 0; i < sids.length; i++ )
	{
		var id = sids[i];
		point = new GLatLng( tolist[id].lat, tolist[id].lng );
		markers[id] = new createMarker( point, id, i+1, tolist[id].paid );
		frontid = id;
		map.addOverlay( markers[id] );
	}

	if ( point ) {
		initZoom();
		//map.setCenter( point, 15 );
		//map.panTo( point );
	}
}

function backToTop()
{
	var x1 = x2 = x3 = 0;
	var y1 = y2 = y3 = 0;
	if (document.documentElement) {
		x1 = document.documentElement.scrollLeft || 0;
		y1 = document.documentElement.scrollTop || 0;
	}
	if (document.body) {
		x2 = document.body.scrollLeft || 0;
		y2 = document.body.scrollTop || 0;
	}
	x3 = window.scrollX || 0;
	y3 = window.scrollY || 0;
	var x =  Math.max(x1, Math.max(x2, x3));
	var y = Math.max(y1, Math.max(y2, y3));
	window.scrollTo(Math.floor(x / 2), Math.floor(y / 2));
	if (x > 0 || y > 0) {
		window.setTimeout("backToTop()", 25);
	}
}

function getCenterLatLng()
{
	//var latlng = map.fromContainerPixelToLatLng(new GPoint(100, 80));
	var latlng = map.getCenter();
	var lat = latlng.lat();
	var lng = latlng.lng();
	var zl = map.getZoom();
	//alert( lat + "," + lng );
	goRefArea( lat, lng, zl );
}

