var map;
var grat;
var tileLayers = new Array();
var check;
var overviewC;
var tOverlay;
var sunCalc = new SunRiseSunSet();


function overlay()
{
	var sel3 = document.getElementById("idJourHeure");
	var idJourHeure = sel3.options[sel3.selectedIndex].value;
	var a=idJourHeure.split('_');
	var id_jour = a[0];
	var id_heure = a[1];
	//alert("Id Jour : "+id_jour+ " Id Heure : "+id_heure);

	//-------------------------------------------------------------//

	var copyrightCollection = new GCopyrightCollection('Previmeteo');
	var copyright = new GCopyright('Copyright',new GLatLngBounds(new GLatLng(-90, -180),new GLatLng(90, 180)),0,"©2009 Previmeteo");
	copyrightCollection.addCopyright(copyright);

	tileLayers[0] = new GTileLayer(copyrightCollection,0,5);
	tileLayers[0].getTileUrl = function(tile,zoom){
		return 'http://www.previmeteo3.com/tiles_monde.php?parametre='+str_parametre+'&id_jour='+id_jour+'&id_heure='+id_heure+'&zoom='+zoom+'&tiles='+(tile.x + tile.y * Math.pow(2,zoom));
	};
	tileLayers[0].isPng = function() { return true; }
	tileLayers[0].minResolution = function() { return 0; }
	tileLayers[0].minResolution = function() { return 5; }
	tileLayers[0].getOpacity = function() { return 0.8; }

	//-------------------------------------------------------------//

	if(tOverlay) map.removeOverlay(tOverlay);
	tOverlay = new GTileLayerOverlay(tileLayers[0]);
	map.addOverlay(tOverlay);
}

//-------------------------------------------------------------//

function grid()
{
	if(grat) map.removeOverlay(grat);
	var cboGrid = document.getElementById('cboGrid');
	if (cboGrid.options[cboGrid.selectedIndex].value == 1)
		{
			grat = new LatLonGraticule();
			map.addOverlay(grat);
		}
	else if (cboGrid.options[cboGrid.selectedIndex].value == 2)
		{
			grat = new LatLonGraticule(true);
			map.addOverlay(grat);
		}
		else if (cboGrid.options[cboGrid.selectedIndex].value == 3)
		{
			var c = map.getCenter();

			grat = new BdccRangeRings(c, "#FFFFFF",1,0.5,null,17);
            map.addOverlay(grat);
		}
	else
		grat = null;
}

//-------------------------------------------------------------//

