﻿//Global values
var geocoder = new GClientGeocoder();
var mBaseIcon = null;
var mBaseIconBig = null;
var mDefaultErrorOn = false;
var mEnabledStatic = true;
var mErrorDivIndex = 'divError';
var mMap = null;
var mMapIndex = 'map';
var mResponse = null;

//Index order
var mArID = 0;
var mArName = 1;
var mArCoords = 2;
var mArAddress = 3;
var mArLocation =4;
var mArEvents = 5;

//Predetermined values
var mIconShadowRoot = '/images/mm_20_shadow.png';
var mMarkerTemplate = "<div class = 'blue'><b>{@mArName}</b><br /><div><a href = '?navigation_id=182&Id={@mArID}'>Details anzeigen</a>{@mArEvents}</div></div>";
var mMarkerIconRoot = '/images/mm_20_blue.png';

//Call to server side function
var stDateCtrl = document.getElementById('ctl00_stDt');
var enDateCtrl = document.getElementById('ctl00_enDt');
Blutspende_ZH_2007.GoogleMap.getGoogleCoordinates(stDateCtrl.value,enDateCtrl.value,getGoogleCoordinates_CallBack);

//R.L. (07.11.2007): Adds a message to the errordiv
function callError(pMessage){
	var tempError = document.getElementById(mErrorDivIndex);
	if ((tempError) && ((document.URL.indexOf('&error=true') > 0) || (mDefaultErrorOn))) tempError.innerHTML = tempError.innerHTML + pMessage + '<br />';}

//Loads the map as zurich city as center
function loadMap(){
	var map = new GMap2(document.getElementById(mMapIndex));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());

	// make center city as zurich
	map.setCenter(new GLatLng(47.369023,8.538032), 10);     
	return map;}

// Create a base icon for all of our markers that specifies the shadow, icon dimensions, etc.
function createBaseIcon(){
	var baseIcon = new GIcon();   
	baseIcon.shadow = mIconShadowRoot
	baseIcon.iconSize = new GSize(12, 20);
	baseIcon.shadowSize = new GSize(22, 20);
	baseIcon.iconAnchor = new GPoint(6, 20);
	baseIcon.infoWindowAnchor = new GPoint(5, 1);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	return baseIcon; }

function createBaseIconBig(){
	var baseIcon = new GIcon();   
	baseIcon.shadow = mIconShadowRoot
	baseIcon.iconSize = new GSize(18, 30);
	baseIcon.shadowSize = new GSize(28, 30);
	baseIcon.iconAnchor = new GPoint(9, 15);
	baseIcon.infoWindowAnchor = new GPoint(9, 15);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	return baseIcon; }


//The call to the parse function	
function getGoogleCoordinates_CallBack(response){
	if (response != null && response.value != null){
		mMap = loadMap();
		mBaseIcon = createBaseIcon();
		mBaseIconBig= createBaseIconBig();
		mResponse = response.value;

		for(i=0;i<response.value.length;i++)
			parseCoordinates(response.value[i]);

		//Creating the red ones
		if (mEnabledStatic) createStatic();}}

        
//Parsing the object, checks for autosearch
function parseCoordinates(pObject){
	if (pObject){
		var tempCoordinates = pObject[mArCoords].split(',');

		var tempSearchCoords = false;
		if ((isNaN(tempCoordinates[0])) || (isNaN(tempCoordinates[1]))) tempSearchCoords = true
		else if((tempCoordinates[0] <= 0) && (tempCoordinates[1] <= 0)) tempSearchCoords = true;

		//Searching in the geocoder for the coordinates
		if (tempSearchCoords){
			var tempSearchValue = pObject[mArName] + ', ' + pObject[mArAddress];
			callError("? Suche nach: '" + tempSearchValue);
			geocoder.getLocations(tempSearchValue, addAddressToMap);
			return;}

		markLocation(pObject);}}

//Pans the map with a parameter (search), but returns the object
function panReturn(pAddress, pDelete){
	if (mResponse){
		for(i=0;i<mResponse.length;i++){
			var tempSearchValue = mResponse[i][mArName] + ', ' + mResponse[i][mArAddress];
			if (tempSearchValue == pAddress){
				var tempResult = mResponse[i];
				if (pDelete) mResponse.splice(i, 1);
				return tempResult;}}}
            return null;}

