(function($){ // secure jquery $ variable.

/*
 * Variables générales pour contenu.
 * les dictionnaires vides servent à déclarer des
 * namespaces pour les paramètres définis pour chaque
 * site.
 *
 * Dépendances:
 *  passeport.css
 *  dossier image (devrait être fourni)
 *  fichier php de relai au passeport (aussi fourni)
 *
 * Abbréviations:
 *  ppc:   passeport canoe
 *  ppcfb: passeport canoe - facebook
 *
 * Quelques variables sont globales aux 2 types
 * de login:
 *  $.fn.ppc.lg, $.fn.ppc.errors, $.fn.ppc.img.base,
 *  $.fn.ppc.url.submit...
 */
$.fn.ppc = {};
$.fn.ppc.lg = 'en';
$.fn.ppc.img = {};
$.fn.ppc.url = {};
$.fn.ppc.url.retrieve = 'http://passeport.canoe.com/cgi-bin/oublie.cgi';
$.fn.ppc.url.newpp    = 'http://passeport.canoe.com/cgi-bin/inscription.cgi';	
$.fn.ppc.errors = {
  'base': {'fr': 'URL de base pour images indéfinie ($.fn.ppc.img.base)',
           'en': 'No base image URL defined ($.fn.ppc.img.base)'},
  'urlbase': {'fr': 'URL pour soumettre informations indéfinie ($.fn.ppc.url.base)',
              'en': 'No URL to submit information to is undefined ($.fn.ppc.url.base)'},
  'urlret': {'fr': 'URL du formulaire pour retrouver son compte indéfinie ($.fn.ppc.url.retrieve)',
             'en': 'No URL to retrieve lost account information is undefined ($.fn.ppc.url.retrieve)'}
};

/* variable globale pour usage dans un
 * callback ppc pour savoir si tous les
 * cookies d'un domaine sont mis.
 */
$.fn.ppc.cookielist = [];

/* Soumet une demande d'authentification au fichier
 * php qui gère le passeport.
 *
 * user := str
 * pass := str
 * callback := function, executée sur 'data' (array)
 *             qui contient infos & erreurs.
 *
 * return: void
 */
ppc_auth = function(user, pass, callback){
	if (typeof(callback)=="undefined"){
		callback = function(bool){return bool;};
	}
	data = {'user': user, 'pass': pass};
	var url = $.fn.ppc.url.base+'login';
	$.post(url, data, function(rdata){
		callback(rdata);
	}, "json");
};
/* Callback utilisé depuis submit pour les actions à
 * faire selon la réponse renvoyée par le serveur.
 */
submit_callback = function(data){
	$('#fb_roller').show();
	if (data.status){
		$.fn.ppc.cookielist = data.result.cookies;
		$.map(data.result.cookies, function(url){
			e = '<script type="text/javascript" src="'+url+'"></script>';
			$('body').append(e);
		});
        $.fn.ppc.reload = 5;
        ppc_reload_timeout = function() { 
            if ($.fn.ppc.reload <= 0 || $.fn.ppc.reload == true){ 
                window.location.reload();
            } else {
                $.fn.ppc.reload -= 1; 
            } 
        };
        setInterval(ppc_reload_timeout, 1000);
		return true;
	}
	else {
		
		$('#roller_login').hide();
		
		var message = "";
		if ( $.fn.ppc.lg == "fr"  ){
			message = "Nom d'usager passeport ou mot de passe invalide";
		}else{
			message = "Nickname or Password invalid";
		}
		$('#ppc_retrieve').before('<p class="error">'+message+'</p>');
		return false;
	}
};
/* fonction callback appellée par
 * le serveur pour setter les cookies
 * sur plusieurs domaines et savoir quand
 * reloader la page.
 *
 * Enlèves les adresses d'une liste une à une jusqu'à ce
 * que la liste soit vide: toutes les pages js ont été chargées,
 * donc tous les cookies ont été settés. Reloader la page.
 */
ppc_callback = function(){
	//depend sur $.fn.ppc.cookielist
	$.fn.ppc.cookielist.pop();
	if ($.fn.ppc.cookielist.length === 0){
		window.location.reload();
	}
};

/* fonction de plugin ppc_login. Contient toutes
 * ses sous-fonctions et est exécutée à la fin.
 *
 * La fonction supporte le français et l'anglais
 * depuis la variable $.fn.pcc.lg et contient par
 * conséquent tout le texte à afficher à l'interne.
 */
$.fn.ppc_login = function() {
	
	var lg = $.fn.ppc.lg;
	
	var retrieve = $.fn.ppc.url.retrieve;
	var newpp    = $.fn.ppc.url.newpp;
	
	if(typeof($.fn.ppc.url.base) == 'undefined'){
		alert($.fn.ppc.errors.urlbase[lg]);
	}
	if(typeof($.fn.ppc.url.retrieve) == 'undefined'){
		alert($.fn.ppc.errors.urlret[lg]);
	}
	if (typeof($.fn.ppc.img.base) == 'undefined'){
		alert($.fn.ppc.errors.base[lg]);
	}
	var img_base = $.fn.ppc.img.base;
	
	var img = {
	  'header': {'fr': img_base+'ppc_header_fr.gif',
	             'en': img_base+'ppc_header_en.gif'},
	  'validate': {'fr': img_base+'ppc_validate_fr.gif',
	               'en': img_base+'ppc_validate_en.gif'}
	};
	
	var txt = {
	  'intro': {'fr': 'Votre identit&eacute; Passeport Cano&euml; et votre mot '+
	                  'de passe vous permettent de b&eacute;n&eacute;ficier '+
	                  'de diff&eacute;rents types de contenus sur l\'ensemble '+
	                  'des sites du r&eacute;seau Cano&euml;.',
	            'en': 'Your Canoe Passport I.D. is your key to access the '+
	                  'multitude of services and content offered on the '+
	                  'entire Canoe Network.'},
	  'id': {'fr': 'Identifiant passeport',
	           'en': 'Passport ID'},
	  'pwd': {'fr': 'Mot de passe',
	          'en': 'Password'},
	  'cancel': {'fr': 'Annuler',
	              'en': 'Cancel'},
	  'retrieve': {'fr': 'Vous avez oublié votre identité ou votre mot de passe?',
	               'en': 'Can\'t remember your I.D. or password?'},
	  'newpp'   : {'fr': 'Besoin d\'un passeport Canoë?',
		             'en': 'Need a new Canoe passeport?'}
	};
	
	// pseudo-template du formulaire à afficher dans la page.
	var ppc_login_pop_html = ''+
	'<div id="ppc_login_pop">'+
	'<img border="0" alt="" src="'+img.header[lg]+'"/>'+
	'<p>'+txt.intro[lg]+'</p>'+
	'<form id="ppc_form" method="post">'+
	'<input type="hidden" name="ppc_lang" id="ppc_lang" value="'+lg+'" />'+
	'<label for="ppc_email">'+txt.id[lg]+':</label>'+
	'<input type="text" name="ppc_email" id="ppc_email" /><br />'+
	'<label for="ppc_password">'+txt.pwd[lg]+':</label>'+
	'<input type="password" id="ppc_password" name="ppc_password" /><br />'+
	'<button type="submit" id="ppc_submit">'+
	'<img src="'+img.validate[lg]+'" title="soumettre" alt="soumettre" />'+
	'<br /><img id="roller_login" style="display: none;" src="'+img_base+'roller_grey_small.gif" />'+
	'</button>'+
	'<a id="ppc_login_unpop" href="#">'+txt.cancel[lg]+'</a>'+
	'</form>'+
	
	'<div id="ppc_retrieve"><a href="'+retrieve+'?lang='+lg+'" target="_blank">'+txt.retrieve[lg]+'</a></div>'+
	'<div id="ppc_new"><a href="'+newpp+'?lang='+lg+'" target="_blank">'+txt.newpp[lg]+'</a></div>'+
	'</div>';
	
	/* Affiche le formulaire de login,
	 * attache les événements de boutons login
	 * et cancel aux élments HTML concernés.
	 *
	 * return: false, annule switch page.
	 */
	ppc_login_pop = function(){
		if ($('#ppc_login_pop').length > 0){
			return false;
		}
		facebookom("facebook_accedez_pp");
		e = $(ppc_login_pop_html).appendTo('body');
		// fixing ie6 not accepting position:fixed in javascript.
		var vscroll = 0;
		if ($.browser.msie && $.browser.version == 6.0){
			if(document.documentElement.scrollTop){ // different with strict mode or not
				vscroll = document.documentElement.scrollTop;
			}else{
				vscroll = document.body.scrollTop;
			}
		}
		e.css('top',(vscroll+($(window).height() - e.height())/2)+'px');
		e.css('left',($(window).width() - e.width())/2+'px');
		e.show();
		$('#ppc_login_unpop').click(ppc_login_unpop);
		$('#ppc_submit').click(submit);
		return false;
	};
	
	/* Event handler associé au bouton submit cliqué dans le
	 * formulaire ppc.
	 * Lit le formulaire, et soumet les informations au serveur.
	 */
	var submit = function(){
		
		$('#roller_login').show();
		
		$('#ppc_login_pop p.error').remove();
		data = {'user': $('#ppc_email').val(), 'pass': $('#ppc_password').val()};
		var url = $.fn.ppc.url.base+'login';
		ppc_auth($('#ppc_email').val(), $('#ppc_password').val(), submit_callback);
		return false;
	};
	
	
	
	/* Event handler pour le bouton 'annuler' du formulaire
	 * ppc. Ferme le formulaire et supprime son HTML de la
	 * page.
	 */
	var ppc_login_unpop = function (){
		$('#ppc_login_pop').remove();
		return false;
	};
	
	/* Bind le pop du formulaire au clic
	 * sur l'élément choisi par le site.
	 */
	$(this).click(ppc_login_pop);
	
};// $.fn.ppc_login

/* fonction logout*/
ppc_logout = function(){
	var url = $.fn.ppc.url.base +'logout';
	var img_base = $.fn.ppc.img.base;
	
	$.post(url,{},function(data){
		
		$('#bComment_logout img').css("display","inline");
		
		if (data.status){
			submit_callback(data);
		}
	}, "json");
	return false;
};

$.fn.ppc_logout = function(){
	$(this).click(ppc_logout);
};
})(jQuery);


