/*
 * search
 */




$(document).ready(function(){
	/*
	 * Init
	 */
	 
	$("#calendar").css('visibility', 'hidden');
	$("#map").css('visibility', 'hidden');
	
	$("#search-button, #magnify").click(function(){
		search.offset = 0;
		processSearch();
		return false;
	});
	
	window.document.onkeydown= handleKeyPress;
	
	function handleKeyPress(evt) {
		if($('#keyword').is(":focus"))
		{
			var nbr;
	  		var nbr = (window.event)?event.keyCode:evt.which;
			if(nbr == 13) {
		      	search.offset = 0;
				processSearch();
				return false;
		    }	
		}
	}

	
	

	$("#previous").click(function(){
		if(search.type == 'day')
		{
			search.offset = 0;
			$('input[value=day]').attr('checked', 'checked');
		}
		else if(search.type == 'today')
		{
			search.offset = 0;
			$('input[value=day]').attr('checked', 'checked');
			$('input#search-date').val(search.start);
			search.type = 'day';
		}	
		else
		{
			$("form#search-week input").removeAttr('checked');
		}
		search.offset = search.offset-1;
		processSearch();
		return false;
	});
	
	$("#next").click(function(){
		if(search.type == 'day')
		{
			search.offset = 0;
			$('input[value=day]').attr('checked', 'checked');
		}
		else if(search.type == 'today')
		{
			search.offset = 0;
			$('input[value=day]').attr('checked', 'checked');
			$('input#search-date').val(search.start);
			search.type = 'day';
		}	
		else
		{
			$("form#search-week input").removeAttr('checked');
		}
		search.offset = search.offset+1;
		processSearch();
		return false;
	});
	
	$("#search-date").click(function(){
		$('input[value=day]').attr('checked', 'checked');
	});
	
	$('#search-options form input[id!=keyword], #show-dept').click(function(){
		$('#keyword').val('');
	});
	
	$('#keyword').focus(function(){
		$("form#search-week input").removeAttr('checked');
	});
	
	// ics
	
	$('#add-to-calendar').click(function(){
		$('#form-add-calendar').submit();
		return false;
	});


});

function showCalendar()
{
	$("#calendar").css('visibility', 'visible');
	$("#map").css('visibility', 'hidden');
	$("#map-tab").removeClass('selected');
	$("#calendar-tab").addClass('selected');
	location.hash = '!calendrier';
}

function showMap()
{
	$("#calendar").css('visibility', 'hidden');
	$("#map").css('visibility', 'visible');
	$("#calendar-tab").removeClass('selected');
	$("#map-tab").addClass('selected');
	location.hash = '!carte';
}

