/* THIS FILE IS HIGHLY DEPENDENT ON PASSEPORT.JS.
 * VITAL CALLBACKS FOR LOGGING IN AND OUT OF THE CANOE
 * PASSEPORT ARE DEFINED THERE.
 * THIS SCRIPT ALSO DIRECTLY BINDS ONTO THE GLOBAL CONFIGURATION
 * VARIABLES DEFINED FOR THE PASSEPORT.
 */
(function($){ // secure jquery $ variable.

/* Permet d'afficher différentes erreurs pour
 * la fenêtre de login ppcfb.
 *
 * elem := str selecteur jQuery (ex.: '#id')
 * msg  := str message à afficher
 *
 * return: void
 */
var ppcfb_error = function(elem, msg){
	e = $(elem);
	p = e.parent();
	
	if (typeof(msg) == 'undefined') {
		p.removeClass('error');
		p.contents('p').text('');
	}else {
		p.addClass('error');
		p.contents('p').text(msg);
	}
};

/* Permet de sélectionner le message provenant 
 * d el'api du passeport
 *
 * elem := int no erreur api  ( ex.: -1000 )
 * msg  := str message api à afficher ( message non utilisable )
 *
 * return: void
 */
var ppcfb_dispatch = function( noerror, webserviceMsg, msg ) {

	/*Nick name erreur*/
	if ( noerror == "-1000" || noerror == "-1001" || noerror == "-1002" || noerror == "-1003" ) {
		ppcfb_error('#ppcfb_nick', $.fn.ppcfberr[noerror][$.fn.ppcfblg] );
		return;
	}
	
	/*Pasword erreur*/
	if ( noerror == "-1010" || noerror == "-1011" || noerror == "-1012" ) {
		ppcfb_error('#ppcfb_pwd', $.fn.ppcfberr[noerror][$.fn.ppcfblg] );
		return;
	}
	
	/*Courriel erreur*/
	if ( noerror == "-1020" || noerror == "-1021" ) {
		ppcfb_error('#ppcfb_email', $.fn.ppcfberr[noerror][$.fn.ppcfblg] );
		return;
	}
	
	/*Message non controlé*/
	alert(webserviceMsg);
	return;
	
};

/* Check linked est appelée en callback par fb après le login.
 * Sert à voir si le compte facebook est associé à un passeport canoe.
 */
ppc_check_linked = function(fbid){
	if (typeof(fbid)=='undefined' && typeof(FB)!='undefined'){
		var fbid = FB.Connect.get_loggedInUser();
	}
	var url = $.fn.ppc.url.base+'islinked';
	var data = {'fbid':fbid};
	$.post(url, data, function(rdata){
		if (rdata.status){
			submit_callback(rdata);
		} else{
			$.fn.ppcfb_login(fbid);
		}
	}, "json");
};


/* fonction logout*/
ppcfb_logout = function(){
	FB.Connect.logout(ppc_logout);
};

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

/* shifts the facebook button for the one to log out after
 * having logged in.
 */
swap_button = function(img_url){
	facebookom("facebook_connect_fb");
	if (typeof(img_url) == 'undefined'){
		img_url = "http://static.ak.fbcdn.net/images/fbconnect/logout-buttons/logout_large.gif";
	}
	var rep = '<a href="#" class="ppcfb_logout" onclick="FB.Connect.requireSession(); return false;" >'+
	'    <img id="fb_login_image" src="'+img_url+'" alt="Connect"/>'+
	'</a>';
	$('.ppcfb_login').replaceWith(rep);
	$('.ppcfb_logout').click(ppcfb_logout);
	//FB.Connect.pollLoginStatus(1000,20,function(){window.location.reload();});
	FB.Connect.get_status().waitUntilReady(
		function(status){
			if(status==FB.ConnectState.connected){
				ppc_check_linked(FB.Connect.get_loggedInUser());
			}
		}
	);
};

/* fonction de plugin ppcfb_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.ppcfb_login = function(fbid){
	var lg = $.fn.ppc.lg;
	$.fn.ppcfblg = lg;

	var img_base = $.fn.ppc.img.base;
	$.fn.ppcfbimg_base = img_base;
	
	var img = {
	  'submit'	: {	'fr': img_base+'ppc_submit_fr.gif',
									'en': img_base+'ppc_submit_en.gif'},
	  'validate': {	'fr': img_base+'ppc_validate_fr.gif',
									'en': img_base+'ppc_validate_en.gif'},
	  'close'		: {	'fr': img_base+'ppc_close.gif',
									'en': img_base+'ppc_close.gif'},
		'qmark'		: {	'fr': img_base+'ppc_mark.gif',
									'en': img_base+'ppc_mark.gif'}
	};
	$.fn.ppcfbimg = img;
	
 	var txt = {
		
		'hi'			:	{	'fr': "Bonjour",
									'en': "Hi"},
		'mail'		:	{	'fr': "Adresse courriel:",
									'en': "Email address:"},
	  'pwd'			: {	'fr': "Mot de passe:",
									'en': "Password:"},
	  'nick'		: {	'fr': "Surnom:",
									'en': "Nickname:"},
	  'tos'			: {	'fr': "J'accepte les <a href=\"http://passeport.canoe.com/faq.html\" target=\"_blank\">conditions d'utilisation</a>.",
									'en': "I accept the <a href=\"http://passeport.canoe.com/faq_en.html\" target=\"_blank\">terms and conditions</a>."},
	  'ppcuname': {	'fr': "Nom d'usager passeport:",
									'en': "Passport nickname:"},

	  'close'		: {	'fr': "Fermer",
									'en': "Close"},
		'question': {	'fr': "Avez-vous déjà un compte Passeport Canoe?",
									'en': "Do you have a Canoe Passport?"},
		'step'		: {	'fr': "Cette étape n'est à faire qu'une seule fois!",
									'en': "This step only needs to be done once!"},
		'register': {	'fr': "Devenir membre<br />Passeport Canoe",
									'en': "Become a member of<br />Canoe Passport"},
		'msgnew'	: {	'fr': "Votre identité Passeport Canoe vous permettra de participer à différents types de contenus sur l'ensemble des sites du réseau Canoe.",
									'en': "Your Canoe Passport I.D. is your key to access the multitude of content offered on the entire Canoe network."},
		'qmark'		: {'fr': '?',
							   'en': '?'},
		
		'submit'	: {'fr': 'Soumettre',
							   'en': 'Submit'},
		
		'link'		: {	'fr': "Reliez votre Passeport Canoë<br />à votre compte Facebook",
									'en': "Link your facebook account<br />with an existing Canoe Passport"},
		'msglink'	: {	'fr': "Si vous possédez déjà un Passeport Canoë, vous pouvez le synchroniser avec votre compte Facebook. La prochaine fois que vous accéderez à Facebook Connect, nous pourrons ainsi vous reconnaître.",
									'en': "If you already have a Canoe Passport, you can synchronize it with your Facebook account. The next time you log in Facebook Connect, we will be able to identify you."}

	};
	$.fn.ppcfbtxt = txt;
	
	var err = {
	  'pwd': {'fr': "Veuillez saisir votre mot de passe",
	          'en': "Enter your password"},
	  'email': {'fr': "Veuillez saisir votre courriel",
	            'en': "Enter your email"},
	  'nickname': {'fr': "Veuillez saisir votre surnom",
	               'en': "Enter your nickname"},
	  'terms': {'fr': "Veuillez accepter les conditions d'utilisation",
	            'en': "Accept the terms and conditions"},
	  '-90': {'fr': "Une association existe déjà pour ce passeport",
	          'en': "An association already exists for this passport"},
	  '-91': {'fr': "Une association existe déjà pour ce compte facebook",
	          'en': "An association already exists for this facebook account"},
	  '-92': {'fr': "Échec de l'association de comptes.",
	          'en': "Association failed."},
	  '-1000': {'fr': "Surnom trop court (5)",
	            'en': "Nickname too short (5)"},
	  '-1001': {'fr': "Surnom trop long (25)",
	            'en': "Nick name too long (25)"},
		'-1002'		: {	'fr': "Surnom caractère invalide",
									'en': "Nickname invalid character"},
		'-1003'		: {	'fr': "Surnom déjà existant",
									'en': "Nick name already exist"},
		
		'-1010'		: {	'fr': "Mot de passe trop court (5)",
									'en': "Password too short (5)"},
		'-1011'		: {	'fr': "Mot de passe trop long (25)",
									'en': "Password too long (25)"},
		'-1012'		: {	'fr': "Mot de passe caractère invalide",
									'en': "Password invalid character"},
									
		'-1020'		: { 'fr': "Courriel invalide",
									'en': "Invalid email"},
		'-1021'		: { 'fr': "Courriel déjà existant",
									'en': "Email already exist"},
		
		'login'		: {	'fr': "Nom d'usager passeport ou mot de passe invalide",
									'en': "Nickname or Password invalid"}
	};
	
	$.fn.ppcfberr = err;
	
	template = 
	'<div id="ppcfb_login_pop">'+	
	
	'<div id="ppcfb_login_header">'+
	'<a id="ppcfb_login_unpop">'+txt.close[lg]+'<img src="'+img.close[lg]+'" alt="Close/Fermer" /></a>'+
	'</div>'+
	
	'<div id="ppcfb_login_fb">'+
	'<div id="fb_logo"><span><fb:profile-pic uid="'+fbid+'" linked="false" width="34" height="34"></fb:profile-pic></span></div>'+
	'<div id="fb_name">'+txt.hi[lg]+' <span><fb:name uid="'+fbid+'" firstnameonly="true" useyou="false" linked="false"></fb:name></span>.</div>'+
	'<div id="fb_question">'+txt.question[lg]+'</div>'+
	'</div>'+
	
	'<div class="clear"</div>'+
	
	'<div id="ppcfb_login_message">'+txt.step[lg]+'</div>'+
	
	'<form method="post">'+
	
	'<h4>'+txt.register[lg]+'</h4>'+
	'<p>'+txt.msgnew[lg]+'</p>'+
	
	'<div>'+
	'<label for="ppcfb_email">'+txt.mail[lg]+'</label>'+
	'<input type="text" name="ppcfb_email" id="ppcfb_email" />'+
	'<p class="error_message"></p>'+
	'</div>'+
	
	'<div><label for="ppcfb_pwd">'+txt.pwd[lg]+'</label>'+
	'<input type="password" name="ppcfb_pwd" id="ppcfb_pwd" />'+
	'<p class="error_message"></p>'+
	'</div>'+
	
	'<div>'+
	'<label for="ppcfb_nick">'+txt.nick[lg]+'</label>'+
	'<input type="text" name="ppcfb_nick" id="ppcfb_nick" />'+
	'<p class="error_message"></p>'+
	'</div>'+
	
	'<div>'+
	'<input type="checkbox" name="ppcfb_tos" id="ppcfb_tos" value="1" />'+
	'<label id="ppcfb_terms" for="ppcfb_tos">'+txt.tos[lg]+'</label>'+
	'<p class="error_message"></p>'+
	'</div>'+
	
	'<button type="submit" id="ppc_create_submit"><img src="'+img.submit[lg]+'" title="'+txt.submit[lg]+'" alt="'+txt.submit[lg]+'" /></button>'+
	
	'</form>'+
	
	'<form method="post">'+
	
	'<h4>'+txt.link[lg]+'</h4>'+
	'<p>'+txt.msglink[lg]+'</p>'+
	
	'<div>'+
	'<label for="ppcfb_linkname">'+txt.ppcuname[lg]+'</label>'+
	'<input type="text" name="ppcfb_linkname" id="ppcfb_linkname" />'+
	'<p class="error_message"></p>'+
	'</div>'+
	
	'<div>'+
	'<label for="ppcfb_linkpwd">'+txt.pwd[lg]+'</label>'+
	'<input type="password" name="ppcfb_linkpwd" id="ppcfb_linkpwd" />'+
	'<p class="error_message"></p>'+
	'</div>'+
	
	'<input type="hidden" id="ppcfb_fbid" value="'+fbid+'" />'+
	
	'<button type="submit" id="ppcfb_submit"><img src="'+img.validate[lg]+'" title="soumettre" /></button>'+
	
	'<div id="ppcfb_login">'+
	'<p id="ppcfb_error" class="error_message"></p>'+
	'</div>'+
	
	'</form>'+
	
	'</div>';
	
	/* Affiche le formulaire de linking entre
	 * facebook connect et le ppc.
	 */
	//TODO: bind evenements sur pop submit.
	ppcfb_login_pop = function(){
		if ($('#ppcfb_login_pop').length > 0){
			return false;
		}
		e = $(template).appendTo('body');
		var IEscrollTop = 0;
		if($.browser.msie && $.browser.version == 6.0){
			if (document.documentElement && document.documentElement.scrollTop){
				// IE6 +4.01
				IEscrollTop = document.documentElement.scrollTop;
			} else if (document.body && document.body.scrollTop){
				// IE5 or DTD 3.2
				IEscrollTop = document.body.scrollTop;
			}
			e.css('top',IEscrollTop + ($(window).height() - e.height())/2+'px');
		}
		else{
			e.css('top',($(window).height() - e.height())/2+'px');
		}
		e.css('left',($(window).width() - e.width())/2+'px');
		e.show();
		FB.XFBML.Host.parseDomTree();
		$('#ppcfb_login_unpop').click(ppcfb_login_unpop);
		$('#ppc_create_submit').click(ppc_create);
		$('#ppcfb_submit').click(ppc_link);
		return false;
	};
	
	var ppc_create = function() {
		var error = 0;
		
		if ($('#ppcfb_email').attr('value')===''){
			ppcfb_error('#ppcfb_email', err.email[lg]);
			error = 1;
			return false;
		}else{
			ppcfb_error('#ppcfb_email');
		}
		if ($('#ppcfb_pwd').attr('value')===''){
			ppcfb_error('#ppcfb_pwd', err.pwd[lg] );
			error = 1;
			return false;
		}else{
			ppcfb_error('#ppcfb_pwd');
		}
		if ($('#ppcfb_nick').attr('value')===''){
			ppcfb_error('#ppcfb_nick', err.nickname[lg]);
			error = 1;
			return false;
		}else{
			ppcfb_error('#ppcfb_nick');
		}
		if ($('#ppcfb_tos').attr('checked')===false){
			ppcfb_error('#ppcfb_tos', err.terms[lg]);
			error = 1;
			return false;
		}else{
			ppcfb_error('#ppcfb_tos');
		}
		var data = {
		  'user': $('#ppcfb_nick').val(),
		  'pass': $('#ppcfb_pwd').val(),
		  'email': $('#ppcfb_email').val()
		};
		
		var url = $.fn.ppc.url.base+'create';
		
		$.post(url, data, function(data){
			if (!data.status){
				if(data.result.details){
				  ppcfb_dispatch ( data.result.details[0].ext, data.result.details[0].extm );
		 		}
			}else{
				facebookom("facebook_create");
				submit_callback(data);
			}
		},"json");
		return false;
	};
	
	var ppc_link = function(){
		
		ppcfb_error('#ppcfb_error');
		
		if ($('#ppcfb_linkname').attr('value')===''){
			ppcfb_error('#ppcfb_linkname', err.nickname[lg]);
			error = 1;
			return false;
		}else{
			ppcfb_error('#ppcfb_linkname');
		}
		if ($('#ppcfb_linkpwd').attr('value')===''){
			ppcfb_error('#ppcfb_linkpwd', err.pwd[lg]);
			return false;
		}else{
			ppcfb_error('#ppcfb_linkpwd');
		}
		var data = {
		  'user': $('#ppcfb_linkname').val(),
		  'pass': $('#ppcfb_linkpwd').val(),
		  'fbid': $('#ppcfb_fbid').val()
		};
		var url = $.fn.ppc.url.base+'link';
		
		$.post(url, data, function(data){
			if (!data.status){
				if($.inArray(data.result.code, [-90, -91, -92]) > -1){
					ppcfb_error('#ppcfb_error', err[data.result.code][lg]);
				}else{
					ppcfb_error('#ppcfb_error', err.login[lg]);
				}
			}else{
				facebookom("facebook_linkmyaccount");
				submit_callback(data);
			}
		},"json");
		return false;
	};
	
	/* Event handler pour le bouton 'annuler' du formulaire
	 * ppc. Ferme le formulaire et supprime son HTML de la
	 * page.
	 */
	var ppcfb_login_unpop = function (){
		$('#ppcfb_login_pop').remove();
		return false;
	};
	
	// Bind l'affichage du login à la fonction parent.
	ppcfb_login_pop();
};//$.fn.ppc_fb

$.fn.ppcfb_comment = function(comment_id, template_bundle_id){
	var lg = $.fn.ppc.lg;
	var txt = {
	  'ban': {'fr': "Vous avez été banni, veuillez contecter l'adminitrateur",
	          'en': "Banned. Contact the Administrator."},
	  'empty': {'fr': "Merci de ne pas envoyer de commentaires vides.",
	            'en': 'Please do not send empty comments.'},
	  'url': {'fr': 'Les liens externes ne sont pas permis.',
	          'en': "Links to external URLs aren't allowed."},
	  'time': {'fr': "Vous pouvez envoyer un commentaire seulement toutes les 30 secondes.",
	           'en': 'You can only post a new comment every 30 seconds.'}
	};
	commenting = function(){
		// variables erreur boolX définies dans skins/comment_form.php
		var message_error = '';
		if ( boolBanned ){
			message_error = txt.ban[lg];
		}
		if ( boolValidateSoon ){
			message_error = txt.time[lg];
			setTimeout('boolValidateSoon = false;',30000);
		}
		if (document.getElementById('comment').value === '' ){
			message_error = txt.empty[lg];
		}
		if (document.getElementById('comment').value.indexOf("http://")  != -1 ||
		    document.getElementById('comment').value.indexOf("https://") != -1 ||
		    document.getElementById('comment').value.indexOf("[url]")    != -1 ){
			message_error = txt.url[lg];
		}
		if ( message_error !== '' ) {
			document.getElementById('login_message').innerHTML = message_error;
			document.getElementById('login_message').style.display = 'block';
			return false;
		}
		var show_fb_share = false;
		FB.Connect.get_status().waitUntilReady(
			function(status){
				//if(status==FB.ConnectState.connected){
					show_fb_share = true;
				//}
			}
		);
		if(show_fb_share){
			var txt_feed = {
			  'commented': {'fr': "a commenté sur un blogue",
			                'en': "has commented on:"}
			};
			facebookom("facebook_soumettre");
			var template_data = {
			    "blogue":"<a href=\""+"http://" + window.location.host + window.location.pathname +"/"+"\">"+document.title.split('#')[0]+"</a>",
			    "comment": $(comment_id).val(),
			    "commented": txt_feed.commented[lg],
			    "target":[ FB.Connect.get_loggedInUser() ]
			};
			var continuation = function() {
				$('#info_connect form').submit();
			};
			FB.Connect.showFeedDialog(template_bundle_id, template_data, null, null, null, null, continuation);
			return false;
		}
		return true;
	};
	$(this).click(commenting);
};

})(jQuery);
