/**
 * Gestion des événements sur le calendrier
 *
 * Date de création  : 20 août 2009, 26 octobre 2009
 * Programmé par     : Antoine Lavoie, Bobby Lavoie
 * Version d'origine : 1.0
 * DÉPENDENCES : 
 *      Librairies :
 *          -time.js
 **/

var categories = '';
var flag=false;

function show_calendar(div,id){
	//Obtenir le calendrier
	var div='#'+div;
	jQuery.ajax({
		type: "POST",
		url: "jx.php?sid="+ Math.random(),
		data: "func=get_calendar&id="+id,
		success: function(result){
			jQuery(div).html(result);
			render_calendar(id,dimanchePrecedent(getdate()),samediSuivant(getdate()));
		}
	});
	
}
function render_calendar(id, date_debut, date_fin){
	loading(true);
	categories = '';
	
	jQuery('table.calendar tr td:not(table.calendar tr td.header)').hover(
		function(){
			jQuery(this).css('background','#FACA62');
		},
		function(){
			jQuery(this).css('background','');
		}
	);
	jQuery("#calendrier_nav_cat_hover").html('');
	jQuery('table.calendar tr td:not(table.calendar tr td.header) div.event_box').html(''); //Reset des cellules
	//Bouton précédent
	jQuery('#calendrier_nav_prec').bind("click",function(){
		var tmp_debut = datetostr(incdate(strtodate(date_debut),0,0,-7));
		var tmp_fin = datetostr(incdate(strtodate(date_fin),0,0,-7));
		jQuery(this).unbind("click");
		jQuery('#calendrier_nav_suiv').unbind("click");
		jQuery('table.calendar tr td').unbind("mouseenter");
		render_calendar(id,tmp_debut,tmp_fin);
	});
	//Bouton suivant
	jQuery('#calendrier_nav_suiv').bind("click",function(){
		var tmp_debut = datetostr(incdate(strtodate(date_debut),0,0,7));
		var tmp_fin = datetostr(incdate(strtodate(date_fin),0,0,7));
		jQuery(this).unbind("click");
		jQuery('#calendrier_nav_prec').unbind("click");
		jQuery('table.calendar tr td').unbind("mouseenter");
		render_calendar(id,tmp_debut,tmp_fin);
  });
	//Obtention des périodes d'ouverture
	get_calendar_ouvrable(id, date_debut, date_fin);
	
	//Afficher la période dans la navigation
	jQuery('span#calendrier_nav_lbldebut').html(datetostr(strtodate(date_debut),"J [MOIS] [AAAA]", strtodate(date_fin)));
	jQuery('span#calendrier_nav_lblfin').html(datetostr(strtodate(date_fin),"J MOIS AAAA"));
	//Attribuer les bonnes dates aux bonnes cases
	jQuery('table.calendar tr td:not(table.calendar tr td.header)').each(function(){
		jQuery(this).attr("date",datetostr(incdate(strtodate(date_debut),0,0,jQuery(this).attr("wday")-1)));
	});
	
	get_calendar_events(id, date_debut, date_fin);
}

function get_calendar_events(id,date_debut,date_fin){
	//Obtenir la liste des événements
	loading(true);
	jQuery.ajax({
		type: "POST",
		url: "jx.php?sid="+ Math.random(),
		data: "func=get_calendar_events&id="+id+"&date_debut="+date_debut+"&date_fin="+date_fin,
		success: function(result){
			display_events(result,id);
		}
	});
}

function display_events(events,id){
	loading(true);
	events = jQuery.json.decode(events);
	//Ajouter les événements de la période dans le calendrier
	for(var i=0;i<events.length;i++){
		var k=0;

		var is_wday_recusive = events[i]['wday_recursive'];
		var eventwday = events[i]['wday'];
		var eventdebut = dt2timestamp(events[i]['datedebut']);
		var eventfin = dt2timestamp(events[i]['datefin']);
		var eventdiff = eventfin-eventdebut;

		if(is_wday_recusive==1){		//si redondant à chaque semaine selon wday;
			eventdebut = dt2timestamp('2000-01-0'+eventwday+' '+events[i]['datedebut'].substr(11,8));
			eventfin = eventdebut + eventdiff;
		}
		
		jQuery('table.calendar tr td:not(table.calendar tr td.header,table.calendar tr td.off_h)').each(function(){
			tdwday = (jQuery(this).attr('wday')*1);
			time = (jQuery(this).attr('time')*1);
			tdtimestamp = dt2timestamp(jQuery(this).attr('date')+' '+time+':00:00');
			if(is_wday_recusive==1)		//si redondant à chaque semaine selon wday;
				tdtimestamp = dt2timestamp('2000-01-0'+tdwday+' '+time+':00:00');
			tdtimestampdebut = tdtimestamp+3599;
			tdtimestampfin = tdtimestamp;

			if( tdtimestampdebut >= eventdebut && tdtimestampfin < eventfin){
				jQuery('div.event_box',this).append("<div id=\""+events[i]['id']+"\" class=\"event\" categorie=\""+events[i]['categorie_id']+"\" title=\"Cliquez pour voir les détails de l\'événement.\" >"+events[i]['objet']+"</div>");
				k++;
			}
		});
	}
	jQuery('div.event_box .event').fadeTo('fast',0.7);
	display_categories(id);
	loading(false);
}

