// Module Javascript pour la génération des fenêtres sur Stargate Vortex
// Copyright Stargate-Vortex (2009)
// Toute copie partielle ou complète du code est interdite

// Fonction d'affichage de la fenêtre
function Fenetre(page, hauteur, largeur) 
{
	// Element de la fenêtre et du cache
	var cache = document.getElementById('cache');
	var fenetre = document.getElementById('fenetre');
	
	// Indique le chargement de la page
	fenetre.style.textAlign = 'center';
	fenetre.innerHTML = '<a onclick="javascript:Fenetre(\'\');"> <img id="fermer" src="images/icones/cross.png" alt="Fermer" /> </a>';
	fenetre.innerHTML = fenetre.innerHTML + '<img id="loader" src="images/loading_fenetre.gif" alt="Chargement en cours ..." />';
	fenetre.innerHTML = fenetre.innerHTML + '<p> Chargement de la page en cours ... </p>';
	fenetre.innerHTML = fenetre.innerHTML + '<p> <em> Si ce message ne disparaît pas, veuillez contacter un administrateur du site ! </em> </p>';
	
	// Positionnement de la fenêtre
	Position(hauteur, largeur);
	
	// Cache le bloc si il est déjà affiché
	if (cache.style.display == 'block') {
		cache.style.display = 'none';
		fenetre.style.display = 'none';
	}
	// Sinon, on affiche le bloc
	else {
		cache.style.display = 'block';
		fenetre.style.display = 'block';
		
		// Chargement de la page dans la fenêtre
		AJAX(page, "ContenuFenetre", "GET", "");
	}
}

// Modification du contenu de la fenêtre
function ContenuFenetre(valeur) 
{
	// Element de la fenêtre
	var fenetre = document.getElementById('fenetre');
	
	// Changement de ce que contient la fenêtre
	fenetre.style.textAlign = 'left';
	fenetre.innerHTML = valeur;
}

// Fonction de positionnement de la fenêtre
function Position(hauteur, largeur) 
{
	// Element de la fenêtre et du cache
	var cache = document.getElementById('cache');
	var fenetre = document.getElementById('fenetre');
	
	// Variable pour la hauteur
	if (typeof(hauteur) == 'undefined')
		hauteur = 400;
	else
		hauteur = parseInt(hauteur);
		
	// Variable pour la largeur
	if (typeof(largeur) == 'undefined')
		largeur = 650;
	else
		largeur = parseInt(largeur);
	
	// Calcul de la marge en hauteur et à gauche
	margin_top = Math.round((document.documentElement.clientHeight - hauteur) / 2);
	margin_left = Math.round((document.documentElement.clientWidth - largeur) / 2);
	
	// Position du cache de la fenêtre
	cache.style.height = HauteurTotale() + 'px';
	cache.style.width = LargeurTotale() + 'px';
	
	// Application des résultats
	fenetre.style.width = largeur + 'px';
	fenetre.style.height = hauteur + 'px';
	fenetre.style.marginTop = (parseInt(margin_top) + parseInt(EspaceHaut())) + 'px';
	fenetre.style.marginLeft = (parseInt(margin_left) + parseInt(EspaceGauche())) + 'px';
}

// Espace présent en dessus de la page
function EspaceHaut()
{
	// Gestion pour FireFox
	var scrollTop = document.documentElement.scrollTop;
	
	// Gestion pour les autres navigateurs
	if (document.body.scrollTop > scrollTop) {
		scrollTop = document.body.scrollTop;
	}
	
	// Retourne le résultat
	return scrollTop;
}

// Espace présent à gauche de la page
function EspaceGauche()
{
	// Gestion pour FireFox
	var scrollLeft = document.documentElement.scrollLeft;
	
	// Gestion pour les autres navigateurs
	if (document.body.scrollLeft > scrollLeft) {
		scrollLeft = document.body.scrollLeft;
	}
	
	// Retourne le résultat
	return scrollLeft;
}