function MapTypeControl(){}
MapTypeControl.prototype = new GControl();
MapTypeControl.prototype.initialize = function(map)
{
	var container = document.createElement("div");
	container.style.fontFamily='Arial';
	container.style.fontSize='x-small';

	//-------------------------------------------------------------//

	var sel1 = document.createElement("SELECT");
	sel1.id = "mtSelect1";

	var mts = map.getMapTypes();
	for(var i=0;i < mts.length; i++)
	{
		var o = document.createElement("OPTION");
		o.text=mts[i].getName();
		o.value=i;
		try
		{
			sel1.add(o, null); // standards compliant; doesn't work in IE
		}
		catch(ex)
		{
			sel1.add(o); // IE only
		}
	}
	sel1.title ="Selectionner un fond de carte";
	container.appendChild(sel1);

	//-------------------------------------------------------------//

	var bPlus = document.createElement("input");
	bPlus.type = "button";
	bPlus.value="+";
	bPlus.id="btnPlus";
	bPlus.title ="Augmenter l'opacite";
	container.appendChild(bPlus);

	//-------------------------------------------------------------//

	var bMinus = document.createElement("input");
	bMinus.type = "button";
	bMinus.value="-";
	bMinus.id="btnMinus";
	bMinus.title ="Diminuer l'opacite";
	container.appendChild(bMinus);

	//-------------------------------------------------------------//

	var sel3 = document.createElement("SELECT");
	sel3.id = "idJourHeure";
	for(w=0;w<5;w++)
	{
		for(z=0;z<24;z=z+3)
		{
			var o = document.createElement("OPTION");
			o.text=TabJour[w]+" - "+z+"h";
			o.value=w+"_"+z;
			try {
				sel3.add(o, null); // standards compliant; doesn't work in IE
			}
			catch(ex) {
				sel3.add(o); // IE only
			}
		}
	}

	sel3.title ="Selectionner une periode";
	container.appendChild(sel3);

	//-------------------------------------------------------------//

	var bPrev = document.createElement("input");
	bPrev.type = "button";
	bPrev.value="<";
	bPrev.id="btnPrev";
	bPlus.title ="Periode precedente";
	container.appendChild(bPrev);

	//-------------------------------------------------------------//

	var bNext = document.createElement("input");
	bNext.type = "button";
	bNext.value=">";
	bNext.id="btnNext";
	bNext.title ="Periode suivante";
	container.appendChild(bNext);

	//-------------------------------------------------------------//

	var sel5 = document.createElement("SELECT");
	sel5.id = "cboGrid";
	var o = document.createElement("OPTION");
	o.text="Aucune grille";
	o.value=0;
	try {
		sel5.add(o, null); // standards compliant; doesn't work in IE
	}
	catch(ex) {
		sel5.add(o); // IE only
	}


	o = document.createElement("OPTION");
	o.text="LatLon Dec.";
	o.value=1;
	try {
		sel5.add(o, null); // standards compliant; doesn't work in IE
	}
	catch(ex) {
		sel5.add(o); // IE only
	}


	o = document.createElement("OPTION");
	o.text="LatLon DMS";
	o.value=2;
	try {
		sel5.add(o, null); // standards compliant; doesn't work in IE
	}
	catch(ex) {
		sel5.add(o); // IE only
	}


	o = document.createElement("OPTION");
	o.text="Auto Rings";
	o.value=3;
	try {
		sel5.add(o, null); // standards compliant; doesn't work in IE
	}
	catch(ex) {
		sel5.add(o); // IE only
	}
	sel5.title ="Selectionner une grille pour afficher les longitudes et latitudes";
	container.appendChild(sel5);

	//-------------------------------------------------------------//

	var bLink = document.createElement("INPUT");
	bLink.type = "button";
	bLink.value="Lien";
	bLink.id="btnLink";
	bLink.title ="Creer un lien pour partager les parametres exacts de cette page.";
	container.appendChild(bLink);

	//-------------------------------------------------------------//

	var ffi = document.createElement("img");
	ffi.border="0";
	ffi.alt ="Previmeteo";
	ffi.title="Creer par Previmeteo";
	ffi.src="http://www.previmeteo.fr/static/img/cartes/logo_previmeteo_googlemaps.png";
	container.appendChild(ffi);

	//-------------------------------------------------------------//

	GEvent.addDomListener(sel1, "change", function()
	{
		var sel1 = document.getElementById("mtSelect1");
		var mt1 = map.getMapTypes()[sel1.options[sel1.selectedIndex].value];
		if(mt1.getName() != "Earth")
		mt1.getTileLayers()[0].getOpacity = function () {return 1.0;};
		else
		map.removeControl(overviewC);
		map.setMapType(mt1);
		makeLink();
	});

	//-------------------------------------------------------------//

	GEvent.addDomListener(sel3, "change", function ()
	{
		overlay();	//Si changement de jour / heure
		makeLink();
	});

	GEvent.addDomListener(bPrev, "click", function()
	{
        var idJourHeure = document.getElementById("idJourHeure");
        var OptJourHeure = idJourHeure.options;
        if(idJourHeure.selectedIndex != 0)
        {
        	OptJourHeure[idJourHeure.selectedIndex-1].selected = true;
        }
        else
        {
		    document.getElementById('idJourHeure').selectedIndex = document.getElementById("idJourHeure").options.length-1;
		    OptJourHeure[idJourHeure.selectedIndex].selected = true;
	    }

	    overlay();
	    makeLink();
 	});

	GEvent.addDomListener(bNext, "click", function()
	{
        var idJourHeure = document.getElementById("idJourHeure");
        var OptJourHeure = idJourHeure.options;
		//alert(idJourHeure.selectedIndex);
        if(idJourHeure.selectedIndex != document.getElementById("idJourHeure").options.length-1)
        {
        	OptJourHeure[idJourHeure.selectedIndex+1].selected = true;
        }
        else
        {
		    document.getElementById('idJourHeure').selectedIndex = 0;
		    OptJourHeure[idJourHeure.selectedIndex].selected = true;
	    }
	    overlay();
	    makeLink();
 	});

	//-------------------------------------------------------------//

	//Si changement de grid

	GEvent.addDomListener(sel5, "change", function()
	{
		makeLink();
		grid();
	});

	//-------------------------------------------------------------//

	GEvent.addDomListener(bMinus, "click", function()
	{
	    var op = tileLayers[0].getOpacity();

		if( op >= 1.0)
			tileLayers[0].getOpacity = function () {return 0.9;};
		else if( op >= 0.9)
			tileLayers[0].getOpacity = function () {return 0.8;};
		else if( op >= 0.8)
			tileLayers[0].getOpacity = function () {return 0.7;};
		else if( op >= 0.7)
			tileLayers[0].getOpacity = function () {return 0.6;};
		else if( op >= 0.6)
			tileLayers[0].getOpacity = function () {return 0.5;};
		else if( op >= 0.5)
			tileLayers[0].getOpacity = function () {return 0.4;};
		else if( op >= 0.4)
			tileLayers[0].getOpacity = function () {return 0.3;};
		else if( op >= 0.3)
			tileLayers[0].getOpacity = function () {return 0.2;};
		else if( op >= 0.2)
			tileLayers[0].getOpacity = function () {return 0.1;};
		else
			tileLayers[0].getOpacity = function () {return 0.0;};

		if(tOverlay) map.removeOverlay(tOverlay);
		tOverlay = new GTileLayerOverlay(tileLayers[0]);
		map.addOverlay(tOverlay);

 	});

	//-------------------------------------------------------------//

	GEvent.addDomListener(bPlus, "click", function()
	{
		var op = tileLayers[0].getOpacity();

		if( op >= 0.9)
			tileLayers[0].getOpacity = function () {return 1.0;};
		else if( op >= 0.8)
			tileLayers[0].getOpacity = function () {return 0.9;};
		else if( op >= 0.7)
			tileLayers[0].getOpacity = function () {return 0.8;};
		else if( op >= 0.6)
			tileLayers[0].getOpacity = function () {return 0.7;};
		else if( op >= 0.5)
			tileLayers[0].getOpacity = function () {return 0.6;};
		else if( op >= 0.4)
			tileLayers[0].getOpacity = function () {return 0.5;};
		else if( op >= 0.3)
			tileLayers[0].getOpacity = function () {return 0.4;};
		else if( op >= 0.2)
			tileLayers[0].getOpacity = function () {return 0.3;};
		else if( op >= 0.1)
			tileLayers[0].getOpacity = function () {return 0.2;};
		else
			tileLayers[0].getOpacity = function () {return 0.1;};

		if(tOverlay )map.removeOverlay(tOverlay);
		tOverlay = new GTileLayerOverlay(tileLayers[0]);
		map.addOverlay(tOverlay);

	});

	//-------------------------------------------------------------//

	GEvent.addDomListener(bLink, "click", function()
	{
		var strLat;
		var strLng;
		var strZoom;
		var c = map.getCenter();

		strLat = "?lat=" + c.lat().toString();
		strLng = "&lon=" + c.lng().toString();
		strZoom = "&Zoom=" + map.getZoom().toString();

		var cboGrid = document.getElementById('cboGrid');
		strGrid = "&Grid=" + escape(cboGrid.options[cboGrid.selectedIndex].text);

		var sel1 = document.getElementById("mtSelect1");
		strMapType = "&MapType=" + escape(sel1.options[sel1.selectedIndex].text);

		var idJourHeure = document.getElementById("idJourHeure");
		strJourHeure = "&JourHeure=" + escape(idJourHeure.options[idJourHeure.selectedIndex].value);

		var u = location.protocol + "//" + location.host + location.pathname;
		u += strLat + strLng + strZoom + strGrid + strMapType + strJourHeure;

		prompt("Collez le lien suivant dans un e-mail ou dans un message instantane :",u);

	});

	//-------------------------------------------------------------//

	map.getContainer().appendChild(container);
	return container;
}

