var currentCategorie = null;

function callLoadMenu() {
	var nomMenu = '';

	if (arguments[0] != null && arguments[0].length > 0) {
		nomMenu = "&nom_menu=" + encodeURIComponent(arguments[0]);
	}

	sendRequest('GET', 'blank.php5?mod=Menu' + nomMenu, true, asyncLoadMenu);
}

function callMenuPreview() {
	var nomMenu = '';

	if (arguments[0] != null && arguments[0].length > 0) {
		nomMenu = "&nom_menu=" + encodeURIComponent(arguments[0]);
	}

	sendRequest('GET', 'blank.php5?mod=Menu' + nomMenu, true, asyncMenuPreview);
}

function callMenuBackoffice() {
	masqueFormModifCategorie();

	var nomMenu = $F('listeMenus');
	sendRequest('GET', 'blank.php5?mod=Menu&nom_menu=' + encodeURIComponent(nomMenu), true, asyncMenuBackoffice);
}

function asyncMenuBackoffice(docXml) {
	asyncLoadMenu(docXml, true);
}

function asyncMenuPreview(docXml) {
	asyncLoadMenu(docXml, null, true);
}

function asyncLoadMenu(docXml) {
	var menu = docXml.documentElement;
	var nomMenu = menu.getAttribute('nom');

	if (arguments[1] != null) {
		var ulMenu = $('menuBackoffice');
	}
	else if (arguments[2] != null) {
		var ulMenu = $('preview_' + nomMenu);
	}
	else {
		var ulMenu = $(nomMenu);
	}

	if (!ulMenu) {
		return;
	}

	ulMenu.innerHTML = '';

	if (!menu.hasChildNodes()) {
		return;
	}

	for (var i = 0; i < menu.childNodes.length; ++i) {
		var categorie = menu.childNodes[i];
		var infoCategorie = new Array();
		var infoCategorieJSON = '';

		if (categorie.hasChildNodes()) {
			for (var j = 0; j < categorie.childNodes.length; ++j) {
				var prop = categorie.childNodes[j];

				if (prop.nodeName == "#text") {
					continue;
				}

				infoCategorieJSON += (infoCategorieJSON != '') ? ', ' : '';

				if (prop.hasChildNodes()) {
					infoCategorie[prop.nodeName] = prop.firstChild.nodeValue;
					infoCategorieJSON += prop.nodeName + ' : \'' + prop.firstChild.nodeValue.replace('\'', '\\\'') + '\'';
				}
				else {
					infoCategorie[prop.nodeName] = null;
					infoCategorieJSON += prop.nodeName + ' : null';
				}
			}

			var li = document.createElement('li');
			li.name = infoCategorie['id_categorie'];

			if (infoCategorie['id_style'] && arguments[1] == null) {
				li.className = infoCategorie['id_style'];
			}

			li.id = 'menu_categorie_' + infoCategorie['id_categorie'];

			infoCategorieJSON = '{' + infoCategorieJSON + '}';

			if (arguments[1] != null) {
				li.innerHTML = '<a href="#" onclick="afficheFormModifCategorie(' + infoCategorieJSON + ');">' + infoCategorie['libelle_categorie'] + '</a>';
			}
			else if (arguments[2] != null) {
				li.innerHTML = '<a href="#" onclick="callPreviewFromUrl(\'' + String.escape(buildUrl(infoCategorie, true)) + '\', \'' + String.escape(infoCategorie['libelle_categorie']) + '\');">' + infoCategorie['libelle_categorie'] + '</a>';
			}
			else {
				li.innerHTML = buildUrl(infoCategorie);
			}

			ulMenu.appendChild(li);
		}
	}

	if (arguments[1] != null) {
		makeMenuDraggable();
	}
}

function callEnvoiCategorie() {
	var champNom = $('nomCategorie');
	var oldChampNom = $('oldNomCategorie');

	var champModule = $('listeModules');
	var champAction = $('listeActions');

	var queryString = 'nom_categorie=' + EncodeURIComponent(champNom.value) + '&module=' + EncodeURIComponent(champModule.value) + '&action=' + EncodeURIComponent(champAction.value) + 'old_nom_categorie=' + EncodeURIComponent(oldChampNom.value);

	sendRequest('GET', 'blank.php5?mod=Menu&backoffice&config&' + queryString, true, asyncEnvoiCategorie);
	masqueFormModifCategorie();
}