// Taille totale en hauteur
function HauteurTotale() 
{
	// Gestion pour FireFox
	var height = document.documentElement.scrollHeight;

	// Gestion pour IE ainsi qu'Opéra
	if (document.documentElement.clientHeight > height ) {
		height = document.documentElement.clientHeight;
	}
	
	// Gestion pour Safari
	if (document.body.scrollHeight > height) {
		height = document.body.scrollHeight;
	}
	
	// Retourne le résultat
	return height;
}

// Taille totale en largeur
function LargeurTotale()
{
	// Gestion pour FireFox
	var width = document.documentElement.scrollWidth;

	// Gestion pour IE ainsi qu'Opéra
	if (document.documentElement.clientWidth > width ) {
		width = document.documentElement.clientWidth;
	}
	
	// Gestion pour Safari
	if (document.body.scrollWidth > width) {
		width = document.body.scrollWidth;
	}
	
	// Retourne le résultat
	return width;
}

// Change la page en cours de consultation dans la fenêtre
function ChangePage(page, methode, donnees, hauteur, largeur) 
{
	// Vérification de la méthode utilisée
	if (methode != "POST")
		methode = "GET";
	
	// Met à jour la position de la fenêtre
	Position(hauteur, largeur);
	
	// Chargement de la page dans la fenêtre
	AJAX(page, "ContenuFenetre", methode, donnees);
}

// Requête avec AJAX
function AJAX(page, retfonc, methode, data) 
{
	var xhr_object = null;

	// Firefox
	if (window.XMLHttpRequest) 
		xhr_object = new XMLHttpRequest();

	// Internet Explorer
	else if(window.ActiveXObject) 
	{
		try {
			xhr_object = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	// XMLHttpRequest non supporté par le navigateur
	else { 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
		return;
	}
	
	// Données à envoyer
	if (data == "")
		data = null;
	
	// Méthode utilisée
	if (methode == "GET" && data != null) { 
	   page += "?" + data; 
	   data = null; 
	}
	
	// Lancement de l'appel
	xhr_object.open(methode, page, true);
	
	// Envoi un header si on utilise la méthode post
	if (methode == "POST") {
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr_object.setRequestHeader("Connection", "close");
	}
	
	// Attente de réponse
	xhr_object.onreadystatechange = function() {
		if (xhr_object.readyState == 4 && xhr_object.status == 200) {
			var RetAjax = xhr_object.responseText;
			eval(retfonc + '(RetAjax);');
		}
	}
	
	// Envoi des données
	xhr_object.send(data);
}

// Génération des champs à envoyer avec la requête
function Elements(eFormulaire)
{
	// Déclaration de la variable contenant l'url
	var url = '';
	
	// Permet de parcourir les éléments du tableau
	for (i = 0; i < eFormulaire.elements.length; i++)
	{
		// Vérification pour des cases à cocher et les boutons radio cochées, pour qu'il n'en prenne qu'un seul et pas plusieurs
		if 	(
				((eFormulaire.elements[i].type == 'radio' || eFormulaire.elements[i].type == 'checkbox') && eFormulaire.elements[i].checked == true) || 
				(eFormulaire.elements[i].type != 'radio' && eFormulaire.elements[i].type != 'checkbox')
			)
		{
			// Si l'élément est une boîte de sélection multiple
			if(eFormulaire.elements[i].type == 'select-multiple' || eFormulaire.elements[i].type == 'select' )
			{
				// Permet de parcourir les éléments d'une sélection multiple
				for(j = eFormulaire.elements[i].length-1; j >= 0; j -= 1)
				{
					// On incrémente seulement si l'élément est sélectionné
					if(eFormulaire.elements[i].options[j].selected)
					{
						// Ajoute le caractère de séparation entre les paramètres
						if (url)
							url+='&';
						
						// Ajoute la valeur à l'url
						url += eFormulaire.elements[i].name + '=' + escape(eFormulaire.elements[i].options[j].value);
					}
				}
			}
			
			// Ajoute le caractère de séparation entre les paramètres
			if (url)
				url += '&';
			
			// Pour les autres éléments du formulaire
			if (eFormulaire.elements[i].type != 'select-multiple') {
				url += eFormulaire.elements[i].name + '=' + escape(eFormulaire.elements[i].value);
			}
		}
	}
	
	// Retourne le résultat à la fonction
	return url;
}
