/* Copyright 2003-2005 - Pierre Saslawsky - pierre at photobiker.com */var ORIGINX    = 0;var ORIGINY    = 0;var PIXPER30   = 0;var STARTPOINT = 0;var ENDPOINT   = 0;var slideshowList = 0;var journalsList = 0;var mouseLastX = 0;var mouseLastY = 0;var isIE = document.all?true:false;function MouseMoveCallBack(e) {	if (isIE) {		mouseLastX = event.clientX + document.body.scrollLeft;		mouseLastY = event.clientY + document.body.scrollTop;	}	else {		mouseLastX = e.pageX;		mouseLastY = e.pageY;	}	return true;}function initializeMap(isBig) {	if (!isIE) document.captureEvents(Event.MOUSEMOVE);	document.onmousemove = MouseMoveCallBack;	var elt = document.getElementById("themap");	if (elt) elt.src = (isBig ? getContinentMapBig(gCurrentContinent) : getContinentMap(gCurrentContinent));	elt = document.getElementById("nextcontinent");	if (elt) elt.src = getContinentIcon(normalizeContinentIndex(gCurrentContinent+1));	elt = document.getElementById("previouscontinent");	if (elt) {		if (gCurrentContinent > 0) {			elt.style.visibility = "visible";			elt.src = getContinentIcon(gCurrentContinent-1);		} else {			elt.style.visibility = "hidden";		}	}	var baseIndex = gCurrentContinent * ITEMS_PER_MAPDATA_ENTRY;	ORIGINX = mapDataArray[baseIndex + (isBig ? INDEX_BIG_ORIGINX : INDEX_NORM_ORIGINX)];	ORIGINY = mapDataArray[baseIndex + (isBig ? INDEX_BIG_ORIGINY : INDEX_NORM_ORIGINY)];	PIXPER30 = mapDataArray[baseIndex + (isBig ? INDEX_BIG_PIXPER30 : INDEX_NORM_PIXPER30)];	STARTPOINT = mapDataArray[baseIndex + INDEX_STARTPOINT];	ENDPOINT = mapDataArray[baseIndex + INDEX_ENDPOINT];	if (ENDPOINT > GPSCOUNT) {		ENDPOINT = GPSCOUNT;	}}function addGPSPoints() {	if (ENDPOINT == 0) {		showGPSPointData(0, GPSCOUNT);		return;	}	showGPSPointData(0, ENDPOINT);	var tag = "";	for (var pointIndex = STARTPOINT; pointIndex <= ENDPOINT; pointIndex ++) {		tag += addGPSDot(pointIndex);	}	var elt = document.getElementById("mapPointsContainer");	elt.innerHTML = tag;	var eltBlock = document.getElementById("pathBlock1");	if (eltBlock) eltBlock.style.visibility = "visible";}function addSlideshowPointsForList(continent) {	slideshowList = continentSlideshowArray[continent];	var end = slideshowList.length / ITEMS_PER_SLIDESHOW_ENTRY;	if (isNaN(end)) {		return "";	}	var tag = "";	for (var i = 0; i < end; i ++) {		tag += addSlideshowDot(continent, i);	}	return tag;}function addSlideshowPoints() {	var tag = addSlideshowPointsForList(gCurrentContinent);	switch (gCurrentContinent) {		case INDEX_AFRICA:	 tag += addSlideshowPointsForList(INDEX_SLIDESHOW_TRAINING);	break;		case INDEX_NORTHAMERICA: tag += addSlideshowPointsForList(INDEX_SLIDESHOW_OLD);		break;	}	if (tag.length > 0) {		var elt = document.getElementById("mapPointsContainer");		elt.innerHTML = tag;	}	else {		showSlideshowPointData(1, gCurrentContinent, -1);	}}var journalIndex = new Array;var journalMaxIndex = new Array;function addJournalsPoints() {	var hasJournal = false;	journalsList = continentJournalsArray[gCurrentContinent];	for (var i = 0; i < WRITERCOUNT; i++) {		journalIndex[i] = 0;		journalMaxIndex[i] = (journalsList[i].length / ITEMS_PER_JOURNAL_ENTRY) - 1;		if (journalMaxIndex[i] > 0)			hasJournal = true;	}	if (! hasJournal) {		showJournalPointData(1, -1, 0, 0);		return;	}	var tag = "";	for (var pointIndex = ENDPOINT; pointIndex >= STARTPOINT; pointIndex --) {		tag += addJournalsDots(pointIndex);	}	var elt = document.getElementById("mapPointsContainer");	elt.innerHTML = tag;}var lastJournalX = 0;var lastJournalY = 0;var lastSameCount = 0;var JOURNALTHRESHOLD = 9;function addJournalsDots(index) {	var baseIndex = (index - 1) * ITEMS_PER_ENTRY;	var dateStr = gpsList[baseIndex + INDEX_DATE];	var pointDate = Date.parse(dateStr);	var tag = "";	for (var i = 0; i < WRITERCOUNT; i++) {		while (true) {			if (journalIndex[i] > journalMaxIndex[i]) {				break;			}			var aJournalList = journalsList[i];			var journalBaseIndex = journalIndex[i] * ITEMS_PER_JOURNAL_ENTRY;			var journalDateStr = aJournalList[journalBaseIndex + INDEX_JOURNAL_DATE];			var journalDate = Date.parse(journalDateStr);			if (isNaN(journalDate)) {					// for Safari				journalDateStr = journalDateStr.split(' - ')[1];				journalDate = Date.parse(journalDateStr);			}			if (journalDate >= pointDate) {				var imageName = (i == 0 ? "pinkdot.gif" : "bluedot.gif");				var imagePix = 9; // images are 9 pixels wide				var coords = getGPSPointLocation(index).split(',');				var x = coords[0] - (imagePix/2);				var y = coords[1] - (imagePix/2);				if (Math.abs(lastJournalX - x) <= JOURNALTHRESHOLD && Math.abs(lastJournalY - y) <= JOURNALTHRESHOLD) {					lastSameCount++;					x = lastJournalX + 3*lastSameCount;					y = lastJournalY + 3*lastSameCount;				}				else {					lastSameCount = 0;					lastJournalX = x;					lastJournalY = y;				}				var styleStr = 'position:absolute;cursor:pointer;cursor:hand;top:' + y + 'px;left:' + x + 'px;z-index:' + index + ';';				var htmlStyleStr = ' style="' + styleStr + '"';				var mouseOverStr = 'showJournalPointData(1,' + index + ',' + i + ',' + journalIndex[i] + ')';				var htmlMouseOverStr = ' onmouseover="' + mouseOverStr + '"';				var mouseOutStr = 'showJournalPointData(0,0,0,0)';				var htmlMouseOutStr = ' onmouseout="' + mouseOutStr + '"';				var clickStr = 'showJournalWindow(' + i + ',' + journalIndex[i] + ')';				var htmlClickStr = ' onclick="' + clickStr + '"';				tag += '<' + 'IMG SRC="dots/' + imageName + '"' 					+ htmlStyleStr + htmlMouseOverStr + htmlMouseOutStr + htmlClickStr + '>';				journalIndex[i]++;	// check if we have more journals at the same location			}			else {				break;			}		}	}	return tag;}var lastY = 0;function addGPSDot(index) {	return addOneDot(index, 0, 0);}function addOneDot(index, imageName, imagePix) {	if (imagePix == 0) imagePix = 6; // default images are 6 pixels wide	var coords = getGPSPointLocation(index).split(',');	var x = coords[0] - (imagePix/2);	var y = coords[1] - (imagePix/2);	if (index == STARTPOINT || index == ENDPOINT) {		imageName = getSiteBaseUrl() + "map/dots/reddot.gif";	} else {		if (imageName == 0) {			if (y >= lastY) {				imageName = getSiteBaseUrl() + "map/dots/yellowdot.gif";			} else {				imageName = getSiteBaseUrl() + "map/dots/greendot.gif";			}		}	}	lastY = y;	var styleStr = 'position:absolute;cursor:pointer;cursor:hand;top:' + y + 'px;left:' + x + 'px;z-index:' + index + ';';	var htmlStyleStr = ' style="' + styleStr + '"';	var mouseOverStr = 'showGPSPointData(1,' + index + ')';	var htmlMouseOverStr = ' onmouseover="' + mouseOverStr + '"';	var mouseOutStr = 'showGPSPointData(0,' + ENDPOINT + ')';	var htmlMouseOutStr = ' onmouseout="' + mouseOutStr + '"';	var clickStr = 'showHotelPics(' + index + ')';	var htmlClickStr = ' onclick="' + clickStr + '"';	var tag = '<' + 'IMG SRC="' + imageName + '"' 		+ htmlStyleStr + htmlMouseOverStr + htmlMouseOutStr + htmlClickStr + '>';	return tag;}function addSlideshowDot(continent, index) {	slideshowList = continentSlideshowArray[continent];	var baseIndex = index * ITEMS_PER_SLIDESHOW_ENTRY;	var gpsCoords = String(slideshowList[baseIndex + INDEX_SLIDESHOW_GPS]);	var coords = gpsToScreen(gpsCoords).split(',');	var imagePix = 12; // images are 12 pixels wide	var x = coords[0] - (imagePix/2);	var y = coords[1] - (imagePix/2);	var imageName = (continent >= CONTINENTSCOUNT ? "browndot.gif" : "cyandot.gif");	var styleStr = 'position:absolute;cursor:pointer;cursor:hand;top:' + y + 'px;left:' + x + 'px;z-index:' + index + ';';	var htmlStyleStr = ' style="' + styleStr + '"';	var mouseOverStr = 'showSlideshowPointData(1,' + continent + ',' + index + ')';	var htmlMouseOverStr = ' onmouseover="' + mouseOverStr + '"';	var mouseOutStr = 'showSlideshowPointData(0,' + continent + ',' + ENDPOINT + ')';	var htmlMouseOutStr = ' onmouseout="' + mouseOutStr + '"';	var clickStr = 'showSlideshowWindow(' + continent + ',' + index + ')';	var htmlClickStr = ' onclick="' + clickStr + '"';	var tag = '<' + 'IMG SRC="dots/' + imageName + '"' 		+ htmlStyleStr + htmlMouseOverStr + htmlMouseOutStr + htmlClickStr + '>';	return tag;}function showHotelPics(index) {	var hotelWindow = window.open(getSiteBaseUrl() + "map/hotelrooms.html?"+index, "hotelWindow", "height=400,width=460, scrollbars=yes,resizable=yes");	hotelWindow.focus();}function showSlideshowWindow(continent, index) {	slideshowList = continentSlideshowArray[continent];	var baseIndex = index * ITEMS_PER_SLIDESHOW_ENTRY;	var slideshowPath = String(slideshowList[baseIndex + INDEX_SLIDESHOW_PATH]);	var windowPath = "../slideshows/slideshowindex.html?path=";	if (slideshowPath.indexOf('/') == -1) {		windowPath += "trip/"  + getContinentPath(continent)  + "/";	}	windowPath += slideshowPath;	var features = "toolbar=no,status=yes,resizable=yes,scrollbars=yes,width=" + screen.availWidth + ",height=" + (screen.availHeight-40);	var slideshowWindow = window.open(windowPath, "slideshowWindow", features);	slideshowWindow.moveTo(0,0);	slideshowWindow.focus();}function showJournalWindow(writer, journalIndex) {	var journalBaseIndex = journalIndex * ITEMS_PER_JOURNAL_ENTRY;	var writerBaseIndex = writer * ITEMS_PER_WRITER_ENTRY;	var writerPath = journalWriterList[writerBaseIndex + INDEX_WRITER_PATH];	var filePath = "../continents/" + getContinentPath(gCurrentContinent) + "/iblog/" + writerPath + "/unfiled/";	switch (writer) {		case 0: filePath += merrittEntries[journalIndex * ITEMS_PER_BLOGENTRY + INDEX_ENTRY_ID];	break;		case 1: filePath +=  pierreEntries[journalIndex * ITEMS_PER_BLOGENTRY + INDEX_ENTRY_ID];	break;	}	filePath += "/index.html";	var journalWindow = window.open(filePath, "journalWindow");	journalWindow.focus();}function showJournalPointData(cursor, index, writer, journalIndex) {	var eltBlock = document.getElementById("journalBlock1");	var eltWriter = document.getElementById("journalWriter");	var eltDate = document.getElementById("journalDate");	var eltCountry = document.getElementById("journalCountry");	var eltTitle = document.getElementById("journalTitle");	var eltCommentsEN = document.getElementById("journalCommentsEN");	var eltCommentsFR = document.getElementById("journalCommentsFR");	if (!cursor) {		eltBlock.style.visibility = "hidden";		eltWriter.innerHTML = "";		eltDate.innerHTML = "";		eltCountry.innerHTML = "";		eltTitle.innerHTML = "";		eltCommentsEN.innerHTML = "";		eltCommentsFR.innerHTML = "";		return;	}	if (index < 0) {		var titleStr;		if (langFr)			titleStr = "Nous n'avons pas encore publi&eacute; de journaux sur l'" + getContinentNameFR(gCurrentContinent) + "...";		else			titleStr = "No journals have been published for " + getContinentName(gCurrentContinent) + " yet...";		eltTitle.innerHTML = "<br>" + titleStr + "<br><br>";		eltBlock.style.visibility = "visible";		return;	}	var baseIndex = (index - 1) * ITEMS_PER_ENTRY;	var journalBaseIndex = journalIndex * ITEMS_PER_JOURNAL_ENTRY;	var writerBaseIndex = writer * ITEMS_PER_WRITER_ENTRY;	var writerStr = journalWriterList[writerBaseIndex + INDEX_WRITER_NAME];	eltWriter.innerHTML = "<br><br>Written by " + writerStr + "<br>";	var aJournalList = journalsList[writer];	var journalDateStr = aJournalList[journalBaseIndex + INDEX_JOURNAL_DATE];	eltDate.innerHTML = "(" + journalDateStr.split(' - ')[1] + ")";	var countryStr = gpsList[baseIndex + INDEX_COUNTRY];	countryStr = gpsList[baseIndex + INDEX_CITY] + ", " + countryStr;	eltCountry.innerHTML = countryStr + "<br>";	var titleStr = aJournalList[journalBaseIndex + INDEX_JOURNAL_TITLE];	eltTitle.innerHTML = titleStr + "<br>";	var commentsEN = aJournalList[journalBaseIndex + INDEX_JOURNAL_COMMENT_EN];	eltCommentsEN.innerHTML = "<br>" + commentsEN;	var commentsFR = aJournalList[journalBaseIndex + INDEX_JOURNAL_COMMENT_FR];	eltCommentsFR.innerHTML = "<br>" + commentsFR;	eltBlock.style.visibility = "visible";	eltBlock.style.top = (mouseLastY - 40) + "px";	eltBlock.style.left = (mouseLastX + 20) + "px";}function showSlideshowPointData(cursor, continent, index) {	var eltBlock = document.getElementById("photoBlock1");	var eltName = document.getElementById("slideshowName");	var eltCommentsEN = document.getElementById("slideshowCommentsEN");	var eltCommentsFR = document.getElementById("slideshowCommentsFR");	var eltImage = document.getElementById("slideshowImage");	if (!cursor) {		eltBlock.style.visibility = "hidden";		eltName.innerHTML = "";		eltCommentsEN.innerHTML = "";		eltCommentsFR.innerHTML = "";		eltImage.innerHTML = "";		return;	}	if (index < 0) {		var name = "No slideshow has been published for " + getContinentName(continent) + " yet...";		eltName.innerHTML = "<br>" + name + "<br><br>";		eltBlock.style.visibility = "visible";		return;	}	slideshowList = continentSlideshowArray[continent];	var baseIndex = index * ITEMS_PER_SLIDESHOW_ENTRY;	var name = slideshowList[baseIndex + INDEX_SLIDESHOW_NAME];	var commentsEN = slideshowList[baseIndex + INDEX_SLIDESHOW_COMMENT_EN];	var commentsFR = slideshowList[baseIndex + INDEX_SLIDESHOW_COMMENT_FR];	var image = slideshowList[baseIndex + INDEX_SLIDESHOW_PICTURE];	var imagePath = getSlideshowPath(continent, index) + "/smallimages/" + image;	eltName.innerHTML = name + "<br>";	eltCommentsEN.innerHTML = "<br>" + commentsEN;	eltCommentsFR.innerHTML = "<br>" + commentsFR;	eltImage.innerHTML = '<br><IMG SRC="' + imagePath + '" width="100%">';	eltBlock.style.visibility = "visible";	eltBlock.style.top = (mouseLastY - 60) + "px";	eltBlock.style.left = (mouseLastX + 20) + "px";}function getSlideshowPath(slideshowIndex, index) {	var slideShowList = continentSlideshowArray[slideshowIndex];	var baseIndex = index * ITEMS_PER_SLIDESHOW_ENTRY;	var path = slideShowList[baseIndex + INDEX_SLIDESHOW_PATH];	var fullPath;	if (path.indexOf('/') == -1)		fullPath = "trip/" + getContinentPath(slideshowIndex) + "/" + path;	else		fullPath = path;	return "../slideshows/" + fullPath;}function showGPSPointData(cursor, index) {	var baseIndex = (index - 1) * ITEMS_PER_ENTRY;	var useNextDate = false;	var elt = document.getElementById("datatype");	if (cursor==1) {		if (elt) elt.innerHTML = "Waypoint #" + index;	} else {		if (index == GPSCOUNT) {			if (elt) elt.innerHTML = "Latest Data";		}		else {			if (elt) elt.innerHTML = "Last point in " + getContinentName(gCurrentContinent);			useNextDate = true;		}	}	elt = document.getElementById("picsicon");	var picsCount = gpsList[baseIndex + INDEX_PICS];	if (isNaN(picsCount)) {		var data = picsCount.split('#');		picsCount = data[1];	}	if (picsCount > 0) {		if (elt) elt.style.visibility = "visible";	} else {		if (elt) elt.style.visibility = "hidden";	}	elt = document.getElementById("date");	var dateIndex = (useNextDate ? baseIndex + ITEMS_PER_ENTRY : baseIndex);	if (elt) elt.innerHTML = gpsList[dateIndex + INDEX_DATE];	elt = document.getElementById("distance");	var distance = gpsList[baseIndex + INDEX_KM] - KMSTART;	if (elt) elt.innerHTML = formatDistance(distance);	elt = document.getElementById("leg");	var distancePrev = KMSTART;	if (baseIndex > 0) {		var baseIndexPrev = (index - 2) * ITEMS_PER_ENTRY;		distancePrev = gpsList[baseIndexPrev + INDEX_KM];	}	distancePrev -= KMSTART;	if (elt) elt.innerHTML = formatDistance(distance - distancePrev);	elt = document.getElementById("country");	if (elt) elt.innerHTML = gpsList[baseIndex + INDEX_COUNTRY];	elt = document.getElementById("town");	if (elt) elt.innerHTML = gpsList[baseIndex + INDEX_CITY];	elt = document.getElementById("altitude");	if (elt) elt.innerHTML = formatAltitude(gpsList[baseIndex + INDEX_ALTITUDE]);	elt = document.getElementById("temperature");	if (elt) elt.innerHTML = formatTemperature(gpsList[baseIndex + INDEX_TEMPERATURE]);	elt = document.getElementById("gps");	// var gpsStr = gpsList[baseIndex + INDEX_GPS] + " (" + getGPSPointLocation(index) + ")";	var gpsStr = gpsList[baseIndex + INDEX_GPS];	if (elt) elt.innerHTML = gpsStr;	elt = document.getElementById("accomodation");	if (elt) elt.innerHTML = gpsList[baseIndex + INDEX_ACCOMODATION];	elt = document.getElementById("price");	if (elt) elt.innerHTML = formatPrice(gpsList[baseIndex + INDEX_PRICE]);}function formatLargeNumber(number) {	if (number > 1000) {		var separator = (langFr ? '.' : ',');		var units = number%1000;		if (units < 10)			units = "00" + units;		else if (units < 100)			units = "0" + units;		number = Math.floor(number/1000) + separator + units;	}	return number;}function formatDistance(distance) {	return formatLargeNumber(distance) + "km - " + formatLargeNumber(Math.round(distance / 1.608)) + "mi";}function formatAltitude(altitude) {	return altitude + "m - " + (Math.round(altitude / 0.305 / 10))*10 + "ft";}function formatTemperature(tempIn) {	var tempWords = tempIn.split(' ');	var tempOut = tempWords[0] + 'C - ';	var tempMeasures = tempWords[0].split('/');	tempOut += celsiusToFarenheit(tempMeasures[0]);	if (tempMeasures.length == 2) {		tempOut += '/' + celsiusToFarenheit(tempMeasures[1]);	}	tempOut += 'F';	if (tempWords.length == 2) {		tempOut += ' ' + tempWords[1];	}	return tempOut;}function celsiusToFarenheit(temp) {	return Math.round(((temp * 9) / 5) + 32);}function formatPrice(priceIn) {	var priceWords = priceIn.split(' ');	if (priceWords.length < 2) {		return priceIn;  // the price was probably 0	}	var value = priceWords[0];	var currency = priceWords[1];	if (currency == "USD") {		return 'US$' + value;	}	var ratio = 0;	for (i=0; i<CURRENCYCOUNT; i++) {		if (currency == currencyList[i*ITEMS_PER_CURRENCY_ENTRY + INDEX_CURRENCY]) {			ratio = currencyList[i*ITEMS_PER_CURRENCY_ENTRY + INDEX_RATIO];		}	}	if (ratio == 0) {		return priceIn;  // did not find the currency	}	var dollarPrice = value / ratio;	if (dollarPrice < 10) {		dollarPrice = Math.round(dollarPrice * 10) / 10;	} else {		dollarPrice = Math.round(dollarPrice);	}	var priceOut = priceIn + ' - US$' + dollarPrice;	return priceOut;}function getGPSPointLocation(index) {	var baseIndex = (index - 1) * ITEMS_PER_ENTRY;	var gpsCoords = gpsList[baseIndex + INDEX_GPS];	return gpsToScreen(gpsCoords);}function gpsToScreen(gpsString) {	var gpsCoords = gpsString.split('/');	var x = 1;	var y = 1;	var latitude = String(gpsCoords[0]);	var longitude = String(gpsCoords[1]);	var aLetter = latitude.charAt(0);	if ((aLetter == 'N') || (aLetter == 'n')) {		y = -1;	}	if ((aLetter == 'S') || (aLetter == 's')) {		y = 1;	}	latitude = latitude.substr(1);	var latFloat = convertAngularToDecimal(parseFloat(latitude) * y);	aLetter = longitude.charAt(0);	if ((aLetter == 'W') || (aLetter == 'w')) {		x = -1;	} else if ((aLetter == 'E') || (aLetter == 'e')) {		x = 1;	}	longitude = longitude.substr(1);	var longFloat = convertAngularToDecimal(parseFloat(longitude) * x);	y = ORIGINY + Math.round((latFloat * PIXPER30) / 30);	x = ORIGINX + Math.round((longFloat * PIXPER30) / 30);	var gpsStr = x + "," + y;	return gpsStr;}function convertAngularToDecimal(aFloat) {	var integerPart;	if (aFloat > 0)		integerPart = Math.floor(aFloat);	else		integerPart = Math.ceil(aFloat);	var decimalPart = (Math.floor(Math.abs(aFloat) * 100)) % 100;	decimalPart = Math.round((decimalPart * 100) / 60);	if (integerPart <= 0)		decimalPart = decimalPart * (-1);	aFloat = integerPart + (decimalPart / 100);	return aFloat;}