function asyncEnvoiCategorie(docXml) {
	var ok = docXml.documentElement.firstChild.nodeValue;

	if (ok != 1) {
		alert('Un problème est survenu lors de la modification d\'une catégorie.');
	}
	else {
		callLoadMenu('blank.php5?mod=Menu', 'menu_actuel');
	}
}

function callListeActions() {
	var module = $('listeModules');

	sendRequest('GET', 'blank.php5?mod=' + encodeURIComponent(module.value) + '&liste_actions', true, asyncListeActions);
}

function callListeParametres() {
	var module = $('listeModules');
	var action = $('listeActions');

	sendRequest('GET', 'blank.php5?mod=' + encodeURIComponent(module.value) + '&liste_parametres=' +  encodeURIComponent(action.value), true, asyncListeParametres);
}

function asyncListeActions(docXml) {
	var xmlRoot = docXml.documentElement;
	var listeActions = $('listeActions');
	listeActions.innerHTML = '';

	for (i = 0; i < xmlRoot.childNodes.length; ++i) {
		var actionXml = xmlRoot.childNodes[i];
		var lib, act;

		if (actionXml.hasChildNodes()) {
			for (j = 0; j < actionXml.childNodes.length; ++j) {
				var argActionXml = actionXml.childNodes[j];

				switch (argActionXml.nodeName) {
					case "act":
						act = argActionXml.firstChild.nodeValue;
						break;

					case "libelle":
						lib = argActionXml.firstChild.nodeValue;
						break;
				}
			}

			var actionHtml = document.createElement('option');

			actionHtml.value = act;
			actionHtml.innerHTML = lib;
			listeActions.appendChild(actionHtml);
		}
	}

	var listeOptions = listeActions.getElementsByTagName('option');

	for (var i = 0; i < listeOptions.length; ++i) {
		if (currentCategorie.action == listeOptions[i].value) {
			listeOptions[i].selected = true;
		}
		else {
			listeOptions[i].selected = false;
		}
	}

	callListeParametres();
}

function asyncListeParametres(docXml) {
	var xmlRoot = docXml.documentElement;
	var listeParametres = $('listeParametres');
	var listeValeurs = $('listeValeurs');
	var valeurLibre = $('valeurLibre');
	listeParametres.innerHTML = '';

	for (i = 0; i < xmlRoot.childNodes.length; ++i) {
		var parametreXml = xmlRoot.childNodes[i];
		var lib, param, libre;

		if (parametreXml.hasChildNodes()) {
			for (j = 0; j < parametreXml.childNodes.length; ++j) {
				var argParametreXml = parametreXml.childNodes[j];
				libre = parametreXml.getAttribute('libre');

				switch (argParametreXml.nodeName) {
					case "param":
						param = argParametreXml.firstChild.nodeValue;

					case "libelle":
						lib = argParametreXml.firstChild.nodeValue;
						break;
				}
			}

			var parametreHtml = document.createElement('option');

			parametreHtml.value = param;
			parametreHtml.innerHTML = lib;

			if (libre == 1) {
				listeValeurs.style.display = 'none';
				valeurLibre.style.display = 'inline';
			}
			else {
				listeValeurs.style.display = 'inline';
				valeurLibre.style.display = 'none';
			}

			listeParametres.appendChild(parametreHtml);
		}
	}

	var listeOptions = listeParametres.getElementsByTagName('option');

	for (var i = 0; i < listeOptions.length; ++i) {
		if (currentCategorie.parametre == listeOptions[i].value) {
			listeOptions[i].selected = true;
		}
		else {
			listeOptions[i].selected = false;
		}
	}

	callListeValeurs();
}

function callRemoveCategorie() {
	if (!confirm('Vous allez définitivement supprimer cette catégorie. Êtes-vous sûr ?')) {
		return;
	}

	sendRequest('GET', 'blank.php5?mod=Menu&backoffice&remove_categorie=' + encodeURIComponent(currentCategorie.id_categorie), true, asyncRemoveCategorie);
}

function asyncRemoveCategorie(docXml) {
	var ok = docXml.getElementsByTagName('succes')[0].firstChild.nodeValue;

	if (ok != 1) {
		alert('Un problème est survenu lors de la suppression d\'une catégorie.');
	}
	else {
		callMenuBackoffice();
		callLoadMenu($F('listeMenus'));
	}
}

