//function global && generique --------------------------------------------------

function empty(mixed_var) {
	var key;
	if (mixed_var === "" || mixed_var === 0 || mixed_var === "0"
			|| mixed_var === null || mixed_var === false
			|| mixed_var === undefined) {
		return true;
	}
	if (typeof mixed_var == 'object') {
		for (key in mixed_var) {
			return false;
		}
		return true;
	}
	return false;
}


function failureFunc(response) {
	errorMessageForm(response.error);
}


function errorMessageForm(msg) {
	var showMsg;
	if ($('#statusLayer') == undefined) {
		alert('Element "statusLayer" do not exist');
	}
	$('#statusLayer').show();
	showMsg = empty(msg) ? 'Error data save / Erreur de sauvegarde' : msg;
	$('#statusLayer').attr("class", 'errorBox');
	$('#statusLayer').html(showMsg);
	$("html").animate( {
		scrollTop :100
	}, "slow");
	
	setTimeout(function(){
		$("#statusLayer").fadeOut("slow");
	}, 4000);
}

function genericPrototype(url, successFunc, method, parameters) {
	method = empty(method) ? 'post' : method;
	successFunc = empty(successFunc) ? 'emptyFct' : successFunc;
	if (!empty(parameters)) {
		$.ajax( {
			url :url,
			type :method,
			data :parameters,
			success :eval(successFunc),
			error :eval(failureFunc)
		});
	} else {
		jQuery.ajax( {
			url :url,
			type :method,
			success :eval(successFunc),
			error :eval(failureFunc)
		});
	}
}
// fin function global && generique --------------------------------------------------

// ------------------------- Gestion list video jquery

function videoClass() {
	var host;
	return {
		$ : function() {
			return host = this;
		},

		list : function(page) {
			genericPrototype(host.urlList+'/page/'+page, 'listCbk');
		},
		urlList :null
	}.$();
}

// function callback
function listCbk(transport, textStatus) {
	if (textStatus == 'success') {
		response = jQuery.evalJSON(transport);
		//response = transport;
		if (empty(response.error)) {
			jQuery('#videoList').html(response.content);
			//$('#videoList').text(response.content);
		} else {
			failureFunc(response);
		}
	} else {
		failureFunc(response);
	}
}

// --------------------------------------fin gestion des video


function initWeekMenuTabSet(menuId, panelId, selectedIndex) {
	if (!isset(menuId))
		return;
	if (!isset(selectedIndex) || isEmpty(selectedIndex))
		selectedIndex = 0;
	var myTab = new uiTabClass(menuId);
	myTab.initialIndex = selectedIndex;
	myTab.firstRun = true;
	myTab.overClassName = 'over';

	myTab.selectedClassName = 'selected';
	myTab.onSelect = function(item, index, pastItem, pastIndex) {
		
		var panel = getObj(panelId);
	
		
		if (!isset(panel))
			return;
		if (isset(pastIndex))
	
			jml.obj.set(jml.xml.node.byPosition(pastIndex, panel), 'display',
					'none');
		jml.obj.set(jml.xml.node.byPosition(index, panel), 'display', 'block');
		// all custom call here...
	}
}

function checkBoxSelect(checkBox) {
	if (checkBox.checked) {
		$valCheck = true;
	} else {
		$valCheck = false;
	}
	for (i = 0; i < document.gloceryList.length; i++) {
		if (document.gloceryList.elements[i].type == "checkbox")
			document.gloceryList.elements[i].checked = $valCheck;
	}
}

function groceryListClass() {

	var c1 = jml.obj;
	var c2 = jml.xml.node;
	var c3 = jml.events;

	var host;
	var ingredientsForm;
	var selectAllInput;
	var deleteBtn;
	var selectedMemberIdCollection;
	var selectedMemberCollection;
	var isSelected = false;
	var firstRun = true;

	function init() {
		if (!isset(ingredientsForm) && isset(host.ingredientsFormId))
			ingredientsForm = getObj(host.ingredientsFormId);
		if (!isset(ingredientsForm))
			return;

		if (!isset(selectAllInput) && isset(host.selectAllInputId))
			selectAllInput = getObj(host.selectAllInputId);
		if (!isset(selectAllInput))
			return;

		if (!isset(deleteBtn))
			deleteBtn = c2.byProximity(selectAllInput, 1);
		if (!isset(deleteBtn))
			return;

		c3.add(selectAllInput, "click", parse);

		c1.set(deleteBtn, "cursor", "pointer");
		c3.add(deleteBtn, "click", delegate(host, "confirmDeleteSelected"));

		parse(null, null, true);

	}

	function parse(eventObject, readOnly, deSelectOnly) {
		var deSelectOnly = deSelectOnly || false;
		var readOnly = readOnly || false;
		var selectedMember = c2.byAttributeValue("type", "checkbox",
				ingredientsForm);
		var isSelected = selectAllInput.checked;
		selectedMemberIdCollection = [];
		selectedMemberCollection = [];

		for ( var i = 0; i < selectedMember.length; i++) {
			var item = selectedMember[i];
			if (item !== selectAllInput) {
				if (!readOnly)
					item.checked = isSelected;
				if (isSelected || (readOnly && item.checked)) {
					selectedMemberCollection.push(c2.parent(item, 2));
					var tempValue = splitVirgule(item.value);
					for ( var j = 0; j < tempValue.length; j++)
						selectedMemberIdCollection.push(tempValue[j]);
				}
				if (firstRun) {
					c3.add(item, 'click', function() {
						if (!this.checked)
							selectAllInput.checked = false;
					});
				}
			}
		}
		firstRun = false;

	}

	function splitVirgule(string) {
		if (!isStr(string))
			return null;
		return string.indexOf(',') != -1 ? string.split(",") : [ string ];
	}

	return {
		constructor : function() {
			c3.add(window, "load", init);
			host = this;
			return this;
		},
		deleteSelected : function(id, element) {

			var id = id || null;
			var element = element || null;

			if (!isset(id)
					&& (!isset(selectedMemberIdCollection) || selectedMemberIdCollection.length == 0))
				return;
			if (!isset(element)
					&& (!isset(selectedMemberCollection) || selectedMemberCollection.length == 0))
				return;

			if (isStr(id))
				selectedMemberIdCollection = splitVirgule(id);
			if (isStr(element))
				selectedMemberCollection = splitVirgule(element);

			if (!isset(selectedMemberIdCollection)
					|| !isset(selectedMemberCollection))
				return;

			if (isset(urmc))
				urmc.delIngredientList(selectedMemberIdCollection,
						selectedMemberCollection);
		},
		confirmDeleteSelected : function() {
			parse(null, true);
			if (isset(host.gatewayUrl) && isset(selectedMemberIdCollection)
					&& (selectedMemberIdCollection.length > 0)) {
				MOOdalBox.openByCode(host.gatewayUrl,
						"Effacer les ingrédients sélectionnés",
						"moodalbox 420 210");
			}
		},
		ingredientsFormId :null,
		selectAllInputId :null,
		gatewayUrl :null

	}.constructor();
}