//-------------------------------------------------------------//
//-------------------------------------------------------------//

MapTypeControl.prototype.getDefaultPosition = function()
{
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 7));
}

//-------------------------------------------------------------//

function getParam(n)
{
	var sSearch;
	var aPairs;
	sSearch = (document.location.search.length > 1) ? document.location.search.substring(1) : "";
	if (sSearch != "")
	{
	   aPairs = sSearch.split("&");
	   for (var i = 0; i < aPairs.length; i++)
	   {
		  if(aPairs[i].split("=")[0] == n)
			return unescape(aPairs[i].split("=")[1]);
	   }
	}
}

//-------------------------------------------------------------//

function makeLink()
{
	var strLat;
	var strLng;
	var strZoom;
	var c = map.getCenter();

	strLat = "lat=" + c.lat().toString();
	strLng = "&lon=" + c.lng().toString();
	strZoom = "&Zoom=" + map.getZoom().toString();

	var cboGrid = document.getElementById('cboGrid');
	strGrid = "&Grid=" + escape(cboGrid.options[cboGrid.selectedIndex].text);

	var sel1 = document.getElementById("mtSelect1");
	strMapType = "&MapType=" + escape(sel1.options[sel1.selectedIndex].text);

	var idJourHeure = document.getElementById("idJourHeure");
	strJourHeure = "&JourHeure=" + escape(idJourHeure.options[idJourHeure.selectedIndex].value);

	var url = strLat + strLng + strZoom + strGrid + strMapType + strJourHeure;

	document.getElementById("link_map").innerHTML = '<h3>Changer de paramètre météo</h3><p><a href="nuages.php?' +url+ '">Voir la carte des nuages<\/a></p><p><a href="pluie.php?' +url+ '">Voir la carte des précipitations<\/a></p><p><a href="temperature.php?' +url+ '">Voir la carte des températures<\/a></p><p><a href="vent.php?' +url+ '">Voir la carte du vent au sol<\/a></p>';
}

