var hSock;			//handle du socket, ok je sais c'est pas un socket, mais m'en fout, l'habitude...
var Vars;

/*****************************************************************************/
/*                                  Core                                     */
/*****************************************************************************/

//Rafraichi la page entière
function RefreshPage(url)
{
	if(url)
		window.location.href = url;
	else
		window.location.reload();
}

//Ajoute un paramètre à la chaine, pour POST
function AddParam(Id, First, Checkbox)
{
	if(Checkbox)
		val = document.getElementById(Id).checked;
	else
		val = document.getElementById(Id).value;

	if(First)
		Vars = Id+"="+val;
	else
		Vars = Vars+"&"+Id+"="+val;
}

//Initialisation
function InitSock(CallBack, Dest, Silent, CallAfter)
{
	Box = document.getElementById(Dest);

	if(window.XMLHttpRequest) //Firefox, simple, efficace, tellement bon...
		hSock = new XMLHttpRequest(); 
	else if(window.ActiveXObject) //Internet Explorer, jamais comme les autres...
		hSock = new ActiveXObject("Microsoft.XMLHTTP"); 
	else //XMLHttpRequest non supporté par le navigateur (Links powaaaa!)
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");

	if(hSock.overrideMimeType) //Un fix pour safari (saleté de mac, peuvent pas utiliser Firefox comme tout le monde?)
		hSock.overrideMimeType("text/xml");  //Mais oui Aline, je t'aime quand même ;)

	//Fonction de traitement des evenements
	hSock.onreadystatechange = function()
	{
	  //Statu du socket
		switch(hSock.readyState)
		{
			case 0: //0	Non initialisé
				if(!Silent)
					Box.innerHTML = "Initialisation...";
			break;
			case 1: //1	Début du transfert
				if(!Silent)
					Box.innerHTML = "Envoi de la requête...";
			break;
			case 2: //2	Données transférées
				if(!Silent)
					Box.innerHTML = "Requête envoyée.";
			break;
			case 3: //3	Données accessibles en partie
				if(!Silent)
					Box.innerHTML = "Reception des données...";
			break;
			case 4: //4	Données accessibles
			  //Code HTTP renvoié
			  switch(hSock.status)
			  {
			    case 200:	//HTTP 200 OK
			    	//alert(hSock.responseText);
						Box.innerHTML = hSock.responseText;
						if(CallAfter)
							setTimeout(CallAfter, 100);
			    break;
			    case 503:	//HTTP 503 Service Temporarily Unavailable
						Box.innerHTML = "HTTP 503 Service Temporarily Unavailable<BR><BR>Rechargement dans 5 sec...";
						setTimeout(CallBack, 5000);
			    break;
			    case 404:	//HTTP 404 Not Found
						Box.innerHTML = "HTTP 404 Not Found<BR><BR>La page n'existe pas, erreur irrecupérable.";
			    break;
			    default:  //Autre, on affiche l'erreur et on laisse le user se demerder, faut pas deconner non plus...
						Box.innerHTML = "Erreur inconnue.<BR>Réponse du serveur:<BR><BR>"+hSock.responseText;
			    break;
				}
			break;
		}
	}
}

/*****************************************************************************/
/*                                AjaxPost                                   */
/*****************************************************************************/

//Envoit la requête POST
function AjaxPost(Page, Vars, Dest, Silent, CallAfter)
{
	CallBack = 'AjaxPost("'+Page+'", "'+Vars+'", '+Dest+', '+Silent+', "'+CallAfter+'")';
	//Créer le socket
	InitSock(CallBack, Dest, Silent, CallAfter);

	//Prépare la requête de la page 
	hSock.open("POST", Page, true);
	//Définit les header HTTP  
	hSock.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	//Envoie de la requete
	hSock.send(Vars);
}

/*****************************************************************************/
/*                                AjaxGet                                    */
/*****************************************************************************/

//Envoit la requête GET
function AjaxGET(Page, Dest, Silent, CallAfter)
{
	CallBack = 'AjaxGET("'+Page+'", '+Dest+', '+Silent+', "'+CallAfter+'")';
	//Créer le socket
	InitSock(CallBack, Dest, Silent, CallAfter);

	//Prépare la requête de la page 
	hSock.open("GET", Page, true);
	//Envoie de la requete
	hSock.send(null);
}

