jQuery.fn.defuscate = function( settings ) {
	settings = jQuery.extend({
		link: true,
		find: /\b([A-Z0-9._%-]+)\([^)]+\)((?:[A-Z0-9-]+\.)+[A-Z]{2,6})\b/gi,
		replace: '$1@$2'
	}, settings);
	return this.each(function() {
		if ( $(this).is('a[@href]') ) {
			$(this).attr('href', $(this).attr('href').replace(settings.find, settings.replace));
			var is_link = true;
		}
		$(this).html($(this).html().replace(settings.find, (settings.link && !is_link ? '<a href="mailto:' + settings.replace + '">' + settings.replace + '</a>' : settings.replace)));
	});
};

$(document).ready(function(){
	
	langue = $('html').attr('lang');
	
	var moreInfo;
	if (langue == 'en') {
		moreInfo = 'More info';
	} else if (langue == 'nl') {
		moreInfo = 'Meer';
	} else {
		moreInfo = 'Plus d’infos';
	}
	
	// Galerie de type "slide"
	var timeOut;
	var complete = true;
	function slide(elements, options){
		elements = elements.parent().children();
		
		if(complete){
			complete = false;
			
			if(options.dir == 'right'){
				elements.animate({'left':'-='+options.width}, options.speed, function(){
					elements.first().css({'left':(elements.length - 1) * options.width});
					elements.parent().append(elements.first());
					complete = true;
				});
			} else {
				elements.last().css({'left':-options.width});
				elements.parent().prepend(elements.last());
				elements.animate({'left':'+='+options.width}, options.speed, function(){
					complete = true;
				});
			}
			
			if(options.play){
				timeOut = setTimeout((function(){
					slide(elements, options);
				}), options.timeout);
			}
		}
	};
	
	// Bandeau
	var bandeauOptions = {
		width: 540,
		speed: 1000,
		timeout: 5000,
		dir: 'right',
		play: false,
		nb: 1
	};
	
	$('.galerie.classique').each(function(i){
		var bandeau = $(this).css({'width':'540px', 'height':'360px', 'position':'relative', 'overflow':'hidden'}).wrap('<div id="galerie-'+i+'" style="position:relative;"></div>').children();
		var j = 0;
		
		if(bandeau.length > bandeauOptions.nb){
			$(this).before('<a class="prev">Previous</a><a class="next">Next</a>');
			
			bandeau.each(function(){
				$(this).css({'position':'absolute', 'left':j * bandeauOptions.width});
				j++;
			});
			
			if(bandeauOptions.play){
				timeOut = setTimeout((function(){
					slide(bandeau, bandeauOptions);
				}), bandeauOptions.timeout);
			}
		}
	});
	
	$('.prev').css({'cursor':'pointer', 'position':'absolute', 'left':'-35px', 'top':'168px'}).click(function(){
		clearTimeout(timeOut);
		bandeauOptions.play = false;
		bandeauOptions.speed = 500;
		bandeauOptions.dir = 'left';
		slide($(this).parent().children('ul').children(), bandeauOptions);
	});
	
	$('.next').css({'cursor':'pointer', 'position':'absolute', 'right':'-35px', 'top':'168px'}).click(function(){
		clearTimeout(timeOut);
		bandeauOptions.play = false;
		bandeauOptions.speed = 500;
		bandeauOptions.dir = 'right';
		slide($(this).parent().children('ul').children(), bandeauOptions);
	});
	
	// Galerie de type "diaporama"
	$(".diaporama").wrap("<div class='galerie-wrap'></div>").innerfade({
		speed: 3000,
		timeout: 4000,
		type: 'random',
		containerheight: '150px'
	});
	
	// Galerie de type "numerotée"
	$(".numerotee").wrap("<div class='galerie-wrap'></div>").css({height:'150px', margin:0}).after('<p class="numerotation"></p>').children().css({position:'absolute'}).hide().each(
		function(i){
			id = i + 1;
			titre = $(this).children('a').children('img').attr('alt');
			$(this).attr('id', 'photo-'+id);
			$(".numerotation").append('<a id="#lien-'+id+'" href="#photo-'+id+'" title="Show '+titre+'">'+id+'</a>');
		}
	).first().show();
	
	$(".numerotation").children().click(
		function(){
			id = $(this).attr('id').substring(6);
			if($(this).attr('class')!='actif'){
				$(".numerotation").children().removeClass('actif');
				$(this).removeAttr('href').addClass('actif');
				$(".numerotee").children().fadeOut('normal');
				$('#photo-'+id).fadeIn('normal');
			}
		}
	).first().addClass('actif');

	$('a.fancybox').fancybox({
		//'titlePosition':'over'
	 });

	// ajout d'une marge à gauche pour les imgae flottantes à droite
	$('img').each(function(index) {
		if ($(this).css('float') == 'right') {
			$(this).css({'margin':'0 0 18px 18px'});
		};
	});

	$('#reservationForm').validationEngine();
	$('#contactForm').validationEngine();
	$('#commentaireForm').validationEngine();
	
	$('.adresse').defuscate();

	$('.calendar').datepicker({
		dateFormat: 'dd/mm/yy',
		minDate: new Date(),
		showAnim: 'fadeIn',
		speed: 'fast',
		showOn: 'button',
		buttonText: 'Choose',
		buttonImage: '/images/calendar.png',
		buttonImageOnly: true
	});	

	// Gmaps 
	if ($('#map').length) {
		var markers = [];
		var noms = [];
		var iterator = 0;
		var mapOptions = { 
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			center: new google.maps.LatLng(50.85,4.36),
			mapTypeControl: false,
			streetViewControl: false,
			zoom: 16
		};
		var map = new google.maps.Map(document.getElementById("map"), mapOptions);
		// var markerCluster = new MarkerClusterer(map);

		google.maps.event.addListener(map, 'click', function() {
			infoWindow.close();
		});

		function drop() {
			if (markers.length <= 3) {
				for (var i = 0; i < markers.length; i++) {
					setTimeout(function() {
						addMarker(google.maps.Animation.DROP);
					}, i * 200);
				}
			} else {
				for (var i = 0; i < markers.length; i++) {
					addMarker(false);
				}
			}
		}

		function addMarker(animation) {
			
			// decaler un marker s'il y a déjà un point à la même position
			var dedans = 0;
			for (var i = markers.length - 1; i >= 0; i--){
				// console.log(markers[iterator].lat());
				if (markers[iterator].lat() == markers[i].lat() && markers[iterator].lng() == markers[i].lng()) {
					dedans++;
				}
			};
			var latLng;
			if (dedans >= 2) {
				// console.log(markers[iterator]);
				// Il y a au moins deux points ayant la même position, alors on décale un des deux
				latLng = new google.maps.LatLng(markers[iterator].lat(), markers[iterator].lng() + Math.random() / 4000 + 0.00001);
			} else {
				latLng = markers[iterator];
			}
			//
			
			var marker = new google.maps.Marker({
				position: latLng,
				map: map,
				draggable: false,
				animation: animation
			});
			marker.html = markers[iterator]['html'];
			google.maps.event.addListener(marker, 'click', onMarkerClick);
			// google.maps.event.addListener(marker, 'mouseover', highligthAddress);
			iterator++;
		}

		function highligthAddress() {
			// console.log('mouse is over a marker');
		}

		function AutoCenter() {
			var bounds = new google.maps.LatLngBounds();
			$.each(markers, function (index, marker) {
				bounds.extend(markers[index]);
			});
			map.fitBounds(bounds);
			var listener = google.maps.event.addListener(map, "idle", function() { 
				if (map.getZoom() > 16) map.setZoom(16); 
				google.maps.event.removeListener(listener); 
			});
		}
		
		var infoWindow = new google.maps.InfoWindow();
		var onMarkerClick = function() {
			var marker = this;
			console.log(marker);
			// var latLng = marker.getPosition();
			infoWindow.setContent(this.html);
			infoWindow.open(map, marker);
		};
		
		var infoWindow = new google.maps.InfoWindow;

		$.getJSON('?json', function(data) {
			for (var i = 0; i < data.length; i++) {
				var url = window.location + '/' + data[i]._data.id + '-' + data[i]._data.permalink_fr;
				url = url.replace(/\/\//gi,'/');
				if (!data[i]._data.societe) {
					data[i]._data.societe = data[i]._data.prenom + ' ' + data[i]._data.nom;
				};
				markers[i] = new google.maps.LatLng(data[i]._data.latitude, data[i]._data.longitude);
				markers[i]['html'] = '';
				markers[i]['html'] += '<p style="margin-bottom:0; line-height:16px">';
				markers[i]['html'] += '<strong>' + data[i]._data.societe + '</strong>';
				markers[i]['html'] += '<br />';
				markers[i]['html'] += data[i]._data.rue + ' ' + data[i]._data.numero;
				markers[i]['html'] += '<br />';
				markers[i]['html'] += data[i]._data.codepostal + ' ' + data[i]._data.localite;
				markers[i]['html'] += '<br />';
				markers[i]['html'] += '<a href="' + url + '">' + moreInfo + '</a>';
				markers[i]['html'] += '</p>';
			};
			drop();
			AutoCenter();
		});
		
	};
		

	$.ga.load('UA-xxxxxx-x'); // Google Analytics
	
});

