/*
champs base nationale
NomAPI
Adresse
SiteWeb
Email
latGMap
lngGMap
*/

var db;
var markers = [];
var infoWindow;
var map;
var geocoder;
var interval;
var datas_lieu = [];	
var position_courante;

var jQT = new $.jQTouch({
		icon: 'monepn.png',
                addGlossToIcon: true,
                startupScreen: 'monepn_startupscreen.png',
                statusBar: 'black',
		useAnimations: true,
		useFastTouch: true,
		slideSelector: '.slide',

                preloadImages: [
			'themes/MonEPN/img/bg.png', 
			'themes/MonEPN/img/actionButton.png', 
			'themes/MonEPN/img/toolButton.png',
			'themes/MonEPN/img/logoMyEPN50.png', 
			'themes/MonEPN/img/footerWhite.png', 
			'themes/MonEPN/img/backButton.png', 
			'themes/MonEPN/img/icProches.png', 
			'themes/MonEPN/img/icInformation.png', 
			'themes/MonEPN/img/icSearch.png', 
			'themes/MonEPN/img/icFave.png', 
			'themes/MonEPN/img/arrowRight.png'
		
                    ]});

//Chargement des fonctions par JQUERY
$(document).ready(function()
{

 var shortName = 'MonEpn';
    var version = '1.0';
    var displayName = 'MonEpn';
    var maxSize = 65536;
    db = openDatabase(shortName, version, displayName, maxSize);
    db.transaction(
        function(transaction) {
            transaction.executeSql(
             "CREATE TABLE IF NOT EXISTS Api " + 
"(NoAPI int(12) NOT NULL UNIQUE PRIMARY KEY, " +
  "NomAPI varchar(250) default NULL, " +
  "Commune varchar(255)" +
");"
            );
        }, errorSQLmessage

    );





/*

					$('a.serverLink').bind('tap', function(){ //on iPhone event is tap, on browser is click	
						var newDivId = $(this).attr('newDivId');
						var targetURL = $(this).attr('href');
						//Create the placeholder/loading screen
						$("body").append('<div id="'+newDivId+'">\
						            		<div class="toolbar">\
	                							<h1>Loading</h1>\
	                							<a class="back" href="#">Back</a>\
	            							</div>\
											<div style="text-align:center; font-size: 17px; margin-top: 16px; font-weight: bold;">Loading...</div></div>');
						
						//fetch data
						$('#'+newDivId).load(targetURL);
	
						// Replace loading screen with div we just loaded
						jQT.goTo('#'+newDivId, 'slide');
 
				});	
*/



	/*jQT.resetHeight(); Appel de l'extension dynamicheight*/ 
	
	$('#decouvrir').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })
        
        $('#decouvrir').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })

	$('#recherche').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })
        
        $('#recherche').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })
        
        $('#resultats').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })

	$('#resultats').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })

	$('#resultats-proxi').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })

	$('#resultats-proxi').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })

	$('#fiche_lieu').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })

	$('#fiche_lieu').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })

	$('#mapwrapper').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })

	$('#mapwrapper').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })

	$('#epn-favoris').bind('pageAnimationStart', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','block');
        })

	$('#epn-favoris').bind('pageAnimationEnd', function(event, info){
           if (info.direction == 'in') $('#chargement').css('display','none');
        })

	geoloc();

	//Autocomplétion à partir de la base de données des EPN : récupération du champ ville
	$("#ville").focus().autocomplete("villes.php");

	$('#params form').submit(submitParams);
	$('#ParamsButton').tap(submitParams);

/*Pour Android activer ces fonctions

 	$('#mapproches').click(function(){ 
		setLoadingPopup('mapwrapper');
		localiser_proxi_carte();


	});
*/

	// AdjustLayout ( for aligning to bottom )
	//AdjustLayout ();

	if (!sessionStorage.getItem('radius'))
	{	sessionStorage.setItem('radius', '10');
	}

	$('#RechercheButton').click(function()
	{ 
		$.post(
		"recherche.php",
		{ latitude: $('#latitude').val(), longitude: $('#longitude').val(), ville: $('#ville').val(),CodePostal: $('#CodePostal').val()},
		function(data){
			jQT.goTo('#resultats', 'slide');
			$('.espace').remove();
			afficher_resultats_append(data,"#resultats");
			}
		);
	});


