//Création du moteur Ajax
//Varie selon les navigateurs
function creationXHR() {
	var resultat;
	try {
		resultat = new XMLHttpRequest();
	}
	catch (Error) {
		try {
			resultat = new ActiveXObject("Msxml12.XMLHTTP");
		}
		catch (Error) {
			try {
				resultat = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(Error) {
				resultat = null;
			}
		}
	}
	return resultat;
}
//Obtenir le contenu d'un div par son id
function getValue(id) {
	var reponse = document.getElementById(id).value;
	return (reponse);
}
//-------------------RECHERCHE PAR NOM
function actualiserPage() {
	if (objetXHR.readyState == 4) {
		if (objetXHR.status == 200) {
			color(document.getElementById("table"), "white");
			//console.info('Etat de readyState: ' + objetXHR.readyState + ' - Valeur de responseText: ' + objetXHR.responseText);
			var res=objetXHR.responseText;
                        //Si on a pas de résultat = aucun composé n'ayant le nom commençant par ce que l'utilisateur a tapé
			if (res == "") {
                                //On affiche la croix rouge d'erreur
				document.getElementById("erreur").innerHTML = "<img src='images/ajax/erreur.jpg' alt='Error'>";
				document.getElementById("erreur").style.visibility="visible";
				document.getElementById("res").style.visibility="hidden";
				}
                        //Si on a un seul résultat
			else if (getValue("table").toUpperCase() ==(res.substring(res.indexOf(">") + 1, res.substring(res.indexOf(">")+ 1, res.length-1).indexOf("<") +res.indexOf(">") + 1).toUpperCase()) && getValue("table") != "") {
				var contenu = getValue("table");
                                //On affiche le feu vert
				document.getElementById("erreur").innerHTML = "<img src='images/ajax/valide.PNG' alt=''>";
				document.getElementById("erreur").style.visibility="visible";
				document.getElementById("res").style.visibility="hidden";
			}
                        //Sinon on affiche la liste des résultats
			else {
				document.getElementById("erreur").style.visibility="hidden";
				document.getElementById("res").style.visibility="visible";
				id = document.getElementById("res");
				id.innerHTML = "<ul class='ajaxRes'>" + res +"</ul>";
			}
		}
		else {
			divid=document.getElementById("res");
			divid.innerHTML="Erreur serveur: " + objetXHR.status + " - " + objetXHR.statusText;
			objetXHR.abort();
			objetXHR = null;
		}
	}
}
//Fonction appelée lorsqu'un caractère a été tapé lors de la recherche par nom
function jouer() {
        //Création du moteur Ajax
	objetXHR = creationXHR();
        //Récupération du texte tapé par l'utilisateur
	var table = getValue("table");
        //Envoi de la requete à la page compose.php
	objetXHR.open("get", "moteurRechercheAjax/compose.php?caracteres=" + table+ "",true);
        //Actualisation de la page avec la réponse
	objetXHR.onreadystatechange= actualiserPage;	
	divid=document.getElementById("res");
	objetXHR.send(null);
}
//Actualiser la liste des suggestions
function changeRes(valeur, id) { //Changer les résultats.
	document.getElementById(id).value = valeur;
	if (id == "tableCAS")
		jouerCAS();
	else if (id == "tableSMILES")
		jouerSMILES();
        else if (id == "tableinChi")
		jouerinChi();
        else if (id == "tableauthor")
		jouerauthor();
	else jouer();
}
function color(obj, couleur) { //Pour colorer les lignes de valeur
	obj.style.backgroundColor= couleur;
}

///////////////////////////////////////////----------------------------------------------- CAS
function actualiserPageCAS() {
	if (objetXHRCAS.readyState == 4) {
		if (objetXHRCAS.status == 200) {
			color(document.getElementById("tableCAS"), "white");
			//console.info('Etat de readyState: ' + objetXHRCAS.readyState + ' - Valeur de responseText: ' + objetXHRCAS.responseText);
			var res=objetXHRCAS.responseText;
			if (res == "") {
				document.getElementById("erreurCAS").innerHTML = "<img src='images/ajax/erreur.jpg'>";
				document.getElementById("erreurCAS").style.visibility="visible";
				document.getElementById("resCAS").style.visibility="hidden";
				}
			else if (getValue("tableCAS").toUpperCase() ==(res.substring(res.indexOf(">") + 1, res.substring(res.indexOf(">")+ 1, res.length-1).indexOf("<") +res.indexOf(">") + 1).toUpperCase()) && getValue("tableCAS") != "") {
				var contenu = getValue("tableCAS");
				document.getElementById("erreurCAS").innerHTML = "<img src='images/ajax/valide.PNG'>";
				document.getElementById("erreurCAS").style.visibility="visible";
				document.getElementById("resCAS").style.visibility="hidden";
			}
			else {
				document.getElementById("erreurCAS").style.visibility="hidden";
				document.getElementById("resCAS").style.visibility="visible";
				id = document.getElementById("resCAS");
				id.innerHTML = "<ul class='ajaxRes'>" + res +"</ul>";
			}
		}
		else {
			divid=document.getElementById("resCAS");
			divid.innerHTML="Erreur serveur: " + objetXHRCAS.status + " - " + objetXHRCAS.statusText;
			objetXHRCAS.abort();
			objetXHRCAS = null;
		}
	}
}
function jouerCAS() {
	objetXHRCAS = creationXHR();
	var table = getValue("tableCAS");
	objetXHRCAS.open("get", "moteurRechercheAjax/composeCas.php?caracteres=" + table+ "",true);
	objetXHRCAS.onreadystatechange= actualiserPageCAS;	
	divid=document.getElementById("resCAS");
	objetXHRCAS.send(null);
}
///////////////////////////////////////////----------------------------------------------- inChi
function actualiserPageinChi() {
	if (objetXHRinChi.readyState == 4) {
		if (objetXHRinChi.status == 200) {
			color(document.getElementById("tableinChi"), "white");
			//console.info('Etat de readyState: ' + objetXHRinChi.readyState + ' - Valeur de responseText: ' + objetXHRinChi.responseText);
			var res=objetXHRinChi.responseText;
                        if (res == "") {
				document.getElementById("erreurinChi").innerHTML = "<img src='images/ajax/erreur.jpg'>";
				document.getElementById("erreurinChi").style.visibility="visible";
				document.getElementById("resinChi").style.visibility="hidden";
				}
                       
			else if (getValue("tableinChi").toUpperCase() ==(res.substring(res.indexOf(">") + 1, res.substring(res.indexOf(">")+ 1, res.length-1).indexOf("<") +res.indexOf(">") + 1).toUpperCase()) && getValue("tableinChi") != "") {
				var contenu = getValue("tableinChi");
				document.getElementById("erreurinChi").innerHTML = "<img src='images/ajax/valide.PNG'>";
				document.getElementById("erreurinChi").style.visibility="visible";
				document.getElementById("resinChi").style.visibility="hidden";
			}
			else {
				document.getElementById("erreurinChi").style.visibility="hidden";
				document.getElementById("resinChi").style.visibility="visible";
				id = document.getElementById("resinChi");
				id.innerHTML = "<ul class='ajaxRes'>" + res +"</ul>";
			}
		}
		else {
			divid=document.getElementById("resinChi");
			divid.innerHTML="Erreur serveur: " + objetXHRinChi.status + " - " + objetXHRinChi.statusText;
			objetXHRinChi.abort();
			objetXHRinChi = null;
		}
	}
}
function jouerinChi() {
	objetXHRinChi = creationXHR();
	var table = encodeURIComponent(getValue("tableinChi"));
	objetXHRinChi.open("get", "moteurRechercheAjax/composeInchi.php?caracteres=" + table+ "",true);
	objetXHRinChi.onreadystatechange= actualiserPageinChi;
	divid=document.getElementById("resinChi");
	objetXHRinChi.send(null);
}
///////////////////////////////////////////----------------------------------------------- AUTHOR
function actualiserPageauthor() {
	if (objetXHRinChi.readyState == 4) {
		if (objetXHRinChi.status == 200) {
			color(document.getElementById("tableauthor"), "white");
			//console.info('Etat de readyState: ' + objetXHRinChi.readyState + ' - Valeur de responseText: ' + objetXHRinChi.responseText);
			var res=objetXHRinChi.responseText;
                        if (res == "") {
				document.getElementById("erreurauthor").innerHTML = "<img src='images/ajax/erreur.jpg'>";
				document.getElementById("erreurauthor").style.visibility="visible";
				document.getElementById("resauthor").style.visibility="hidden";
				}

			else if (getValue("tableauthor").toUpperCase() ==(res.substring(res.indexOf(">") + 1, res.substring(res.indexOf(">")+ 1, res.length-1).indexOf("<") +res.indexOf(">") + 1).toUpperCase()) && getValue("tableauthor") != "") {
				var contenu = getValue("tableauthor");
				document.getElementById("erreurauthor").innerHTML = "<img src='images/ajax/valide.PNG'>";
				document.getElementById("erreurauthor").style.visibility="visible";
				document.getElementById("resauthor").style.visibility="hidden";
			}
			else {
				document.getElementById("erreurauthor").style.visibility="hidden";
				document.getElementById("resauthor").style.visibility="visible";
				id = document.getElementById("resauthor");
				id.innerHTML = "<ul class='ajaxRes'>" + res +"</ul>";
			}
		}
		else {
			divid=document.getElementById("resauthor");
			divid.innerHTML="Erreur serveur: " + objetXHRinChi.status + " - " + objetXHRinChi.statusText;
			objetXHRinChi.abort();
			objetXHRinChi = null;
		}
	}
}
function jouerauthor() {
	objetXHRinChi = creationXHR();
	var table = encodeURIComponent(getValue("tableauthor"));
	objetXHRinChi.open("get", "moteurRechercheAjax/auteur.php?caracteres=" + table+ "",true);
	objetXHRinChi.onreadystatechange= actualiserPageauthor;
	divid=document.getElementById("resauthor");
	objetXHRinChi.send(null);
}

/////////////////////////////////------------------------------SMILES
function actualiserPageSMILES() {
	if (objetXHRSMILES.readyState == 4) {
		if (objetXHRSMILES.status == 200) {
			color(document.getElementById("tableSMILES"), "white");
			//console.info('Etat de readyState: ' + objetXHRSMILES.readyState + ' - Valeur de responseText: ' + objetXHRSMILES.responseText);
			var res=objetXHRSMILES.responseText;
			if (res == "") {
				document.getElementById("erreurSMILES").innerHTML = "<img src='images/ajax/erreur.jpg'>";
				document.getElementById("erreurSMILES").style.visibility="visible";
				document.getElementById("resSMILES").style.visibility="hidden";
				}
			else if (getValue("tableSMILES").toUpperCase() ==(res.substring(res.indexOf(">") + 1, res.substring(res.indexOf(">")+ 1, res.length-1).indexOf("<") +res.indexOf(">") + 1).toUpperCase()) && getValue("tableSMILES") != "") {
				var contenu = getValue("tableSMILES");
				document.getElementById("erreurSMILES").innerHTML = "<img src='images/ajax/valide.PNG'>";
				document.getElementById("erreurSMILES").style.visibility="visible";
				document.getElementById("resSMILES").style.visibility="hidden";
			}
			else {
				document.getElementById("erreurSMILES").style.visibility="hidden";
				document.getElementById("resSMILES").style.visibility="visible";
				id = document.getElementById("resSMILES");
				id.innerHTML = "<ul class='ajaxRes'>" + res +"</ul>";
			}
		}
		else {
			divid=document.getElementById("resSMILES");
			divid.innerHTML="Erreur serveur: " + objetXHRSMILES.status + " - " + objetXHRSMILES.statusText;
			objetXHRSMILES.abort();
			objetXHRSMILES = null;
		}
	}
}
function replacePlus(chaine) {
	var pos= chaine.indexOf("+");
	if (pos == -1)
		return chaine;
	else {
		if (chaine.length == 1) 
			return "plus";
		else if (pos == 0) {
			return ("plus" + replacePlus(chaine.substring(1, chaine.length)));
			}
		else if (pos == (chaine.length - 1))
			return (chaine.substring(0, pos) + "plus");
		else {
			return (chaine.substring(0, pos) + "plus" + replacePlus(chaine.substring(pos + 1, chaine.length)));
			}
	}
}
function jouerSMILES() {
	objetXHRSMILES = creationXHR();
	var table = getValue("tableSMILES");
	table=replacePlus(table);
	objetXHRSMILES.open("get", "moteurRechercheAjax/composeSmiles.php?caracteres="+ table,true);
	objetXHRSMILES.onreadystatechange= actualiserPageSMILES;	
	divid=document.getElementById("resSMILES");
	objetXHRSMILES.send(null);
}

