globalsubpage = '';

function wait(state, waitmessage)
{
	messagediv = document.getElementById('message');
	if (state == true)
	{
		if (waitmessage == '')
		{
			waitmessage = 'Chargement en cours...';
		}

		messagediv.innerHTML = '<div id="waitdiv" class="loading"></div>';
		setMessage('waitdiv', waitmessage);
		messagediv.style.display = 'block';
	}
	else
	{
		messagediv.innerHTML = '';
		messagediv.style.display = 'none';
	}
}

function warning(state, warningmessage, timeout)
{
	messagediv = document.getElementById('message');
	switch (state)
	{
		case true:
			if (warningmessage == '')
			{
				warningmessage = 'Erreur inconnue';
			}

			messagediv.innerHTML = '<div id="warningdiv" class="warning"></div>';
			setMessage('warningdiv', warningmessage);
			messagediv.style.display = 'block';
			break;
		case false:
			messagediv.innerHTML = '';
			messagediv.style.display = 'none';
			break;
		default:
			if(timeout == null || timeout == 0) timeout=2000;
			else timeout=timeout*1000;
			functionstring="warning(false, '', null);";
			messagediv.innerHTML = '<div id="warningdiv" class="warning"></div>';
			setMessage('warningdiv', warningmessage);
			messagediv.style.display = 'block';
			setTimeout(functionstring,timeout);
	}
}

function confirm(state, confirmmessage, timeout)
{
	messagediv = document.getElementById('message');
	switch (state)
	{
		case true:
			if (confirmmessage == '')
			{
				confirmmessage = 'OK !';
			}

			messagediv.innerHTML = '<div id="confirmdiv" class="confirmation"></div>';
			setMessage('confirmdiv', confirmmessage);
			messagediv.style.display = 'block';
			break;
		case false:
			messagediv.innerHTML = '';
			messagediv.style.display = 'none';
			break;
		default:
			if(timeout == null || timeout == 0) timeout=2000;
			else timeout=timeout*1000;
			functionstring="confirm(false, '', null);";
			messagediv.innerHTML = '<div id="confirmdiv" class="confirmation"></div>';
			setMessage('confirmdiv', confirmmessage);
			messagediv.style.display = 'block';
			setTimeout(functionstring,timeout);
	}
}

function ajaxPrivilegesError(htmlcontent)
{
	if (htmlcontent == '' || htmlcontent == undefined)
	{
		htmlcontent = '<div id="messagebox">Vous n\'avez pas les privilèges requis pour effectuer cette opération !</div>';
	}
	ajaxOverlayMessageStart(htmlcontent);
}

function ajaxSessionError(htmlcontent)
{
	if (htmlcontent == '' || htmlcontent == undefined)
	{
		htmlcontent = '<div id="messagebox">Votre session est terminée ! Veuillez vous reconnecter.</div>';
	}
	ajaxOverlayMessageStart(htmlcontent);
}

function makeAjaxLoginHash()
{
	var loginobj = MM_findObj('userlogin');
	var passwdobj = MM_findObj('userpasswd');
	var login = loginobj.value;
	var passwd = passwdobj.value;
	var phpsessid = getcookie('PHPSESSID');
	var token;
	token = getcookie('token');
	if (token == undefined)
	{
		token = MM_findObj('token').innerHTML;
	}
	var loginhashfromclient;
	var form = MM_findObj('authenticationform');
	var logindiv = MM_findObj('logindiv');
	var passwddiv = MM_findObj('passwddiv');

	passwd = hex_sha256(passwd);
	token = hex_sha256(token);

	loginhashfromclient = hex_sha256(phpsessid+login+passwd+token);

	return loginhashfromclient;
}

function makeAjaxRenewHash()
{
	var phpsessid = getcookie('PHPSESSID');
	var token;
	token = getcookie('token');
	if (token == undefined)
	{
		token = MM_findObj('token').innerHTML;
	}
	var renewhashfromclient;

	token = hex_sha256(token);
	renewhashfromclient = hex_sha256(phpsessid+token);

	return renewhashfromclient;
}

function ajaxOverlayMessageStart(message)
{
	var objOverlayMessage = MM_findObj('overlayMessage');

	objOverlayMessage.innerHTML = message;
	objOverlayMessage.style.display = 'block';
	objOverlayMessage.style.visibility = 'visible';
	josStart();
}

function ajaxOverlayMessageEnd()
{
	var objOverlayMessage = MM_findObj('overlayMessage');

	objOverlayMessage.innerHTML = '';
	objOverlayMessage.style.visibility = 'hidden';
	objOverlayMessage.style.display = 'none';
	josEnd();
}

function cleanAddonStyles()
{
	var headtag = document.getElementsByTagName('head')[0];
	var tempstyletag;
	var stylepresent = true;
	var stylenumber = 0;
	while(stylepresent)
	{
		tempstyletag = MM_findObj('addonstylesheetlink'+stylenumber);
		if(tempstyletag != undefined)
		{
			headtag.removeChild(tempstyletag);
		}
		else
		{
			stylepresent = false;
		}
		stylenumber++;
	}
}