//-------------------------------------------------------------//
//-------------------------------------------------------------//

function initialize()
{
	//-------------------------------------------------------------//

	var strLat;
	var strLng;
	var strZoom;
	var content_div;


	if (navigator.geolocation)
	{
	    navigator.geolocation.getCurrentPosition( function(position)
	    {
	    	strLat = position.coords.latitude;
	    	strLng = position.coords.longitude;
	        //alert('latitude : ' + position.coords.latitude + ', longitude : ' + position.coords.longitude);
	    });
	}
	else
	{
		strLat = 48.85;
    	strLng = 2.34;
	}

	//Recupère les variables dans l'url si elles existent
	if(!check)
	{
		if(getParam("lat")) {strLat = getParam("lat");}
		if(getParam("lon")) {strLng = getParam("lon");}
		if(getParam("Zoom")) {strZoom = getParam("Zoom");}
		if(getParam("MapType")) {strMapType = unescape(getParam("MapType"));}
		if(getParam("Grid")) {strGrid = unescape(getParam("Grid"));}
		if(getParam("JourHeure")) {strJourHeure = getParam("JourHeure"); }
	}
	check = 1;

	//-------------------------------------------------------------//

	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById("Gmap"));
        map.addControl(new MapTypeControl());	//Affichage des paramètres - Important
        map.addControl(new GLargeMapControl3D(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 40)));

        //overviewC = new GOverviewMapControl(new GSize(200,200));
        //map.addControl(overviewC);

        //-------------------------------------------------------------//

		//var uiOptions = map.getDefaultUI();
		//uiOptions.zoom.scrollwheel = false;
		//uiOptions.controls.largemapcontrol3d = false;
		//uiOptions.controls.menumaptypecontrol = false;
		//uiOptions.controls.maptypecontrol = false;
		//uiOptions.controls.scalecontrol = false;
		//map.setUI(uiOptions);

        //-------------------------------------------------------------//

		var publisherID = 'pub-2445108409444273';
		var adsManagerOptions =
		{
			maxAdsOnMap : 2, //Nombre de pub à afficher max
			style: 'adunit',
			// The channel field is optional - replace this field with a channel number
			// of your own for Google AdSense tracking
			channel: '6864950726'
		};
		adsManager = new GAdsManager(map, publisherID, adsManagerOptions);
		adsManager.enable();

		//-------------------------------------------------------------//

		var mc;
		if((strLat)&&(strLng))
		{
			mc = new GLatLng(parseFloat(strLat),parseFloat(strLng));
			var point = new GLatLng(strLat,strLng); // Position du marker
			var icon = new GIcon();
			icon.image = "http://www.previmeteo.fr/static/img/cartes/icons_gmap.png";
			icon.shadow = "http://www.previmeteo.fr/static/img/cartes/icons_gmap_s.png";
			icon.iconSize = new GSize(32,32);
			icon.shadowSize = new GSize(56,32);
			icon.iconAnchor = new GPoint(16,32);
			icon.infoWindowAnchor = new GPoint(16,0);
			var marker = new GMarker(point, icon);
			map.addOverlay(marker);
			map.setCenter(mc, 3);

		}
		else
		{
			mc = new GLatLng(0, 0);
			map.setCenter(mc, 1);

		}

        if(strZoom) {map.setZoom(parseInt(strZoom));}

        //-------------------------------------------------------------//

		var mapTypes = map.getMapTypes();
		for (var i=0; i<mapTypes.length; i++)
		{
			mapTypes[i].getMinimumResolution = function() {return 0;} //Zoom mini
			mapTypes[i].getMaximumResolution = function() {return 5;}  //Zoom max

			if(mapTypes[i].getName() == strMapType)
            {
                map.setMapType(mapTypes[i]);
            }
		}

		//-------------------------------------------------------------//

        var sel1 = document.getElementById("mtSelect1");
        var sel1s = sel1.options;
        for (var s1i=0;s1i<sel1s.length; s1i++)
        {
            if(sel1s[s1i].text == strMapType)
            {
                sel1.selectedIndex = s1i;
                break;
            }
        }

        //-------------------------------------------------------------//

        var idJourHeure = document.getElementById("idJourHeure");
        var OptJourHeure = idJourHeure.options;
        for (var z=0;z<OptJourHeure.length; z++)
        {
            if(OptJourHeure[z].value == strJourHeure)
            {
                idJourHeure.selectedIndex = z;
                break;
            }
        }

		//-------------------------------------------------------------//

 	    var cboGrid = document.getElementById('cboGrid');
        var grds = cboGrid.options;
        for (var grdi=0; grdi<grds.length; grdi++)
        {
            if(grds[grdi].text == strGrid)
            {
                cboGrid.selectedIndex = grdi;
                grid();
                break;
            }
        }

		//-------------------------------------------------------------//

		GEvent.addListener(map, "mousemove", function(pt) {
			if(pt)
			{
				var ss = sunCalc.sunSet(pt.lat(),pt.lng(),new Date());
				ss = ss.toTimeString();
				var sr = sunCalc.sunRise(pt.lat(),pt.lng(),new Date());
				sr = sr.toTimeString();
				if(ss!="Invalid Date"){
					document.getElementById('ssTimes').innerHTML =  "<p>Lever : " + sr + " </p><p>Coucher : " + ss +"</p>";
				}
				else
				{
					document.getElementById('ssTimes').innerHTML = "";
				}
			}
		});

		//-------------------------------------------------------------//

		makeLink();
		GEvent.addListener(map, 'moveend', makeLink);

		//-------------------------------------------------------------//

		GEvent.addListener(map, 'drag', grid);

		//-------------------------------------------------------------//

        overlay();
        map.getContainer().style.overflow="hidden";


       // var Proj = G_NORMAL_MAP.getProjection();
        //alert(Proj.fromPixelToLatLng(new GPoint(2560,1792), 4));

	}
}