function display_categories(id){
	//Obtention de la liste des catégories
	if(!jQuery.isArray(categories)){
		jQuery.ajax({
			type: "POST",
			url: "jx.php?sid=" + Math.random(),
			data: "func=get_calendar_categories&id=" + id,
			success: function(value){
				categories = jQuery.json.decode(value);
				for (var i = 0; i < categories.length; i++) {
					jQuery("#calendrier_nav_cat_hover").append('<div class="calendrier_nav_cat_color" style="border: 1px solid #000; background: '+categories[i]['couleur']+';">&nbsp;&nbsp;</div><input type="checkbox" value="' + categories[i]['id'] + '" checked="true">' + categories[i]['nom'] + '</input><br />')
				}
							
				jQuery("#calendrier_nav_cat").hover(function(){
						jQuery("#calendrier_nav_cat_hover").fadeIn('slow'); 
					},
					function(){
						jQuery("#calendrier_nav_cat_hover").hide(); 
					}
				)
				
			//Gérer la catégorie de l'événement
				for(var i=0;i<categories.length;i++){
					jQuery('div.event[categorie='+categories[i]['id']+']').css("background", categories[i]['couleur']);
				}
				//Faire afficher le div d'overlay si ce dernier et survolé
				jQuery('table.calendar tr td').unbind('click').bind('click',function(){
					time_slot_hover(jQuery(this));
				})
			//Click sur les catégories
				jQuery('div#calendrier_nav_cat_hover > input:checkbox').click(function(){
					if(jQuery(this).attr('checked') == true){
						jQuery('div.event[categorie='+jQuery(this).val()+']').show();
					}
					else{
						jQuery('div.event[categorie='+jQuery(this).val()+']').hide();
						//Masquer le div d'overlay si ne contient pas événements
						jQuery('div.event:hidden').parent(':not(:has(div.event:visible))').unbind("mouseenter");
					}
				});
			}
		});
	}
}

function get_calendar_ouvrable(id,date_debut,date_fin){
	//Obtenir si le jour est ouvrable ou pas
	jQuery.ajax({
		type: "POST",
		url: "jx.php?sid="+ Math.random(),
		data: "func=get_calendar_ouvrable&id="+id+"&date_debut="+date_debut+"&date_fin="+date_fin,
		success: function(result){
			display_ouvrable(result);
		}
	});
}

function display_ouvrable(periode){
	periode = jQuery.json.decode(periode);
	jQuery('table.calendar tr td:not(table.calendar tr td.header)').addClass("off");
	for(var i=0;i<periode.length;i++){
		jQuery('table.calendar tr td[date="'+periode[i]+'"]').removeClass('off');
	}
}

function time_slot_hover(cell){
  //Afficher le div
	jQuery('div.time_slot_hover').remove();
	jQuery('div.calendrier').append('<div class="time_slot_hover" style="top: '+jQuery(cell).position().top+'px; left: '+jQuery(cell).position().left+'px;"><div class="time_slot_title" title="Fermer cette fenêtre" >'+datetostr(strtodate(jQuery(cell).attr("date")),"JOURSEM le J MOIS AAAA")+' à '+jQuery(cell).attr("time")+':00</div><br />'+jQuery(cell).html()+'</div>');
	
	jQuery('.time_slot_hover div.event_box .event').hover(
		function(){
			jQuery(this).fadeTo('fast',1);
		},
		function(){
			jQuery(this).fadeTo('fast',0.7);
		}
	);
		
	jQuery('div.calendrier .time_slot_hover .time_slot_title').bind('click',function(){
		jQuery('div.calendrier .time_slot_hover').remove();
	});
	
	jQuery('div.calendrier .time_slot_hover div.event').bind('click',		
		function(){
			jQuery('div.calendrier .time_slot_hover div.event .event_detail').remove();
			var thisevent = jQuery(this);
			jQuery.ajax({
				type: "POST",
				url: "jx.php?sid="+ Math.random(),
				data: "func=get_calendar_event_detail&id="+jQuery(this).attr('id'),
				success: function(result){
					thisevent.append('<div class="event_detail">'+result+'</div>');
					jQuery('.event_detail',thisevent).show('fast');
				}
			});
		});
		jQuery('div.calendrier .time_slot_hover').fadeIn('slow');
}
