﻿// Debug
/**
 * sprintf() for JavaScript v.0.4
 *
 * Copyright (c) 2007 Alexandru Marasteanu <http://alexei.417.ro/>
 * Thanks to David Baird (unit test and patch).
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA
 */

function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }

function sprintf () {
  var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
  while (f) {
    if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
    else if (m = /^\x25{2}/.exec(f)) o.push('%');
    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
      if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
        throw("Expecting number but found " + typeof(a));
      switch (m[7]) {
        case 'b': a = a.toString(2); break;
        case 'c': a = String.fromCharCode(a); break;
        case 'd': a = parseInt(a); break;
        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
        case 'o': a = a.toString(8); break;
        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
        case 'u': a = Math.abs(a); break;
        case 'x': a = a.toString(16); break;
        case 'X': a = a.toString(16).toUpperCase(); break;
      }
      a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
      x = m[5] - String(a).length;
      p = m[5] ? str_repeat(c, x) : '';
      o.push(m[4] ? a + p : p + a);
    }
    else throw ("Huh ?!");
    f = f.substring(m[0].length);
  }
  return o.join('');
}

function log(s) {
	return;
	var date = new Date();
	var log = document.getElementById("log");
	if (!log) {
		var _log = document.createElement("div");
		_log.id = "log";
		_log.style.position = "fixed";
		_log.style.zIndex = "10000";
		_log.style.right = "10px";
		_log.style.top = "10px";
		_log.style.width = "300px";
		_log.style.height = "600px";
		_log.style.border = "1px solid #000000";
		_log.style.overflow = "auto";
		_log.style.font = "normal 10px lucida console, arial, sans-serif";
		_log.style.color = "#ffffff";
		_log.style.textAlign = "left";
		_log.style.backgroundColor = "#777777";
		document.body.appendChild(_log);
		log = _log;
	}
	log.innerHTML += sprintf("%02d:%02d:%02d.%03d : %s", date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds(), s)+"<br/>\n";
	//log.innerHTML += date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+"."+date.getMilliseconds()+" : "+s+"<br/>\n";
	log.scrollTop = log.scrollHeight;
	return;
}
function tostr(o) {
	return;
	var s = "";
	for (var i in o) s+=i+"="+(typeof o[i] != "function"?o[i]:"function")+"<br/>\n";
	log(s);
}

// popup flash
// fonction pour fermer la lightbox. utilisé depuis le bouton "fermer" dans le flash
function closeISWAP() { $("a.jqmClose").click(); }
// fonction pour envoyer la photo sur facebook. utilisé depuis le bouton "envoyer sur facebook" dans la derniere frame de l'application
function envoyerSurFB(url) {
	var me = HN.MS.MeilleursAmis;
	if (me.FB_initialised) {
		if (me.FB_connected) {
			me.FB_publishStream(url);
		}
		else if (!me.FB_connecting) {
			me.FB_connecting = true;
			FB.Connect.requireSession(
				function(){ me.FB_connecting = false; me.FB_connected = true; me.FB_publishStream(url); },
				function(){ me.FB_connecting = false; },
				true
			);
		}
	}
}
// fonction pour "tell a friend". utilisé depuis le bouton "envoyer à un ami" dans la derniere frame de l'application
function envoyerAUnAmi(url) {
	closeISWAP();
	var $ISWAP_MSN_tel_friend = $("div.ISWAP-MSN-tel-friend");
	$ISWAP_MSN_tel_friend.find("div.selected-friend").hide();
	$ISWAP_MSN_tel_friend.find("div.must-select-friend").hide();
	$ISWAP_MSN_tel_friend.find("div.photo-sent").hide();
	$ISWAP_MSN_tel_friend.find("div.btn-send").show();
	HN.MS.MeilleursAmis.ISWAP_MSN_image = url;
	$("div.greybox_background").show().css({ opacity: 0 }).animate({ opacity: 0.3 }, function(){
		$("div.greybox").show();
		$("div.ISWAP-MSN-tel-friend").fadeIn();
	});
}

// popups
var popupWidth = 700;
function slide(number) {
	return;
	$(".innerPopup").animate({
		'marginLeft' : popupWidth*(-number+1)
	});
}
function showPopup() {
	$("div.greybox_background").show().css({ opacity: 0 }).animate({ opacity: 0.3 }, function(){
		$("div.greybox").show();
		$("div.popup").fadeIn();
	});
}
function closePopup() {
	$("div.popup").fadeOut(function(){
		$("div.greybox").hide();
		$("div.greybox_background").animate({ opacity: 0 }, function(){
			$("div.greybox_background").hide();
			HN.MS.MeilleursAmis.reset();
		});
	});
}
function showNext() {
	$("div.greybox_background").show().css({ opacity: 0 }).animate({ opacity: 0.3 }, function(){
		$("div.greybox").show();
		$("div.nextContent").fadeIn();
	});
}
function closeNext() {
	$("div.nextContent").fadeOut(function(){
		$("div.greybox").hide();
		$("div.greybox_background").animate({ opacity: 0 }, function(){
			$("div.greybox_background").hide();
		});
	});
}
function openCreds() {
	$("div.greybox_background").show().css({ opacity: 0 }).animate({ opacity: 0.3 }, function(){
		$("div.greybox").show();
		$("div.credits").fadeIn();
	});
}
function closeCreds() {
	$("div.credits").fadeOut(function(){
		$("div.greybox").hide();
		$("div.greybox_background").animate({ opacity: 0 }, function(){
			$("div.greybox_background").hide();
		});
	});
}

if (!window.HN) HN = window.HN = {};
HN.MS = {};

// Execute the Init function when DOM is ready
$(function(){ HN.MS.MeilleursAmis.init(); });

