// ---------------------------------------------------------------------//
// STOOBY_CMS                          						            //
// http://stooby-web.net                                                //
// ---------------------------------------------------------------------//
// STOOBY est un CMS (content management systeme) commercial!!!			//
// En aucun droit vous pouvez utiliser ces codes source. 				//
// Il appartient à leurs auteurs respectif.          				    //
// ---------------------------------------------------------------------//
var xhr = null;
 
// Fonction de creation de l'objet XMLHttpRequest qui resservira pour chaques fonctions AJAX
function getXhr()
{
	if(window.XMLHttpRequest) xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject)
	{  
		try
		{
			xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
		}
		catch (e)
		{
			xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
		}
	}
	else 
	{ 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest, veuillez le mettre à jour"); 
		xhr = false; 
	} 
}

function del(id,content,titreBox,lienFicher,idBalise)
{
	window.addEvent('domready', function() {
    	Box = new SexyAlertBox();
	});
	

	Box.confirm('<h1>'+titreBox+'</h1><br />Es-tu sur de vouloir suprimer '+content+' ?', {onComplete: 
			function(returnvalue) { 
			  if(returnvalue) 
			  {
				Box.info('<h1>'+titreBox+'</h1><br /><iframe src="'+lienFicher+'?type=del&id='+id+'" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" width="100%" height="50" ></iframe>');
				
				getXhr();
				xhr.onreadystatechange = function()
				{
					if(xhr.readyState < 3)
					{	
						document.getElementById(idBalise).innerHTML = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr align="center"><td height="29"><img src="image/mini-load.gif" alt="" /></td></tr></table>';
					}
					else if(xhr.readyState == 4 && xhr.status == 200)
					{
						document.getElementById(idBalise).innerHTML = xhr.responseText;
					}
				}
				
				xhr.open('GET',lienFicher+'?type=content&id='+id,true);
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				
				content = document.getElementById(idBalise).value;
				xhr.send(id+"="+content);
				
			  }
			}
		  });
}
// VERIFICATION DE LA SYNTHAXE DE L'EMAIL
function validEmail(email) { 
   invalidChars = "/:,;~"
   // verifie qu'il n'y a pas de caracteres pas autorises
   for (i=0; i<invalidChars.length; i++) {
   badChar = invalidChars.charAt(i)
   if (email.indexOf(badChar,0) > -1) {
   return false
   }
   }
   // verifie qu'il y a un @
   atPos = email.indexOf("@",1)
   if (atPos == -1) {
   return false
   }
   // et seulement un @
   if (email.indexOf("@", atPos+1) != -1) {
   return false
   }
   // et au moins un point apres le @
   periodPos = email.indexOf(".",atPos)
   if (periodPos == -1) {
   return false
   }
   //verifie qu'il y a au moins un caractère entre le @ et le .
   if (periodPos - atPos < 2) {
   return false
   }
   //verifie qu'il y a au moins deux caracteres apres le point
   if (periodPos+3 > email.length) {
   return false
   }
   return true
}

//Pour vérifier si y a du contenu dans un input...
function verifDonneeInput(idverif, idrep, mail)
{
	var content = document.getElementById(idverif).value;
	
	if(mail === true)
	{
		if(content == "" ){
		  document.getElementById(idverif).focus();
		  document.getElementById(idverif).style.border = '1px dashed #D41919';
		  document.getElementById(idrep).innerHTML = '<img src="image/ico_mini/no-valide.png" alt=""/> <font style="color:#cc0000"> Veuillez entrer votre email.<\/font>';
	   }else if (!validEmail(content)) {
		  document.getElementById(idverif).focus();
		  document.getElementById(idverif).select();
		  document.getElementById(idverif).style.border = '1px dashed #D41919';
		  document.getElementById(idrep).innerHTML = '<img src="image/ico_mini/no-valide.png" alt=""/> <font color="#FD1813">Votre email n\'est pas valide<\/font>';
	   }else{
		  document.getElementById(idverif).style.border = '1px solid #0fc41b';
		  document.getElementById(idrep).innerHTML = '<img src="image/ico_mini/valide.png" alt=""/>';
	   }
	}
	else
	{
		if(content == "" )
		{
			document.getElementById(idverif).focus();
			document.getElementById(idverif).style.border = '1px dashed #D41919';
			document.getElementById(idrep).innerHTML = '<img src="image/ico_mini/no-valide.png" alt=""/>';
		}
		else
		{
			document.getElementById(idverif).focus();
			document.getElementById(idverif).style.border = '1px solid #0fc41b';
			document.getElementById(idrep).innerHTML = '<img src="image/ico_mini/valide.png" alt=""/>';
		}
	}
}



