﻿(function()
{
	var Leetchi = {};
	if (window.Leetchi != null)
		Leetchi = window.Leetchi;
	else
		window.Leetchi = Leetchi;

	Leetchi.parseNumber = function(num)
	{
		if (typeof (num) == "number") return num;
		num = num.replace(/[\s€]+/g, "");
		num = num.replace(/\.|,/g, Leetchi.parseNumber.decimalSeparator);
		return parseFloat(num);
	};
	Leetchi.formatEuroCents = function(num)
	{
		var cents = num % 100;
		var euros = Math.floor(num / 100);
		if (cents === 0)
			return "€ " + euros.toString();
		return "€ " + euros.toString() + "," + cents.toString();
	};
	Leetchi.parseNumber.decimalSeparator = (1.5).toString(10)[1];
	Leetchi.setFieldError = function(field, message)
	{
		var oErrorSpan = Leetchi.getFieldError(field);
		if (oErrorSpan != null)
		{
			oErrorSpan.addClass("Error");
		}
	};
	Leetchi.getFieldError = function(field)
	{
		temp = $(field).closest("span.ErrorFlagSpan");
		var result = temp.size() == 0 ? null : temp;

		if (result == null)
		{
			temp = $(field).closest("span.Input, span.InputCgu");
			result = temp.size() == 0 ? null : temp;
		}

		return result;

	};
	Leetchi.clearFieldError = function(field)
	{
		var errSpan = Leetchi.getFieldError(field);
		if (errSpan != null)
		{
			$(errSpan).removeClass("Error");
			return true;
		};
		return false;
	};

	Leetchi.gravatarURL = function(email, options)
	{
		var url = "http://www.gravatar.com/avatar/" + MD5(email);
		if (options)
		{
			var query = "";
			if (options.size != undefined) query = "s=" + options.size;
			if (options.def != undefined) query = (query != "" ? query + "&" : "") + "d=" + encodeURI(options.def);
			if (query != "") url += "?" + query;
		};
		return url;
	};
	Leetchi.createInvitationItem = function(guy, invited)
	{
		var liItem = document.createElement("LI");
		var oItem = $(liItem);
		oItem.html(["<a title=\"", (invited ? "Retirer" : "Ajouter"), " ", guy.name, "\" href=\"javascript:return false;\" >",
            "<img alt=\"Avatar de ", guy.name, "\" src=\"", guy.picPath || "/Content/img/no-picture_small.jpg", "\" />",
            "<span class=\"ActionInfo\">Ajouter </span><strong>", guy.name, "</strong> <span class=\"Email\">",
            guy.email, "</span></a></li>"].join("")).click(function() { guy.liItem.toggle(); });
		guy.liItem = liItem;
		liItem.guy = guy;
		if (!guy.id)
		{
			guy.id = JSONstring.make([{ name: guy.name, email: guy.email}]);
		};
		liItem.setInvited = function(isInvited)
		{
			this.invited = isInvited;
			if (isInvited)
			{
				oItem.children("a").attr("title", "Retirer " + guy.name);
				oItem.children("a").children(".ActionInfo").text("Retirer ");
				oItem.appendTo(".ItemsToRemove ul");
				$('#selectedFriends, #inviteesBeforeWebmailImport').addOption(guy.id, guy.id);
				$(".ItemsToRemove #NoItemsToRemove").hide();
			} else
			{
				oItem.children("a").attr("title", "Ajouter " + guy.name);
				oItem.children("a").children(".ActionInfo").text("Ajouter ");
				oItem.appendTo($(guy.container).children("ul"));
				$(guy.container).children("ul").trigger("childAdded");
				$('#selectedFriends, #inviteesBeforeWebmailImport').removeOption(guy.id.toString());
				if ($(".ItemsToRemove ul").children("li").length == 0)
					$(".ItemsToRemove #NoItemsToRemove").show();
			};
		};
		liItem.toggle = function()
		{
			this.setInvited(!this.invited);
			oItem.tooltip({
				track: true,
				delay: 0,
				showURL: false,
				showBody: " - ",
				fade: 250
			});
			return this.isRemoveActive;
		};
		liItem.setInvited(invited);
		return liItem;
	};

	Leetchi.validateEmailFormat = function(email)
	{
		var mailExp = "([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*)@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
		return new RegExp(regex, "ig").test(email);
	};

	Leetchi.requestAddFriendByEMail = function(url, emailList, container)
	{
		var split = /[,|;|\n|$]+/img;
		var tokens = emailList.split(split);
		if (tokens.length == 0)
		{
			return;
		}

		var tab = [];

		var mailExp = "([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*)@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
		var regex = "\\s*(?:\"?([\\w|\\s]*\\w+)\"?\\s+)?<?(" + mailExp + ")>?";
		
		for (var i in tokens)
		{
			regexResult = new RegExp(regex, "ig").exec(tokens[i]);
			if (regexResult != null && regexResult["index"] == 0)
			{
				var name = regexResult[1] != null ? regexResult[1] : regexResult[3];
				var email = regexResult[2];
				tab = tab.concat([{ name: name, email: email}]);
			}
		}

		var query = JSONstring.make(tab);
		$.post(url, encodeURIComponent(query), function(reply)
		{
			for (var i = 0; i < reply.data.length; i++)
			{
				var o = reply.data[i];
				o.container = container;
				Leetchi.createInvitationItem(o, true);
			}
		}, "json");

	};
	Leetchi.createTabs = function(tabList, selectedId)
	{
		var currentTab = null;
		var tabDivs = new Array(tabList.length);
		var tabLinks = new Array(tabList.length);
		function setTab(tab, div, link)
		{
			if (arguments.length == 3)
			{
				if (tab == currentTab) return false;
				currentTab = tab;
				$(link).addClass("SelectedTab");
				$(div).slideDown("fast");
				$(tabDivs).not(div).slideUp("fast");
				$(tabLinks).not(link).removeClass("SelectedTab");
			} else
			{
				$(tabDivs).slideUp("fast");
				$(tabLinks).removeClass("SelectedTab");
			}
			return true;
		}
		var iSelectedId = -1;
		for (var i = tabList.length - 1; i >= 0; i--)
		{
			var item = tabList[i];
			if (selectedId == item[0]) iSelectedId = i;
			var tabDiv = document.getElementById(item[0]);
			var tabLink = document.getElementById(item[1]);
			tabDivs[i] = tabDiv;
			tabLinks[i] = tabLink.parentNode;
			$(tabLink).click((function(tabId, tabLinkParent)
			{
				return function()
				{
					setTab(tabId, document.getElementById(tabId), tabLinkParent);
					return false;
				}
			})(item[0], tabLink.parentNode));
		};
		if (iSelectedId >= 0)
			setTab(selectedId, tabDivs[iSelectedId], tabLinks[iSelectedId]);
		else setTab();
	};

	Leetchi.createTabs2 = function(tabList, selectedId)
	{
		divSelector = "";
		linkSelector = "";
		for (var i = 0; i < tabList.length; i++)
		{
			linkSelector += "#" + tabList[i][1];
			divSelector += "#" + tabList[i][0];
			if (i < tabList.length - 1)
			{
				divSelector += ",";
				linkSelector += ",";
			}
		}
		function setTab(div)
		{
			index = $(links).index(div);
			target = $(divs).filter(":eq(" + index + ")");
			$(divs).slideUp("fast");
			target.slideDown("fast");
		}

		divs = $(divSelector);
		links = $(linkSelector);
		links.click(function()
		{
			setTab(this);
		});
		setTab(links.filter("#tablink_" + selectedId));
	};

	/* Thanks to Peter-Paul Koch - http://www.quirksmode.org/dom/inputfile.html */
	Leetchi.initFileUploads = function()
	{
		if (!(document.createElement && document.getElementsByTagName) || !!Leetchi.initFileUploads.done) return;
		Leetchi.initFileUploads.done = true;
		var fakeFileUpload = document.createElement('div');
		fakeFileUpload.className = 'fakefile';
		fakeFileUpload.appendChild(document.createElement('input'));

		var link = document.createElement('a');
		link.className = "Button";
		link.href = "#";
		var leftSpan = document.createElement('span');
		var rightSpan = document.createElement('span');
		leftSpan.className = "LeftPart";
		rightSpan.className = "RightPart";
		rightSpan.appendChild(document.createTextNode("Choisir..."));
		leftSpan.appendChild(rightSpan);
		link.appendChild(leftSpan);
		fakeFileUpload.appendChild(link);
		var x = document.getElementsByTagName('input');
		for (var i = 0; i < x.length; i++)
		{
			if (x[i].type != 'file') continue;
			if (x[i].parentNode.className != 'fileinputs') continue;
			x[i].className = 'file hidden';
			var clone = fakeFileUpload.cloneNode(true);
			x[i].parentNode.appendChild(clone);
			x[i].relatedElement = clone.getElementsByTagName('input')[0];
			x[i].onchange = x[i].onmouseout = function()
			{
				this.relatedElement.value = this.value;
			}
		}
	};
	Leetchi.parseFrenchDate = function(date)
	{
		if (!Leetchi.parseFrenchDate.rx)
			Leetchi.parseFrenchDate.rx = new RegExp("\\s*([0-9]+)\\s*[-/]\\s*([0-9]+)\\s*[-/]\\s*([0-9]+)\\s*", "i");
		var oMatches;
		if ((oMatches = Leetchi.parseFrenchDate.rx.exec(date)) == null)
			return null;
		try
		{
			var iDays = parseInt(oMatches[1], 10);
			var iMonths = parseInt(oMatches[2], 10);
			var iYears = parseInt(oMatches[3], 10);
			if (iYears < 100) iYears = iYears + (iYears < 20 ? 2000 : 1900);
			return new Date(iYears, iMonths - 1, iDays);
		} catch (e)
		{
			return null;
		}
	};
	Leetchi.bindFilterCheckbox = function(allItemsSelector, noItemsSelector, items)
	{
		function uncheckExclusive(checkedItemGroup, checkedItem)
		{
			for (var j = 0; j < checkedItemGroup.length; j += 2)
			{
				if (checkedItemGroup[j] != checkedItem)
				{
					var checkboxID = document.getElementById(checkedItemGroup[j]);
					if (!!$(checkboxID).attr('checked'))
					{
						checkboxID._checkBoxManager.click();
					};
				};
			};
		};
		function getClassesToHide()
		{
			var result = [];
			for (var i = items.length - 1; i >= 0; i--)
			{
				var innerList = items[i];
				for (var j = 0; j < innerList.length; j += 2)
				{
					var checkboxID = document.getElementById(innerList[j]);
					var labelSelector = $("label[for=" + innerList[j] + "]");
					if (!!$(checkboxID).attr('checked'))
					{
						result.push(innerList[j + 1]);
						labelSelector.addClass("FilterActive");
					} else
					{
						labelSelector.removeClass("FilterActive");
					};
				};
			};
			if (result.length == 0) return "";
			return "." + result.join(",.");
		};
		function updateVisibility()
		{
			function showOrHideNoItemsMessage()
			{
				if ($(allItemsSelector).filter(":visible").length == 0) $(noItemsSelector).show(); else $(noItemsSelector).hide();
			};
			var classesToHide = getClassesToHide();
			if (classesToHide == "")
			{
				$(allItemsSelector).slideDown("fast", showOrHideNoItemsMessage);
			} else
			{
				$(allItemsSelector).not(classesToHide).slideDown("fast", function() { window.setTimeout(showOrHideNoItemsMessage, 0); });
				$(classesToHide).slideUp("fast", function() { window.setTimeout(showOrHideNoItemsMessage, 0); });
			};
		};
		function clickHandlerBuilder(itemGroup, itemID)
		{
			return function()
			{
				if (!!$(itemID).attr('checked'))
					uncheckExclusive(itemGroup, itemID);
				updateVisibility();
			};
		};
		for (var i = items.length - 1; i >= 0; i--)
		{
			var innerList = items[i];
			for (var j = 0; j < innerList.length; j += 2)
			{
				var checkboxID = document.getElementById(innerList[j]);
				$(checkboxID).click(clickHandlerBuilder(innerList, checkboxID));
			};
		};
		updateVisibility();
	};
	Leetchi.sendForm = function(form, target, button)
	{
		var originalHtml = $(button).children().hide();
		$(button).append("<span class=\"Loading\" style=\"line-height: 42px\"><img src=\"/Content/img/AjaxLoader.gif\"></img> Chargement en cours...</span>");
		function fnError()
		{
			$(button).children(".Loading").remove();
			$(button).children().show();
		};
		$(form).ajaxSubmit({
			success: function(data)
			{
				$(target).html(data);
			},
			error: function()
			{
				fnError();
			}
		});
	};
	Leetchi.paginate = function(addMoreMessage, parent, elements, pagesize)
	{
		var oDiv = document.createElement("DIV");
		oDiv.className = "ShowMoreItems";
		var oLink = document.createElement("A");
		oLink.setAttribute("href", "javascript:void(0);");
		oDiv.appendChild(oLink);
		var iShownCount = pagesize;
		$.each(elements, function(itemIdx, item)
		{
			if (itemIdx >= iShownCount) $(item).hide();
		});
		function updateLink()
		{
			if (iShownCount >= elements.length)
				$(oDiv).hide();
			else
				$(oLink).text(addMoreMessage + " (" + (elements.length - iShownCount) + " cachés)");
		};
		$(oLink).text(addMoreMessage + " (" + (elements.length - iShownCount) + " cachés)")
	        .click(function()
	        {
	        	var iOldCount = iShownCount;
	        	iShownCount += pagesize;
	        	$.each(elements, function(itemIdx, item)
	        	{
	        		if (itemIdx >= iOldCount && itemIdx < iShownCount)
	        			$(item).show();
	        	});
	        	updateLink();
	        });
		updateLink();
		parent.append(oDiv);
	};
	Leetchi.setupDateFieldToRevalidateAutomatically = function(id)
	{
		var $item = $("#" + id);
		var $form = $item.closest("form");
		return function()
		{
			$form.validate().element($item);
		};
	};
	$.validator.setDefaults({
		highlight: function(element, errorClass)
		{
			Leetchi.setFieldError(element);
		},
		unhighlight: function(element, errorClass)
		{
			Leetchi.clearFieldError(element);
		},
		errorPlacement: function(error, element)
		{
			error.appendTo(Leetchi.getFieldError(element));
		},
		focusInvalid: false,
		wrapper: "p"
	});
	jQuery.validator.addMethod("equalToInsensitive", function(value, element, param)
	{
		return value.toLowerCase() == $(param).val().toLowerCase();
	}, jQuery.validator.messages['equalTo']);
	$.validator.addMethod("frenchDate", function(value, element, param)
	{
		if (typeof value != "string") return false;
		if (value.length == 0) return false;
		if (Leetchi.parseFrenchDate(value) == null) return false;
		return true;
	},
		document.location.href.indexOf('Mobile') // HACK !!!
		? "Veuillez saisir une date au format JJMMYYYY."
		: "Veuillez saisir une date au format jj/mm/yyyy.");

	function dateTimeValidatorGenerator(operator)
	{
		return function(value, element, param)
		{
			if (typeof value != "string") return false;
			if (value.length == 0) return false;
			value = Leetchi.parseFrenchDate(value);
			var other = Leetchi.parseFrenchDate(param);
			if (value == null || other == null) return false;
			return operator(value, other);
		};
	};
	$.validator.addMethod("frenchDateMin",
        dateTimeValidatorGenerator(function(v, p) { return v >= p; })
    , $.validator.format("Veuillez saisir une date après le {0}."));
	$.validator.addMethod("frenchDateMinIncl",
        dateTimeValidatorGenerator(function(v, p) { return v >= p; })
    , $.validator.format("Veuillez saisir une date après le {0}."));
	$.validator.addMethod("frenchDateMinExcl",
        dateTimeValidatorGenerator(function(v, p) { return v > p; })
    , $.validator.format("Veuillez saisir une date après le {0}."));
	$.validator.addMethod("frenchDateMax",
        dateTimeValidatorGenerator(function(v, p) { return v <= p; })
    , $.validator.format("Veuillez saisir une date avant le {0}."));
	$.validator.addMethod("frenchDateMaxIncl",
        dateTimeValidatorGenerator(function(v, p) { return v <= p; })
    , $.validator.format("Veuillez saisir une date avant le {0}."));
	$.validator.addMethod("frenchDateMaxExcl",
        dateTimeValidatorGenerator(function(v, p) { return v < p; })
    , $.validator.format("Veuillez saisir une date avant le {0}."));
	$.validator.addMethod("password", function(value)
	{
		if (typeof value != "string") return false;
		if (value.length == 0) return false;
		var bHasLetter = false;
		var bHasNumber = false;
		var i = 0;
		for (i = 0; i < value.length && !(bHasLetter && bHasNumber); i++)
		{
			if ("abcdefghjiklmnopqrstuvwxyzABCDEFGHJIKLMNOPQRSTUVWXYZ".indexOf(value.charAt(i)) > -1)
				bHasLetter = true;
			else
				bHasNumber = true;
		};
		return bHasLetter && bHasNumber;
	}, "Utilisez au moins un chiffre et une lettre dans votre mot de passe");
	$.validator.addMethod("citelis", function(value)
	{
		if (typeof value != "string") return false;
		if (value.length == 0) return false;
		var bHasInvalidChar = false;
		var i = 0;
		for (i = 0; i < value.length && !(bHasInvalidChar); i++)
		{
			if ("=!".indexOf(value.charAt(i)) > -1)
				bHasInvalidChar = true;
		};
		return !bHasInvalidChar;
	}, "Les caractères = (égal) et ! (point d'exclamation) sont interdits dans le nom.");
	$.validator.addMethod("iban", function(value)
	{
		if (typeof value != "string") return false;
		if (value.length == 0) return false;
		value = value.replace(new RegExp("[^0123456789ABCDEFGHJIKLMNOPQRSTUVWXYZ]+", "gi"), "");
		return (new RegExp("^FR[0123456789ABCDEFGHJIKLMNOPQRSTUVWXYZ]{25}$", "gi")).test(value);
	}, "Votre saisie n'est pas un IBAN français valide.");
	$.validator.addMethod("bic", function(value)
	{
		if (typeof value != "string") return false;
		if (value.length == 0) return false;
		value = value.replace(new RegExp("[^0123456789ABCDEFGHJIKLMNOPQRSTUVWXYZ]+", "gi"), "");
		return (new RegExp("^[A-Z]{4}FR[0-9A-Z]{2,5}$", "gi")).test(value);
	}, "Votre saisie n'est pas un code BIC français valide.");
	$.validator.addMethod("flexNumber", function(value)
	{
		if (typeof value != "string") return false;
		if (value.length == 0) return false;
		var fNum = Leetchi.parseNumber(value);
		return !isNaN(fNum) && isFinite(fNum);
	}, "Veuillez saisir un nombre");
	function flexNumberValidatorGenerator(operator)
	{
		return function(value, element, param)
		{
			if (typeof value != "string") return false;
			if (value.length == 0) return false;
			var fNum = Leetchi.parseNumber(value);
			return !isNaN(fNum) && isFinite(fNum) && operator(fNum, Leetchi.parseNumber(param));
		};
	};
	Leetchi.validatorEuroFormater = function(text)
	{
		var oSubMethod = $.validator.format(text);
		return function(param)
		{
			param = Leetchi.formatEuroCents(param);
			return oSubMethod(param);
		};
	};
	$.validator.addMethod("flexEuroNumberMin", flexNumberValidatorGenerator(function(val, param)
	{
		return (val * 100) > param;
    }), Leetchi.validatorEuroFormater("Veuillez saisir un montant supérieur à {0}."));
	$.validator.addMethod("flexEuroNumberMinIncl", flexNumberValidatorGenerator(function(val, param)
	{
		return (val * 100) >= param;
	}), Leetchi.validatorEuroFormater("Veuillez saisir un montant d'au moins {0}."));
	$.validator.addMethod("flexEuroNumberMax", flexNumberValidatorGenerator(function(val, param)
	{
		return (val * 100) < param;
    }), Leetchi.validatorEuroFormater("Veuillez saisir un montant inférieur à {0}."));
	$.validator.addMethod("flexEuroNumberMaxIncl", flexNumberValidatorGenerator(function(val, param)
	{
		return (val * 100) <= param;
       }), Leetchi.validatorEuroFormater("Veuillez saisir un montant inférieur à {0}."));
	$.validator.addMethod("flexNumberMin", flexNumberValidatorGenerator(function(val, param)
	{
		return val > param;
    }), $.validator.format("Veuillez saisir un nombre supérieur à {0}."));
	$.validator.addMethod("flexNumberMinIncl", flexNumberValidatorGenerator(function(val, param)
	{
		return val >= param;
       }), $.validator.format("Veuillez saisir un nombre supérieur ou égal à {0}."));
	$.validator.addMethod("flexNumberMax", flexNumberValidatorGenerator(function(val, param)
	{
		return val < param;
    }), $.validator.format("Veuillez saisir un nombre inférieur à {0}."));
	$.validator.addMethod("flexNumberMaxIncl", flexNumberValidatorGenerator(function(val, param)
	{
		return val <= param;
    }), $.validator.format("Veuillez saisir un nombre plus inférieur ou égal à {0}."));
})();

$.fn.wait = function(time, type)
{
    time = time || 1000;
    type = type || "fx";
	return this.queue(type, function()
	{
        var self = this;
		setTimeout(function()
		{
            $(self).dequeue();
        }, time);
    });
};

$.expr[':'].external = function(obj)
{
    return obj.hostname && obj.hostname !== location.hostname;
};
$.expr[':'].pdf = function(obj)
{
    return obj.href.match(/\.pdf$/) != null;
};


(function ($) {

    $(document).ready(function () {
        $(".fb-login-button").click(function () {
            FB.login(function (response) {
                if (response.authResponse) {
                    onFacebookLoginMobile();
                }
            }, { scope: 'email, user_birthday, friends_birthday' });
        });
    });

})(jQuery);

function onFacebookLoginMobile() {
    window.location = "/FacebookV2/SignOn" + "?ReturnUrl=/";
}
        
