/**
 * Project:     HTTP Identification AJAX PHP RSA
 * File:		main.js
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *	
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *	
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 * 
 * @copyright 2006-2007 Ferdjaoui Sahid
 * @author Ferdjaoui Sahid <sahid@funraill.org>
 * @link http://sahid.funraill.org
 * @version 0.1.0
 */

var ajaxObjects = new Array();

/**
 * Prototype de getElementById();
 */
function getObj(id) {
	return window.document.getElementById(id);
}

/**
 * Envoi d'une requête au serveur
 */
function httpRequest() {
	var request;
	var p, u, c;
	
	var ajaxIndex = ajaxObjects.length;
	ajaxObjects[ajaxIndex] = new sack();	
	request = ajaxObjects[ajaxIndex];
	
/*
	// instance de l'objet pour la communication avec le serveur
	if ( window.XMLHttpRequest ) {
	    request = new XMLHttpRequest();
	    if (request.overrideMimeType) { // force l'en-tete des reponses en XML
        request.overrideMimeType('text/xml'); 
      } 
	    //request.overrideMimeType('text/xml');	// force l'en-tete des reponses en XML
	} else if ( window.ActiveXObject ) {
	    request = new ActiveXObject("Microsoft.XMLHTTP");
	}
*/
	// impossible d'utiliser AJAX
	if (!request) {	
		//dbg//alert('Ajaxing impossible!');
		return true; // envoi du formulaire normal !
		
	}
	
	// -- Traitement des données du formulaire
	u = getObj('username');
	p = getObj('password');
	c = getObj('cle');
	//dbg//	alert ('Mot de passe saisie : '+p.value);
	// hachage du password avec la clef publique (le mdp est aussi haché en md5)
	//p.value = hex_hmac_md5(c.value, hex_md5(p.value));
	mdp = hex_hmac_md5(c.value, hex_md5(p.value));
	// -- Traitement des reponses du serveur
	request.onCompletion = function() { traitement(request) };// func-executed after ajaxCallCompletion
	//request.onreadystatechange = function() { traitement(request) }
	
	
  //var params = '?' + 'username='+u.value+'&password='+p.value+'&cle='+c.value+'&js=1&';
	//request.open('GET', 'serveur.php'+params, true);									// préparation de la requête
	//request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//NA request.send('username='+u.value+'&password='+p.value+'&cle='+c.value+'&js=1&');//Envoi de la requête en Mode POST
	//request.send(null); //Envoi de la requête en mode GET

	request.requestFile = "serveur.php";	// file to exec to get colors
	request.setVar('username',u.value);
	request.setVar('password',mdp);
	request.setVar('cle',c.value);
	request.setVar('js',1);	
	request.runAJAX();		// Execute AJAX function	


	return false; // évite l'envoi du formulaire
}

/**
 * Traitement de la requête
 */
function traitement( request ) {
  
	// vérification de l'état de la requête ( 4 = terminée )
	switch (request.xmlhttp.readyState) {
		case 0 :												// 0 non initialisé
			affiche('requ&ecirc;te non initialisée !')
		break;
		case 1 :												// en cours de chargement
			affiche('requ&ecirc;te en cours de chargement ...')
				ajaxLoading();
		break;
		case 2 :												// chargée
			affiche('requ&ecirc;te charg&eacute;e !')
			ajaxLoaded();
		break;
		case 3 :												// en cours d'interaction avec le serveur
			affiche('requ&ecirc;te en cours de d\'int&eacute;raction avec le serveur ...')
		break;
		case 4 :												// terminée	
			affiche('requ&ecirc;te termin&eacute;e !');
			
			//if ( request.status == 200 ) {
			if ( request.responseStatus[0] == 200 ) {			 
			   /* DEBUGGING
			     alert("request.responseStatus[0] : "+ request.responseStatus[0] + ":"+request.response);
           if(request.getResponseHeader("Content-Type") == "text/xml"){ alert(request.responseXML)  }
           else{ alert(request.responseText) } //if (request.responseXML != null) { reponse(request.responseXML); }
			   */ //reponse(request.responseText);
			     reponse(request.response);
			} else
				affiche('Un probl&egrave;me est survenu avec la requ&ecirc;te');
		break;
	}
	
}

/**
 * Traitement de a reponse recu par le serveur
 */