function verifySessionFromXHTML(str)
{
	var start = str.indexOf('<ajaxsession>');
	var stop = str.indexOf('</ajaxsession>');
	start = start + 13;
	var sessionmessage = str.substr(start,stop-start);

	start = str.indexOf('<ajaxtoken>');
	stop = str.indexOf('</ajaxtoken>');
	var token;
	var tokendiv = MM_findObj('token');
	start = start + 11;
	token = str.substr(start,stop-start);
	if (token != '')
	{
		tokendiv.innerHTML = token;
	}

	switch (sessionmessage)
	{
		case 'accessdenied':
			ajaxPrivilegesError();
			break;
		case 'sessionlost':
			ajaxSessionError();
			break;
		case 'loginok':
			confirm(true,'Connexion établie');
			setTimeout('call_loadAdminPanel();',2000);
			break;
		case 'loginko':
			warning(null, 'Echec à la connexion !', 3);
			break;
	}
}

function verifySessionFromXML(xmlstr)
{
	var parser = new DOMImplementation();
	var domDoc = parser.loadXML(xmlstr);
	var docRoot = domDoc.getDocumentElement();

	var sessionmessage;
	var sessionmessagetag = docRoot.getElementsByTagName('ajaxsession').item(0);
	if (sessionmessagetag != undefined)
	{
		sessionmessage = sessionmessagetag.getFirstChild().getNodeValue();
	}

	var tokendiv = MM_findObj('token');
	var token;
	var tokentag = docRoot.getElementsByTagName('ajaxtoken').item(0);
	if (tokentag != undefined)
	{
		token = tokentag.getFirstChild().getNodeValue();
		tokendiv.innerHTML = token;
	}

	switch (sessionmessage)
	{
		case 'accessdenied':
			ajaxPrivilegesError();
			break;
		case 'sessionlost':
			ajaxSessionError();
			break;
		case 'loginok':
			confirm(true,'Connexion établie',null);
			setTimeout('call_loadAdminPanel();',2000);
			break;
		case 'loginko':
			warning(null, 'Echec à la connexion !', 3);
			break;
	}
}

// Fonctions AJAX
function call_loadSubpage(subpage)
{
	wait(true, 'Chargement des feuilles de style en cours...');
	globalsubpage = subpage;
	call_loadSubpageStyle();
}
function call_loadSubpageStyle()
{
	agent.call('includes/ajax/php/consteladmin.php', 'loadSubpageStyle', 'callback_loadSubpageStyle', globalsubpage, makeAjaxRenewHash());
}
function callback_loadSubpageStyle(xmlstr)
{
	verifySessionFromXHTML(xmlstr);
	var headtag = document.getElementsByTagName('head')[0];
	var newlink;
	var linkIdName;
	var linkRel = 'stylesheet';
	var linkHref;

	var parser = new DOMImplementation();
	var domDoc = parser.loadXML(xmlstr);
	var docRoot = domDoc.getDocumentElement();
	var contenttagname = '';
	var contenttag = '';
	var content = '';

	var stylepresent = true;
	var stylenumber = 0;

	cleanAddonStyles();
	while(stylepresent)
	{
		contenttagname = 'addonstylesheetlink'+stylenumber;
		contenttag = docRoot.getElementsByTagName(contenttagname).item(0);
		if(contenttag != undefined)
		{
			content = contenttag.getFirstChild().getNodeValue();
			newlink = document.createElement('link');
			linkIdName = 'addonstylesheetlink'+stylenumber;
			linkHref = content;
			newlink.setAttribute('id',linkIdName);
			newlink.setAttribute('rel',linkRel);
			newlink.setAttribute('href',linkHref);
			headtag.appendChild(newlink);
		}
		else
		{
			stylepresent = false;
		}
		stylenumber++;
	}

	wait(false, '');
	wait(true, 'Chargement de la page en cours...');
	call_loadSubpageContent();
}
function call_loadSubpageContent()
{
	agent.call('includes/ajax/php/consteladmin.php', 'loadSubpageContent', 'callback_loadSubpageContent', globalsubpage, makeAjaxRenewHash());
}
function callback_loadSubpageContent(str)
{
	verifySessionFromXHTML(str);
	if (globalsubpage != 'admin_login')
	{
		var objSubpage = MM_findObj('page');

		objSubpage.innerHTML = str;
	}
	else
	{
		ajaxOverlayMessageStart(str);
	}
	globalsubpage = '';
	wait(false, '');
}





// <appel de la boîte de login>
function call_loginBox()
{
	vider('page');
	call_loadSubpage('admin_login');
}
// </appel de la boîte de login>

// <vérification du login>
function call_login()
{
	wait(true, 'Vérification du login en cours...');
	agent.call('includes/ajax/php/consteladmin.php', 'login', 'callback_login', makeAjaxLoginHash());
}
function callback_login(xmlstr)
{
	verifySessionFromXHTML(xmlstr);
}
// </vérification du login>

// <déconnexion>
function call_logout()
{
	vider('page');
	ajaxOverlayMessageEnd();
	warning(null, 'Votre session d\'administration est terminée', 3);
}
// </déconnexion>

// <chargement du panneau d'administration>
function call_loadAdminPanel()
{
	vider('page');
	ajaxOverlayMessageEnd();
	call_loadSubpage('admin_interactivite');
}
// </chargement du panneau d'administration>