function initRechercheTabSet(menuId, panelId, selectedIndex) {
	if (!isset(menuId))
		return;
	if (!isset(selectedIndex) || isEmpty(selectedIndex))
		selectedIndex = 0;
	var myTab = new uiTabClass(menuId);
	myTab.initialIndex = selectedIndex;
	myTab.firstRun = true;
	myTab.overClassName = 'over';
	myTab.selectedClassName = 'selected';
	myTab.onSelect = function(item, index, pastItem, pastIndex) {
		var panel = getObj(panelId);
		if (!isset(panel))
			return;
		if (typeof formValidator == "function") {
			new formValidator().clearError();
		}
		if (isset(pastIndex))
			jml.obj.set(jml.xml.node.byPosition(pastIndex, panel), 'display',
					'none');
		jml.obj.set(jml.xml.node.byPosition(index, panel), 'display', 'block');
		// all custom call here...
	}
}
function initSubMenuTabSet(menuId, panelId, selectedIndex) {
	if (!isset(menuId))
		return;
	if (!isset(selectedIndex) || isEmpty(selectedIndex))
		selectedIndex = 0;
	var myTab = new uiTabClass(menuId);
	myTab.initialIndex = selectedIndex;
	myTab.firstRun = true;
	myTab.overClassName = 'over';
	myTab.selectedClassName = 'selected';
	myTab.onSelect = function(item, index, pastItem, pastIndex) {
		var panel = getObj(panelId);
		if (!isset(panel))
			return;
		if (isset(pastIndex))
			jml.obj.set(jml.xml.node.byPosition(pastIndex, panel), 'display',
					'none');
		jml.obj.set(jml.xml.node.byPosition(index, panel), 'display', 'block');
		// all custom call here...
	}
}
function displayScreenClass() {
	var c1 = jml.obj, c2 = jml.xml.node, c3 = jml.events, c4 = jml.browser;
	var scr;
	return {
		$ : function() {
			return this;
		},
		display : function(o, s) {
			if (!isset(scr)) {
				scr = {};
				scr.ctn = c2.create('DIV', document.body);
				scr.msg = c2.create('DIV', scr.ctn);
			}
			if (!isset(scr.ctn) || !isset(scr.msg))
				return;
			c1.set(scr.msg, 'innerHTML', s);
			c1.set(scr.ctn, 'className', 'displayScreenContainer');
			c1.set(scr.msg, 'className', 'displayScreenMessage');
			if (c1.get(scr.ctn, 'display') == 'none')
				c1.set(scr.ctn, 'display', 'block');
			var n1 = c1.get(o, 'offsetWidth'), n2 = c1.get(o, 'offsetHeight');
			if (n1 < 0)
				n1 = 0;
			if ((n2 - 8) < 0)
				n2 = 8;
			c1.set(scr.ctn, 'width', n1 + 'px');
			c1.set(scr.ctn, 'height', (n2 - 8) + 'px');
			var n3 = c1.get(scr.ctn, 'offsetWidth'), n4 = c1.get(scr.ctn,
					'offsetHeight');
			c1.set(scr.ctn, 'left', (c1.get(o, 'offsetLeft') - Math
					.floor((n3 - n1) / 2)) + 'px');
			c1.set(scr.ctn, 'top', (c1.get(o, 'offsetTop') - Math
					.floor((n4 - n2) / 2)) + 'px');
			c1.set(scr.msg, 'left', Math.floor((n3 / 2)
					- (c1.get(scr.msg, 'offsetWidth') / 2)) + 'px');
			c1.set(scr.msg, 'top', Math.floor((n4 / 2)
					- (c1.get(scr.msg, 'offsetHeight') / 2)) + 'px');
		},
		remove : function(b) {
			var b = b || false;
			if (!isset(scr.ctn))
				return;
			if (b)
				c2.remove(scr.ctn);
			if (!b)
				c1.set(scr.ctn, 'display', 'none');
		}
	}.$();
}

function writeDiffuseur(__containerId, domain, dataUrl, byPass) {
	var byPass = byPass || false;
	if (jml.flash.version >= 9 && !byPass) {
		__message = ""; // get content of div...
		__flashInstance = jml.flash.create( {
			container :__containerId,
			src :'/library/swf/diffuseur_ricardo.swf',
			transparent :true,
			nocache :true,
			id :'diffuseur_' + __containerId,
			version :'9,0,0,0',
			bgcolor :'#FFFFFF',
			quality :'high',
			align :'middle',
			width :640,
			height :370
		}, {
			DOMAIN :domain,
			XML_URL :dataUrl
		});
		if (jml.browser.type === 'msie'
				&& (isset(__flashInstance.readyState) && __flashInstance.readyState == 0))
			writeDiffuseur(__containerId, domain, dataUrl, true);
	} else {
		var img = jml.xml.node.create('img', getObj(__containerId));
		jml.obj.set(img, "src", "/library/images/photos/no_flash.jpg");
	}
}

function writeDiffuseurNoel(__containerId, domain, dataUrl, byPass) {
	var byPass = byPass || false;
	if (jml.flash.version >= 9 && !byPass) {
		__message = ""; // get content of div...
		__flashInstance = jml.flash.create( {
			container :__containerId,
			src :'/library/swf/diffuseur_ricardo_noel.swf',
			transparent :true,
			nocache :true,
			id :'diffuseur_' + __containerId,
			version :'9,0,0,0',
			bgcolor :'#FFFFFF',
			quality :'high',
			align :'middle',
			width :640,
			height :370
		}, {
			DOMAIN :domain,
			XML_URL :dataUrl
		});
		if (jml.browser.type === 'msie'
				&& (isset(__flashInstance.readyState) && __flashInstance.readyState == 0))
			writeDiffuseur(__containerId, domain, dataUrl, true);
	} else {
		var img = jml.xml.node.create('img', getObj(__containerId));
		jml.obj.set(img, "src", "/library/images/photos/no_flash.jpg");
	}
}
function writePlayerMultiple(__containerId, byPass) {
	var byPass = byPass || false;
	if (jml.flash.version >= 9 && !byPass) {
		__message = ""; // get content of div...
		__flashInstance = jml.flash.create( {
			container :__containerId,
			src :'/library/swf/player_001.swf',
			transparent :true,
			nocache :true,
			id :'player_' + __containerId,
			version :'9,0,0,0',
			bgcolor :'#FFFFFF',
			quality :'high',
			align :'middle',
			width :529,
			height :320
		}, {});
		if (jml.browser.type === 'msie'
				&& (isset(__flashInstance.readyState) && __flashInstance.readyState == 0))
			writePLayerMultiple(__containerId, true);
	} else {
		var img = jml.xml.node.create('img', getObj(__containerId));
		jml.obj.set(img, "src", "/library/images/icons/no_flash.jpg");
	}
}
function writePlayerSimple(__containerId, byPass, videoUrl) {
	var byPass = byPass || false, videoUrl = videoUrl || null;
	if (jml.flash.version >= 9 && !byPass) {
		__message = ""; // get content of div...
		__flashInstance = jml.flash.create( {
			container :__containerId,
			src :'/library/swf/player_002.swf',
			transparent :true,
			nocache :true,
			id :'player_' + __containerId,
			version :'9,0,0,0',
			bgcolor :'#FFFFFF',
			quality :'high',
			align :'middle',
			width :529,
			height :320
		}, {
			videoUrl :videoUrl
		});
		if (jml.browser.type === 'msie'
				&& (isset(__flashInstance.readyState) && __flashInstance.readyState == 0))
			writePLayerMultiple(__containerId, true);
	} else {
		var img = jml.xml.node.create('img', getObj(__containerId));
		jml.obj.set(img, "src", "/library/images/icons/no_flash.jpg");
	}
}

function writeBanner(__containerId, file, w, h, url, byPass) {
	var byPass = byPass || false;
	var url = url || '';
	if (jml.flash.version >= 9 && !byPass) {
		__message = ""; // get content of div...
		__flashInstance = jml.flash.create( {
			container :__containerId,
			src :'/library/swf/' + file + '.swf?clickTag=' + url,
			transparent :true,
			nocache :true,
			id :file,
			version :'9,0,0,0',
			bgcolor :'#FFFFFF',
			quality :'high',
			align :'middle',
			width :w,
			height :h
		}, {});
		if (jml.browser.type === 'msie'
				&& (isset(__flashInstance.readyState) && __flashInstance.readyState == 0))
			writePLayerMultiple(__containerId, true);
	} else {
		var img = jml.xml.node.create('img', getObj(__containerId));
		jml.obj.set(img, "src", "/library/images/icons/no_flash.jpg");
	}

}

