

//===This file is saved as UTF-8 format to support special character
//---------------------------------------------------------------------



var gSmallMapControl = new GSmallMapControl();

function frenchDepartementsGeocoding_getLatLng( departement, callback ){
	callback( new GLatLng( frenchDepartementsGeocoding[ departement ][ 0 ], frenchDepartementsGeocoding[ departement ][ 1 ] ) );
}

 
 var level = "region";      // Added for one Level back.
 var region_selected = ""; // Added for one Level back.
 var point_selected_y = "";  // Added for one Level back.
 var point_selected_x = "";  // Added for one Level back.

 var map;
 var geocoder = new GClientGeocoder();
 
 //Variable for storing the sites from WPC
 var arrTempAllSites = new Array();
 
 //Variable for storing the lafarge logo URL
 var strLafargeLogoURL = null;

// Added for one Level back.
function setSelectedPoint( yComp, xComp )
{
	point_selected_y = yComp;
	point_selected_x = xComp;	
	
}

function resetMap(){
  geocoder.reset();
  map.removeControl( gSmallMapControl );
	//map.disableDragging();
	map.disableDoubleClickZoom();
	map.disableScrollWheelZoom();
  
  for( var p in drawdepartement_GPolygonCache ) drawdepartement_GPolygonCache[ p ].hide();
  for( var m in regionMarker_cache )
  {
	regionMarker_cache[ m ].closeInfoWindow();
	regionMarker_cache[ m ].hide();
  }
  for( var m in sectorMarker_cache ) 
  {
	  sectorMarker_cache[ m ].closeInfoWindow();
      sectorMarker_cache[ m ].hide();
  }

  
  for( var m in plantMarker_cache ) 
  {
  	plantMarker_cache[ m ].closeInfoWindow();
  	plantMarker_cache[ m ].hide();
  }	

 }
 var icon_poly = new GIcon(); icon_poly.image = 
 "http://maps.google.com/mapfiles/kml/pal2/icon18.png"; 
 icon_poly.iconSize = new GSize(32, 32); 
 icon_poly.iconAnchor = new GPoint(16, 16); 
 icon_poly.infoWindowAnchor = new GPoint(16, 16);
 
 var icon_poly1 = new GIcon();
 icon_poly1.image = "http://maps.google.com/mapfiles/kml/pal2/icon10.png";
 icon_poly1.iconSize = new GSize(32, 32);
 icon_poly1.iconAnchor = new GPoint(16, 16);
 icon_poly1.infoWindowAnchor = new GPoint(16, 16);

 // This function draws a french departement based on the administrative number ( 75, 02, 93... )
 
 var drawdepartement_GPolygonCache = [];
 
 function drawdepartement( departement, _color ){
 	
	// Transcoding is to be done because there are 2 lines (2A 2B) for Corsica
		if( departement > 20 ) departement += 1;
		if( departement == "2A" ) departement = 20;
		if( departement == "2B" ) departement = 21;

		if( drawdepartement_GPolygonCache[ "" + departement + _color ] != null ){
			drawdepartement_GPolygonCache[ "" + departement + _color ].show();
			return;
		}
 	
		var departementPoly = new GPolygon.fromEncoded({
			  polylines: [
			    {points: frenchDepartmentsPolygonEncoding[ 2 * departement - 2 ],
			     levels: frenchDepartmentsPolygonEncoding[ 2 * departement - 1 ],
			     color: _color,
			     opacity: 0.7,
			     weight: 2,
			     numLevels: 18,
			     zoomFactor: 2}],
			  	 fill: true,
			 	 color: _color,
			  	 opacity: 0.4,
			  	 outline: true
		});
		drawdepartement_GPolygonCache[ "" + departement + _color ] = departementPoly;
		map.addOverlay( departementPoly );
 }

 // This function draws a region marker at a precised location
 var regionMarker_cache = [];

 function regionMarker( point, region ){
 	if( regionMarker_cache[ "" + point + region ] != null ){
 		regionMarker_cache[ "" + point + region ].show();
 		return;
	}
 	
 	
	var marker = new GMarker(point, icon_poly);
	var infoWindowHtmlString =
		"<img src='" + strLafargeLogoURL + "' ><br>Lafarge Granulats " + region + "<br>" + "<a href=\"#\" onclick=\"{setSelectedPoint(" + point.y + ", " + point.x + ");resetMap(); map.setCenter( new GLatLng( " + point.y + ", " + point.x + " ) , 6 ); drawRegion( '" + region + "' );}\">" +
		"Carri\u00e8res et d\u00e9p\u00f4ts " + "" +"</a>";	
		
	GEvent.addListener(
		marker,
		"mouseover",
		function(){ marker.openInfoWindowHtml( infoWindowHtmlString ); }
	);	
	regionMarker_cache[ "" + point + region ] = marker;
	map.addOverlay(marker);
	
	
 }

 // This functions draws a sector marker at a precised location
 var sectorMarker_cache = [];
 
 function sectorMarker( point, sector, region ){
 	if( sectorMarker_cache[ "" + point + sector + region ] != null ){
 		sectorMarker_cache[ "" + point + sector + region ].show();
 		return;
 	}
 	
	var marker = new GMarker(point, icon_poly);
	var infoWindowHtmlString =
		"<img src='" + strLafargeLogoURL + "'><br>Secteur " + sector + "<br>" + 
		"<a href=\"#\" onclick=\"{resetMap(); map.setCenter( new GLatLng( " + point.y + ", " + point.x + " ) , 7 ); drawSector( '" + sector + "', '" + region + "' );}\">" +
		"Voir les carri\u00e8res et les d\u00e9p\u00f4ts" +"" +
		"</a>";

	sectorMarker_cache[ "" + point + sector + region ] = marker;

	GEvent.addListener(
		marker,
		"mouseover",
		function(){ marker.openInfoWindowHtml( infoWindowHtmlString ); }
	);
	
	map.addOverlay(marker);
 }

 //This function draws all the regions of Lafarge Granulats in France
 function drawRegions(){ 
 	if( level == "region" || level == "sector" ) // If-else block added for one Level back.
 	{
	 	
	 	map.setCenter(new GLatLng(46.8219,1.70018), 5);
	 	resetMap();
		for( var region in decoupageLafargeGranulats ) {
			var centralPointDrawn = false;
			for( var sector in decoupageLafargeGranulats[ region ] )
				for( var departement_i in decoupageLafargeGranulats[ region ][ sector ] ) {
					var departement = decoupageLafargeGranulats[ region ][ sector ][ departement_i ];
	
					drawdepartement( departement, couleursLafargeGranulats_vueRegions[ region ] );
					
					// If Central point of the region is not set already, we do it now
					if( !centralPointDrawn )
						frenchDepartementsGeocoding_getLatLng(
							departement,
							new Function( "point", "regionMarker( point, '" + region + "' )" )
						);
						
	//					geocoder.getLatLng (
	//						"France, " + ( ( departement < 10 ) ? "0" : "" ) + departement,
	//						new Function( "point", "regionMarker( point, '" + region + "' )" )
	//					);
						
					centralPointDrawn = true;
	
				}
		}	
	}
	else 
	{		
		resetMap();
		map.setCenter( new GLatLng( point_selected_y, point_selected_x ) , 6 ); 
		drawRegion( region_selected );
		
	}	
 }

 // This function draws all the sectors of one particular region
 // of Lafarge Granulats in France, as well as the central sector markers
 function drawRegion( region ){ 
    level = "sector";  // Added for one Level back.
 	resetMap();
	for( var sector in decoupageLafargeGranulats[ region ] ){

		var sectorMarkerAlreadySet = false;

		for( var departement_i in decoupageLafargeGranulats[ region ][ sector ] ){
			var departement = decoupageLafargeGranulats[ region ][ sector ][ departement_i ];

			drawdepartement( departement, couleursLafargeGranulats_vueSecteurs[ sector ] );

			
			// If Central point of the sector is not drawn already, we do it now
			if( !sectorMarkerAlreadySet )
				frenchDepartementsGeocoding_getLatLng(
					departement,
					new Function( "point", "sectorMarker( point, '" + sector + "', '" + region + "' );" )
				);

			sectorMarkerAlreadySet = true;
			
		}
	}			
 }

 // This functions draws one particular sector
 // of Lafarge Granulats in France, and centers the map
 // on the first department of this sector
 function drawSector( sector, region ){ 
 	level = "site"; // Added for one Level back.
 	resetMap();
 	map.addControl( gSmallMapControl );
	map.enableDragging();
	map.enableDoubleClickZoom();
	map.enableScrollWheelZoom();

	var plantMarkerAlreadySet = false;
	for( var departement_i in decoupageLafargeGranulats[ region ][ sector ] )
	{
		drawdepartement(
			decoupageLafargeGranulats[ region ][ sector ][ departement_i ],
			couleursLafargeGranulats_vueSecteurs[ sector ]
		);

		var departement = ( ( decoupageLafargeGranulats[ region ][ sector ][ departement_i ] < 10 ) ? "0" : "" ) 
						+ decoupageLafargeGranulats[ region ][ sector ][ departement_i ]; 
		
		for( var ctrSite = 0 ; ctrSite < arrTempAllSites.length ; ctrSite++)
			if( arrTempAllSites[ctrSite].pDeptCode == departement )
				showPlants(arrTempAllSites[ctrSite].pName,arrTempAllSites[ctrSite].pPostalCode, createIcon(arrTempAllSites[ctrSite].pIcon), arrTempAllSites[ctrSite].pFileUrl , arrTempAllSites[ctrSite].pLatitude,arrTempAllSites[ctrSite].pLongitude);
		
	}
	region_selected = region; // Added for one Level back.
	
	/****************************************/
	/* Plants markers implementation
	/****************************************/
}

 function geocodeDepartements( i ){
	document.write( "<div id='gcd'>departements...<br></div>" )
	for( var departement = i; departement < i + 10; departement++ ){
		geocoder.getLatLng (
			"France, " + ( ( departement < 10 ) ? "0" : "" ) + departement,
			new Function( "point", "document.getElementById( 'gcd' ).innerHTML += '" + departement + " : ' + point + '<br>';" )
		);		
	}
}



 function initialize( arrAllPlants ){ 
	if (!GBrowserIsCompatible()) return;	
	map = new GMap2(document.getElementById("map_canvas"));
	map.disableDragging();
	map.disableDoubleClickZoom();
	drawRegions();	
	//geocodeDepartements( 40 );
	//showBackButton();

} 

 //This function adds markers for plants markers at a department.
 var plantMarker_cache = {};
 function showPlants( name,postalCode, icon_temp, pdf_temp ,latitude ,longitude) { 
	 
	 if( plantMarker_cache[ "" + name + postalCode +  icon_temp +  pdf_temp  + latitude  + longitude ] != null ){
	 	plantMarker_cache[ "" + name + postalCode +  icon_temp +  pdf_temp  + latitude  + longitude ].show();
	 	return;
	 }
	 
	 var point =new GPoint(longitude,latitude);
	 var marker = new GMarker(point,icon_temp);
	 GEvent.addListener(marker, "mouseover", function() 
       { 
	  var myHtml = "<p class='txt'><img src='" + strLafargeLogoURL + "' ><br><a class='txt' href='" +pdf_temp+ "' target=\"_blank\">" + name + "</a></p>" ;
	  marker.openInfoWindowHtml(myHtml);
	 });
	
	plantMarker_cache[ "" + name + postalCode +  icon_temp +  pdf_temp  + latitude  + longitude ] = marker; 
	map.addOverlay(marker);			  
}