function processSearch()
{
	var error = false;
	
	node = new Array();
	delete search.start;
	delete search.type;
	delete search.end;
	delete search.nodes;
	delete search.dept;
	delete search.keyword;
	search.keyword = $("#keyword").val();

	if(search.keyword == "" && typeof search.node_id == "undefined")
	{
		search.nodes = new Array();
		themes = $("form#search-theme").serializeArray();
		for(i=0; themes.length > i; i++)
		{
			search.nodes.push(themes[i]['value']);
		}
		
		if(search.nodes.length == 0)
		{
			error = true;
			alert('Vous devez choisir au moins un thème ou un-mot clé.')
		}
			
			
		dept = $("form#search-departement").serializeArray();
		search.dept = dept[0]['value'];
		var week = $("form#search-week").serializeArray();
		if(week[0]['value'] == 'day')
		{
			var start = week[1]['value'];
			if(start == "")
			{
				return false;
			}
			var startTab = start.split('/');
			search.start = search.end = startTab[2]+'/'+startTab[1]+'/'+startTab[0];
			search.type = 'day';
		}
		else if( week[0]['value'] == 'today' )
		{
			search.type = 'today';
			search.offset = 0;
		}
		else if( week[0]['value'] == 'week' )
		{
			search.offset = 0;
			search.type = 'week';
		}
		else
		{
		}
		
		
	}
	else
	{
		$("form#search-week input").removeAttr('checked');
	}
	
	if(!error)
		ajaxSearch();
}
function ajaxSearch()
{
	data = search;
	//print_r(data);
	$.ajax({
      url: "/ajaxsearch/search",
      dataType: 'json',
      type: "POST",
      data: data,
      success: function(data){
      	deleteOverlays();
      	$('#calendar').html('');
      	
      	// show events
      	if(data.events == "")
      	{
      		map.setCenter(new google.maps.LatLng(44.838499,-0.569122));
      		map.setZoom(8);
			$('#no-result').show();
      	}
      	else
      	{
      		$('#no-result').hide();
      		showEvents(data.events);
      	}
      	
      	// manage template
      	if(typeof(data.returnDate) != 'undefined')
      	{
      		if(search.type == 'day')
      		{
      			$('input[value=day]').attr('checked', 'checked');
      			$('input#search-date').val(data.returnDate);
      			
      		}
      		search.start = data.returnDate;
      		
      	}
      	
      	
      	var deptName = $('#show-dept option[value='+search.dept+']').html();
      	
      	if(search.dept == '')
      		deptName = '';
      	else
      		deptName = '('+deptName+')';
      	switch(search.type)
      	{
      		case 'day':
      			var dr = data.textMap.toLowerCase().split('le ');
      			titleMap = 'Le programme du '+dr[1]+' '+deptName;
      			break;
      			
      		case 'today':
      			titleMap = 'Le programme aujourd’hui '+deptName;
      			break;
      			
      		default:
      			if(search.offset == 0)
      				titleMap = 'Le programme cette semaine '+deptName;
      			else
      				titleMap = 'Le programme '+data.textMap.toLowerCase()+' '+deptName;
      			break;
      		
      	}
      	
      	if(search.keyword != "")
      	{
      		var rech = search.keyword;
      		if(rech.length >= 35)
			{
				rech = rech.substr(0, 35);
				rech += '...';
			} 
      		rech = rech.replace(/(<([^>]+)>)/ig,"");
      		data.textMap = titleMap = 'Résultat(s) pour la recherche : '+rech;
      		
      		$('#previous, #next').hide();
      	}
      	else
      	{
      		$('#previous, #next').show();
      	}
       	
      	$('#date-scope span').html(data.textMap);
      	
      	$('#title-map').html(titleMap);
      	
      }
   });

}

/*
 * Show events
 */
function showEvents(events)
{
	
	var nbEvent = 0;
	for(i=0; events.length>i; i++)
	{
		// google maps

		var paramsMarker = getMarker(events[i].cat);
		var icon =  paramsMarker.icon;
			
		var title = events[i].name;
		var content = events[i].description;
		var scope = events[i].daterange;
		var position = new Object();
	    var url = events[i].url;
	    
		var latlngMarker = new google.maps.LatLng(events[i].lat,events[i].lon);
		
		if(title.length >= 25)
		{
			title = title.substr(0, 25);
			title += '...';
		} 
		if(content != null && content.length >= 40)
		{
			content = content.substr(0, 40);
			content += '...';
		} 
		     
		var bg = paramsMarker.bg;			

		setMarker(map, latlngMarker, icon , title, scope, content,url, bg, paramsMarker.eventmode);
		
		
		// calendar
		var calendarEvent = $(document.createElement('a'));
	    var title = $(document.createElement('h2'));
	    var city = $(document.createElement('h3'));
	    var contentScope = $(document.createElement('div'));
	    var scope = $(document.createElement('p'));
	    calendarEvent.attr('href', events[i].url);
	    calendarEvent.addClass('calendar-events');
	    calendarEvent.addClass(events[i].cat);
	    contentScope.addClass('calendar-events-date');
	    if(events[i].duration < 2)
	    {
	    	contentScope.addClass('picto');
	    }
	    var titleCal = events[i].name;
	    if(titleCal.length >= 45)
		{
			titleCal = titleCal.substr(0, 45);
			titleCal += '...';
		}
	    title.html(titleCal);
	    city.html(events[i].city);
	    scope.html(events[i].daterange);
	    $('#calendar').append(calendarEvent);
		calendarEvent.append(title);
		calendarEvent.append(city);
		contentScope.append(scope);
		calendarEvent.append(contentScope);
		
		nbEvent++;
		
		// ics
		node.push(events[i].node_id);
		$('#form-add-calendar').append('<input type="hidden" name="nodes[]" value="'+events[i].node_id+'" />');
	}
	if(nbEvent >= 10)
	{
		$('.calendar-events').width(210);
		$('.calendar-events-date').width(230);
		$('#calendar').css('overflow', 'auto');
	}
	else
	{
		$('.calendar-events').width(215);
		$('.calendar-events-date').width(235);
		$('#calendar').css('overflow', 'hidden');
	}
	if(nbEvent == 1)
	{
		map.setZoom(14);
		map.setCenter(latlngMarker);
	}
	else
	{
		AutoCenter();
	}

	
}


