$(document).ready(function(e) {
	$('.btnSelect').each(function(i) {
		verifCookie(this, 'panier', '#', '-1', '/', 'read');
	});
	$('.btnSelect').bind('click', function(e) {
		e.stopPropagation();
		verifCookie(this, 'panier', '#', '-1', '/', 'write');
	});
});

/**
 * verifCookie()
 * Permet d'alimenter le cookie et la base
 * 
 * @param bouton :
 * 			objet javascript (ex : balise <a>...</a>)
 * @param nomCookie :
 *            nom du cookie
 * @param separateur :
 *            séparateur de valeur
 * @param dureeExpire :
 *            en millieme de seconde ex: 24h => 24*60*60*1000, -1 => session
 * @param path :
 *            racine arbo ou * le cookie est accessible
 * @param mode :
 *            'write' ou 'read'
 */
function verifCookie(bouton, nomCookie, separateur, dureeExpire, path, mode) {

	// réccupération de l'identifiant de l'annonce
	var idBouton = bouton.id;
	var tab = idBouton.split('_');
	var idAnnonce = tab[1];

	var valCookie = '';
	valCookie = isInCookie(nomCookie, idAnnonce, separateur);
	// ecriture du cookie
	if (mode == 'write') {
		if (valCookie == true) {
			delValueInCookie(nomCookie, idAnnonce, separateur, dureeExpire, path);
			$.get("/ajax/ajaxSelection.php", {
				action : "delete",
				idAnnonce : idAnnonce
			}, function(data) {
				if(data == "-1"){
					alert ("Vous devez \352tre connecté pour supprimer l'annonce de votre sélection");
					addValueInCookie(nomCookie, idAnnonce, separateur, dureeExpire, path);
					if ($(bouton).find('span').length > 0) {
						$(bouton).children('span').html("Supprimer de ma sélection");
					} else {
						$(bouton).html("Supprimer de ma sélection");
					}
					$(bouton).attr('title', "Supprimer de ma sélection");
				}
				else
				{
					alert("Cette annonce a bien été supprimée de votre sélection");
					if ($(bouton).find('span').length > 0) {
						$(bouton).children('span').html("Ajouter à ma sélection");
					} else {
						$(bouton).html("Ajouter à ma sélection");
					}
					$(bouton).attr('title', "Ajouter à ma sélection");
				}
			});
			valCookie = false;
		} else {
			addValueInCookie(nomCookie, idAnnonce, separateur, dureeExpire, path);
			$.get("/ajax/ajaxSelection.php", {
				action : "save",
				idAnnonce : idAnnonce
			}, function(data) {
				if(data == "-1"){
					alert ("Vous devez \352tre connecté pour ajouter l'annonce à votre sélection");
					delValueInCookie(nomCookie, idAnnonce, separateur, dureeExpire, path);
					if ($(bouton).find('span').length > 0) {
						$(bouton).children('span').html("Ajouter à ma sélection");
					} else {
						$(bouton).html("Ajouter à ma sélection");
					}
					$(bouton).attr('title', "Ajouter à ma sélection");
				}
				else
				{
					alert("Cette annonce a bien été ajoutée à votre sélection,\n vous pourrez la retrouver dans votre compte candidat");
					if ($(bouton).find('span').length > 0) {
						$(bouton).children('span').html("Supprimer de ma sélection");
					} else {
						$(bouton).html("Supprimer de ma sélection");
					}
					$(bouton).attr('title', "Supprimer de ma sélection");
				}
			});
			valCookie = true;
		}	
	}

	// modification du libellé du bouton et de son titre
	if (valCookie == true) {
		if ($(bouton).find('span').length > 0) {
			$(bouton).children('span').html("Supprimer de ma sélection");
		} else {
			$(bouton).html("Supprimer de ma sélection");
		}
		$(bouton).attr('title', "Supprimer de ma sélection");
	} else {
		if ($(bouton).find('span').length > 0) {
			$(bouton).children('span').html("Ajouter à ma sélection");
		} else {
			$(bouton).html("Ajouter à ma sélection");
		}
		$(bouton).attr('title', "Ajouter à ma sélection");
	}

	return false;
}