/*****************************************************************************/
/*                                Fenêtres                                   */
/*****************************************************************************/

//Masque la fenêtre flottente
function HideFloatBox(Box)
{
	CABox = document.getElementById(Box);
	CABox.style.display = "none";
}

//Affiche la fenêtre flottente
function ShowFloatBox(Box, top, left, height, width)
{
	CABox = document.getElementById(Box);
	CABox.style.top = top?top:"200";
	CABox.style.left = left?left:"300";
	CABox.style.height = height?height:"";
	CABox.style.width = width?width:"";
	CABox.style.display = "block";
}

/*****************************************************************************/
/*                                  Login                                    */
/*****************************************************************************/

function PrintLogin()
{
	ShowFloatBox("FloatBox");
	AjaxGET("content/login.php", "FBc", true);
}

function PostLogin(Page)
{
	AddParam("Login", true);
	AddParam("Pass");

	AjaxPost("ajax/login.php", Vars, "XMLData", true, "CheckLogin('"+Page+"')");
}

function CheckLogin(Page)
{
	var objDom = new XMLDoc(document.getElementById("XMLData").value, xmlError);
	var Login = objDom.docNode.getElements("LOGIN")[0].getText();
	var Pass = objDom.docNode.getElements("PASS")[0].getText();

	if(Login=="false"||Pass=="false")
	{
		document.getElementById("PassInval").style.display = "block";
	}
	else
	{
		HideFloatBox("FloatBox");
		RefreshPage(Page);
	}
}

/*****************************************************************************/
/*                               Inscription                                 */
/*****************************************************************************/

function PostInscription(id, lvl)
{
	AjaxGET("ajax/inscription.php?id="+id+"&lvl="+lvl, "FBc", true);
}

function PostInscriptionForm()
{
	AddParam("id", true);
	AddParam("lvl");
	AddParam("nom");
	AddParam("prenom");
	AddParam("tel");
	AddParam("actif");
	AddParam("assurance");
	AddParam("licence");
	AddParam("marque");
	AddParam("modele");
	AddParam("couleur");
	AddParam("numero");

	AjaxPost("ajax/inscription.php", Vars, "FBc", true);
}

/*****************************************************************************/
/*                               Conditions                                  */
/*****************************************************************************/

function GetCond(id, lvl)
{
	ShowFloatBox("FloatBox", "20", "20", "400", "1000");

	AjaxGET("ajax/cond.php?id="+id+"&lvl="+lvl, "FBc", true);
}

/*****************************************************************************/
/*                                  Coach                                    */
/*****************************************************************************/

function GetCoach()
{
	ShowFloatBox("FloatBox");
	AjaxGET("ajax/coach.php", "FBc", true);
}

function PostCoach()
{
	AddParam("prof", true);
	AddParam("posted");
	AddParam("moto");
	AddParam("km");
	AddParam("exist");
	AddParam("expl");
	AddParam("rem");

	AjaxPost("ajax/coach.php", Vars, "FBc", true);
}

/*****************************************************************************/
/*                                 Coaché                                    */
/*****************************************************************************/

function GetCoache()
{
	ShowFloatBox("FloatBox");
	AjaxGET("ajax/coache.php", "FBc", true);
}

function PostCoache()
{
	AddParam("prof", true);
	AddParam("posted");
	AddParam("moto");
	AddParam("echprov");
	AddParam("examprov");
	AddParam("km");
	AddParam("exist");
	AddParam("expl");
	AddParam("rem");

	AjaxPost("ajax/coache.php", Vars, "FBc", true);
}

/*****************************************************************************/
/*                                 Souper                                    */
/*****************************************************************************/

function PrintSouper()
{
	ShowFloatBox("FloatBox");
	AjaxGET("content/souper.php", "FBc", true);
}

function PostSouper()
{
	AddParam("Nom", true);
	AddParam("Prenom");
	AddParam("Adresse");
	AddParam("NPAVille");
	AddParam("Tel");
	AddParam("Mail");
	AddParam("Nb");
	AddParam("Assemblee", false, true);

	AjaxPost("ajax/souper.php", Vars, "FBc", true);
}

/*****************************************************************************/
/*                            Gestion d'erreurs                              */
/*****************************************************************************/

function xmlError(e)
{
	alert(e);
}