/*
 * setMarker
 */
function checkPos(latlng)
{
	//alert(positionMarker[latlng]);
	if(typeof positionMarker[latlng.Ia]  != "undefined")
	{
		latlng.Ja = latlng.Ja+0.000012;
		latlng.Ia = latlng.Ia+0.000012;
		
	}
	return latlng;
}
function setMarker(map, latlng, icon, title, scope, content, url, bg ,eventmode){
	
	var marker = new google.maps.Marker({
	    position: latlng, 
	    map: map,
	    icon: icon
	});
	
	if(!eventmode)
	{	
		var boxText = document.createElement("div");
			boxText.innerHTML = "<h2>"+
			title+"</h2><h3>"+
			scope+"</h3><p>"+
			content+"</p>";
	}
	else
	{
		var boxText = '';
	}
			
	var myOptions = {
             content: boxText
            ,disableAutoPan: false
            ,maxWidth: 0
            ,pixelOffset: new google.maps.Size(6, -6)
            ,zIndex: null
            ,boxStyle: { 
              background: "transparent url('"+bg+"')"
              ,width: "247px"
              ,height: "58px"
             }
            ,closeBoxURL: ""
            ,infoBoxClearance: new google.maps.Size(1, 1)
            ,isHidden: false
            ,pane: "floatPane"
            ,enableEventPropagation: false
    };
    
	var ib = new InfoBox(myOptions);
    
	google.maps.event.addListener(marker, 'mouseover', function() {
	  ib.open(map, marker);
	});
	google.maps.event.addListener(marker, 'mouseout', function() {
	  ib.close(map, marker);
	});
		
	if(!eventmode)
	{
	   
		google.maps.event.addListener(marker, 'click', function() {

			window.location = url;
		  
		});
	
		markersArray.push(marker);
	}
	else
	{

		google.maps.event.addListener(marker, 'click', function() {

			var geoLoc = getLoc(latlng);
		  
		});
	}
}

function AutoCenter() {
	var bounds = new google.maps.LatLngBounds();
	$.each(markersArray, function (index, marker) {
	bounds.extend(marker.position);
	});
	map.fitBounds(bounds);
}

function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

function getLoc(latlng)
{
	if (navigator.geolocation)
	{
		navigator.geolocation.getCurrentPosition( function (position) {
		
			var googleDirectionsURL = "http://maps.google.com/?saddr=" + position.coords.latitude + "," + position.coords.longitude + "&daddr=" + latlng.Ia + "," + latlng.Ja;
			
			window.open(googleDirectionsURL,'_blank');
		
		},
		function (error)
		{
			window.open("http://maps.google.com/?daddr=" + latlng.Ia + "," + latlng.Ja);
			
		});
	}
	else
	{
		window.open("http://maps.google.com/?daddr=" + latlng.Ia + "," + latlng.Ja);
	}
}