/*
$('#map_back').click(function(){
jQT.goBack();
$('body > *, #jqt > *').css('background', 'rgb(197,204,211) url(themes/apple/img/pinstripes.png)');
});
*/



$('#togglefloaty').click(function(){
                    $('.info-pleinecran').toggleFloaty();
                    $(this).removeClass('active');
                    return false;
                });

                $('#hidefloaty').click(function(){
                    $('.info-pleinecran').hideFloaty();
                    $(this).removeClass('active');
                    return false;
                });


$('#liste_settings').tap(function(){
$('.fenetre-params').makeFloaty({
                    align:'top',
                    spacing: 50,
                    time: '1s'
                });
});

$('#map_settings').bind('tap',function(){
$('.fenetre-params').makeFloaty({
                    align:'top',
                    spacing: 50,
                    time: '1s'
                });
});

if ((!window.navigator.standalone)&&(what_is_smartphone()=='iphone')) {
$('.info-pleinecran').makeFloaty({
                    align:'bottom',
                    spacing: 20,
                    time: '1s'
                });

}

});
	//InstallResize();


$('#btnSearchNear').tap(function(){
$('.headerproxi').makeFloaty({
		    align:'bottom',
                    spacing: 0,
                    time: '0.6s'
                });
});

$('#iconeheaderproxi_liste').tap(function(){
$('.headerproxi').makeFloaty({
			align:'bottom',
                    spacing: 0,
                    time: '0.6s'
                });
});

$('#iconeheaderproxi_home').tap(function(){
	$('.headerproxi').hideFloaty();
});

$('#mapproches').tap(function(){
	$('.headerproxi').hideFloaty();
});
$('#backtohome').tap(function(){
	$('.headerproxi').hideFloaty();
});

$('#backproxi').tap(function(){
	$('.headerproxi').hideFloaty();
});

/* ---- Resize functions  --- 
function InstallResize()
{

	$(window).resize(onWindowResize).scroll( onWindowScroll);
}

function onWindowResize()
{
	AdjustLayout();
}
function onWindowScroll()
{
	AdjustLayout();
}
function AdjustLayout()
{
	var bodyH = Math.max($(document).height(),$("body").height());
	var windowHeight	= $(window).height();
	var windowWidth	= $(window).width();
	var y = windowHeight + $(document).scrollTop(); 

	$(".alignBottom").each(function(){
		$(this).css({left:0,zIndex:100,top:y-parseInt($(this).css('height')),width:windowWidth});

	});

}
*/
	
/*
$('#map_settings').tap(function() {
$('.map_layer').show();
$('#params').slideDown('fast');
});
*/

/*
$('#liste_settings').tap(function() {
$('.map_layer').show();
$('#params').slideDown('fast');
});
*/

$('#ajout-favori-button').tap(function() {

ajouter_favori($('#info_NoAPI').text(),$('#info_NomAPI').text(),$('#info_Commune').text());
});


function afficher_resultats_append(resultats,div) {
	$(div).empty();
	$(div).append(resultats);
}


function afficher_resultats_appendTo(resultats,div) {

if ($(div + " ul").length==0) {
  $(resultats).appendTo(div);

} else {
  $(div + " ul").replaceWith(resultats);
}

}

/*Optimisation Iphone ne semble pas fonctionner sur Android...*/




$('#mapproches').tap(function(){
			
			//$('#mapwrapper').css("display", "block");
			/*$('body').bind('turn', function(event, info){
              			if (info.orientation == "landscape") {
						$('#map_canvas').addClass('map_canvas_landscape');
							
				}
				else {
						$('#map_canvas').removeClass('map_canvas_landscape');
				}
        		});*/

			navigator.geolocation.clearWatch(position_courante);
			//setLoadingPopup('mapwrapper'); 
			localiser_proxi_carte(); 
		});


$('.lien_fiche').tap(function(){ 
$.get("fiche.php",
   { latitude: $('#latitude').val(), longitude: $('#longitude').val(), NoAPI: $(this).attr("id")},
   function(data){
     jQT.goTo('#fiche_lieu', 'slide');
	afficher_resultats_appendTo(data,"#fiche_lieu");
	$('.espace').remove();
	$('<div class="espace"></div>').appendTo('#fiche_lieu');
   }
 );
});


$('#liste').tap(function(){
do_liste();
/*$('.map_layer').show();*/
$('#liste_lieux').slideDown('fast');
}
);

