/*
 * Cherie FM, Fréquences
 * Tous droits réservés (c) Copyright 2008, NRJ GROUP
 */

// Input as Loader
function setInputAsLoader(input)
{
	document.getElementById(input).style.background = 'url(' + url_base + '/images/ajax_loader.gif) no-repeat';
	document.getElementById(input).style.backgroundColor = '#FFF';
	document.getElementById(input).style.border = '1px solid #ccc';
	document.getElementById(input).style.paddingLeft = '15px';
}

// Input as Loader
function unSetInputAsLoader(input)
{
	document.getElementById(input).style.background = '';
	document.getElementById(input).style.border = '1px solid #ccc';
	document.getElementById(input).style.paddingLeft = '0px';
	document.getElementById(input).style.padding = '2px';
}

// Erreur Ville non trouvée
function displayNotFound(location)
{
	document.getElementById('cherie_suggest').innerHTML = '<b>Oups! <u>'+location+'</u>: cette ville n\'existe pas</b> <br />';
	document.getElementById('cherie_suggest').style.display = '';
}

// Bien positionner le marqueur
function posMarker(texte, markers)
{
	markers.openExtInfoWindow(map, "cherie_meteo", '<div style=\"white-space:nowrap; font: 12px verdana;\">' + texte + '</div>', {beakOffset: 3});

	if(document.getElementById("cherie_meteo").offsetLeft > document.getElementById("cherie_meteo").offsetWidth)
		document.getElementById("cherie_meteo").style.left = document.getElementById("cherie_meteo").offsetLeft - (document.getElementById("cherie_meteo").offsetLeft - document.getElementById("cherie_meteo").offsetWidth)-4 + "px";


	if(document.getElementById("cherie_meteo").offsetTop < 0)
	{
		document.getElementById("cherie_meteo").style.top = (document.getElementById("cherie_meteo").offsetTop + 70)  + 70 + "px";
	}
}

// Ajouter un marqueur fréquence
function addMarker(map, point, icon, texte, link) {

	var marker = new GMarker(point, icon);

	GEvent.addListener(marker, "mouseout", function() {
		map.closeExtInfoWindow();
	} );

	GEvent.addListener(marker, "mouseover", function() {
		
		posMarker(texte, marker);
		
		//Nrj_Library.onDOMReady(function() {
			Nrj_Library.Ajax(url_base + "/frequence/aproximite?start=" + point, "aproximite", {start: point});
			//nrj_xmlRequest.ajaxRequest({type:"POST", url: url_base + "/frequence/aproximite", flux: "start="+point+"", indicator: url_base + "/images/ajax_loader.gif", id_dest: "aproximite", start: "document.getElementById('aproximite').innerHTML = '<img src=\"/images/ajax_loader.gif\">' ", callback: callback});
		//} );

	});

	GEvent.addListener(marker, "click", function() {
		if(markerSearch != null) markerSearch.remove();
		getLocation(link, 8);
	});

	map.addOverlay(marker);

}

// Ajouter un marqueur fréquence zoom
function addMarkerSearch(map, point, icon, texte, link) {

	markerSearch = new GMarker(point, icon);

	GEvent.addListener(markerSearch, "click", function() {
		return false;
	});

	GEvent.addListener(markerSearch, "mouseover", function() {

		posMarker(texte, markerSearch, 1);
		//Nrj_Library.onDOMReady(function() {
			Nrj_Library.Ajax(url_base + "/frequence/aproximite?start=" +  point, "aproximite", {start: point, complete: 1});
			//nrj_xmlRequest.ajaxRequest({type:"POST", url: url_base + "/frequence/aproximite", flux: "start="+point+"&complete=1", indicator: url_base + "/images/ajax_loader.gif", id_dest: "aproximite", start: "document.getElementById('aproximite').innerHTML = '<img src=\"/images/ajax_loader.gif\">' ", callback: callback});
	//	} );

	});

	map.addOverlay(markerSearch);
	posMarker(texte, markerSearch);

}

function isset() {

	var a=arguments; var l=a.length; var i=0;

	if (l==0) {
		throw new Error('Empty isset');
	}

	while (i!=l) {
		if (typeof(a[i])=='undefined' || a[i]===null) {
        	return false;
        } else {
            i++;
        }
    }
    return true;
}

/*
 * Vérification de l'adresse
 * Propositions si plusieurs adresses trouvées
 */