function createIcon( icn_temp ){

	var iHeight=icn_temp.height;
	var iWidth=icn_temp.width;
	
	var icon_poly2 = new GIcon();	
	icon_poly2.image = icn_temp.src ;
	icon_poly2.iconSize = new GSize( iWidth,iHeight );
	icon_poly2.iconAnchor = new GPoint(16, 16);
	icon_poly2.infoWindowAnchor = new GPoint(16, 16);
	return icon_poly2; 
 }

 function createMarkerSite(pName, pDeptCode,pPostalCode,pFileUrl,pIcon,pLatitude,pLongitude){
	this.pName = pName;
	this.pDeptCode = pDeptCode;
	this.pPostalCode = pPostalCode;
	this.pFileUrl = escape( pFileUrl );
	this.pIcon = pIcon ;
	this.pLatitude = pLatitude ;
	this.pLongitude = pLongitude ;
 }

function showBackButton()
{
	document.write("<div onclick='drawRegions()' style='cursor : hand'>Retour globale</div>");
}

function drawRegionsAgain()
{
	
	map.setCenter(new GLatLng(46.8219,1.70018), 5);
	 	resetMap();
		for( var region in decoupageLafargeGranulats ) {
			var centralPointDrawn = false;
			for( var sector in decoupageLafargeGranulats[ region ] )
				for( var departement_i in decoupageLafargeGranulats[ region ][ sector ] ) {
					var departement = decoupageLafargeGranulats[ region ][ sector ][ departement_i ];
	
					drawdepartement( departement, couleursLafargeGranulats_vueRegions[ region ] );
					
					// If Central point of the region is not set already, we do it now
					if( !centralPointDrawn )
						frenchDepartementsGeocoding_getLatLng(
							departement,
							new Function( "point", "regionMarker( point, '" + region + "' )" )
						);
						
	//					geocoder.getLatLng (
	//						"France, " + ( ( departement < 10 ) ? "0" : "" ) + departement,
	//						new Function( "point", "regionMarker( point, '" + region + "' )" )
	//					);
						
					centralPointDrawn = true;
	
				}
		}	

}	
