﻿/*
-----------------------------------------------
Global Variables and Constants
----------------------------------------------- */
var map				= {};

/* EVENTS
----------------------------------------------- */
var EVENTS	= Array(4, 2, 6, 128);

/* Images
----------------------------------------------- */
var F_I_MAP_RACE_PREFIX		= "/img/runners/race/icon_";
var WST = 21;	// width of star image

/* Flash Instance
----------------------------------------------- */
var flashMenuRace	= null;

/* <div>
----------------------------------------------- */
var divMainContent	= null;
var divMap			= null;

/* URL
----------------------------------------------- */
var	URL_FETCH_DATA	= '/runners/race/index_post.php';

/* Data
----------------------------------------------- */
var raceCourses	= [];

/* Data
----------------------------------------------- */
var MAP_CENTER	= { lat: 36.5626, lng: 136.362305 };
var MAP_ZOOM	= 5;


/*
-----------------------------------------------
Error Handler
----------------------------------------------- */
function showErrorMessage(status, statusText) {
	alert('Error ' + status + ': ' + statusText);
}


/*
-----------------------------------------------
ExternalInterfaces
----------------------------------------------- */
function deleteAllMarkers() {
	for (var i = 0; i < map.mkrs.length; i++) { map.mkrs[i].hide(); }
}
	
function showMarkers(eventId) {
	for (var i = 0; i < map.mkrs.length; i++) {
		switch (eventId) {
		case 0:		break;
		case 2:		if ((raceCourses[i].event_id != 2) && (raceCourses[i].event_id != 6))	continue; break;
		case 4:		if ((raceCourses[i].event_id != 4) && (raceCourses[i].event_id != 6))	continue; break;
		case 6:		if (raceCourses[i].event_id != 6)										continue; break;
		default:	if (raceCourses[i].event_id != 128)										continue; break;
		}
		map.mkrs[i].show();
	}
}
	
function getCourses(eventId) {

	var courses = Array();
	
	for (var i = 0; i < raceCourses.length; i++) {
		switch (eventId) {
		case 0:		break;
		case 2:		if ((raceCourses[i].event_id != 2) && (raceCourses[i].event_id != 6))	continue; break;
		case 4:		if ((raceCourses[i].event_id != 4) && (raceCourses[i].event_id != 6))	continue; break;
		case 6:		if (raceCourses[i].event_id != 6)										continue; break;
		default:	if (raceCourses[i].event_id != 128)										continue; break;
		}
		var course = Array();
		course[0] = raceCourses[i].race_course_id;
		course[1] = raceCourses[i].title;
		courses.push(course);
	}
	
	return courses;
	
}


function showAlert(message) {
	alert(message);
}


/*
-----------------------------------------------
Event Handler
----------------------------------------------- */
/* onFinish Fetch Initial Data
----------------------------------------------- */
function _onFinishFetchData(rTxt) {

	var i;
	var rObj = rTxt.parseJSON();
	
	if (!rObj.status) {
		alert(rObj.message);
		return;
	}

	raceCourses	= rObj.race_courses;

	/* Icons
	----------------------------------------------- */
	map.icns = {};
	map.icns.courses = Array();
	for (i = 0; i < EVENTS.length; i++) {
		map.icns.courses[EVENTS[i]] = new GIcon();
		map.icns.courses[EVENTS[i]].image				= F_I_MAP_RACE_PREFIX + (EVENTS[i]).toString() + '.png';
		map.icns.courses[EVENTS[i]].iconSize			= new GSize(14,14);
		map.icns.courses[EVENTS[i]].iconAnchor			= new GPoint(7,7);
		map.icns.courses[EVENTS[i]].infoWindowAnchor	= new GPoint(7,7);
	}

	/* Show Map
	----------------------------------------------- */
	map.setCenter(new GLatLng(MAP_CENTER.lat, MAP_CENTER.lng), MAP_ZOOM);

	/* Initialize Menu
	----------------------------------------------- */
	flashMenuRace.initialize();

	/* Show all the markers
	----------------------------------------------- */
	map.mkrs = [];
	for (i = 0; i < raceCourses.length; i++) {
		var point = new GLatLng(raceCourses[i]['latitude'], raceCourses[i]['longitude']);
		map.mkrs[i] = new GMarker(point, {icon:map.icns.courses[raceCourses[i]['event_id']], title:raceCourses[i]['title']});
		map.mkrs[i].urlDetail = '/runners/race/course/' + raceCourses[i]['race_course_id'] + '.htm';
		GEvent.addListener(map.mkrs[i], "click", function() { location = this.urlDetail; });
		map.addOverlay(map.mkrs[i]);
	}
	
}

/* onload
----------------------------------------------- */
function initializeMyPage() {

	/* cache images
	----------------------------------------------- */
	for (i = 0; i < EVENTS.length; i++) {
		(new Image()).src = F_I_MAP_RACE_PREFIX + (EVENTS[i]).toString() + '.png';
	}

	/* Flash Player
	----------------------------------------------- */
	flashMenuRace 	= window.MenuRace || document.MenuRace;

	/* div
	----------------------------------------------- */
	divMainContent	= document.getElementById("main_content");
	divMap			= document.getElementById("map");

	/* Evaluation Graph
	----------------------------------------------- */
	var divs = divMainContent.getElementsByTagName('div');
	for (var i = 0; i < divs.length; i++) {
		if (CSSClass.is(divs[i], "totalEvaluationNumber")) {
			divs[i].previousSibling.style.width = Math.floor(WST * divs[i].firstChild.data) + 'px';
		}
	}

	/* Google Map
	----------------------------------------------- */
	if (GBrowserIsCompatible()) {	// The browser supports Google Map.

		/* <div>
		----------------------------------------------- */
		divMap.style.display		= "block";

		/* Gmap2 Class Instance & Controls
		----------------------------------------------- */
		map = new GMap2(divMap);
		map.addControl(new GSmallMapControl);
		map.addControl(new GMapTypeControl);

		/* Fetch Initial Data
		----------------------------------------------- */
		var opt = {};
		opt.timeout 				= 90000;
		opt.errorHandler			= showErrorMessage;
		opt.parameters				= {};
		opt.parameters.phase		= 0;
		HTTP.post(URL_FETCH_DATA, _onFinishFetchData, opt);	

	} else {	// The browser doesn't support Google Map.
		
		/* <div>
		----------------------------------------------- */
		divMap.style.display		= "none";
		
		/* Show Message
		----------------------------------------------- */
		showErrorMessage('', 'このブラウザでは地図情報を表示できません。');
		
	}
		
}
runOnLoad(initializeMyPage);