/*
$('#location').tap(function(){
geoloc();
localiser_proxi_carte()
}
);
*/
$('#gofavoris').tap(function(){
	refresh_favoris();
}
);



$('.goproxi').tap(function(){
	listeproxi();
}
);

function setLoadingPopup(divId) {
	var aux="#" + divId;
	
	divobj=$(aux);
	if (divobj)
		$(aux).append('<div id="chargement"></div>'); 
}
function removeLoadingPopup() {
	divobj=$('#chargement');
	if (divobj)
	
	var t=setTimeout("$('#chargement').remove()",2000);
//$('#chargement').remove();
}


function submitParams(){
	$parametres = $('#params form');
	sessionStorage.setItem('radius', $('#radius', $parametres).val())


$('#params').slideUp('fast');
	/*$('.map_layer').hide();*/
	geoloc();
	localiser_proxi_carte();
	listeproxi();
	return false;
}


function setDisplay(text) {
                    $('.info').empty().append(text)
                }
	

/*
function do_liste() {

	$.get("recherche_proxi_carte.php",
   { lat: $('#latitude').val(), lng: $('#longitude').val(), radius: sessionStorage.getItem('radius'), liste: "1"},
   function(data){
//alert(data);
	afficher_resultats_appendTo(data,"#liste_lieux");
   }
 );
}
*/


function updateGeoloc(){navigator.geolocation.getCurrentPosition(function(position){setTimeout(function(){map.setCenter(new google.maps.LatLng(position.coords.latitude,position.coords.longitude));map.setZoom(10);},0);},function(error){});}


//Fonction qui génère la liste des lieux les plus proches
function listeproxi() {
	$.get("recherche_proxi_carte.php",
   { lat: $('#latitude').val(), lng: $('#longitude').val(), radius: sessionStorage.getItem('radius'), liste: "1"},
   function(data){
//alert(data);
	afficher_resultats_appendTo(data,"#resultats-proxi");
	$('.espace').remove();
	$('<div class="espace"></div>').appendTo('#resultats-proxi');
   }
 );

}


