// General utility routines for Google Maps apps.





function GetXmlValue( elements )

    {

    var values = '';

    for ( var i = 0; i < elements.length; ++i )

	{

	if ( elements[i] != null && elements[i].firstChild != null )

	    {

	    if ( values != '' )

		values += ' ';

	    values += elements[i].firstChild.nodeValue;

	    }

	}

    return values;

    }





var LANG_UNKNOWN = 0;

var LANG_ENGLISH = 1;

var LANG_FRENCH = 2;

var currentLanguage = LANG_UNKNOWN;



var _mInstructions;



function SetLanguage( language )

    {

    if ( language != currentLanguage )

	{

	switch ( language )

	    {

	    case LANG_ENGLISH:

	    // HTML strings.

	    _mInstructions = 'Drag the map with your mouse, or double-click to center.';

	    _mSiteName = 'Google Maps';

	    _mDataCopy = 'Map data &#169;2005 ';

	    _mZenrinCopy = 'Map &#169;2005 ';

	    _mNormalMap = 'Map';

	    _mNormalMapShort = 'Map';

	    _mHybridMap = 'Hybrid';

	    _mHybridMapShort = 'Hyb';

	    _mKeyholeMap = 'Satellite';

	    _mKeyholeMapShort = 'Sat';

	    _mNew = 'New!';

	    _mTerms = 'Terms of Use';

	    _mKeyholeCopy = 'Imagery &#169;2005 ';

	    _mDecimalPoint = '.';

	    _mThousandsSeparator = ',';

	    _mZoomIn = 'Zoom In';

	    _mZoomOut = 'Zoom Out';

	    _mZoomSet = 'Click to set zoom level';

	    _mZoomDrag = 'Drag to zoom';

	    _mPanWest = 'Go left';

	    _mPanEast = 'Go right';

	    _mPanNorth = 'Go up';

	    _mPanSouth = 'Go down';

	    _mLastResult = 'Return to the last result';

	    _mScale = 'Scale at the center of the map';

	    break;



	    case LANG_FRENCH:

	    // HTML strings.

	    _mInstructions = 'Faites glisser la carte avec la souris ou double-cliquez sur un point pour la recentrer.';

	    _mSiteName = 'Cartes Google';

	    _mDataCopy = 'Donn&eacute;es cartographiques &#169;2005 ';

	    _mZenrinCopy = 'Carte &#169;2005 ';

	    _mNormalMap = 'Carte';

	    _mNormalMapShort = 'Car';

	    _mHybridMap = 'Mixte';

	    _mHybridMapShort = 'Mix';

	    _mKeyholeMap = 'Satellite';

	    _mKeyholeMapShort = 'Sat';

	    _mNew = 'Nouvelle!';

	    _mTerms = 'Limites d\'utilisation';

	    _mKeyholeCopy = 'Images &#169;2005 ';

	    _mDecimalPoint = ',';

	    _mThousandsSeparator = '.';

	    _mZoomIn = 'Zoom avant';

	    _mZoomOut = 'Zoom arri&egrave;re';

	    _mZoomSet = 'Cliquez pour d&eacute;finir le facteur de zoom';

	    _mZoomDrag = 'Faites glisser le curseur pour zoomer';

	    _mPanWest = 'D&eacute;placer vers la gauche';

	    _mPanEast = 'D&eacute;placer vers la droite';

	    _mPanNorth = 'D&eacute;placer vers le haut';

	    _mPanSouth = 'D&eacute;placer vers le bas';

	    _mLastResult = 'Revenir au r&eacute;sultat pr&eacute;c&eacute;dent';

	    _mScale = '&Eacute;chelle au centre de la carte';

	    break;

	    }



	// HTML entities don't work in tool-tips, so we convert all the

	// tool-tip strings to use ISO-8859-1 characters directly.

	_mZoomIn = EntityToIso8859( _mZoomIn );

	_mZoomOut = EntityToIso8859( _mZoomOut );

	_mZoomSet = EntityToIso8859( _mZoomSet );

	_mZoomDrag = EntityToIso8859( _mZoomDrag );

	_mPanWest = EntityToIso8859( _mPanWest );

	_mPanEast = EntityToIso8859( _mPanEast );

	_mPanNorth = EntityToIso8859( _mPanNorth );

	_mPanSouth = EntityToIso8859( _mPanSouth );

	_mLastResult = EntityToIso8859( _mLastResult );

	_mScale = EntityToIso8859( _mScale );



	currentLanguage = language;

	}

    }