function callRemoveMenu() {
	if (!confirm('Vous allez définitivement supprimer ce menu et ses catégories. Êtes-vous sûr ?')) {
		return;
	}

	sendRequest('GET', 'blank.php5?mod=Menu&backoffice&remove_menu=' + encodeURIComponent($F('listeMenus')), true, asyncRemoveMenu);
}

function asyncRemoveMenu(docXml) {
	var ok = docXml.getElementsByTagName('succes')[0].firstChild.nodeValue;

	if (ok != 1) {
		alert('Un problème est survenu lors de la suppression d\'un menu.');
	}
	else {
		callListeMenus();
	}
}

function callModifOrdreCategories(menuBackoffice) {
	var listeCategories = '';
	var listeMenus = $('listeMenus');

	for (var i = 0; i < menuBackoffice.childNodes.length; ++i) {
		listeCategories += (listeCategories != '') ? ';' : '';
		listeCategories += menuBackoffice.childNodes[i].name;
	}

	sendRequest('GET', 'blank.php5?mod=Menu&backoffice&liste_categories=' + encodeURIComponent(listeCategories) + '&nom_menu=' +  encodeURIComponent(listeMenus.value), true, asyncModifOrdreCategories);
}

function asyncModifOrdreCategories(docXml) {
	var ok = docXml.getElementsByTagName('succes')[0].firstChild.nodeValue;

	if (ok != 1) {
		alert('Un problème est survenu lors de la modification de l\'ordre des catégorie.');
	}
	else {
		callMenuBackoffice();
		callLoadMenu($F('listeMenus'));
	}
}

function callListeValeurs() {
	var module = $('listeModules');
	var action = $('listeActions');
	var parametre = $('listeParametres');

	sendRequest('GET', 'blank.php5?mod=' + encodeURIComponent(module.value) + '&liste_valeurs_parametre=' +  encodeURIComponent(parametre.value) + '&action=' + encodeURIComponent(action.value), true, asyncListeValeurs);
}

function asyncListeValeurs(docXml) {
	var docRoot = docXml.documentElement;
	var listeValeurs = $('listeValeurs');
	listeValeurs.innerHTML = '';

	for (var i = 0; i < docRoot.childNodes.length; ++i) {
		var valeur = docRoot.childNodes[i];

		if (valeur.nodeName == "#text") {
			continue;
		}

		var value = valeur.getElementsByTagName('value')[0].firstChild.nodeValue;
		var lib = valeur.getElementsByTagName('lib')[0].firstChild.nodeValue;

		var option = document.createElement('option');

		option.value = value;
		option.innerHTML = lib;
		listeValeurs.appendChild(option);
	}

	var listeOptions = listeValeurs.getElementsByTagName('option');

	for (var i = 0; i < listeOptions.length; ++i) {

		if (currentCategorie.valeur_parametre == listeOptions[i].value) {
			listeOptions[i].selected = true;
		}
		else {
			listeOptions[i].selected = false;
		}
	}
}

function callListeMenus() {
	sendRequest('GET', 'blank.php5?backoffice&mod=Menu&liste_menus', true, asyncListeMenus);
}

function asyncListeMenus(docXml) {
	var menus = docXml.getElementsByTagName('menu');
	var listeMenus = $('listeMenus');
	var oldValue = listeMenus.value;

	while (listeMenus.firstChild) {
		listeMenus.removeChild(listeMenus.firstChild);
	}

	for (var i = 0; i < menus.length; ++i) {
		var option = document.createElement('option');
		var nomMenu = menus[i].firstChild.nodeValue;

		option.value = nomMenu;
		option.innerHTML = nomMenu;

		if (nomMenu == oldValue) {
			option.setAttribute('selected', 'selected');
		}

		listeMenus.appendChild(option);
	}

	callMenuBackoffice();
}

function callEnvoiMenu() {
	if ($F('nomMenu') == '') {
		alert('Le nom du menu doit être renseigné.');
		return false;
	}

	var nomMenu = $('nomMenu');
	var disposition = $('disposition');
	var queryString = 'nouveau_menu=' + encodeURIComponent(nomMenu.value) + '&disposition=' + encodeURIComponent(disposition.value);
	sendRequest('POST', 'blank.php5?mod=Menu&backoffice', true, asyncEnvoiMenu, queryString);
}