HN.MS.MeilleursAmis = {
	
	reqInProcess: false,
	pageWidth: 510,
	curPage: null,
	maxPage: 500,
	intervalPage: 5,
	
	// for stories
	stories: [],
	storyCount: 0,
	storyOffset: 0,
	pageCount: 0,
	divContainer: null,
	divPage: null,
	
	// regexp
	localPicUrlRegExp: /([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}((\.png)|(\.jpg)|(\.gif)))$/i,
	
	// finalization tentative
	finalizationTentative: 0,
	
	// default url
	siteUrl: "http://www.meilleursamisdumonde.fr/",
	fbDefaultBuddy: "http://www.meilleursamisdumonde.fr/ressources/images/q_silhouette.png",
	msnDefaultBuddy: "http://www.meilleursamisdumonde.fr/ressources/images/msn-buddy.jpg",
	
	MSN_consentCompleted: false,
	MSN_SignedIn: false,
	
	FB_initialised: false,
	FB_connecting: false,
	FB_connected: false,
	
	ISWAP_MSN_userName: "",
	ISWAP_MSN_friendName: "",
	ISWAP_MSN_friendEmail: "",
	ISWAP_MSN_image: "",
	
	guid: null,
	inputs: {
		text: {
			userName: { dft: "Votre prénom/pseudo", val: "", required: true },
			userEmail: { dft: "Votre adresse email", val: "", required: true },
			userPicUrl: { dft: "", val: "", required: true },
			friendName: { dft: "Son prénom/pseudo", val: "", required: true },
			friendEmail: { dft: "Son adresse email", val: "", required: true },
			friendPicUrl: { dft: "", val: "", required: true }
		},
		textarea: {
			story1: { dft: "Votre première rencontre\nDites-nous tout !", val: "", required: false },
			story2: { dft: "Votre plus gros fou rire\nDites-nous tout !", val: "", required: false },
			story3: { dft: "Votre plus grosse dispute\nDites-nous tout !", val: "", required: false }
		},
		checkbox: {
			friendInform: false
		}
	},
	MSN_status: { dft: "inscrire un nouveau message perso ici", val: "" },
	
	init: function(){
		var me = this;
		//HN.png2alpha("png2keep");
		
		// Preload some images
		var img2preloadList = [
		];
		for (var i=0; i<img2preloadList.length; i++) {
			var img2preload = new Image();
			img2preload.src = HN.MS.MPEL.base_url+HN.MS.MPEL.base_rsc_url+"images/"+img2preloadList[i];
		}
		
		// phone Flash
		var so_phone = new SWFObject("ressources/swf/376x165_Vibrophone_Microsoft.swf", "flash-phone", "376", "165", "9", "#ffffff");
		so_phone.addParam('wmode', 'transparent');
		so_phone.write("flash-phone");

		// ISWAP Flash
		$("#iswap").click(function(){
			(new Image()).src = "http://view.atdmt.com/action/frmmgm_MessengerPhoneComposezClick_10";
			(new Image()).src = "http://g.msn.fr/FR1003/2188";
			return false;
		});
		$("#dialog").jqm();
		var so = new SWFObject("ressources/swf/main.swf", "iswapface", "700", "435", "9", "#ffffff");
		so.addParam('wmode', 'transparent');
		if (window.location.search != "") {
			var imageUrlMatch = window.location.search.split("?r=");
			if (imageUrlMatch && imageUrlMatch[1] && (imageUrlMatch = imageUrlMatch[1].match(me.localPicUrlRegExp)) && imageUrlMatch[1]) {
				log(imageUrlMatch[1]);
				var imageUrl = me.siteUrl+"Images/Prod/"+imageUrlMatch[1][0]+"/"+imageUrlMatch[1];
				so.addVariable('image', imageUrl);
				so.write("iswapface");
				$("#iswap").click();
				(new Image()).src = "http://g.msn.fr/FR1003/2208";
			}
			else
				so.write("iswapface");
		}
		else {
			so.write("iswapface");
		}
		
		// ISWAP MSN popup
		$("div.ISWAP-MSN-tel-friend div.closePopup").click(function(){
			$("div.ISWAP-MSN-tel-friend").fadeOut(function(){
				$("div.greybox").hide();
				$("div.greybox_background").animate({ opacity: 0 }, function(){
					$("div.greybox_background").hide();
				});
			});
		});
		$("div.ISWAP-MSN-tel-friend div.btn-send").click(function(){ me.ISWAP_MSN_TelFriend(); });
		
		// MSN
		Microsoft.Live.Core.Loader.initialize({ 'market': 'fr' });
		Microsoft.Live.Core.Loader.load(['messenger.ui.styles.core', 'messenger.ui']);

		// partagez
		$("div.leftHead_share a").click(function(){
			slide(1);
			showPopup();
			(new Image()).src = "http://view.atdmt.com/action/frmmgm_MessengerPhonePartagezClick_10";
			(new Image()).src = "http://g.msn.fr/FR1003/2189";
			return false;
		});
		
		me.divContainer = $("div.temoignageContainer").empty().get(0);
		
		FB.init(
			"7802ae4913ff006aa2680f68e910dc1f",
			"xd_receiver.htm", {
				ifUserConnected: function(uid){
					FB.Facebook.get_sessionWaitable().waitUntilReady(function() {
						log("fb connected");
						if (FB.Facebook.apiClient.get_session()) {
							me.FB_loadFriends();
							if (!me.guid) { // connected from popup 2
								log("auto log or log from popup1");
							}
							else { // connected from popup 7
								log("log from popup7");
							}
							me.FB_initialised = true;
							me.FB_connected = true;
						}
						else {
							log("no, in fact fb is NOT connected -> Forcing deconnection");
							FB.Connect.logout();
						}
					});
				},
				ifUserNotConnected: function(){
					log("fb not connected");
					me.FB_initialised = true;
					me.FB_connected = false;
				}
			}
		);
		
		// nextContent
		$("div.nextContent div.close").click(function(){ closeNext(); });
		
		// every popup close
		$("div.popup div.closePopup").click(function(){ closePopup(); });
		
		$("div.popup0").find("div.home").click(function(){
			closePopup();
			return false;
		});
		
		// popup 1
		// msn
		$("div.connexionWays a:eq(0)").click(function(){
			slide(2);
			(new Image()).src = "http://g.msn.fr/FR1003/2193";
			return false;
		});
		// facebook
		$("div.connexionWays a:eq(1)").click(function(){
			if (me.FB_initialised) {
				if (me.FB_connected) {
					slide(3);
					(new Image()).src = "http://g.msn.fr/FR1003/2194";
				}
				else if (!me.FB_connecting) {
					me.FB_connecting = true;
					FB.Connect.requireSession(
						function(){ FB_connecting = false; me.FB_connected = true; slide(3); (new Image()).src = "http://g.msn.fr/FR1003/2194"; },
						function(){ me.FB_connecting = false; },
						true
					);
				}
			}
			return false;
		});
		// manual
		$("div.connexionWays a:eq(2)").click(function(){
			slide(4);
			(new Image()).src = "http://g.msn.fr/FR1003/2195";
			return false;
		});
		
		// popup 2
		var $popup2 = $("div.popup2");
		$popup2.find("div.nextStep").click(function(){
			if (!me.reqInProcess) {
				me.inputs.checkbox.friendInform = $popup2.find("input[type='checkbox']").attr("checked");
				if (me.validateStepInfos())
					$("div.popup2 div.must-select-friend").hide();
				else
					$("div.popup2 div.must-select-friend").show();
			}
			return false;
		});
		$popup2.find("input[name='fname']").focusout(function(){
			me.inputs.text.friendName.val = $(this).val();
		});
		
		// popup 3
		var $popup3 = $("div.popup3");
		$popup3.find("div.nextStep").click(function(){
			if (!me.reqInProcess) {
				me.inputs.checkbox.friendInform = false;
				if (me.validateStepInfos())
					$("div.popup3 div.must-select-friend").hide();
				else
					$("div.popup3 div.must-select-friend").show();
			}
			return false;
		});
		
		// popup 4
		var $popup4 = $("div.popup4");
		$popup4.find("input[type='text']").each(function(i){
			var $this = $(this);
			var inputText = me.inputs.text[$this.attr("name")];
			if (inputText) {
				$this.bind("focusin",function(){
					$this.val(inputText.val);
				}).bind("focusout",function(){
					inputText.val = $this.val();
					if (inputText.val == "")
						$this.val(inputText.dft);
				});
			}
		});
		$popup4.find("div.picBrowse").each(function(i){
			$(this).append($("<input/>",{
				type: "file",
				name: "picUpload",
				"class": "fileUpload",
				change: function(){
					if (!i) me.inputs.text.userPicUrl.val = this.value;
					else me.inputs.text.friendPicUrl.val = this.value;
					$(this).closest("form").submit();
				}
			}));
		});
		$popup4.find("iframe").each(function(iframeIndex){
			$(this).load(function(){
				log("IFRAME: TRANSFORMING USER PIC URL TO A LOCAL ONE");
				var input = iframeIndex==0 ? me.inputs.text.userPicUrl : me.inputs.text.friendPicUrl;
				var iframeResponse = window.frames["picUploadIframe"+(iframeIndex+1)].document.body.innerHTML;
				switch (iframeResponse) {
					case "" : break;
					case "r=0": log("Erreur interne lors de l'upload "+(iframeIndex==0?"de votre image personnelle":"de l'image de votre ami")); break;
					case "r=1":
						log("Image invalide (url/format incorrect ou poids trop important)");
						log("Using buddy msn as a default image...");
						input.val = "local";
						me.getLocalPicUrl(input, function(){ $("div.picBrowse:eq("+iframeIndex+") a:first").html("<img src=\""+me.siteUrl+"Images/Temp/"+input.val+"\" alt=\"\" class=\"addPic\"/>"); });
						break;
					default :
						var imageUrlMatch = iframeResponse.match(me.localPicUrlRegExp);
						if (imageUrlMatch && imageUrlMatch[1]) {
							log("IFRAME: USER PIC URL TRANSFORMATION OK");
							input.val = imageUrlMatch[1];
							$("div.picBrowse:eq("+iframeIndex+") a:first").html("<img src=\""+me.siteUrl+"Images/Temp/"+input.val+"\" alt=\"\" class=\"addPic\"/>");
						}
						else {
							log("Erreur interne image "+iframeIndex);
						}
						break;
				}
			});
		});
		$popup4.find("div.validButton a").click(function(){
			
			/*me.inputs.text.userName.val = "fred";
			me.inputs.text.userEmail.val = "frederic@hook-network.com";
			me.inputs.text.userPicUrl.val = "48fdedf3-984e-4d72-b708-55617058660d.jpg";
			me.inputs.text.friendName.val = "fred2";
			me.inputs.text.friendEmail.val = "frederic2@hook-network.com";
			me.inputs.text.friendPicUrl.val = "04923145-8af7-4d98-9c22-91b698713da8.jpg";
			me.guid = "dda45495-1767-4c57-b6a2-e1ea04370dc8";
			me.finalizeStepInfos();
			return false;*/
			
			log("STEP 4 VALIDATION CLICK");
			me.inputs.checkbox.friendInform = $popup4.find("input[type='checkbox']").attr("checked");
			if (!me.reqInProcess) {
				if (me.inputs.text.userPicUrl.val == "") me.inputs.text.userPicUrl.val = "local";
				if (me.inputs.text.friendPicUrl.val == "") me.inputs.text.friendPicUrl.val = "local";
				if (me.validateStepInfos())
					$popup4.find("div.error").html("");
				else
					$popup4.find("div.error").html("Merci de bien vouloir remplir tous les champs.");
			}
			return false;
		});
		
		// popup 5
		var $popup5 = $("div.popup5");
		$popup5.find("textarea").each(function(i){
			var $this = $(this);
			var inputTextarea = me.inputs.textarea[$this.attr("name")];
			if (inputTextarea) {
				$this.bind("focusin",function(){
					$this.removeClass("empty");
					$this.val(inputTextarea.val);
				}).bind("focusout",function(){
					inputTextarea.val = $this.val();
					if (inputTextarea.val == "") {
						$this.addClass("empty");
						$this.val(inputTextarea.dft);
					}
				}).keydown(function(event){ setTimeout(function(){
					var count = 370 - $this.val().length;
					var $count = $this.next("div.count").html(count);
					if (count < 0)
						$count.addClass("count-error");
					else
						$count.removeClass("count-error");
					
					var grey = false;
					$popup5.find("textarea").each(function(){
						if ($(this).val().length > 370) { grey = true; return false; }
					});
					if (grey) $popup5.find("div.save").addClass("save-off");
					else $popup5.find("div.save").removeClass("save-off");
				}, 10); });
			}
		});
		$popup5.find("div.save").click(function(){
			if (!$(this).hasClass("save-off")) {
				var $error = $popup5.find("div.error");
				if (me.inputs.textarea.story1.val == "" && me.inputs.textarea.story2.val == "" && me.inputs.textarea.story3.val == "") {
					$error.html("Merci de remplir au moins un témoignage pour continuer.");
				}
				else {
					if (!$popup5.find("input[name='conditions']").attr("checked")) {
						$error.html("Veuillez cocher la case avant de continuer.");
					}
					else {
						$error.html("");
						if (me.inputs.textarea.story1.val != "" && me.inputs.textarea.story2.val != "" && me.inputs.textarea.story3.val != "")
							me.validateParticipation();
						else
							slide(6);
						(new Image()).src = "http://g.msn.fr/FR1003/2196";
					}
				}
			}
			return false;
		});
		
		// popup 6
		var $popup6 = $("div.popup6");
		$popup6.find("div.back a").click(function(){ slide(5); (new Image()).src = "http://g.msn.fr/FR1003/2197"; return false; });
		$popup6.find("div.save a").click(function(){ me.validateParticipation(); (new Image()).src = "http://g.msn.fr/FR1003/2198"; return false; });
		
		// popup 7
		var $popup7 = $("div.popup7");
		// facebook
		$popup7.find("div.fbButton a").click(function(){
			if (me.FB_initialised) {
				if (me.FB_connected)
					me.FB_publishStatus();
				else if (!me.FB_connecting) {
					me.FB_connecting = true;
					FB.Connect.requireSession(
						function(){ me.FB_connecting = false; me.FB_connected = true; me.FB_publishStatus(); },
						function(){ me.FB_connecting = false; },
						true
					);
				}
			}
			return false;
		});
		// msn
		$popup7.find("input[name='choice3']").bind("focusin",function(){
			$(this).val(me.MSN_status.val);
			$popup7.find("input[name='choices']:eq(2)").attr("checked","checked");
		}).bind("focusout",function(){
			me.MSN_status.val = $(this).val();
			if (me.MSN_status.val == "")
				$(this).val(me.MSN_status.dft);
		});
		$popup7.find("div.changeMessage a").click(function(){
			if (me.MSN_SignedIn) {
				var statusType = $popup7.find("input[name='choices']:checked").val();
				if (typeof(statusType) != "undefined") {
					var status = "";
					switch(statusType){
						case "0": status = me.inputs.text.friendName.val+", tu as été et sera toujours mon meilleur ami."; break;
						case "1": status = "Comment dire à "+me.inputs.text.friendName.val+" que je l'adore ? Et bien voilà, c'est dit. :)"; break;
						case "2": status = $popup7.find("input[name='choice3']").val(); break;
						default: break;
					}
					log("status="+status);
					me.MSN_publishStatus(status);
				}
			}
			return false;
		});
		$popup7.find("div.nextStep a").click(function(){
			slide(8);
			return false;
		});
		
		
		// popup8
		$popup8 = $("div.popup8");
		$popup8.find("div.participate a").click(function(){
			if (!$popup8.find("input[name='checkSort']").attr("checked"))
				$popup8.find("div.error").show();
			else {
				$popup8.find("div.error").hide();
				me.participate();
			}
			return false;
		});
		$popup8.find("div.home").click(function(){
			closePopup();
			return false;
		});
		
		// page links
		$("div.temoignagesBottom_right div.pagerArrow a").each(function(i){
			switch (i) {
				case 0: $(this).click(function(){ me.gotoPage(me.curPage-1); return false; }); break;
				case 1: $(this).click(function(){ me.gotoPage(me.curPage+1); return false; }); break;
				default: break;
			}
		});
		me.gotoPage(1);
		me.reset();
	},
	reset: function(){
		var me = this;
		me.guid = null;
		me.finalizationTentative = 0;
		me.inputs.text.userName.val = "";
		me.inputs.text.userEmail.val = "";
		me.inputs.text.userPicUrl.val = "";
		me.inputs.text.friendName.val = "";
		me.inputs.text.friendEmail.val = "";
		me.inputs.text.friendPicUrl.val = "";
		me.inputs.textarea.story1.val = "";
		me.inputs.textarea.story2.val = "";
		me.inputs.textarea.story3.val = "";
		me.inputs.checkbox.friendInform = false;
		
		$("div.popup2 div.must-select-friend").hide();
		$("div.popup2 div.selected-friend").hide();
		$("div.popup3 div.must-select-friend").hide();
		$("div.popup3 ul.fbFriendList li").removeClass("selected");
		$("div.popup3 div.selected-friend").hide();
		$("div.popup4 div.error").html("");
		
		$("div.popup7 div.fbButton").show();
		$("div.popup7 div.fbStatusUpdated").hide();
		$("div.popup8 div.participate").show();
		$("div.popup8 div.thx").hide();
		var $popup5 = $("div.popup5");
		$popup5.find("textarea").each(function(i){
			var $this = $(this);
			var inputTextarea = me.inputs.textarea[$this.attr("name")];
			if (inputTextarea) {
				$this.addClass("empty");
				$this.val(inputTextarea.dft);
			}
			$this.next("div.count").html(370).removeClass("count-error");
			$popup5.find("div.save").removeClass("save-off");
		});
		$popup5.find("input[name='conditions']").attr("checked", false);
		$popup5.find("div.error").html("");
		var $popup8 = $("div.popup8");
		$popup8.find("input[name='checkSort']").attr("checked", false);
		$popup8.find("div.error").hide();
	},
	gotoPage: function(page){
		var me = this;
		
		if (page < 1) page = 1;
		else if (page > me.maxPage) page = me.maxPage;
		
		if (page == me.curPage)
			return false;
		
		me.curPage = page;
		
		// page animation
		$("div.temoignageContainer").stop().animate({ left: (-(page-1)*me.pageWidth)+"px" })
		
		if (page > me.pageCount-me.intervalPage && page < me.maxPage-me.intervalPage) {
		
			$.ajax({
				cache: false,
				data: "page="+(Math.floor(me.storyCount/50)+1),
				dataType: "xml",
				error: function (XMLHttpRequest, textStatus, errorThrown) {
					log("Bad XML URL or XML is Malformed -> using a default xml");
					$.ajax({
						cache: false,
						data: "page="+(Math.floor(me.storyCount/50)+1),
						dataType: "xml",
						error: function (XMLHttpRequest, textStatus, errorThrown) {
							log("Bad XML URL or XML is Malformed");
						},
						success: function (xml, textStatus) {
							me.updateStories(xml);
						},
						type: "GET",
						url: "XmlHandler.xml"
					});
				},
				success: function (xml, textStatus) {
					me.updateStories(xml);
				},
				type: "GET",
				url: "XmlHandler.ashx"
			});
		}
		else {
			me.updatePager();
		}

	},
	updateStories: function(xml){
		var me = this;
		$(xml).find("part").each(function(i){
			var $this = $(this);
			
			var storyIndex = me.storyCount;
			me.stories[storyIndex] = {
				"name": $this.find("name").text(),
				"image": $this.find("image").text(),
				"fname": $this.find("fname").text(),
				"fimage": $this.find("fimage").text(),
				"T1": $this.find("T1").text() || "",
				"T2": $this.find("T2").text() || "",
				"T3": $this.find("T3").text() || ""
			}
			var story = me.stories[storyIndex];
			story.name = story.name.replace(/((\[[^\[\]]*\])|(\([^\(\)]*\)))/gi, "");
			story.fname = story.fname.replace(/((\[[^\[\]]*\])|(\([^\(\)]*\)))/gi, "");
			
			if ((storyIndex+me.storyOffset)%4 == 0) {
				me.divPage = document.createElement("div");
				me.divPage.className = "temoignagePage";
				if (me.pageCount)
					me.divPage.innerHTML += "<div class=\"sepLine\"></div>";
			}
			
			/*<div class="temoignageBig">
				<div class="temoignagePicture">
					<div class="temoignagePictureLeft">
						<img src="ressources/images/pictureExample1.jpg" alt="Photo exemple" /><br />Ophelie
					</div>
					<div class="temoignagePictureRight">
						<img src="ressources/images/pictureExample2.jpg" alt="Photo exemple" />Mathilde
					</div>
				</div>*/
			var divStory = document.createElement("div");
			divStory.className = (storyIndex == 0 ? "temoignageBig" : "temoignageLittle");
				var divPic = document.createElement("div");
				divPic.className = "temoignagePicture";
				divStory.appendChild(divPic);
					var divPicL = document.createElement("div");
					divPicL.className = "temoignagePictureLeft";
					divPicL.innerHTML = "<img src=\""+story.image+"\" alt=\"\" title=\""+story.name+"\"/><br/>"+story.name;
					divPic.appendChild(divPicL);
					var divPicR = document.createElement("div");
					divPicR.className = "temoignagePictureRight";
					divPicR.innerHTML = "<img src=\""+story.fimage+"\" alt=\"\" title=\""+story.fname+"\"/><br/>"+story.fname;
					divPic.appendChild(divPicR);
			
			var t1 = "", t2 = "", t3 = "";
			if (story.T1) t1 = story.T1;
			if (story.T2) t2 = story.T2;
			if (story.T3) t3 = story.T3;
			if (storyIndex == 0) {
					/*<p><span class="pink">Première rencontre</span> : Au concert de Tokyo Hotel. Lorem ipsum simply dummy text of the printing and typesetting industry. Lorem ipsum has been the industry's standard dummy text ever since the 1500s, when an unknow printer.</p>
					<p><span class="pink">Le plus gros fou rire</span> : Le prof de maths s'est endormi sur son bureau. Lorem ipsum has been the industry's standard dummy text ever since the 1500s ! When an unknow printer tock a gallery of type !</p>
					<p><span class="pink">La plus grosse dispute</span> : Kevin a dit qu'il m'aimait et ça rendu Julie folle de rage. Lorem Ispum has been the industry's standard dummy text.</p>
				</div>*/
					var html = "";
					var char_count = t1.length + t2.length + t3.length;
					if (char_count > 900) {
						t3 = t3.substr(0,900-370*2)+"... <a href=\"#\" class=\"grey\" onclick=\"HN.MS.MeilleursAmis.showStoriesDetail("+storyIndex+"); return false;\">Lire la suite</a>";
						me.storyOffset = 2;
					}
					else if (char_count > 580) {
						me.storyOffset = 2;
					}
					else
						me.storyOffset = 1;
						
					if (t1 != "") html += "<p><span class=\"pink\">Première rencontre</span> : "+t1+"</p>";
					if (t2 != "") html += "<p><span class=\"pink\">Le plus gros fou rire</span> : "+t2+"</p>";
					if (t3 != "") html += "<p><span class=\"pink\">La plus grosse dispute</span> : "+t3+"</p>";
					divStory.innerHTML += html;
					
			}
			else {
					/*<div class="temoignageText">
						<span class="pink">Première rencontre</span> : Au concert de Tokyo Hotel... <a href="#" class="grey" onclick="javascript: showNext();">Lire la suite</a> <br />
						<span class="pink">Le plus gros fou rire</span> : Le prof de maths s'est endormi sur son bureau... <a href="#" class="grey" onclick="javascript: showNext();">Lire la suite</a> <br />
						<span class="pink">La plus grosse dispute</span> : Kevin a dit qu'il m'aimait et ça a rendu Julie folle de rage... <a href="#" class="grey" onclick="javascript: showNext();">Lire la suite</a>
					</div>
				</div>*/
					var div_text = document.createElement("div");
					div_text.className = "temoignageText";
					var html = "";
					
					if (t1 != "") html += "<span class=\"pink\">Première rencontre</span> : "+(t1.length <= 120 ? t1+"<br/>" : t1.substr(0,117)+"... <a href=\"#\" class=\"grey\" onclick=\"HN.MS.MeilleursAmis.showStoriesDetail("+storyIndex+"); return false;\">Lire la suite</a><br/>");
					if (t2 != "") html += "<span class=\"pink\">Le plus gros fou rire</span> : "+(t2.length <= 120 ? t2+"<br/>" : t2.substr(0,117)+"... <a href=\"#\" class=\"grey\" onclick=\"HN.MS.MeilleursAmis.showStoriesDetail("+storyIndex+"); return false;\">Lire la suite</a><br/>");
					if (t3 != "") html += "<span class=\"pink\">La plus grosse dispute</span> : "+(t3.length <= 120 ? t3 : t3.substr(0,117)+"... <a href=\"#\" class=\"grey\" onclick=\"HN.MS.MeilleursAmis.showStoriesDetail("+storyIndex+"); return false;\">Lire la suite</a>");
					div_text.innerHTML = html;
					divStory.appendChild(div_text);
			}
			
			me.divPage.appendChild(divStory);
			me.divPage.innerHTML += "<div class=\"sepLine\"></div>";
			
			me.storyCount++;
			
			if ((storyIndex+me.storyOffset)%4 == 3) {
				me.divContainer.appendChild(me.divPage);
				me.pageCount++;
				if (me.pageCount >= me.maxPage)
					return false;
			}
		});
		// we had less than 50 stories in the last query
		if (me.storyCount%50 != 0) {
			if ((me.storyCount+me.storyOffset)%4 != 0) {
				me.divContainer.appendChild(me.divPage);
				me.pageCount++;
			}
			me.maxPage = me.pageCount;
		}
		me.updatePager();
	},
	updatePager: function(){
		var me = this;
		// pager links update
		var $pager = $("div.temoignagesBottom_right div.pager").empty();
		var leftPageFirst = me.curPage-me.intervalPage;
		var leftPageLast = me.curPage+me.intervalPage;
		if (leftPageFirst < 1) {
			leftPageLast += -leftPageFirst+1;
			leftPageFirst = 1;
		}
		if (leftPageLast > me.pageCount)
			leftPageLast = me.pageCount;
		
		if (leftPageFirst > 1) {
			$pager.append("<a href=\"#\">1</a> ");
			if (leftPageFirst > 2)
				$pager.append("<a href=\"#\">...</a> ");
		}
		for (var pageI = leftPageFirst; pageI <= leftPageLast; pageI++) {
			$pager.append("<a href=\"#\""+(me.curPage==pageI?" class=\"select\"":"")+">"+pageI+"</a> ");
		}
		/*if (leftPageLast < me.pageCount) {
			if (leftPageLast < me.pageCount-1)
				$pager.append("<a href=\"#\">...</a> ");
			$pager.append("<a href=\"#\">"+me.pageCount+"</a> ");
		}*/
		
		$pager.find("a").click(function(){
			var pageNum = $(this).html();
			if (pageNum == "...")
				pageNum = Math.floor((parseInt($(this).prev("a").html()) + parseInt($(this).next("a").html())) / 2);
			else
				pageNum = parseInt(pageNum);
			me.gotoPage(pageNum);
			return false;
		});
	},
	showStoriesDetail: function(storyIndex){
		var me = this;
		if (storyIndex >= 0 && storyIndex < me.storyCount) {
			var story = me.stories[storyIndex];
			var $nextContent = $("div.nextContent");
			$nextContent.find("div.temoignagePictureLeft").html("<img src=\""+story.image+"\" alt=\"\" title=\""+story.name+"\"/><br/>"+story.name);
			$nextContent.find("div.temoignagePictureRight").html("<img src=\""+story.fimage+"\" alt=\"\" title=\""+story.fname+"\"/><br/>"+story.fname);
			$nextContent.find("p.next1stMet").html(story.T1 ? "<span class=\"pink\">Première rencontre</span> : "+story.T1 : "");
			$nextContent.find("p.next1stLol").html(story.T2 ? "<span class=\"pink\">Le plus gros fou rire</span> : "+story.T2 : "");
			$nextContent.find("p.next1stAngry").html(story.T3 ? "<span class=\"pink\">La plus grosse dispute</span> : "+story.T3 : "");
			showNext();
		}
	},
	validateStepInfos: function(){
		var me = this;
		log("STEP INFOS VALIDATION TENTATIVE");
		// checking if we have all the required information
		valid = true;
		for(var k in me.inputs.text) {
			log(k+("="+me.inputs.text[k].val).substr(0,63));
			if (me.inputs.text[k].required && (!me.inputs.text[k].val || me.inputs.text[k].val == ""))
				valid = false;
		}
		log("inform="+me.inputs.checkbox.friendInform);
		if (!valid)
			return false;
		log("STEP INFOS VALIDATION OK");
		
		// transforming facebooks and messenger pic URL to a local URL
		me.getLocalPicUrl(me.inputs.text.userPicUrl, function(){ me.finalizeStepInfos(); });
		me.getLocalPicUrl(me.inputs.text.friendPicUrl, function(){ me.finalizeStepInfos(); });
		
		return true;
	},
	finalizeStepInfos: function(){
		// there is always 2 finalizeStepInfos done
		var me = this;
		me.reqInProcess = true;
		me.finalizationTentative++;
		log("STEP INFOS FINALIZATION TENTATIVE "+me.finalizationTentative);
		if (me.finalizationTentative >= 2) {
			me.reqInProcess = false;
			log("STEP INFOS FINALIZATION OK");
			$("div.popup5 p.tellUs").html(me.inputs.text.userName.val+", racontez votre histoire d'amitié avec "+me.inputs.text.friendName.val);
			$("div.popup5 div.pictureTitle").html("<img src=\""+me.siteUrl+"Images/Temp/"+me.inputs.text.userPicUrl.val+"\" alt=\"\"/>");
			slide(5);
		}
	},
	getLocalPicUrl: function(input){
		var me = this, cb;
		// optional param 2 = callback function
		if (arguments.length > 1 && typeof arguments[1] == "function")
			cb = arguments[1];
		
		log("getLocalPicUrl("+input.val+") = "+me.localPicUrlRegExp.test(input.val));
		if (!me.localPicUrlRegExp.test(input.val)) {
			me.reqInProcess = true;
			log("TRANSFORMING PIC URL TO A LOCAL ONE");
			$.ajax({
				cache: false,
				data: "imageUrl="+escape(input.val)+"&resize=true",
				dataType: "text",
				error: function (XMLHttpRequest, textStatus, errorThrown) { me.reqInProcess = false; },
				success: function(data, textStatus, XMLHttpRequest){
					me.reqInProcess = false;
					switch (data) {
						case "": break;
						case "r=0": log("Erreur interne lors de l'upload de votre image personnelle"); break;
						case "r=1":
							log("Image invalide (url/format incorrect ou poids trop important)");
							log("Using buddy msn as a default image...");
							input.val = "local";
							me.getLocalPicUrl(input, cb);
							break;
						default :
							var imageUrlMatch = data.match(me.localPicUrlRegExp);
							if (imageUrlMatch && imageUrlMatch[1]) {
								log("USER PIC URL TRANSFORMATION OK");
								input.val = imageUrlMatch[1];
								if (cb) cb();
							}
							else {
								log("Erreur interne image");
							}
							break;
					}
				},
				type: "GET",
				url: "ImageModule.aspx"
			});
		}
		else {
			if (cb) cb();
		}
	},
	validateParticipation: function(){
		var me = this;
		$.webservice({
			url: "BestFriendService.asmx",
			data: {
				name: me.inputs.text.userName.val,
				email: me.inputs.text.userEmail.val,
				image: me.inputs.text.userPicUrl.val,
				fname: me.inputs.text.friendName.val,
				femail: me.inputs.text.friendEmail.val,
				fimage: me.inputs.text.friendPicUrl.val,
				text1: me.inputs.textarea.story1.val,
				text2: me.inputs.textarea.story2.val,
				text3: me.inputs.textarea.story3.val,
				optin: me.inputs.checkbox.friendInform
			},
			dataType: "text/xml",
			nameSpace: "http://www.hook-network.com/",
			methodName: "Save",
			success:function(xml,textStatus){
				var saveresult = xml.match(/<SaveResult>([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})<\/SaveResult>/i)[1];
				log("WEBSERVICE OUTPUT: guid="+saveresult);
				if (saveresult && saveresult != "") {
					me.guid = saveresult;
					var storyCount = (me.inputs.textarea.story1.val!=""?1:0) + (me.inputs.textarea.story2.val!=""?1:0) + (me.inputs.textarea.story3.val!=""?1:0);
					$("div.popup8 div.blueBann div.count").html(storyCount);
					me.showStatusSlide();
				}
			}
		});
	},
	participate: function(){
		var me = this;
		log("PARTICIPATING: "+me.guid);
		$.webservice({
			url: "BestFriendService.asmx",
			data: {
				partId: me.guid
			},
			dataType: "text/xml",
			nameSpace: "http://www.hook-network.com/",
			methodName: "EnterContest",
			success:function(xml,textStatus){
				log(xml.replace(/</gi,"&lt;").replace(/>/gi,"&gt;"));
				var entercontestresult = xml.match(/<EnterContestResult>(true|false)<\/EnterContestResult>/i)[1];
				log("WEBSERVICE OUTPUT: entercontestresult="+entercontestresult);
				if (entercontestresult) {
					$("div.popup8 div.participate").hide();
					$("div.popup8 div.thx").show();
					(new Image()).src = "http://g.msn.fr/FR1003/2202";
				}
			}
		});
	},
	showStatusSlide: function(){
		var me = this;
		var $popup7 = $("div.popup7");
		$popup7.find("label[for='choice1']").html(me.inputs.text.friendName.val+" et moi, on nous appelle les inséparables.");
		$popup7.find("label[for='choice2']").html("Comment dire à "+me.inputs.text.friendName.val+" que je l'adore ? Et bien voilà, c'est dit. :)");
		$("div.popup7 div.msnStatusUpdated").hide();
		if (me.MSN_SignedIn) {
			$popup7.find("div.messagesChoice").show();
			$popup7.find("div.changeMessage").show();
		}
		else {
			$popup7.find("div.messagesChoice").hide();
			$popup7.find("div.changeMessage").hide();
		}
		slide(7);
	},
	MSN_OnSelContact: function(c) {
		var me = HN.MS.MeilleursAmis;
		c = c.get_contact();
		if (c != null) {
			var user = Microsoft.Live.Messenger.UI.Tags.TagsFactory.get_user();
			me.inputs.text.userName.val = user.get_displayName();
			me.inputs.text.userEmail.val = user.get_address().get_address();
			me.inputs.text.userPicUrl.val = user.get_presence().get_displayPictureUrl();
			if (!me.inputs.text.userPicUrl.val || me.inputs.text.userPicUrl.val == "")
				me.inputs.text.userPicUrl.val = "local";
			me.inputs.text.friendName.val = c.get_displayName().split("@")[0];
			me.inputs.text.friendEmail.val = c.get_emailAddress();
			me.inputs.text.friendPicUrl.val = c.get_presence().get_displayPictureUrl();
			if (!me.inputs.text.friendPicUrl.val || me.inputs.text.friendPicUrl.val == "")
				me.inputs.text.friendPicUrl.val = "local";
			
			$("div.popup2 div.must-select-friend").hide();
			var $selected_friend = $("div.popup2 div.selected-friend").show();
			$selected_friend.find("input.name").val(me.inputs.text.friendName.val);
			var instance = new Microsoft.Live.UI.Messenger.DisplayPictureControl($selected_friend.find("div.pic").empty().get(0));
			instance.set_cid(c.get_cid());
			instance.set_size("medium");
			
			log("me "+me.inputs.text.userName.val+" url_image=<a href=\""+me.inputs.text.userPicUrl.val+"\">long lien</a>");
			log("selecting "+me.inputs.text.friendName.val+" url_image=<a href=\""+me.inputs.text.friendPicUrl.val+"\">long lien</a>");
			
		}
	},
	MSN_OnConsentCompleted: function(){
		var me = HN.MS.MeilleursAmis;
		me.MSN_consentCompleted = true;
		log("consent completed!");
		$("div.popup1 img.connexionMsnLogo").attr("src", "ressources/images/popups/bigBuddy2.jpg");
	},
	MSN_SignInCompleted: function(){
		var me = HN.MS.MeilleursAmis;
		me.MSN_SignedIn = true;
		log("sign in!");
		if (me.guid) {
			me.showStatusSlide();
			me.MSN_consentCompleted = false;
			(new Image()).src = "http://g.msn.fr/FR1003/2200";
		}
		else {
			if (me.MSN_consentCompleted) {
				slide(2);
				me.MSN_consentCompleted = false;
			}
		}
		$("div.popup1 img.connexionMsnLogo").attr("src", "ressources/images/popups/bigBuddy.jpg");
		$("div.popup div.msn-sign-in").hide();
	},
	MSN_SignOutCompleted: function(){
		var me = HN.MS.MeilleursAmis;
		me.MSN_SignedIn = false;
		log("sign out!");
		$("div.popup div.msn-sign-in").show();
		if (me.guid)
			me.showStatusSlide();
		else
			slide(1);
	},
	MSN_publishStatus: function(status){
		var me = this;
		if (status != "") {
			log("PUBLISHING STATUS: "+status+" www.meilleursamisdumonde.fr");
			Microsoft.Live.Messenger.UI.Tags.TagsFactory.get_user().get_presence().set_personalMessage(status+" www.meilleursamisdumonde.fr");
			$("div.popup7 div.changeMessage").hide();
			$("div.popup7 div.msnStatusUpdated").show();
			(new Image()).src = "http://g.msn.fr/FR1003/2201";
		}
	},
	FB_publishStatus: function() {
		log("FB PUBLISHING STATUS TRY");
		var me = this;
		me.reqInProcess = true;
		var new_status = " vient de laisser un témoignage d’amitié sur le site « Les meilleurs amis du monde »\n\
Désignez votre meilleur ami, témoignez de votre amitié et tentez de remporter un téléphone Messenger Edition 251 by SFR pour vous et votre ami sur\n\
http://www.meilleursamisdumonde.fr";

		me.FB_promptPermission("status_update", function() {
			FB.Facebook.apiClient.users_setStatus(
				new_status,
				false,
				true,
				function(){
					me.reqInProcess = false;
					log("user status updated: "+new_status);
					$("div.popup7 div.fbButton").hide();
					$("div.popup7 div.fbStatusUpdated").show();
					(new Image()).src = "http://g.msn.fr/FR1003/2199";
				}
			);
		});
	},
	FB_publishStream: function(url){
		var me = this;
		var api = FB.Facebook.apiClient;
		var fb_user;
		var imageUrlMatch = url.match(me.localPicUrlRegExp);
		log("iswap image url="+url);
		if (imageUrlMatch && imageUrlMatch[1]) {
			api.users_getInfo(FB.Facebook.apiClient.get_session().uid, ['first_name'], function(result, ex){
				fb_user = result[0];
				$.webservice({
					url: "FacebookService.asmx",
					data: { file: imageUrlMatch[1] },
					dataType: "text/xml",
					nameSpace: "http://www.hook-network.com/",
					methodName: "Publish",
					success:function(xml,textStatus){
						var publishResult = xml.match(/<PublishResult>(.+)<\/PublishResult>/i)[1];
						log("WEBSERVICE OUTPUT: publishResult="+publishResult);
						var imageUrl = publishResult.match(me.localPicUrlRegExp);
						if (imageUrl && imageUrl[1]) {
							me.FB_promptPermission("publish_stream", function() {
								FB.Connect.streamPublish(
									"", // user_message
									{
										"name" : "Les meilleurs amis du monde",
										"href" : me.siteUrl,
										"description": fb_user.first_name+" vient de créer un fond d’écran inédit pour son mobile !\nDécouvrez le premier téléphone Messenger et créez également votre fond d’écran sur le site http://www.meilleursamisdumonde.fr",
										"media" : [{ "type":"image", "src":publishResult, "href":me.siteUrl+"?r="+imageUrl[1] }]
									}, // attachment
									null, // action_links
									null, // target_id
									null, // user_message_prompt
									function(){
										log("stream published !");
										(new Image()).src = "http://g.msn.fr/FR1003/2207";
									}, // callback
									false // auto_publish
								);
							});
						}
					}
				});
			});
		}
	},
	FB_promptPermission: function (permission, callbackFunc) {
		log("FB PERMISSION CHECK");
		FB.Facebook.apiClient.users_hasAppPermission(
			permission,
			function(res) {
				if (res) {
					log("Permission: "+permission+" is OK !");
					callbackFunc(true);
				} else {
					log("Showing DB for permission: "+permission);
					FB.Connect.showPermissionDialog(permission, callbackFunc);
				}
			}
		);
	},
	FB_loadFriends: function() {
		var uid = FB.Facebook.apiClient.get_session().uid;
		var me = HN.MS.MeilleursAmis;
		var api = FB.Facebook.apiClient;
		var fb_user;
		api.fql_query("SELECT first_name, email, pic_square FROM user WHERE uid = "+uid, function(result, ex) { if (result) {
			fb_user = result[0];
			fb_user.pic_square = fb_user.pic_square?fb_user.pic_square:"localfb";
		}});
		
		api.fql_query("SELECT uid, first_name, last_name, email, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = "+uid+") order by first_name", function(result, ex) { if (result) {
			var ul_container = $("div.popup3 div.contactsSelect ul.fbFriendList").empty().get(0);
			for (i=0;i<result.length;i++) (function(){
				var friend = result[i];
				friend.pic_square = friend.pic_square ? friend.pic_square : me.fbDefaultBuddy;
				var li_friend = document.createElement("li");
				li_friend.className = "";
				li_friend.innerHTML = "<img src=\""+friend.pic_square+"\" alt=\"\" />"+friend.first_name+" "+friend.last_name;
				li_friend.onclick = function(){
					log("selecting "+this.innerHTML);
					$(ul_container).find("li").removeClass("selected");
					this.className = "selected";
					me.inputs.text.userName.val = fb_user.first_name;
					me.inputs.text.userEmail.val = uid;
					me.inputs.text.userPicUrl.val = fb_user.pic_square;
					me.inputs.text.friendName.val = friend.first_name;
					me.inputs.text.friendEmail.val = friend.uid;
					me.inputs.text.friendPicUrl.val = friend.pic_square == me.fbDefaultBuddy ? "localfb" : friend.pic_square;
					
					$("div.popup3 div.must-select-friend").hide();
					var $selected_friend = $("div.popup3 div.selected-friend").show();
					$selected_friend.find("div.pic").html("<img src=\""+friend.pic_square+"\" alt=\"\"/>");
					$selected_friend.find("div.name").html(me.inputs.text.friendName.val);
				};
				ul_container.appendChild(li_friend);
			})();
		}});
	},
	ISWAP_MSN_OnSelContact: function(c){
		var me = HN.MS.MeilleursAmis;
		c = c.get_contact();
		if (c != null) {
			var user = Microsoft.Live.Messenger.UI.Tags.TagsFactory.get_user();
			me.ISWAP_MSN_userName = user.get_displayName();
			me.ISWAP_MSN_friendName = c.get_displayName();
			me.ISWAP_MSN_friendEmail = c.get_emailAddress();

			var user = Microsoft.Live.Messenger.UI.Tags.TagsFactory.get_user();
			$("div.ISWAP-MSN-tel-friend div.must-select-friend").hide();
			var $selected_friend = $("div.ISWAP-MSN-tel-friend div.selected-friend").show();
			$selected_friend.find("div.name").html(me.ISWAP_MSN_friendName);
			var instance = new Microsoft.Live.UI.Messenger.DisplayPictureControl($selected_friend.find("div.pic").empty().get(0));
			instance.set_cid(c.get_cid());
			instance.set_size("medium");
		}
	},
	ISWAP_MSN_TelFriend: function(){
		var me = this;
		var $ISWAP_MSN_tel_friend = $("div.ISWAP-MSN-tel-friend");
		var imageUrlMatch = me.ISWAP_MSN_image.match(me.localPicUrlRegExp);
		if (me.ISWAP_MSN_userName == "" || me.ISWAP_MSN_friendName == "" || me.ISWAP_MSN_friendEmail == "") {
			$ISWAP_MSN_tel_friend.find("div.selected-friend").hide();
			$ISWAP_MSN_tel_friend.find("div.must-select-friend").show();
		}
		else if (imageUrlMatch && imageUrlMatch[1]) {
			$.webservice({
				url: "TellAFriendService.asmx",
				data: {
					name: me.ISWAP_MSN_userName,
					fname: me.ISWAP_MSN_friendName,
					femail: me.ISWAP_MSN_friendEmail,
					file: imageUrlMatch[1]
				},
				dataType: "text/xml",
				nameSpace: "http://www.hook-network.com/",
				methodName: "TellISwap",
				success:function(xml,textStatus){
					var TellISwapResult = xml.match(/<TellISwapResult>(\d+)<\/TellISwapResult>/i)[1];
					log("WEBSERVICE OUTPUT: TellISwapResponse="+TellISwapResult);
					TellISwapResult = parseInt(TellISwapResult);
					if (TellISwapResult == 0) {
						$ISWAP_MSN_tel_friend.find("div.selected-friend").hide();
						$ISWAP_MSN_tel_friend.find("div.must-select-friend").hide();
						$ISWAP_MSN_tel_friend.find("div.photo-sent").show();
						$ISWAP_MSN_tel_friend.find("div.btn-send").hide();
						me.ISWAP_MSN_userName = "";
						me.ISWAP_MSN_friendName = "";
						me.ISWAP_MSN_friendEmail = "";
						me.ISWAP_MSN_image = "";
						log("succès");
						(new Image()).src = "http://g.msn.fr/FR1003/2206";
					}
					else {
						if (TellISwapResult & 0x1) log("Nom invalide");
						if (TellISwapResult & 0x2) log("Nom de l'ami invalide");
						if (TellISwapResult & 0x4) log("Email de l'ami invalide");
						if (TellISwapResult & 0x8) log("Image invalide (fichier non existant)");
					}
				}
			});
		}
		else {
			log("bad image URL");
		}
	}
};