function EntityToIso8859( inStr )

    {

    var outStr = '';

    for ( var i = 0; i < inStr.length; ++i )

	{

	var c = inStr.charAt( i );

	if ( c != '&' )

	    outStr += c;

	else

	    {

	    var semi = inStr.indexOf( ';', i );

	    if ( semi == -1 )

		outStr += c;

	    else

		{

		var entity = inStr.substring( i + 1, semi );

		if ( entity == 'iexcl' ) outStr += '¡';

		else if ( entity == 'copy' ) outStr += '©';

		else if ( entity == 'laquo' ) outStr += '«';

		else if ( entity == 'reg' ) outStr += '®';

		else if ( entity == 'raquo' ) outStr += '»';

		else if ( entity == 'iquest' ) outStr += '¿';

		else if ( entity == 'Agrave' ) outStr += 'À';

		else if ( entity == 'Aacute' ) outStr += 'Á';

		else if ( entity == 'Acirc' ) outStr += 'Â';

		else if ( entity == 'Atilde' ) outStr += 'Ã';

		else if ( entity == 'Auml' ) outStr += 'Ä';

		else if ( entity == 'Aring' ) outStr += 'Å';

		else if ( entity == 'AElig' ) outStr += 'Æ';

		else if ( entity == 'Ccedil' ) outStr += 'Ç';

		else if ( entity == 'Egrave' ) outStr += 'È';

		else if ( entity == 'Eacute' ) outStr += 'É';

		else if ( entity == 'Ecirc' ) outStr += 'Ê';

		else if ( entity == 'Euml' ) outStr += 'Ë';

		else if ( entity == 'Igrave' ) outStr += 'Ì';

		else if ( entity == 'Iacute' ) outStr += 'Í';

		else if ( entity == 'Icirc' ) outStr += 'Î';

		else if ( entity == 'Iuml' ) outStr += 'Ï';

		else if ( entity == 'Ntilde' ) outStr += 'Ñ';

		else if ( entity == 'Ograve' ) outStr += 'Ò';

		else if ( entity == 'Oacute' ) outStr += 'Ó';

		else if ( entity == 'Ocirc' ) outStr += 'Ô';

		else if ( entity == 'Otilde' ) outStr += 'Õ';

		else if ( entity == 'Ouml' ) outStr += 'Ö';

		else if ( entity == 'Oslash' ) outStr += 'Ø';

		else if ( entity == 'Ugrave' ) outStr += 'Ù';

		else if ( entity == 'Uacute' ) outStr += 'Ú';

		else if ( entity == 'Ucirc' ) outStr += 'Û';

		else if ( entity == 'Uuml' ) outStr += 'Ü';

		else if ( entity == 'Yacute' ) outStr += 'Ý';

		else if ( entity == 'szlig' ) outStr += 'ß';

		else if ( entity == 'agrave' ) outStr += 'à';

		else if ( entity == 'aacute' ) outStr += 'á';

		else if ( entity == 'acirc' ) outStr += 'â';

		else if ( entity == 'atilde' ) outStr += 'ã';

		else if ( entity == 'auml' ) outStr += 'ä';

		else if ( entity == 'aring' ) outStr += 'å';

		else if ( entity == 'aelig' ) outStr += 'æ';

		else if ( entity == 'ccedil' ) outStr += 'ç';

		else if ( entity == 'egrave' ) outStr += 'è';

		else if ( entity == 'eacute' ) outStr += 'é';

		else if ( entity == 'ecirc' ) outStr += 'ê';

		else if ( entity == 'euml' ) outStr += 'ë';

		else if ( entity == 'igrave' ) outStr += 'ì';

		else if ( entity == 'iacute' ) outStr += 'í';

		else if ( entity == 'icirc' ) outStr += 'î';

		else if ( entity == 'iuml' ) outStr += 'ï';

		else if ( entity == 'ntilde' ) outStr += 'ñ';

		else if ( entity == 'ograve' ) outStr += 'ò';

		else if ( entity == 'oacute' ) outStr += 'ó';

		else if ( entity == 'ocirc' ) outStr += 'ô';

		else if ( entity == 'otilde' ) outStr += 'õ';

		else if ( entity == 'ouml' ) outStr += 'ö';

		else if ( entity == 'oslash' ) outStr += 'ø';

		else if ( entity == 'ugrave' ) outStr += 'ù';

		else if ( entity == 'uacute' ) outStr += 'ú';

		else if ( entity == 'ucirc' ) outStr += 'û';

		else if ( entity == 'uuml' ) outStr += 'ü';

		else if ( entity == 'yacute' ) outStr += 'ý';

		else if ( entity == 'yuml' ) outStr += 'ÿ';

		else if ( entity == 'lt' ) outStr += '<';

		else if ( entity == 'gt' ) outStr += '>';

		else if ( entity == 'amp' ) outStr += '&';

		else outStr += '&' + entity + ';';

		i += entity.length + 1;

		}

	    }

	}

    return outStr;

    }





function ClickZoomer ( object, point )  

    {

    if ( object != null ) 

	return;

    if ( map.getZoomLevel() > 0 )

	map.centerAndZoom( point, map.getZoomLevel() - 1 );

    }  





// This returns a function closure that calls the given routine with the

// specified arg.  These shenanigans are necessary because the API left out

// client-data.

function MakeCaller( func, arg )

    {

    return function() { func( arg ); };

    }





// Parse this document's QUERY_STRING and return an associative array.

function GetParameters()

    {

    var query_string = location.search.substring( 1, location.search.length );

    var namevals = query_string.split( '&' );

    var params = [];

    for ( var i = 0; i < namevals.length; ++i )

	{

	var nameval = namevals[i].split( '=' );

	if ( nameval.length == 2 )

	    params[nameval[0]] = unescape( nameval[1] );

	}

    return params;

    }





function Props( o )     

    {           

    var s = '';      

    for ( p in o )

	{

	if ( s.length != 0 )

	    s += '\n';

	s += p + ': ' + o[p];

	}

    return s;

    }