// Florian
function userRecipeManagerClass() {
	var c1 = jml.obj, c2 = jml.xml.node, c3 = jml.events, c4 = jml.server, c5 = new displayScreenClass();
	var host;
	var id = 'layermsg';
	var inUse = false;
	var sendIngredientListInUse = false;

	return {
		$ : function() {
			host = this;
			return this;
		},
		addRecipeToWeeklyMenu : function() {
			if (!isset(host.urlAddMenuWeek))
				return;
			var cx = new c4.connection();
			var x1 = getObj('addweeklymenu')['typeMenu'].value;
			var x2 = getObj('recipeMenu').value; // should be only one recipe
			var x3 = getObj('weekMenu').value;
			var x4 = getObj('yearMenu').value;
			var x5 = getObj('dayMenu').value;
			var x6 = getObj('or_date').value;
			var x7 = getObj('or_type').value;
			c1.set('reload_' + x1, 'innerHTML',
					'Enregistrement des données en cours...');
			cx.url = host.urlAddMenuWeek
			cx.data = {
				recipe :x2,
				type :x1,
				week :x3,
				year :x4,
				day :x5,
				or_date :x6,
				or_type :x7
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					if (!isEmpty(x6)) {
						host.reloadDayMenu(x5); // reload the ligthbox layer
						hS('dayMenu', x5);
						classHighlither('menuday_' + x5);
						host.reloadFullDayMenu(x5);
						c1.set('or_date', 'value', dta.data.dateor);
						c1.set('or_type', 'value', x1);
						c1.set('weekMenu', 'value', dta.data.week);
						c1.set('yearMenu', 'value', dta.data.year);
						c1.set('dayMenu', 'value', dta.data.weekday);
					} else { // only reload the menu type row
						c1.set('reload_' + x1, 'innerHTML',
								dta.data.recipeTitle);
					}
				} else {
					c1
							.set('mainweekaddmenu_container', 'innerHTML',
									'Attention! Une erreur est survenue lors de l\'enregistrement des données.');
				}
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			// c5.display(getObj(id),'Enregistrement en cours...');
			cx.connect();
		},
		addRecipeToWeeklyMenuSetWeekYear : function(position) {
			var cx = new c4.connection();
			cx.url = host.urlSetWeekYear
			cx.data = {
				position :position
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					getObj('weekMenu').value = dta.data.week;
					getObj('yearMenu').value = dta.data.year;
					host.reloadDayMenu(getObj('dayMenu').value);
				}
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		reloadDayMenu : function(weekday) {
			var cx = new c4.connection();
			var x1 = getObj('weekMenu').value;
			var x2 = getObj('yearMenu').value;
			c1.set('usermenuweekcontainer', 'innerHTML',
					'Recherche des menus en cours...');
			cx.url = host.urlDayMenuReloader;
			cx.data = {
				weekday :weekday,
				week :x1,
				year :x2
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					c1.set('usermenuweekcontainer', 'innerHTML', dta.data);
				}
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		reloadFullDayMenu : function(weekday, target) {
			var cx = new c4.connection();
			var x1 = getObj('weekFullMenu').value;
			var x2 = getObj('yearFullMenu').value;
			var x3 = getObj('timestampFullMenu').value;
			var xT = getObj('dayFullMenu');
			if (inUse)
				return;
			inUse = true;
			hS('dayMenu', weekday);
			if (isset(target))
				classHighlither(target);
			// c1.set('loadinglayer', 'display', 'block');
			cx.url = host.urlFullDayMenuReloader;
			cx.data = {
				weekday :weekday,
				week :x1,
				year :x2,
				timestamp :x3
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					(isset(xT)) ? c1.set('dayFullMenu', 'value', weekday)
							: false;
					c1.set('fullusermenuweekcontainer', 'innerHTML', dta.data);
					if (isset(MOOdalBox))
						MOOdalBox.init(null, true);
				}
				c1.set('loadinglayer', 'display', 'none');
				inUse = false;
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		reloadFullDayMenu2 : function(timestamp) {
			var cx = new c4.connection();
			if (inUse)
				return;
			inUse = true;
			// c1.set('loadinglayer', 'display', 'block');
			cx.url = host.urlFullDayMenuReloader2;
			cx.data = {
				timestamp :timestamp
			};
			// alert('here ... reloadFullDayMenu2 #4');
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					c1.set('yearFullMenu', 'value', dta.data.yearFullMenu);
					c1.set('weekFullMenu', 'value', dta.data.weekFullMenu);
					c1.set('timestampFullMenu', 'value', timestamp);
					c1.set('fullusermenuweekcontainer', 'innerHTML',
							dta.data.html);
					if (isset(MOOdalBox))
						MOOdalBox.init(null, true);
				}
				// c1.set('loadinglayer', 'display', 'none');
				inUse = false;
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			// alert('devant cx.connect');
			cx.connect();
		},
		addRecipeToBook : function(recipe) {
			if (!isset(host.urlAddRecipeBook))
				return;
			var cx = new c4.connection();
			var layer = (!isset(host.layermsg) ? id : host.layermsg);
			cx.url = host.urlAddRecipeBook
			cx.data = {
				recipe :recipe
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					c1.set('actionRecipeBook_' + recipe, 'className',
							'disabled');
					c1.set('actionRecipeBook_' + recipe, 'innerHTML',
							'mon livre de recettes');
					MOOdalBox.close();
				} else {
					c1.set('error', 'innerHTML', dta.error_msg);
					c1.set('error', 'display', 'block');
				}
				c1.set(layer, 'display', 'none');
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		delRecipeToBook : function(recipe) {
			if (!isset(host.urlDelRecipeBook))
				return;
			var cx = new c4.connection();
			cx.url = host.urlDelRecipeBook
			cx.data = {
				recipe :recipe
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					c1.set('plusNav' + recipe, 'display', 'none');
					c1.set('errorRecipeBook' + recipe, 'innerHTML',
							'Recette supprimée');
					MOOdalBox.close();
				} else {
					c1.set('error', 'innerHTML', dta.error_msg);
					c1.set('error', 'display', 'block');
				}

				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		delRecipeToWeeklyMenu : function() {
			if (!isset(host.urlDelRecipeToWeeklyMenu))
				return;
			var cx = new c4.connection();
			var x1 = getObj('deletewmdate').value;
			var x2 = getObj('deletewmtype').value;
			var x3 = getObj('deletewmrecipe').value;
			var x5 = getObj('dayFullMenu').value;
			cx.url = host.urlDelRecipeToWeeklyMenu
			cx.data = {
				recipe :x3,
				date :x1,
				type :x2
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					host.reloadFullDayMenu(x5); // reload the parent page
					MOOdalBox.close();
				} else {
					c1.set('error', 'innerHTML', dta.error_msg);
					c1.set('error', 'display', 'block');
				}
				c1.set('message', 'display', 'none');
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			// c5.display(getObj(id),'Enregistrement en cours...');
			cx.connect();
		},
		addRecipeToIngredientList : function(recipe) {
			if (!isset(host.urlAddRecipeToIngredientList))
				return;
			var cx = new c4.connection();
			var layer = (!isset(host.layermsg) ? id : host.layermsg);
			cx.url = host.urlAddRecipeToIngredientList
			cx.data = {
				recipe :recipe
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					c1.set('actionGroceryList_' + recipe, 'className',
							'disabled');
					c1.set('actionGroceryList_' + recipe, 'innerHTML',
							'ma liste d\'épicerie');
					MOOdalBox.close();
				} else {
					c1.set('error', 'innerHTML', dta.error_msg);
					c1.set('error', 'display', 'block');
				}
				c1.set(layer, 'display', 'none');
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			// c5.display(getObj(id),'Enregistrement en cours...');
			cx.connect();
		},
		delIngredientList : function(ingredient, element) {

			if (!isset(host.urlDelIngredientList))
				return;
			var ingredient = ingredient || null;
			var element = element || null;
			if (!isset(ingredient) || !isset(element))
				return;

			var cx = new c4.connection();
			cx.url = host.urlDelIngredientList
			cx.data = {
				ingredient :ingredient
			};

			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					for ( var i = 0; i < element.length; i++) {
						var item = isStr(element[i]) ? getObj(element[i])
								: element[i];
						if (isset(item)) {
							var categoryContainer = c2.parent(item, 3);
							var categoryList = c2.parent(item, 1);
							c2.remove(item);
							var length = c2.length(categoryList);
							if (length == 0)
								c2.remove(categoryContainer);
						}
					}
					MOOdalBox.close();
				} else {
					c1.set('error', 'innerHTML', dta.error_msg);
					c1.set('error', 'display', 'block');
				}
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		addIngredientList : function(ingredient) {
			if (!isset(host.urlAddIngredientList))
				return;
			var ingredient = ingredient || null;
			if (!isset(ingredient))
				return;
			var cx = new c4.connection();
			cx.url = host.urlAddIngredientList
			cx.data = {
				ingredient :ingredient
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					MOOdalBox.close();
				} else {
					c1.set('error', 'innerHTML', dta.error_msg);
					c1.set('error', 'display', 'block');
				}
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();

		},
		sendIngredientList : function(button) {

			var button = button || null;
			if (sendIngredientListInUse)
				return;
			sendIngredientListInUse = true;
			if (!isset(host.urlSendIngredientList))
				return;

			var displayState = getObj('displayStateSendIngredientList');
			if (!isset(displayState)) {
				displayState = c2.create('div', document.body);
				if (isset(displayState))
					c1.set(displayState, 'className',
							'displayStateSendIngredientList');
			}

			var cx = new c4.connection();
			cx.url = host.urlSendIngredientList;
			cx.data = {};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);

				if (isset(displayState) && isset(button)) {
					c1.set(displayState, 'innerHTML',
							dta.result_code == 1 ? "Courriel envoyé"
									: "Erreur d'envoi");
					c1.set(displayState, 'display', "block");
					var n1 = c1.get(button, 'offsetTop');
					var n2 = c1.get(displayState, 'offsetHeight');
					var n3 = c1.get(button, 'offsetWidth');

					c1.set(displayState, 'left',
							c1.get(button, 'offsetLeft') + 'px');
					c1.set(displayState, 'top', (n1 - n2 - 4) + 'px');
					c1.set(displayState, 'width', (n3) + 'px');
					c1.set(displayState, 'alpha', 100);

					clearTimeout(host.sendIngredientListTimeout);
					host.sendIngredientListTimeout = setTimeout( function() {
						clearTimeout(host.sendIngredientListTimeout);
						var jme1 = new jml.jme.motion();
						jme1.onMotionFinished = function(target, property) {
							sendIngredientListInUse = false;
						}
						jme1.start( {
							target :displayState,
							property :'alpha',
							end :0,
							duration :25,
							equation :'easeOut',
							id :null
						});
					}, 1600);

				}
				if (dta.result_code == 1) {
					for ( var i = 0; i < element.length; i++) {
						var item = isStr(element[i]) ? getObj(element[i])
								: element[i];
						if (isset(item))
							c2.remove(item);
					}
					MOOdalBox.close();
				} else {
					sendIngredientListInUse = false;
				}
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		addMenuReception : function(menureception) {
			var cx = new c4.connection();
			var x1 = getObj('addmenureceptionRecipeID').value;
			var x2 = menureception || getObj('menureceptionexistID').value;
			var x3 = null || getObj('previousmenureceptionexistID').value;

			if (x2 == '') {
				c1
						.set('menureception_message', 'innerHTML',
								'Vous devez sélectionner un menu existant avant d\'ajouter la recette');
				c1.set('menureception_message', 'display', 'block');
				return;
			}

			cx.url = host.urlAddMenuReception;
			cx.data = {
				recipe :x1,
				menureception :x2,
				prevousMenuReceptionID :x3
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				if (dta.result_code == 1) {
					// reload the li of the menu if previous reception menu is
					// provide
					if (x3 != '') {
						host.loadMenuReceptionInfo(x3, true);
						host.loadMenuReceptionInfo(x2, true);
					}
					MOOdalBox.close();
				} else {
					c1.set('menureception_message', 'innerHTML',
							dta.data.message);
					c1.set('menureception_message', 'display', 'block');
				}
				c5.remove();
			}
			cx.onError = function(id, msg) {
				c1.set('menureception_message', 'innerHTML',
						'Erreur de procédure');
			};
			cx.connect();
		},
		createAndAddMenuReception : function(addmenu, frompopup, reloaddiv) {
			var cx = new c4.connection();
			var x1 = frompopup ? getObj('addpopupmenureceptionRecipeDate').value
					: getObj('addmenureceptionRecipeDate').value;
			var x2 = frompopup ? getObj('addpopupmenureceptionRecipeTitle').value
					: getObj('addmenureceptionRecipeTitle').value;

			if (!addmenu) {
				var container = 'menureceptionpage_message';
			} else {
				var x3 = frompopup ? getObj('addmenureceptionPager').value
						: getObj('addmenureceptionPager').value;
				var container = 'menureception_message';
			}

			if (x2 == '') {
				c1
						.set(container, 'innerHTML',
								'Le champs "Nom de la réception" ne doit pas être vide.');
				c1.set(container, 'display', 'block');
				return;
			}

			c1.set(container, 'innerHTML', 'Enregistrement des données...');
			c1.set(container, 'display', 'block');
			cx.url = host.urlCreateMenuReception;
			cx.data = {
				date :x1,
				title :x2
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				host.isLogged(dta);
				c1.set(container, 'innerHTML', dta.data.message);
				if (dta.result_code == 1) {
					if (!addmenu) {
						window.location.href = host.urlReloadMenuReceptionPage;// reload
																				// the
																				// page
					} else {
						host.addMenuReception(dta.data.menuid);// add recipe to
																// table
																// reception_to_recipe
						if (reloaddiv != false) {
							var cx1 = new c4.connection();
							cx1.url = host.urlReloadMenuReception;
							cx1.data = {
								page :x3
							};
							cx1.onLoad = function(result) {
								var rlt = decode(result);
								c1.set('menureceptionlistdiv', 'innerHTML',
										rlt.data);// get the page content
								host.loadMenuReceptionInfo(reloaddiv);
								host.loadMenuReceptionInfo(dta.data.menuid);
							}
							cx1.connect();
						}
					}
				}
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			cx.connect();
		},
		loadMenuReceptionInfo : function(menuId, force, pager) {
			if (!isset(menuId))
				return;
			if (!isset(pager))
				pager = 1;
			// hide li
		if (!force) {
			if (getObj('showmenu_' + menuId).innerHTML != '') {
				c1.set('showmenu_' + menuId, 'innerHTML', '');
				return;
			}
		}

		var cx = new c4.connection();
		c1.set('showmenu_' + menuId, 'innerHTML', 'Recherche...');
		cx.url = host.urlLoadMenuReception;
		cx.data = {
			menuID :menuId,
			pager :pager
		};
		cx.onLoad = function(data) {
			var dta = decode(data);
			host.isLogged(dta);
			c1.set('showmenu_' + menuId, 'innerHTML', dta.data);
			c5.remove();
		}
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		cx.connect();
	},
	delUserMenuReception : function(x1) {
		var cx = new c4.connection();
		cx.url = host.urlDeleteMenuReception
		cx.data = {
			menuID :x1
		};
		cx.onLoad = function(data) {
			var dta = decode(data);
			host.isLogged(dta);
			if (dta.result_code == 1) {
				c1.set('showmenuid_' + x1, 'display', 'none')
				MOOdalBox.close();
			} else {
				c1.set('error', 'innerHTML', dta.error_msg);
				c1.set('error', 'display', 'block');
			}
			c5.remove();
		}
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		cx.connect();
	},
	deleteRecipefromUserMenu : function(menu, recipe, fromMenuMOOdalBox) {
		var cx = new c4.connection();
		cx.url = host.urlDeleteRecipefromUserMenu;
		if (!fromMenuMOOdalBox) {
			cx.data = {
				menuID :menu,
				recipeID :recipe
			};
		} else {
			cx.data = {
				menutodelete :menu,
				recipeType :recipe,
				weekMenu :getObj('weekMenu').value,
				yearMenu :getObj('yearMenu').value,
				dayMenu :getObj('dayMenu').value
			};
		}
		cx.onLoad = function(data) {
			var dta = decode(data);
			host.isLogged(dta);
			if (dta.result_code == 1) {
				if (!fromMenuMOOdalBox) {
					host.loadMenuReceptionInfo(menu, true);
					MOOdalBox.close();
				} else {
					c1.set('reload_' + recipe, 'innerHTML', '');
				}
			} else {
				c1.set('error', 'innerHTML', dta.error_msg);
				c1.set('error', 'display', 'block');
			}
			c5.remove();
		}
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		cx.connect();
	},
	isLogged : function(dta) {
		if (dta.result_code == 2) {
			window.location.href = '/membre';
		}
	},
	urlAddRecipeBook :'/user/ajaxaddrecipetorecipebook',
	urlSetWeekYear :'/user/ajaxsetweekyear',
	urlDayMenuReloader :'/user/ajaxreloaddaymenu',
	urlFullDayMenuReloader :'/user/ajaxreloadfulldaymenu',
	urlFullDayMenuReloader2 :'/user/ajaxreloadfulldaymenubyweek',
	urlDelRecipeToWeeklyMenu :'/user/ajaxdeleteweeklymenu',
	urlAddMenuWeek :'/user/ajaxaddweeklymenu',
	urlDeleteRecipeMenuWeek :'/user/ajaxdeleteweeklymenu',
	urlDelRecipeBook :'/user/ajaxremoverecipetorecipebook',
	urlDelIngredientList :'/user/ajaxremoveingredienttogrocerylist',
	urlAddIngredientList :'/user/ajaxaddingredienttogrocerylist',
	urlSendIngredientList :'/user/ajaxsendgrocerylist',
	urlAddRecipeToIngredientList :'/user/ajaxaddrecipetogrocerylist',
	urlAddMenuReception :'/user/ajaxaddmenureception',
	urlCreateMenuReception :'/user/ajaxcreatemenureception',
	urlLoadMenuReception :'/user/ajaxloadmenureception',
	urlDeleteMenuReception :'/user/ajaxdeleteusermenureception',
	urlDeleteRecipefromUserMenu :'/user/ajaxdeleterecipefromusermenu',
	urlReloadMenuReception :'/user/ajaxreloadreceptionmenulisting',
	urlReloadMenuReceptionPage :'/membre/mon-menu-recevoir',
	recipe :null,
	layermsg :null
	}.$();
}

function userRegistrationClass() {
	var c1 = jml.obj, c2 = jml.xml.node, c3 = jml.events, c4 = jml.server, c5 = new displayScreenClass();
	var host;
	var id = 'layermsg';

	return {
		$ : function() {
			host = this;
			return this;
		},
		validateSignUp : function() {
			var cx = new c4.connection();
			self.scrollTo(0, 100)// go back to top of the form
			var id = 'errorLayer';
			c1
					.set(id, 'innerHTML',
							'<span>Validation et enregistrement des données....</span>');
			cx.url = host.urlSignUp
			cx.data = {
				password :getObj('passwordregistration').value,
				password_check :getObj('passwordconfirm').value,
				firstname :getObj('firstname').value,
				lastname :getObj('lastname').value,
				username :getObj('usernameregistration').value,
				email :getObj('emailregistration').value,
				emailConfirm :getObj('emailregistrationConfirm').value,
				postalCode :getObj('postalCode').value,
				phoneHome :getObj('phoneHome').value,
				phoneWork :getObj('phoneWork').value,
				cellNumber :getObj('cellNumber').value,
				captcha_code :getObj('captcha_code').value,
				captcha_id :getObj('captcha_id').value,
				accept :getObj('accept').checked,
				town :getObj('town').value,
				province :getObj('province').value,
				sex :getObj('hiddensex').value,
				grage :getObj('grage').value,
				hearabout :getObj('hearabout').value,
				family :getObj('hiddenfamily').value,
				reception :getObj('hiddenreception').value,
				familysize :getObj('familysize').value,
				familygrage :getObj('familygrage').value,
				magazine :getObj('magazine').value,
				birthdayday :getObj('birthdayday').value,
				birthdaymonth :getObj('birthdaymonth').value,
				birthdayyear :getObj('birthdayyear').value,
				optIn :getObj('optIn').checked
			};
			cx.onLoad = function(data) {
				var dta = decode(data);
				if (dta.result_code == 0) { // error
					c1.set(id, 'innerHTML',
							'<span>' + dta.error_msg + '</span>');
				} else {
					window.location.href = '/membre/merci'; // redirection
				}
				c5.remove();
			}
			cx.onError = function(id, msg) {
				alert(id + ", msg = " + msg);
			};
			// c5.display(getObj(id),'Enregistrement en cours...');
			cx.connect();
		},
		updateProfile : function() {
			var cx = new c4.connection();
			self.scrollTo(0, 100)// go back to top of the form
		var id = 'errorLayer';
		c1.set(id, 'innerHTML',
				'<span>Validation et enregistrement des données....</span>');
		cx.url = host.urlSignUp
		cx.data = {
			firstname :getObj('firstname').value,
			lastname :getObj('lastname').value,
			postalCode :getObj('postalCode').value,
			phoneHome :getObj('phoneHome').value,
			phoneWork :getObj('phoneWork').value,
			cellNumber :getObj('cellNumber').value,
			town :getObj('town').value,
			province :getObj('province').value,
			sex :getObj('hiddensex').value,
			grage :getObj('grage').value,
			hearabout :getObj('hearabout').value,
			family :getObj('hiddenfamily').value,
			reception :getObj('hiddenreception').value,
			familysize :getObj('familysize').value,
			familygrage :getObj('familygrage').value,
			magazine :getObj('magazine').value,
			birthdayday :getObj('birthdayday').value,
			birthdaymonth :getObj('birthdaymonth').value,
			birthdayyear :getObj('birthdayyear').value,
			optIn :getObj('optIn').checked
		};
		cx.onLoad = function(data) {
			var dta = decode(data);
			if (dta.result_code == 0) { // error
				c1.set(id, 'innerHTML', '<span>' + dta.error_msg + '</span>');
			} else {
				c1.set(id, 'innerHTML',
						'<span>Enregistrement des données terminé.</span>');
			}
			c5.remove();
		}
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		// c5.display(getObj(id),'Enregistrement en cours...');
		cx.connect();
	},
	changeProfileEmail : function() {
		var cx = new c4.connection();
		var id = 'changeemail_message';
		c1.set(id, 'display', 'block');
		cx.url = '/user/ajaxchangeemail';
		cx.data = {
			newEmail :getObj('newemail').value,
			newEmailConfirm :getObj('confirmnewemail').value
		};
		cx.onLoad = function(data) {
			var dta = decode(data);
			if (dta.result_code == 0) { // error
				c1.set(id, 'innerHTML', dta.error_msg);
			} else {
				c1.set('profilechangeemail', 'value', dta.data.email);
				c1.set(id, 'innerHTML', dta.data.response);
				c1.set('changeemail_container', 'display', 'none');
			}
			c5.remove();
		}
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		cx.connect();
	},
	changeProfilePassword : function() {
		var cx = new c4.connection();
		var id = 'changepassword_message';
		c1.set(id, 'display', 'block');
		cx.url = '/user/ajaxchangepassword';
		cx.data = {
			oldpasswordprofil :getObj('oldpasswordprofil').value,
			newpasswordprofil :getObj('newpasswordprofil').value,
			newpasswordconfirmprofil :getObj('newpasswordconfirmprofil').value
		};
		cx.onLoad = function(data) {
			var dta = decode(data);
			if (dta.result_code == 0) { // error
				c1.set(id, 'innerHTML', dta.error_msg);
			} else {
				c1.set(id, 'innerHTML', dta.data.response);
				c1.set('changepassword_container', 'display', 'none');
			}
			c5.remove();
		}
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		cx.connect();
	},
	validateLostPassword : function() {
		if (!isset(host.validateurl))
			return;
		if (!isset(host.container))
			return;
		id = host.container;
		var cx = new c4.connection();
		var x2 = getObj('validate_email').value;
		var x3 = getObj('validate_eid').value;
		cx.url = host.validateurl;
		cx.data = {
			validate_email :x2,
			validate_eid :x3
		};
		cx.onLoad = function(data) {
			var dta = decode(data);
			if (dta.result_code == 0) {
				getObj(host.container).style.display = 'block';
			} else {
				c5.display(getObj('loader'), 'Redirection en cours...');
				getObj('confirmation').style.display = 'block';
				getObj('form').style.display = 'none';
			}
			c5.remove();
		};
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		c5.display(getObj('loader'), 'Vérification en cours...');
		cx.connect();
	},
	urlSignUp :null,
	recipe :null,
	validateurl :null,
	container :null,
	redirection :0,
	clearScreen : function() {
		c5.remove();
	}
	}.$();
}

function userMenuClass() {
	var c1 = jml.obj, c2 = jml.xml.node, c3 = jml.events, c4 = jml.server, c5 = new displayScreenClass();
	var host;
	var id = 'layermsg';

	return {
		$ : function() {
			host = this;
			return this;
		},
		changeWeek : function(param) {
			// split string and redirect to the proper page
		// var p=param.split(",");
		// fullusermenuweekcontainer
		var url = host.redirectionurl + '/t/' + param;
		window.location.href = url; // redirection
	},
	validateLostPassword : function() {
		if (!isset(host.validateurl))
			return;
		if (!isset(host.container))
			return;
		id = host.container;
		var cx = new c4.connection();
		var x2 = getObj('validate_email').value;
		var x3 = getObj('validate_eid').value;
		cx.url = host.validateurl;
		cx.data = {
			validate_email :x2,
			validate_eid :x3
		};
		cx.onLoad = function(data) {
			var response = decode(data);
			if (!response.data.success) {
				getObj(host.container).style.display = 'block';
			} else {
				c5.display(getObj('loader'), 'Redirection en cours...');
				getObj('confirmation').style.display = 'block';
				getObj('form').style.display = 'none';
			}
			c5.remove();
		};
		cx.onError = function(id, msg) {
			alert(id + ", msg = " + msg);
		};
		c5.display(getObj('loader'), 'Vérification en cours...');
		cx.connect();
	},
	urlSignUp :null,
	recipe :null,
	validateurl :null,
	redirectionurl :null,
	container :null,
	redirection :0,
	clearScreen : function() {
		c5.remove();
	}
	}.$();
}

function hS(i, v) {
	var c1 = jml.obj
	c1.set(i, 'value', v);
}

function classHighlither(item) {
	item = getObj(item);
	var x1 = jml.xml.node.parent(item, 1);
	var x2 = jml.xml.node.byPartialAttributeValue('class', 'selected', x1)[0];
	if (isset(x2))
		removeCssClass(x2, 'selected');
	addCssClass(item, 'selected');
}
function addCssClass(object, className) {
	var s1 = jml.obj.get(object, "className");
	if (!isset(s1))
		s1 = "";
	if (s1.indexOf(className) == -1)
		jml.obj.set(object, "className", s1 + " " + className);
}
function removeCssClass(object, className) {
	var s1 = jml.obj.get(object, "className");
	if (!isset(s1))
		s1 = "";
	if (s1.indexOf(className) != -1)
		jml.obj.set(object, "className", s1.replace(new RegExp("(\\b"
				+ className + "\\b)+", "gi"), ""));
}

// Side Search panel...
var searchPanel = new function() {

	var c1 = jml.obj;
	var c2 = jml.xml.node;
	var c3 = jml.events;
	var c4 = jml.jme;

	var myDDMenu;
	var index = 0;
	var pastIndex;

	var host;

	var element_1_Id = "ddMenuASearchForm";
	var element_2_Id = "ddMenuMSearchForm";

	var container;
	var initialPanel;
	var firstRun = true;
	var initialSearchType;
	var btnArticle;

	function init(type) {

		initialSearchType = type || null;

		var o1 = getObj(element_1_Id);
		var o2 = getObj(element_2_Id);
		if (!isset(o1) || !isset(o2))
			return;

		if (!isset(container))
			container = getObj("searchFormContainer");
		if (!isset(container))
			return;

		myDDMenu = new uiDropDownClass(element_1_Id, element_2_Id, null, null,
				173);
		myDDMenu.onSelect = function(item) {
			var x1 = c2.byPosition(0, o1);
			if (isset(x1))
				c1.set(x1, "innerHTML", c1.get(item, "innerHTML"));
			var n1 = c2.position(item);
			if (n1 != index) {
				pastIndex = index;
				index = n1;
			}
			switchForm();
		}
		myDDMenu.initialize();
		if (initialSearchType == "searcharticle")
			index = 1;

		var o3 = getObj("searcharticle_keywords");
		if (isset(o3))
			c3.add(o3, "focus", validateIndex);
		if (initialSearchType != 'searcharticle') {
			var o4 = getObj('advancedSearchQuickLink');
			if (!isset(o4))
				return;
			c1.set(o4, 'display', 'block');
			c3.add(o4, "click", validateIndex);
		}

	}
	function switchForm() {
		c1.set('advancedSearchQuickLink', 'display', 'none');
		if (firstRun) {
			firstRun = false;
			var x1 = c2.byAttributeValue("class", "panelShow", container)[0];
			if (isset(x1)) {
				var n1 = c1.get(x1, "offsetHeight");
				c1.set(container, "className", "mask");
				c1.set(container, "height", c1.get(x1, "offsetHeight") + "px");
			}
		}

		if (!isset(pastIndex))
			pastIndex = index == 0 ? 1 : 0;
		if (typeof formValidator == "function") {
			new formValidator().clearError();
		}
		var x1 = c2.byPosition(pastIndex, container);
		if (isset(x1))
			c1.set(x1, "display", "none");
		var x2 = c2.byPosition(index, container);
		if (isset(x2)) {
			c1.set(x2, "display", "block");
			if (index == 0) {
				try {
					getObj("searchrecipe_keywords").focus();
				} catch (errorObject) {
				}
			}
			var n1 = c1.get(x2, "offsetHeight");
			if (isset(n1))
				animateTo(n1, null);
		}
	}
	function validateIndex() {
		if (index == 0)
			switchForm();
	}
	function animateTo(height, callback) {
		var jme1 = new c4.motion();
		jme1.onMotionFinished = function(target, property) {
			if (isset(callback))
				callback(target, property);
		}
		jme1.start( {
			target :container,
			property :'height',
			end :height,
			duration :13,
			equation :'easeOut',
			id :null
		});
	}
	function addCssClass(object, className) {
		var s1 = c1.get(object, "className");
		if (!isset(s1))
			s1 = "";
		if (s1.indexOf(className) == -1)
			c1.set(object, "className", s1 + " " + className);
	}
	function removeCssClass(object, className) {
		var s1 = c1.get(object, "className");
		if (!isset(s1))
			s1 = "";
		if (s1.indexOf(className) != -1)
			c1.set(object, "className", s1.replace(new RegExp("(\\b"
					+ className + "\\b)+", "gi"), ""));
	}
	return {
		constructor : function() {
			return host = this;
		},
		isExternal :false,
		initialize :init
	}.constructor();
}

function initializeFormDDMenu(formName, InputName, height, scrollable,
		callback, forcedInit, width) {
	var scrollable = scrollable || null;
	var height = height || null;
	var width = width || null;
	var callback = callback || null;
	var forcedInit = forcedInit || false;

	var myDDMenu = new uiDropDownClass(InputName, "ddmenu_" + InputName,
			scrollable, height, width, "click");
	myDDMenu.onSelect = function(item) {
		var _form = getObj(formName);
		if (!isset(_form))
			return;
		var _input = _form[InputName];
		if (!isset(_input))
			return;
		var _anchor = getObj(InputName);
		if (!isset(_anchor))
			return;
		var x1 = jml.xml.node.byPosition(0, item);
		if (isset(x1)) {

			var label = jml.obj.get(x1, "innerHTML");

			var value = jml.obj.get(x1, "id");

			if (isset(value) && value.indexOf('ddmenuValue_') != -1)
				value = value.replace('ddmenuValue_', '');
			if (!isset(value))
				value = label;

			jml.obj.set(_input, "value", value);
			if (label.length > 30)
				label = label.substring(0, 30) + "...";

			var x2 = jml.xml.node.byPosition(0, _anchor);
			if (isset(x2) && lower(x2.nodeName) == "span") {
				jml.obj.set(x2, "innerHTML", label);
			} else {
				jml.obj.set(_anchor, "innerHTML", label);
			}
			if (isset(callback))
				callback();
		}
	}
	if (forcedInit) {
		myDDMenu.initialize();
	}
};

function initializePrint(anchorId, ddmenuId) {
	var myDDMenu = new uiDropDownClass(anchorId, ddmenuId, null, null, 120);
};

function toggleViewClass() {

	var host;

	function execute(id, animated, anchor) {
		var element = getObj(id);
		var animated = animated || false;
		var anchor = anchor || null;
		if (!isset(element))
			return;
		var isOpen = false;
		if (animated) {

			var child = jml.xml.node.byPosition(0, element);
			if (!isset(child))
				return;
			var n1 = jml.obj.get(element, "height");
			var n2 = jml.obj.get(child, "offsetHeight");
			var n3 = n1 < n2 ? n2 : 0;
			if (n3 > 0)
				isOpen = true;
			var jme1 = new jml.jme.motion();
			jme1.onMotionFinished = function(target, property) {
				if (isset(host.onToggleFinished))
					host.onToggleFinished(isOpen, target, anchor);
			}
			jme1.start( {
				target :element,
				property :'height',
				end :n3,
				duration :n3 == 0 ? 8 : 13,
				equation :'easeOut',
				id :null
			});

		} else {
			var display = jml.obj.get(element, "display");
			var newDisplay = display != "block" ? "block" : "none";

			if (newDisplay == "block")
				isOpen = true;

			jml.obj.set(element, "display", newDisplay);
			if (isset(host.onToggleFinished))
				host.onToggleFinished(isOpen, element, anchor);

		}
	}
	return {
		constructor : function() {
			host = this;
			return this;
		},
		toggle :execute,
		onToggleFinished :null
	}.constructor();

}

function reloadCaptcha(layer) {
	if (!isset(layer))
		return;
	var c1 = jml.obj, c4 = jml.server, c5 = new displayScreenClass();
	var cx = new c4.connection();
	var id = layer;
	cx.url = '/image/ajaxreloadcaptcha';
	cx.onLoad = function(data) {
		var dta = decode(data);
		c1.set(id, 'innerHTML', dta.data);
		c5.remove();
	};
	c5.display(getObj(id), 'Rechargement de l\'image...');
	cx.connect();
}

function counterClass(url, id) {
	var c1 = jml.server, c2 = jml.events;
	var url = url || null, id = id || null;
	if (!isset(url) || !isset(id))
		return;
	function count() {
		var cx = new jml.server.connection();
		cx.url = url;
		cx.data = {
			itemID :id
		};
		cx.connect();
	}
	return {
		$ : function() {
			c2.add(window, 'load', count);
			return this;
		}
	}.$();
}
function changeTextSize(fromCookie) {
	var x1 = getObj('articleContainer');
	var x2 = jml.xml.node.byPosition(0, x1);
	var s1 = jml.obj.get(x2, 'className');
	if (!isset(s1))
		s1 = ' 2';
	var n1 = s1.match(/\d/);
	n1 = !isset(n1) ? 2 : Number(n1[0]);
	if (fromCookie) {
		var data = jml.cookie.get("textSize");
		if (isset(data)) {
			var n2 = data.index;
			if (!isset(n2))
				return;
			n1 = n2;
		} else {
			return;
		}
	} else {
		n1 = n1 >= 3 ? 1 : n1 + 1;
	}
	jml.obj.set(x2, 'className', 'textSize' + n1);
	jml.cookie.set("textSize", {
		index :n1
	});
}

function smallLoginClass() {

	var c1 = jml.events;
	var c2 = uiFloatClass;

	var myLoginLayer;
	var interacting = false;
	var timeOut;

	function setToTrue() {
		clearTimeout(timeOut);
		interacting = true;
	}
	function setToFalse() {
		interacting = false;
	}
	function delayBlur() {
		timeOut = setTimeout(setToFalse, 200);
	}
	function setAction(remove) {
		var remove = remove || false;
		var a1 = [ 'email', 'password', 'submitBtn' ];
		var s1 = remove ? 'remove' : 'add';
		for ( var i = 0; i < a1.length; i++) {
			var o = getObj("header_login")[a1[i]];
			c1[s1](o, 'focus', setToTrue);
			c1[s1](o, 'keydown', setToTrue);
			c1[s1](o, 'blur', delayBlur);
		}
	}

	return {
		initialize : function() {
			myLoginLayer = new c2("loginAnchor", "header_login_container");
			myLoginLayer.customPosition = function(n1, n2, n3, n4, n5, n6) {
				var p1 = Math.floor((n1 + (n3 / 2)) - (n5 / 2)) - 85;
				var p2 = n2 + n4;
				return {
					x :p1,
					y :p2
				};
			}
			myLoginLayer.onBeforeOpen = function() {
				setAction();
			};
			myLoginLayer.onBeforeClose = function() {
				if (typeof formValidator == "function") {
					new formValidator().clearError();
				}
				setAction(false);
			};
			myLoginLayer.customEvaluation = function() {
				return interacting;
			};
			myLoginLayer.initialize();
		}
	}
}

function recetteDetailAddListClass() {

	var c1 = jml.obj;
	var c2 = jml.xml.node;
	var c3 = jml.events;

	var host;
	var ingredientsForm;
	var selectAllInput;
	var deleteBtn;
	var selectedMemberIdCollection;
	var selectedMemberCollection;
	var isSelected = false;
	var firstRun = true;
	var btnAdd;
	var totalElements = 0;

	function init() {

		if (!isset(ingredientsForm) && isset(host.ingredientsFormId))
			ingredientsForm = getObj(host.ingredientsFormId);
		if (!isset(ingredientsForm))
			return;

		if (!isset(selectAllInput) && isset(host.selectAllInputId))
			selectAllInput = getObj(host.selectAllInputId);
		if (!isset(selectAllInput))
			return;

		c3.add(selectAllInput, "click", parse);

		parse(null, null, true);

	}

	function parse(eventObject, readOnly, deSelectOnly, disableSelected) {

		var deSelectOnly = deSelectOnly || false;
		var disableSelected = disableSelected || false;
		var readOnly = readOnly || false;
		var selectedMember = c2.byAttributeValue("type", "checkbox",
				ingredientsForm);
		var isSelected = selectAllInput.checked;
		selectedMemberIdCollection = [];
		selectedMemberCollection = [];
		totalElements = selectedMember.length - 1;
		for ( var i = 0; i < selectedMember.length; i++) {
			var item = selectedMember[i];
			if (item !== selectAllInput) {
				if (item.checked == true)
					selectedMemberCollection.push(item);
				if (item.disabled == true && item.checked == true)
					continue;
				if (disableSelected && item.checked == true)
					item.disabled = true;
				if (!readOnly && !disableSelected)
					item.checked = isSelected;
				if (isSelected || (readOnly && item.checked)) {
					selectedMemberCollection.push(c2.parent(item, 2));
					var tempValue = splitVirgule(item.value);
					for ( var j = 0; j < tempValue.length; j++)
						selectedMemberIdCollection.push(tempValue[j]);
				}
				if (firstRun) {
					c3.add(item, 'click', delegate(null, function(e, o) {
						if (!o.checked) {
							selectAllInput.checked = false;
							removeFromArray(o, selectedMemberCollection);
						}
						if (o.checked && checkIfAllSelected()) {
							selectAllInput.checked = true;
						}
					}, item));
				}
			}
		}
		firstRun = false;

	}

	function splitVirgule(string) {
		if (!isStr(string))
			return null;
		return string.indexOf(',') != -1 ? string.split(",") : [ string ];
	}

	function checkIfAllSelected() {
		var b = true;
		var selectedMember = c2.byAttributeValue("type", "checkbox",
				ingredientsForm);
		for ( var i = 0; i < selectedMember.length; i++) {
			var item = selectedMember[i];
			if (item !== selectAllInput) {
				if (!item.checked) {
					b = false;
					break;
				}
			}
		}
		return b;
	}

	function removeFromArray(o, a) {
		for ( var i = 0; i < a.length; i++) {
			if (o == a[i]) {
				a.splice(i, 1);
				break;
			}
		}
	}

	function isAlreadyInArray(o, a) {
		var b = false;
		for ( var i = 0; i < a.length; i++) {
			if (o == a[i]) {
				b = true;
				break;
			}
		}
		return b;
	}

	return {
		constructor : function() {
			c3.add(window, "load", init);
			host = this;
			return this;
		},
		addSelected : function(item) {
			if (!isset(btnAdd) && isset(item))
				btnAdd = item;
			parse(null, true);
			if (isset(host.moodalBoxGatewayUrl)
					&& isset(selectedMemberIdCollection)
					&& (selectedMemberIdCollection.length > 0)) {
				MOOdalBox.openByCode(host.moodalBoxGatewayUrl,
						"Ajouter les ingrédients sélectionnés");
			} else {
				window.alert('Veuillez sélectionner au moins un ingrédient');
			}
		},
		confirmAddSelected : function() {
			if (isset(urmc)) {
				urmc.addIngredientList(selectedMemberIdCollection);
				parse(null, false, false, true);
				if (selectAllInput.checked == true) {
					c1.set(selectAllInput, "display", "none");
					if (isset(btnAdd)) {
						c1.set(c2.byPosition(0, btnAdd), "className",
								"disabled");
						try {
							btnAdd.onclick = function() {
								return;
							}
						} catch (e) {
						}
					}
				}
			}
		},
		ingredientsFormId :null,
		selectAllInputId :null,
		moodalBoxGatewayUrl :null,
		gatewayUrl :null

	}.constructor();
}
function subMenuClass() {

	var c1 = jml.obj;
	var c2 = jml.xml.node;
	var c3 = jml.jme;
	var c4 = jml.events;

	var host;
	var container;

	function init() {

		if (!isset(container))
			container = getObj('subMenuContainer');
		if (!isset(container))
			return;

		var s1 = c1.get(container, 'className');
		var n1 = c1.get(container, 'offsetHeight');

		if (s1 != 'subMenuMask') {
			c1.set(container, 'height', n1 + 'px');
			c1.set(container, 'className', 'subMenuMask');
		}
		animateTo(n1);

	}

	function open(anchor) {

		if (!isset(anchor))
			return;

		var n1 = c2.position(anchor);
		var n2 = c2.length(container);
		var x2;
		var state;
		for ( var i = 0; i < n2; i++) {
			var x1 = c2.byPosition(i, container);
			if (isset(x1)) {
				var selected = i == n1;
				if (selected) {
					state = c1.get(x1, 'display') == 'none' ? 'block' : 'none';
					c1.set(x1, 'display', state);
					x2 = x1;
				} else {
					c1.set(x1, 'display', 'none');
				}
			}
		}

		for ( var i = 0; i < c2.length(anchor.parentNode); i++) {
			var x1 = c2.byPosition(i, anchor.parentNode);
			c1.set(c2.byPosition(0, x1), 'className',
					x1 == anchor ? state == 'block' ? 'active' : '' : '');
		}
		var n3 = c1.get(x2, 'offsetHeight');
		animateTo(n3);
	}
	;

	function animateTo(n) {
		var jme1 = new jml.jme.motion();
		jme1.onMotionFinished = function(target, property) {
		}
		jme1.start( {
			target :container,
			property :'height',
			end :n,
			duration :16,
			equation :'easeOut',
			id :null
		});
	}
	;

	return {
		constructor : function() {
			c4.add(window, 'load', init);
			return host = this;
		},
		open :open
	}.constructor();
}

function smToggle(e, id) {
	var jack = e || window.event;
	jack.cancelBubble = true;
	try {
		jack.stopPropagation()
	} catch (err) {
	}
	if (Element.classNames('li' + id) == 'noBullet') {
		$('li' + id).addClassName('active');
	} else {
		$('li' + id).removeClassName('active');
	}
	Effect.toggle('smt' + id, 'blind', {
		duration :0.1
	});
}

function smClick(e, url) {
	var jack = e || window.event;
	jack.cancelBubble = true;
	try {
		jack.stopPropagation()
	} catch (err) {
	}
	window.location = url;
}

// -------- ads
sas_tmstp = Math.round(Math.random() * 10000000000);
sas_masterflag = 1;
function SmartAdServer(sas_pageid, sas_formatid, sas_target) {
	if (sas_masterflag == 1) {
		sas_masterflag = 0;
		sas_master = 'M';
	} else {
		sas_master = 'S';
	}
	;
	document.write('<scr' + 'ipt SRC="http://www3.smartadserver.com/call/pubj/'
			+ sas_pageid + '/' + sas_formatid + '/' + sas_master + '/'
			+ sas_tmstp + '/' + escape(sas_target) + '?"></scr' + 'ipt>');
}

function loadTip(caller){
	 	var toppx = jQuery(caller).offset().top; 
	   	var leftpx= jQuery(caller).offset().left;
	   	toppx-= 350
	   	leftpx -= 120
	   
	   	
	   	
	   	var windowHeight =jQuery(window).scrollTop();
	   		 
	   if(windowHeight > toppx){ jQuery("html:not(:animated),body:not(:animated)").animate({ scrollTop: toppx}, 500)	}
	   	
	   	toppx+="px";
	   	leftpx+="px";
	   	
	   	var videoID = jQuery(caller).attr("href")
	   	 var params = { allowScriptAccess: 'always',wmode: "transparent",allowScriptAccess: 'always', allowfullScreen: 'false',autoplay:'1' };
			var flashVars = {
			clip_id:videoID,
			show_portrait: 0,
			show_byline: 0,
			autoplay:1,
			show_title: 1,
			js_api: 1 // required in order to use the Javascript API
		};
		var attributes = {};

		// Embed the youtube video using SWFObject script
		
		swfobject.embedSWF('http://vimeo.com/moogaloop.swf',"tolltipContent", '465', '262', "9.0.0","expressInstall.swf", flashVars, params,attributes )
	   	
	   	 jQuery("#tooltipTic").css({
	   	 	top:toppx,
	   	 	left:leftpx
	   	 })
	   	 
	   	jQuery("#tooltipTic").css("display","block")
}
 	var tooltipDiv
	jQuery(document).ready(function(){
		
		jQuery("#print_btn").hover(function() {
				jQuery("#ddMenuPrint41").css("display","block")
		}, function() {
				jQuery("#ddMenuPrint41").css("display","none")
		});
	jQuery("#ddMenuPrint41").hover(function() {
		jQuery("#ddMenuPrint41").css("display","block")
	}, function() {
		jQuery("#ddMenuPrint41").css("display","none")
	});
		

		 		jQuery('#weekMenuTabSet li').eq(3).click(function() {
				  	jQuery('#weekMenuTabSet li').removeClass('redDay')
			  })
				  jQuery('#weekMenuTabSet li').eq(3).click(function() {
				  	jQuery(this).addClass('redDay')
			  })
				    jQuery('a.tooltip').click(function() {
				    	
				    	var tmp_string = this.rel;
				    	
				    	var tmp_array = tmp_string.split('|');
				    	//alert(tmp_array[0]);
				    	
				    	addthis_share.url = server +  tmp_array[0];
				    	addthis_share.title = tmp_array[1];
				    	
				    	addthis.button("#atbutton", addthis_config, addthis_share);
				    	//jQuery('#at-logo').remove();
				    	//alert(jQuery('#at-logo').html())
				    	
				    	loadTip(this);
				    	return false;
				    })		 
			   jQuery('a.tooltip').hover(function() {	
				 
			    	var tmp_string = this.rel;
			    	
			    	var tmp_array = tmp_string.split('|');
			    	//alert(tmp_array[0]);
			    	
			    	addthis_share.url = server +  tmp_array[0];
			    	addthis_share.title = tmp_array[1];
				   
				   addthis.button("#atbutton", addthis_config, addthis_share);
				  // alert(jQuery('#at-logo').html());
			    	caller = this;
			   	if(jQuery("#tooltipTic").css("display") != "block"){
			   		
				  tooltipDiv = setTimeout('loadTip(caller)',1000)			
				  }		 
		 		}, function() {
						
		 			clearTimeout(tooltipDiv)
				 });	
						 
				 
			jQuery("#closeTip").live("click",function(){
		    	 swfobject.embedSWF('http://vimeo.com/moop.swf',"tolltipContent", '465', '250', "9.0.0","expressInstall.swf")
		   	 
		   	 	jQuery("#tooltipTic").css("display","none")
		   	 	return false;
		   	 })		
			//var hideban= setTimeout("hidebanner()",150)	;
		   
			var hideban= setTimeout("hidebanner2()",950)	;
		
	});			
	
 	
	function hidebanner2(){
		
//		jQuery(".banner2").each(function(index) {
//			caller = this
//			
//			myvar = jQuery(this).contents()[2];
//			
//			
//			
//			alert(myvar.firstChild); 
//			//alert( jQuery(err_script).attr('innerHtml'));
//			if(jQuery(this).contents().find("script")[1]){
//				jQuery(caller).css("display","none")
//			}
//		});	
		

		
		
	   	 
	}	
 	
	
	function hidebanner(){
		jQuery(".banner").each(function(index) {
			caller = this
			if(!jQuery(this).contents().find("a,img,object,div,embed,span,iframe")[0]){
				jQuery(caller).css("display","none")
			}
		});		   	 
	}	   	 	 