function reponse(msg) {
/*
  var doc = msg.getElementsByTagName('root').item(0);
	var xml = doc.getElementsByTagName('message');	
	alert(xml.length);
	alert(xml.firstChild.data);
	switch (xml.firstChild.data) { //nodeValue
*/
  var elems= new Array();
  var extramsg = "";
  if (msg.indexOf('|') > 0) {
    elems = msg.split('|');
    extramsg = (elems.length > 2 ? elems[2]:"");  // elems[2] ==> civilité/Nom/Premon
  }	else elems[0] = msg;  
	switch (elems[0]) {
		case 'ERREUR_CLE_PUBLIC' :
			affiche('Erreur : Clef publique invalide !'+extramsg);//<<<
			deconnect(' Page expir&eacute;, rafreshissez la page avant de recommencer. ');
		break;
		case 'ERREUR_USERNAME' :
			affiche('Erreur : Nom d\'utilisateur ou Compte-Email invalide !');
			deconnect(' Email inconnu!');
		break;
		case 'ERREUR_PASSWORD' :
			affiche('Erreur : Mot de passe invalide !');
			deconnect(' Mot de passe erron&eacute;.');
		break;
		case 'COMPTE_DESACTIVEE' :
			affiche('Erreur : votre compte est inactive!');
			deconnect(' Votre compte est disactiv&eacute;, envoyez nous un email via la page CONTACTS;');
		break;	
		case 'ERREUR_NOTCLIENT' :
			affiche('Erreur : compte client est introuvable!');
			deconnect(' Votre compte client est introuvable! inscrivez vous d\'abord.');
		break;		    	
		case 'CONNEXION_ACCEPTEE' :
		  extramsg = ' Bienvenue sur Tanit eBoutique '+extramsg;
			affiche('Connexion accept&eacute;e ');
			connect(extramsg)
			goBackToBasket();
		break;
	}
	//if (elems[0] != 'CONNEXION_ACCEPTEE') 
  getObj('cle').value = elems[1]; // new C.P
}

/**
 * Affiche a l'utilisateur qu'il est connecté
 */
function connect(msg) {
	var etat = getObj('etat');
	etat.innerHTML = 'Connect&eacute; : ' + msg;
	etat.style.color = '#55F';
  usrname = "<?=$ClntDenom?>"; 	
  showBtnsForClientPersoSpace(usrname);

}

/**
 * Affiche a l'utilisateur qu'il est déconnecté
 */
function deconnect(msg) {
	var etat = getObj('etat');
	etat.innerHTML = 'D&eacute;connect&eacute; : ' + msg;
	etat.style.color = '#F55';
}


/**
 * Affiche à l'utilisateur qu'il y a un chargement en cours
 */
function ajaxLoading() {
	var load = getObj('loading');
	if (load != null)
	   load.style.display = 'block';
}
/**
 * Fin du chargement
 */
function ajaxLoaded() {
	var load = getObj('loading');
	if (load != null)
	   load.style.display = 'none';
}

/* *****************************************************************************
function httpRequest() {
	var request;
	var p, u, c;

	// instance de l'objet pour la communication avec le serveur
	if ( window.XMLHttpRequest ) {
	    request = new XMLHttpRequest();
	    if (request.overrideMimeType) { // force l'en-tete des reponses en XML
        request.overrideMimeType('text/xml'); 
      } 
	    //request.overrideMimeType('text/xml');	// force l'en-tete des reponses en XML
	} else if ( window.ActiveXObject ) {
	    request = new ActiveXObject("Microsoft.XMLHTTP");
	}

	// impossible d'utiliser AJAX
	if (!request) {
		return true; // envoi du formulaire normal !
	}
	
	// -- Traitement des données du formulaire
	u = $('username');
	p = $('password');
	c = $('cle');
	
	// hachage du password avec la clef publique (le mdp est aussi haché en md5)
	p.value = hex_hmac_md5(c.value, hex_md5(p.value));

	// -- Traitement des reponses du serveur
	request.onreadystatechange = function() { traitement(request) }
  var params = '?' + 'username='+u.value+'&password='+p.value+'&cle='+c.value+'&js=1&';
	request.open('GET', 'serveur.php'+params, true);									// préparation de la requête
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	//request.send('username='+u.value+'&password='+p.value+'&cle='+c.value+'&js=1&');//Envoi de la requête en Mode POST
	request.send(null); //Envoi de la requête en mode GET

	return false; // évite l'envoi du formulaire
}
***************************************************************************** */