/**
 * setCookie() : Création du cookie
 * 
 * @param nom :
 *            nom du cookie
 * @param valeur :
 *            valeur du cookie (écrase la valeur precedente)
 * @param dureeExpire :
 *            en millieme de seconde ex: 24h => 24*60*60*1000, -1 => session
 * @param path :
 *            racine arbo ou * le cookie est accessible
 */

function setCookie(nom, valeur, dureeExpire, path) {

	var expire = ''; // ;expires=';

	// positionnement du délai d'expiration du cookie (apres inactivité du
	// client)
	// (-1 => fin de session)
	if (dureeExpire != -1) {
		var demain = new Date();
		demain.setTime(demain.getTime() + dureeExpire);
		var expiration = demain.toGMTString();
		expire = ';expires=' + expiration;
	}

	document.cookie = nom + '=' + valeur + expire + ';path=' + path;
}

/**
 * getCookie() : Réccupération du cookie
 * 
 * @return string
 * 
 * @param nom :
 *            nom du cookie
 */
function getCookie(nom) {
	var cookieTrouve = false;
	var debut = 0;
	var fin = 0;
	var chaineDeCookie = document.cookie;
	var i = 0;

	// Cherche le cookie
	while (i <= chaineDeCookie.length) {
		debut = i;
		fin = debut + nom.length;
		if (chaineDeCookie.substring(debut, fin) == nom) {
			cookieTrouve = true;
			break;
		}
		i++;
	}
	if (cookieTrouve) {
		debut = fin + 1;
		fin = document.cookie.indexOf(";", debut)
		if (fin < debut) {
			fin = document.cookie.length;
		}
		return document.cookie.substring(debut, fin);
	}
	return "";
}

/**
 * addValueInCookie() : Ajoute une valeur dans le cookie
 * 
 * @param nomCookie :
 *            nom du cookie
 * @param valeur :
 *            valeur du cookie (écrase la valeur precedente)
 * @param separateur :
 *            séparateur de valeur
 * @param dureeExpire :
 *            en millieme de seconde ex: 24h => 24*60*60*1000, -1 => session
 * @param path :
 *            racine arbo ou * le cookie est accessible
 */
function addValueInCookie(nomCookie, valeur, separateur, dureeExpire, path) {
	var valCookie;
	valCookie = getCookie(nomCookie);

	if (valCookie == '') {
		valCookie = valCookie + valeur;
	} else {
		valCookie = valCookie + separateur + valeur;
	}
	setCookie(nomCookie, valCookie, dureeExpire, path);
}

/**
 * delValueInCookie() : Supprime une valeur dans le cookie
 * 
 * @param nomCookie :
 *            nom du cookie
 * @param valeur :
 *            valeur du cookie (écrase la valeur precedente)
 * @param separateur :
 *            séparateur de valeur
 * @param dureeExpire :
 *            en millieme de seconde ex: 24h => 24*60*60*1000, -1 => session
 * @param path :
 *            racine arbo ou * le cookie est accessible
 */
function delValueInCookie(nomCookie, valeur, separateur, dureeExpire, path) {
	var valCookie;
	valCookie = getCookie(nomCookie);
	var tab = valCookie.split(separateur);
	valCookie = '';
	
	for (var i = 0; i < tab.length; i++) {
		if (tab[i] != valeur) {
			valCookie += tab[i];
			if (i < tab.length - 1) {
				valCookie += ' ';
			}
		}
	}
	valCookie = $.trim(valCookie);
	valCookie = valCookie.replace(' ',separateur);

	setCookie(nomCookie, valCookie, dureeExpire, path);

}

/**
 * isInCookie() : Vérifie l'existance d'une valeur dans le cookie
 * 
 * @return bool
 * 
 * @param nomCookie :
 *            nom du cookie
 * @param valeur :
 *            valeur du cookie (écrase la valeur precedente)
 * @param separateur :
 *            séparateur de valeur
 */
function isInCookie(nomCookie, valeur, separateur) {

	var valCookie;
	valCookie = getCookie(nomCookie);

	valCookie = separateur + valCookie + separateur;

	if (valCookie.indexOf(separateur + valeur + separateur) == -1) {
		return false;
	} else {
		return true;
	}
}
