/**
 *	Single Sign On Windows Live Connect
 *
 *	API Microsoft Javascript	http://msdn.microsoft.com/en-us/library/hh243643.aspx#SessionObject
 *
 *	Kevin Vincendeau
 *	ADDEO - 2011
 */

	
	/**
	 * Ferme La popup et redirige la page appelante
	 */
	function closePopupAndRedirect(url)
	{
		alert("closePopupAndRedirect() \n and url="+url);

	}
	
	/**
	 * Création manuelle du bouton de connexion à Windows Live
	 * Alternative à l'API Microsoft qui catch le bouton Entrée (pas possible avec le formulaire d'identification)
	 * 
	 * WL.ui({
	 * 		name:		"signin",
	 * 		element:	"signInButton",
	 * 		scope:		scopesArr,
	 * 		brand:		"windowslive"
	 * 	});
	 * 
	 * @param	(string)	idContainer		- id de l'élement qui va recevoir le bouton
	 * @param	(boolean)	isConnection	- si true, écrit "Connexion" sinon "Déconnexion"
	 * 
	 * @return	(boolean)	success			- true si ça c'est bien intégré
	 */
	function updateLiveConnectButton(idContainer, isConnection)
	{
		if(!$(idContainer))							// réceptacle n'existe pas
			return false;
		
		// connexion ou déconnexion ?
		var str		= (isConnection) ? "Connexion"		: "Déconnexion";
		var func	= (isConnection) ? "signUserIn();"	: "signUserOut();";
		
		var button = new Element('div', {id: "liveConnectButton", onclick: func}).update(str);
		$(idContainer).update(button);
	}
	
	/**
	 * Extraction de la valeur d\un paramètre de l'url
	 */
	function extractParamUrl(param, url)
	{
		alert("extractParamUrl("+param+", "+url+")");
	}

	function goHome()
	{
		var session = WL.getSession();
		if (session) {
			window.location = url_home+"/profils/login_sso/"+session.authentication_token;
		} else {
			// TODO message d'erreur
			sendError("Erreur pas de session Windows Live détectée");
		}
	}
	
	/**
	 * Détecte qu'on est dans une popup (donc qu'on a en arrière toujours la fenêtre appelante)
	 * 
	 * @param window
	 * @return boolean
	 */
	function isPopup(window)
	{
		alert("isPopup");
		return ((window.opener != null) && !window.opener.closed);
	}
	
	/**
	 * Callback à l'identification de l'utilisateur sur Windows Live
	 * @return
	 */
	function onLogin()
	{
		var session = WL.getSession();
		
		if (session){
			showAlreadySignedInMessage();
		} else {
			showSignedOutMessage();
		}
	}
	
	function onLogout()
	{
		alert("onLogout");
	}
	
	/**
	 * Callback au changement de session Windows live
	 * @return
	 */
	function onSessionChange()
	{
		var session = WL.getSession();
		if (session) {
			signIn();
			showAlreadySignedInMessage();
		} else {
			showSignedOutMessage();
		}
	}
	
	/**
	 * Lit les données de WL.session et les envois en ajax à CakePHP
	 * 
	 * @param session
	 * @return boolean successfully connected
	 */
	function postSessionDataAjax(session)
	{
		var success = null;
		
		// récup des paramètres de session
		var access_token			= session.access_token;
		var token_type				= session.token_type;
		var authentication_token	= session.authentication_token;
		var expires_in 				= session.expires_in;
	
		// envoi de toutes les données utilisateur à cakePhp pour matcher le user viacesi 
		var postData =	"data[access_token]=" + access_token +
						"&data[token_type]=" + token_type +
						"&data[authentication_token]=" + authentication_token +
						"&data[expires_in]=" + expires_in;
	
		new Ajax.Request(url_login_sso_responder, {
				method:		'post',
				asynchronous:	false,
				postBody:	postData,
				onSuccess:	function(transport)
							{
								if(transport.responseText != "true"){
									alert("Erreur inconnue en réponse à la requête Ajax");
									success = false;
									return false;
								} else {
									succes = true;
								}
							},
				onFailure:	function(){
								alert("Echec de la connexion Ajax vers "+url_login_sso_responder);
								success = false;
								return false;
							}
			});
		
		return success;
		
	}
	
	/**
	 * Affichage d\'un message d\'erreur dans div#result
	 * 
	 * @param message
	 * @return
	 */
	function sendError(message)
	{
		alert("sendError "+message);
	}
	
	/**
	 * Connexion en ajax
	 * @return
	 */
	function signIn()
	{
		var session = WL.getSession();
		
		if (session)	postSessionDataAjax(session);
		else			sendError("Pas de session Windows Live détectée, reconnectez-vous à windows Live");
	}
	
	function signUserIn() {
        var scopesArr = ["wl.signin", "wl.emails"];
        WL.login({ scope: scopesArr });
    }
	
	function signUserOut(){
		WL.logout();
	}
	
	/**
	 * Affiche un message "Vous êtes connecté à Windows Live" + lien "Accéder à Viacesi"
	 * 
	 * @return
	 */
	function showAlreadySignedInMessage()
	{
		if(!$('connectionLiveStatus'))		return false;
				
		var aLink = '<a href="javascript:goHome();" class="item_rouge" >Accédez à Viacesi</a>';
		
		$('connectionLiveStatus').update('<div>Vous êtes connecté<br/>'+aLink+'</div>');
		updateLiveConnectButton('signInButton', false);
	}
	
	/**
	 * Affiche un message invitant à se connecter à Windows Live
	 * 
	 * @return
	 */
	function showSignedOutMessage()
	{
		if(!$('connectionLiveStatus'))		return false;
		
//		$('connectionLiveStatus').update('<div>Vous devez vous connecter</div>');
		$('connectionLiveStatus').update('<div></div>');
		updateLiveConnectButton('signInButton', true);
	}