//R.L. (22.01.2008): New dynamic address search
function addAddressToMap(response){       
	if (!response || response.Status.code != 200)
		callError("! Folgende Adresse konnte nicht gefunden werden: '" + response.name + "'");
	else{
		callError("+ Folgende Adresse konnte gefunden werden: '" + response.name + "'");
		tempPlace = response.Placemark[0];
            
		var tempObject = panReturn(response.name, false);
		if (tempObject){
			var tempCoords = tempPlace.Point.coordinates[1] + ',' + tempPlace.Point.coordinates[0];
			var tempIndex = Number(tempObject[mArID]);
			tempObject[mArCoords] = tempCoords;
                    
			callError(": Folgende Adresse wurde gespeichert: '" + String(tempObject) + "' - [ID: " + String(tempIndex) + "], [Coords: " + tempCoords + "]");
                    
			Blutspende_ZH_2007.GoogleMap.storeCoordinates(1, tempIndex, tempCoords);
			markLocation(tempObject);}
		else
			callError("; Objekt nicht gefunden: '" + String(tempObject) + "' - [Name: " + response.name + "]");}}

function markLocation(pObject){
	if (pObject){
		var tempCoordinates = pObject[mArCoords].split(',');
		var tempPoint = new GLatLng(tempCoordinates[0], tempCoordinates[1]);
		var tempTemplate = mMarkerTemplate;

		tempTemplate = tempTemplate.replace('{@mArID}', pObject[mArID]);
		tempTemplate = tempTemplate.replace('{@mArName}', pObject[mArName]);
		tempTemplate = tempTemplate.replace('{@mArCoords}', pObject[mArCoords]);
		tempTemplate = tempTemplate.replace('{@mArAddress}', pObject[mArAddress]);
		tempTemplate = tempTemplate.replace('{@mArLocation}', pObject[mArLocation]);
		tempTemplate = tempTemplate.replace('{@mArEvents}', pObject[mArEvents]);

		mMap.addOverlay(createMarker(tempPoint, mBaseIcon, tempTemplate, mMarkerIconRoot));}}

//R.L. (22.01.2008): New
function createMarker(pPoint, pBaseIcon, pContent, pIconRoot){
	var tempIcon = new GIcon(pBaseIcon);
	tempIcon.image = pIconRoot;

	var tempMarker = new GMarker(pPoint, tempIcon);
	GEvent.addListener(tempMarker, "click", function() {tempMarker.openInfoWindowHtml(pContent);});
	// GEvent.addListener(tempMarker, "mouseover", function() {tempMarker.openInfoWindowHtml(pContent);});
	return tempMarker;}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////R.L. (22.01.2008): Static markers
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var mStaticTemplate = "<div class = 'red'><b>{@Title}</b><br /><a href = '{@Href}'>Mehr Informationen</a></div>";
var mStaticIconRoot = '/images/mm_20_red.png';
var mStaticValues = new Array('BSZ Zürich;?navigation_id=34;47.369023;8.538032', 'BSZ Limmattal;?navigation_id=35;47.394593;8.446603', 'Spital Uster;?navigation_id=36;47.347437;8.720809', 'Kantonsspital Winterthur;?navigation_id=37;47.50491;8.725891', 'Spital Lachen;?navigation_id=38;47.197093;8.858977','Spital Wetzikon;?navigation_id=179;47.322534;8.802774','Spital Bülach;?navigation_id=174;47.521505;8.533008','Regionalspital Einsiedeln;?navigation_id=175;47.131104;8.739452','Kreisspital Männedorf;?navigation_id=176;47.251024;8.696666','Kantonsspital Schaffhausen;?navigation_id=177;47.711422;8.63755','Kantonales Spital Linth;?navigation_id=178;47.223751;8.994906');

function createStatic(){
	for(i=0;i<mStaticValues.length;i++){
		var tempValues = mStaticValues[i].split(';');
		var tempTemplate = mStaticTemplate;

		tempTemplate = tempTemplate.replace('{@Title}', tempValues[0]);
		tempTemplate = tempTemplate.replace('{@Href}', tempValues[1]);

		var tempPoint = new GLatLng(tempValues[2], tempValues[3]);
		
		mMap.addOverlay(createMarker(tempPoint, mBaseIconBig, tempTemplate, mStaticIconRoot));}}