/*Fonction localiser_proxi */
function localiser_proxi_carte() {

//Bogue JQTOUCH on relance la geoloc pour rafraichir la carte 
navigator.geolocation.getCurrentPosition( function(position) {


    var myLatlng = new google.maps.LatLng($('#latitude').val(), $('#longitude').val());
    var myOptions = {
	
    center: myLatlng,
    zoom:10,	
    disableDefaultUI: false,
    navigationControlOptions: {style: google.maps.NavigationControlStyle.ANDROID},
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    scaleControl: false,
    draggable: true,

      mapTypeId: google.maps.MapTypeId.ROADMAP
    }


var cercle_bleu = 'icones/circle.png';
var boxOptions = {
  imageSrc: cercle_bleu,
  kmX: sessionStorage.getItem('radius')*2
}


  //Objet bulle informative
  infoWindow = new google.maps.InfoWindow();


    //geocoder = new google.maps.Geocoder();

    //Affichage du marqueur du visiteur (connexion à facebook pour récupérer avatar ?)
    map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
	
    var avatar = new google.maps.MarkerImage('icones/blue_dot_circle.png',
      // This marker is 20 pixels wide by 32 pixels tall.
      new google.maps.Size(38, 38),
      // The origin for this image is 0,0.
      new google.maps.Point(0,0),
      // The anchor for this image is the base of the flagpole at 0,32.
      new google.maps.Point(19, 19));

    var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      optimized: false,
      icon: avatar
    });

map.setCenter(myLatlng);


var overlay_cercle = new KmBox(map, myLatlng , boxOptions);

//alert("recherche_proxi.php?lat=" + position.coords.latitude + "&lng=" + position.coords.longitude + "&radius=20");

downloadUrl("recherche_proxi_carte.php?lat=" + $('#latitude').val() + "&lng=" + $('#longitude').val() + "&radius=" + sessionStorage.getItem('radius') + "&liste=0", function(data) {
            var xml = parseXml(data);
       var markerNodes = xml.documentElement.getElementsByTagName("marker");


	//Si la recherche ne retourne aucun résultat on retourne un message
	if (markerNodes.length){

	}


       var bounds = new google.maps.LatLngBounds();       
       bounds.union(overlay_cercle.getBounds());
       
	for (var i = 0; i < markerNodes.length; i++) {
	 var id = markerNodes[i].getAttribute("id");
         var name = markerNodes[i].getAttribute("name");
         var address = markerNodes[i].getAttribute("address");
	 var city = markerNodes[i].getAttribute("city");
         var distance = parseFloat(markerNodes[i].getAttribute("distance"));
         var latlng = new google.maps.LatLng(
              parseFloat(markerNodes[i].getAttribute("lat")),
              parseFloat(markerNodes[i].getAttribute("lng")));

	/*Création du tableau contenant toutes les données de la fiche*/

	var myLatlng_string = myLatlng+'';
	var myLatlng_length = myLatlng_string.length;
	var depart = myLatlng_string.substring(1,myLatlng_length-1);
	
	var latlng_string = latlng+'';
	var latlng_length = latlng_string.length;
	var arrivee = latlng_string.substring(1,latlng_length-1);	


	 datas_lieu={'id' : id,
		     'coords' : latlng,
		     'arrivee' : arrivee, 
		     'depart' : depart, 
		     'nom' : name,
		     'adresse' : address,
		     'city' :city};

		/* datas_lieu=[latlng, 
		     	myLatlng, 
			name,
			address];*/
	//affiche_lieu(datas_lieu);


         createOption(name, distance, i);
         createMarker(datas_lieu);

         bounds.extend(latlng);
	

       }

      /* removeLoadingPopup();*/
  /*    $('body > *, #jqt > *').css('background', 'white');*/
       map.fitBounds(bounds);

      });

  function createMarker(array_datas) {
      var avatar_monepn = new google.maps.MarkerImage('icones/map-marker-monepn.png',
      // This marker is 20 pixels wide by 32 pixels tall.
      new google.maps.Size(16, 26),
      // The origin for this image is 0,0.
      new google.maps.Point(0,0),
      // The anchor for this image is the base of the flagpole at 0,32.
      new google.maps.Point(0, 26));
      
      
      var shadow_monepn = new google.maps.MarkerImage('icones/shadow-map-marker-monepn.png',
      // The shadow image is larger in the horizontal dimension
      // while the position and offset are the same as for the main image.
      new google.maps.Size(30, 26),
      new google.maps.Point(0,0),
      new google.maps.Point(0, 26));
      
      var html = "<div id='infowindow_content'><b>" + array_datas['nom'] + "</b> <br/>" + array_datas['adresse'] + "<br/>" + array_datas['city'] + "<br/>" + '<a href="http://maps.google.fr/?saddr='+ array_datas['depart'] +'&daddr=' + array_datas['arrivee'] + '" target="_blank">Itinéraire</a></div>';
      var marker = new google.maps.Marker({
        map: map,
        icon: avatar_monepn,
        shadow: shadow_monepn,
        position: array_datas['coords']
      });
      var infowindow = new google.maps.InfoWindow({
		  content:html});
      google.maps.event.addListener(marker, 'click', function() {
        /*Affichage de la bulle habituelle*/
		/*google.maps.infoWindow.setContent(html);*/
        infowindow.open(map, marker);
        
        /*
        $('#map_layer').append(array_datas['nom']); 
	$('#map_layer').css('display', 'block');*/

	/*jQT.goTo('#fiche_lieu', 'fade');
	$('#nom_lieu').empty(); 
	$('#nom_lieu').append(array_datas['nom']); 
	
	$('#trajet_lieu').empty(); 
	$('#trajet_lieu').append('<a class="whiteButton" href="http://maps.google.fr/?saddr='+ array_datas['depart'] +'&daddr=' + array_datas['arrivee'] +')" target="_blank">Itinéraire</a>'); */

/*
	$.get("fiche.php",
   { latitude: $('#latitude').val(), longitude: $('#longitude').val(), NoAPI: array_datas['id']},
   function(data){
     jQT.goTo('#fiche_lieu', 'fade');
	afficher_resultats_appendTo(data,"#fiche_lieu");
   }
 );
*/	
	
      });
      markers.push(marker);
    }


function createOption(name, distance, num) {
      var option = document.createElement("option");
      option.value = num;
      option.innerHTML = name + "(" + distance.toFixed(1) + ")";
    }

  }