// Affichage dans une balise en ayant recupéré une valeur
function modifajax(id, method, lien_fichier)
{
	getXhr();
	xhr.onreadystatechange = function()
	{
		if(xhr.readyState < 3)
		{
			document.getElementById(id).innerHTML = '<img src="image/mini-load.gif" alt="" />';
		}
		else if(xhr.readyState == 4 && xhr.status == 200)
		{
			// On affiche dans le span affpseudo le retour de verifpseudo.php
			document.getElementById(id).innerHTML = xhr.responseText;
		}
	}
	
	xhr.open(method,lien_fichier,true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	// On recupere la valeur de l'input ayant pour id: pseudo
	content = document.getElementById(id).value;
	// On envoie a verifregister.php le pseudo recupéré
	xhr.send(id+"="+content);
}


//Fonction renvoyant le code de la touche appuyée lors d'un événement clavier
function getKeyCode(evenement)
{
    for (prop in evenement)
    {
        if(prop == 'which')
        {
            return evenement.which;
        }
    }

    return event.keyCode;
}


//Suppression des espaces/sauts de ligne inutiles
function trim(value) {
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   var obj = /  /g;
   while (temp.match(obj)) { temp = temp.replace(obj, " "); }
   return temp;
}

//Fonction donnant la largeur en pixels du texte donné (merci SpaceFrog !)
function getTextWidth(texte)
{
	//Valeur par défaut : 150 pixels
	var largeur = 150;

	if(trim(texte) == "")
	{
		return largeur;
	}

	//Création d'un span caché que l'on "mesurera"
	var span = document.createElement("span");
	span.style.visibility = "hidden";
	span.style.position = "absolute";

	//Ajout du texte dans le span puis du span dans le corps de la page
	span.appendChild(document.createTextNode(texte));
	document.getElementsByTagName("body")[0].appendChild(span);

	//Largeur du texte
	largeur = span.offsetWidth;

	//Suppression du span
	document.getElementsByTagName("body")[0].removeChild(span);
	span = null;

	return largeur;
}


//Fonction renvoyant une valeur "aléatoire" pour forcer le navigateur (ie...)
//à envoyer la requête de mise à jour
function ieTrick(sep)
{
	d = new Date();
	trick = d.getYear() + "ie" + d.getMonth() + "t" + d.getDate() + "r" + d.getHours() + "i" + d.getMinutes() + "c" + d.getSeconds() + "k" + d.getMilliseconds();

	if (sep != "?")
	{
		sep = "&";
	}

	return sep + "ietrick=" + trick;
}


//On ne pourra éditer qu'une valeur à la fois
var editionEnCours = false;

//variable évitant une seconde sauvegarde lors de la suppression de l'input
var sauve = false;

//Fonction de modification inline de l'élément double-cliqué
function inlineModif(id, obj, nomValeur, type, lien_fichier, page, idBalise, tailleInput)
{
	if(editionEnCours)
	{
		return false;
	}
	else
	{
		editionEnCours = true;
		sauve = false;
	}

	//Objet servant à l'édition de la valeur dans la page
	var input = null;

	//On crée un composant différent selon le type de la valeur à modifier
	switch(type)
	{
		//Valeur de type texte ou nombre
		case "texte":
		case "nombre":
			input = document.createElement("input");
			break;
		
		//Valeur de type texte multilignes
		case  "texte-multi":
			input = document.createElement("textarea");
			break;
	}

	//Assignation de la valeur
	if (obj.innerText)
		input.value = obj.innerText;
	else
		input.value = obj.textContent;
		
	input.value = trim(input.value);

	//On lui donne une taille un peu plus large que le texte à modifier
	input.style.width  = tailleInput;

	//Remplacement du texte par notre objet input
	obj.replaceChild(input, obj.firstChild);

	//On donne le focus à l'input et on sélectionne le texte qu'il contient
	input.focus();
	input.select();

	//Assignation des deux événements qui déclencheront la sauvegarde de la valeur

	//Sortie de l'input
	input.onblur = function sortir()
	{
		sauverMod(id, obj, nomValeur, input.value, type, lien_fichier, page, idBalise);
		delete input;
	};

	//Appui sur la touche Entrée
	input.onkeydown = function keyDown(event)
	{
        if (!event&&window.event)
        {
            event = window.event;
        }
		if(getKeyCode(event) == 13)
        {
			sauverMod(id, obj, nomValeur, input.value, type, lien_fichier, page, idBalise);
			delete input;
		}
	};
}

//Fonction de sauvegarde des modifications apportées
function sauverMod(id, obj, nomValeur, valeur, type, lien_fichier, page, idBalise)
{
	//Si on a déjà sauvé la valeur en cours, on sort
	if(sauve)
	{
		return false;
	}
	else
	{
		sauve = true;		
	}

	//Si l'objet existe déjà on abandonne la requête et on le supprime
	if(xhr && xhr.readyState != 0)
	{
		xhr.abort();
		delete xhr;
	}

	//Création de l'objet XMLHTTPRequest
	getXhr();

	if(!xhr)
	{
		return false;
	}

	//URL du script de sauvegarde auquel on passe la valeur à modifier
	xhr.open("GET", lien_fichier+"?page="+page+"&id=" + id + "&champ=" + nomValeur + "&valeur=" + escape(valeur) + "&type=" + type + ieTrick(), true);

	//On se sert de l'événement OnReadyStateChange pour supprimer l'input et le replacer par son contenu
	xhr.onreadystatechange = function()
	{
		//Si le chargement est terminé
		if(xhr.readyState < 3)
	   {
		   document.getElementById(idBalise).innerHTML = '<img src="image/mini-load.gif" alt="" />';
	   }
    else if (xhr.readyState == 4)
		{
			//Réinitialisation de la variable d'état d'édition
			editionEnCours = false;

			//Remplacement de l'input par le texte qu'il contient
			obj.replaceChild(document.createTextNode(valeur), obj.firstChild);
		}
	}

	//Envoi de la requête
	xhr.send(null);
}