function asyncEnvoiMenu(docXml) {
	var ok = docXml.getElementsByTagName('succes')[0].firstChild.nodeValue;
	var message = docXml.getElementsByTagName('message')[0].firstChild.nodeValue;

	if (ok != 1) {
		alert('Un problème est survenu lors de la sauvegarde du menu: ' + message + '.');
	}
	else {
		masqueFormAjoutMenu();
		callListeMenus();
	}
}

function afficheFormAjoutMenu() {
	Effect.Appear('formAjoutMenu', {duration: 1});
}

function masqueFormAjoutMenu() {
	Effect.Fade('formAjoutMenu', {duration: 1});
	$('nomMenu').value = '';
}

function afficheFormAjoutCategorie() {
	var infoCategorie = { libelle_categorie: '', description_categorie: '', id_style: '' };
	currentCategorie = { id_categorie: 0 };
	afficheFormModifCategorie(infoCategorie);
}

function afficheFormModifCategorie(infoCategorie) {
	var formModifCategorie = $('formModifCategorie');

	var champLib = $('libelleCategorie');
	var champDesc = $('descriptionCategorie');
	var champStyle = $('idStyle');

	var listeModules = $('listeModules');

	currentCategorie = infoCategorie;

	var listeOptions = listeModules.getElementsByTagName('option');

	for (var i = 0; i < listeOptions.length; ++i) {
		if (infoCategorie.module == listeOptions[i].value) {
			listeOptions[i].selected = true;
		}
		else {
			listeOptions[i].selected = false;
		}
	}

	callListeActions();

	champLib.value = infoCategorie.libelle_categorie;
	champDesc.value = infoCategorie.description_categorie;
	champStyle.value = infoCategorie.id_style;

	Effect.Appear('formModifCategorie', {duration: 1});
}

function masqueFormModifCategorie() {
	Effect.Fade('formModifCategorie', {duration: 1});

	$('valeurLibre').value = '';
	$('libelleCategorie').value = '';
	$('descriptionCategorie').value = '';
	$('idStyle').value = '';
}

function makeMenuDraggable() {
	var options = { dropOnEmpty: true, containment: ['menuBackoffice'], constraint: false, onUpdate: callModifOrdreCategories };

	Sortable.create('menuBackoffice', options);
}

function callEnvoiCategorie() {
	var queryString = '';

	if (currentCategorie.id_categorie) {
		queryString = 'id_categorie=' + currentCategorie.id_categorie + '&';
	}

	var champLib = $('libelleCategorie');
	var champDesc = $('descriptionCategorie');
	var champStyle = $('idStyle');

	var listeMenus = $('listeMenus');
	var listeModules = $('listeModules');
	var listeActions = $('listeActions');
	var listeParametres = $('listeParametres');
	var listeValeurs = $('listeValeurs');
	var valeurLibre = $('valeurLibre');

	if (champLib.value ==  '') {
		alert('Le libellé de la catégorie doit être renseigné.');
		champLib.focus();
		return;
	}

	queryString += 'libelle_categorie=' + champLib.value + '&';
	queryString += 'description_categorie=' + champDesc.value + '&';
	queryString += 'id_style=' + champStyle.value + '&';
	queryString += 'module=' + listeModules.value + '&';
	queryString += 'action=' + listeActions.value + '&';
	queryString += 'libelle_module=' + listeModules.options[listeModules.selectedIndex].innerHTML + '&';
	queryString += 'libelle_action=' + listeActions.options[listeActions.selectedIndex].innerHTML + '&';
	queryString += 'parametre=' + listeParametres.value + '&';
	queryString += 'type_action=href&';

	var valeur = (valeurLibre.style.display == 'none') ? listeValeurs.value : valeurLibre.value;
	queryString += 'valeur_parametre=' + valeur + '&';

	queryString += 'nom_menu=' + listeMenus.value;

	sendRequest('POST', 'blank.php5?mod=Menu&backoffice', true, asyncEnvoiCategorie, queryString);
}

function asyncEnvoiCategorie(docXml) {
	var ok = docXml.getElementsByTagName('succes')[0].firstChild.nodeValue;

	if (ok != 1) {
		alert('Un problème est survenu lors de la sauvegarde de la catégorie.');
	}
	else {
		var listeMenus = $('listeMenus');

		callMenuBackoffice();
		callLoadMenu(listeMenus.value);
		masqueFormModifCategorie();
	}
}