//Si aucune résultat alors on affiche une carte de France
, function () {
     var myLatlng = new google.maps.LatLng(46.75984,1.738281);
    var myOptions = {
      zoom: 5,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
    var marker = new google.maps.Marker({
      position: myLatlng,
      map: map
    });
  },

{ 
enableHighAccuracy:true
				}
   );

}

//Parseur xml
function parseXml(str) {
      if (window.ActiveXObject) {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
      } else if (window.DOMParser) {
        return (new DOMParser).parseFromString(str, 'text/xml');
      }
}

function doNothing() {}

function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request.responseText, request.status);
        }
      };

      request.open('GET', url, true);
      request.send(null);
    }


//Affichage des messages d'erreurs ou d'informations
function setDisplay(text) {
                    $('.info').empty().append(text)
                }


function geoloc(){

 setDisplay('Géolocalisation en cours&hellip;');
 position_courante = navigator.geolocation.watchPosition(function(position) {
	$('#latitude').val(position.coords.latitude);
	$('#longitude').val(position.coords.longitude);
 setDisplay('Coordonnées GPS : '+position.coords.latitude+','+position.coords.longitude);
                
},

function(){alert('Géolocalisation impossible ! Vérifier les paramètres de votre appareil')},

{ 
enableHighAccuracy:true
}

);
}


function ajouter_favori(NoAPI,NomAPI,Commune) {
    db.transaction(
        function(transaction) {
            transaction.executeSql(
                'INSERT INTO Api (NoAPI, NomAPI, Commune) VALUES (?, ?, ?);', 
                [NoAPI,NomAPI,Commune], 
                function(transaction, resultSet){
                    refresh_favoris();
		jQT.goTo('#epn-favoris', 'slide');
                }, errorfavori

            );
        }
    );
    return false;
}


function refresh_favoris() {
  $('#epn-favoris ul li:gt(0)').remove();
    db.transaction(
        function(transaction) {
            transaction.executeSql(
                'SELECT * FROM Api ORDER BY Commune;', 
		 [],
                function (transaction, result) {
		if (result.rows.length==0) {
			$('#nofavori').css('display', 'block');
			$('.ul_monepnfavoris').css('display', 'none');
		} else {
			$('#nofavori').css('display', 'none');
			$('.ul_monepnfavoris').css('display', 'block');
		}

                    for (var i=0; i < result.rows.length; i++) {
                        var row = result.rows.item(i);
			var NewFavori = $('#entree-favori').clone();
			NewFavori.removeAttr('id');
                        NewFavori.removeAttr('style');
			NewFavori.data('favoriId', row.NoAPI);
			NewFavori.appendTo('#epn-favoris ul');
			NewFavori.find('.NoAPI').text(row.NoAPI);
			NewFavori.find('.NomAPI').text(row.NomAPI).click(function() {
							var IdFavoriClick = $(this).parent();
			var IdFavoriClickId = IdFavoriClick.data('favoriId');			   
				$.get("fiche.php",
   				{ latitude: $('#latitude').val(), longitude: $('#longitude').val(), NoAPI: IdFavoriClickId},
   function(data){
     jQT.goTo('#fiche_lieu', 'slide');
	afficher_resultats_appendTo(data,"#fiche_lieu");
	$('.espace').remove();
	$('<div class="espace"></div>').appendTo('#fiche_lieu');
   }
 );
			});
			NewFavori.find('.Commune').text(row.Commune);



		
                        NewFavori.find('.Effacer').click(function(){
                            var IdFavoriClick = $(this).parent();
                            var IdFavoriClickId = IdFavoriClick.data('favoriId');
                            EffacerFavori(IdFavoriClickId);
                            IdFavoriClick.slideUp();
                        });
			
                    }
		
                }, 
                errorSQLmessage
            );
        }
    );
}


function EffacerFavori(id) {
    db.transaction(
        function(transaction) {
            transaction.executeSql('DELETE FROM Api WHERE NoAPI=?;', 
              [id], null, errorSQLmessage);
        }
    );
}


function errorSQLmessage(transaction, error) {
    alert('Erreur : '+error.message+' (Code '+error.code+')');
    return true;
}
function errorfavori(transaction, error) {
    alert('Ce lieu est déjà dans vos favoris !');
    return true;
}

function what_is_smartphone() {
var smartphone;
if((navigator.userAgent.match(/iPhone/i))){
smartphone='iphone';
}
if((navigator.userAgent.match(/Android/i))){
smartphone='android';
}
return smartphone;
}