function getLocation(cityask, zoomlevel, unredir) {

	setInputAsLoader('recherche_ville');
	prepare = '';
	var city = '';

	// Corrections
	if (cityask == 'Paris')
	{
		cityask = cityask + ', Paris';
	}

	// Redirection (inversion normale)
	if(unredir == 1) unredir = 0;
	else unredir = 1;

	// Géo Codeur
	geocoder = new GClientGeocoder();
	geocoder.setBaseCountryCode('fr');

	geocoder.getLocations(cityask, function(result) {

		if (result.Status.code == G_GEO_SUCCESS) {

			var n = result.Placemark.length;
			var region = '';

			// Vidage des suggestions
			document.getElementById('cherie_suggest').innerHTML = '';
			document.getElementById('cherie_suggest').style.display = '';

			if (n < 2)
			{
				if(result.Placemark[0].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName)
				{
					region = result.Placemark[0].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
				}
				gotoLocation(cityask + ', France', zoomlevel, unredir, region);
				document.getElementById('cherie_suggest').style.display = 'none';
			}
			else
			{

				for (i=0; i<n; i++)
				{
					if( result.Placemark[i].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName !== "undefined" )
					{
						if( isset(result.Placemark[i].Point.coordinates) && isset(result.Placemark[i].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) )
						{
							// Re-Traitement
							var ville = result.Placemark[i].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName
							ville = ville.replace("'", " ");

							var region = result.Placemark[i].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
							region = region.replace("'", " ");

							prepare += "<a href='#' onclick='return getLocation(\" " + ville + " (" + region + ")\", 8);'> " + ville + ", " + region + ", France <br /> ";
						}
					}
				}

				if (n >= 2)
				{
					unSetInputAsLoader('recherche_ville');
					document.getElementById('cherie_suggest').innerHTML = '<b>Veuillez préciser votre recherche:</b> <br />' + prepare;
					authorized = 0;
				}
			}

		}
		else
		{
			unSetInputAsLoader('recherche_ville');
			return displayNotFound(cityask);
		}


	} );

}

/*
 * Aller é l'adresse
 * Ou erreur si elle n'existe pas
 */
function gotoLocation(cityask, zoomlevel, unredir, depar) {

	geocoder.getLatLng(
		cityask,
		function(point) {
			if (!point) {
				displayNotFound(cityask);
				unSetInputAsLoader('recherche_ville');
				return false;
			} else {

				if(markerSearch!=null){
					markerSearch.remove();
				}

				if(unredir == 0)
				{
					map.setCenter(point,zoomlevel);
				}

				genFlyLocation(cityask,point, 0 ,0 , unredir, depar);
				drawCircle();
				//map.enableDragging();
				unSetInputAsLoader('recherche_ville');
			};
		}
	);
}

function genFlyLocation(cityask, point, force, fm, redirect, depar)
{

	if(redirect==true)
	{
		window.open(url_base + frequence + '?q=' + escape(cityask) + '&d=' + escape(depar), '_parent');
	}
	else
	{

		// Marker
		var pic = '/images/gmail_point.png';
		var Image = new GIcon();
		Image.iconSize=new GSize(40,40);
		Image.iconAnchor=new GPoint(20,20);
		Image.image=pic;
		Image.infoWindowAnchor= new GLatLng(10,100);

		// Créer le marker
		addMarkerSearch(map, point, Image, "<div id='aproximite'><img src=\"/images/ajax_loader.gif\"><br /><h4>Exploration des splines d'Adam et Eve...</h4></div>", 1);

		// !! Important

		if(markerSearch!=null) markerSearch.remove();
		if(marker!=null) marker.remove();

		addMarkerSearch(map, point, Image, "<div id='aproximite'><img src=\"/images/ajax_loader.gif\"><br /><h4>Transit d'informations..</h4></div>", 1);
		if(force == 1) posMarker(cityask, markerSearch);
		
		Nrj_Library.Get(url_base + "/frequence/aproximite?start=" +  point + "&complete=1", "aproximite", {});
	}
}

function drawCircle() {
	var oRadius = 60;
	oRadius = oRadius ? oRadius : 500;

	circleRadius = oRadius,
	circleUnits = 'KM';

	doDrawCircle();
}

function doDrawCircle(points){

	if (circle) {
		map.removeOverlay(circle);
	}

	var center = map.getCenter();
	var bounds = new GLatLngBounds();

	var circlePoints = Array();

	with (Math) {

		var d = circleRadius/6378.8;	// radians

		var lat1 = (PI/180)* center.lat(); // radians
		var lng1 = (PI/180)* center.lng(); // radians

		for (var a = 0 ; a < 361 ; a++ ) {
			var tc = (PI/180)*a;
			var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
			var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
			var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
			var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
			circlePoints.push(point);
			bounds.extend(point);
		}

		if (d < 1.5678565720686044) {
			circle = new GPolygon(circlePoints, '#bc0f1d', 2, 1, '#bc0f1d', 0.15);
		}
		else {
			circle = new GPolygon(circlePoints, '#000000', 2, 1);
		}

		map.addOverlay(circle);

	}
}

// Réinitialise la Carte
function resetMap()
{
	var map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(46.468133,2.285156), 5);
}