/* Function qui check les champs obligatoires selon le nom des styles mandatory et mandatoryFailed 
myCallBack: 
fonction de callback appelée à la fin des checks globals, ce parametre est optionnel.
Elle sert à faire des check spécifiquer au champs.
Si un fonction de callback est défini elle doit renvoyer un boolean.
La fonction de callback ne peut pas recevoir de parametre.
Pour passer une fonction en parametre, il suffit de passer le nom de la fonction sans les parenthèses (et pas entre guillmet, ce n'est pas un string) 

Si on a des champs obligatoire, mais on veut pas passer dans le checkMandatoryGlobal
il faut utiliser les style: mandatoryCustom et mandatoryCustomFailed (meme style, mais non traité en global)
*/

function checkMandatoryGlobal(oForm, plugID, myCallBack)
{
	var oMultilang = getMultilangObject(plugID);//Recupere l'objet mutlilang, si il existe
	var flagInput = checkMandatoryGlobalByType(oForm, oMultilang, "input");
	var flagTextArea = checkMandatoryGlobalByType(oForm, oMultilang, "textarea");
	var canSubmit = (flagInput && flagTextArea);
	
	//Si il y a une fonction de callback, je l'appelle
	if(myCallBack)
	{
		var flag = myCallBack(canSubmit, oForm, plugID);
		//Pas de retour (true ou false) à la fonction de callback --> check en ajax --> Post pas le form (c'est la fct ajax qui doit s'en charger)
		if(isNaN(flag))
			return false;
		//Sinon determine le can submit
		canSubmit = (canSubmit && flag);
	}
	
	if(!canSubmit)
		closeOnEndPopup();
		
	return canSubmit;
}

//Lance le test de tous les champs avec les styles defini
function checkMandatoryGlobalByType(oForm, oMultilang, sType)
{
	var canSubmit = true;
	//Si j'ai pas la method sur le form, je prends le document (cas htmlEditeur)
	if(!oForm.getElementsByTagName)
		oForm = window.document;
	var objs = oForm.getElementsByTagName(sType);
	
	for(i=0;i<objs.length; i++)
	{
		var obj = objs[i];
		if(obj.className=="mandatory" || obj.className=="mandatoryFailed")
		{
			var flag = null;
			//Si c'est un champs multilang
			if(oMultilang)
				if(oMultilang.hasField(obj.id))
					flag = oMultilang.checkMandatory(obj.id);	
					
			//Si ce n'était pas un champs multilang
			if(flag == null)
				flag = checkMandatoryGlobalField(obj);
			
			//Met les erreurs
			if(flag)
				setMandatoryGlobalError(obj, "mandatory", "none");
			else
				setMandatoryGlobalError(obj, "mandatoryFailed", "");
			
			//Redefini le canSubmit	
			canSubmit = (canSubmit && flag);
		}
	}
		
	return canSubmit;
}

//Check si un champs est rempli
function checkMandatoryGlobalField(obj)
{
	return !(obj.value.trim() == "");
}

//Configure l'erreur avec les parametre
function setMandatoryGlobalError(obj, style, display, numError)
{
	var idObj = "";
	//Si c'est un tableau d'element (pour radio avec meme id)
	if(obj.length > 0)
	{
		for(i=0;i<obj.length;i++)
		{
			obj[i].className = style;	
			idObj = obj[i].id; 
		}
	}
	else
	{
		obj.className = style;
		idObj = obj.id;
	}
	
	if(!numError)
		numError="";
		
	//Affiche du message d'erreur si il existe
	var error = document.getElementById(idObj + "_error" + numError);
	
	
	if(error)
		error.style.display = display;
}	


//Recuperation de l'objet multilang si il y en a un
function getMultilangObject(plugID)
{
	try 
	{
		oMultilang = eval(plugID + "Multilang");
		return oMultilang;
	}
	catch (err) 
	{
		return null;
    }
}

//Fonction pour facilier la mise en place des styles et affichage des spand'erreur depuis les fct custom
function setMandatoryCustomError(obj, noError, numError)
{
	if(noError)
		setMandatoryGlobalError(obj, "mandatoryCustom","none",numError);
	else
		setMandatoryGlobalError(obj, "mandatoryCustomFailed","",numError);
}

/******************* AUTRE FONCTION POUR LE CHIKITA *************************/
//Gestion des mots clés obligatoires pour les pages (met en global car peut etre utiliser par page, news...)
function checkMandatoryKeyword()
{
	var checkMandatory = document.getElementsByName("aKeyword[]");
	//Si j'ai pas de mot clé, je retourne true
	if(checkMandatory.length==0)
		return true;
	
	//Boucle pour tester les checked
	var flag = false;
	for(i=0;i<checkMandatory.length;i++)	
		flag = (flag || checkMandatory[i].checked);
	
	//Je lance l'affichage de l'erreur
	setMandatoryCustomError(checkMandatory, flag);	
	
	return flag;
}

//Gestion des email pour le send a friend
function checkMandatorySendAFriend()
{
	
	var mail = document.getElementById("aSend[mailto]");
	var flagTo = checkEmailFormat(mail.value);
	setMandatoryCustomError(mail, flagTo);

	mail = document.getElementById("aSend[mailfrom]");
	var flagFrom = checkEmailFormat(mail.value);
	setMandatoryCustomError(mail, flagFrom);

	return (flagTo && flagFrom); 	
}

/*Fonction pour checker les raccourcis*/
function checkRaccourci(bParentFlag, oForm)
{
	//Variable
	var aEl = new Array();
	var cpt=0;
	var param = "";
	var bMatch = true;
	
	//Recup les input et extrait les type text qui ont une valeur
	var aTmp = oForm.getElementsByTagName("input");	
	for(i in aTmp)
	{
		if(aTmp[i].type=="text")
		{
			//J'enleve les precedent message d'erreur et trim la valeur du champs
			setMandatoryGlobalError(aTmp[i], "","none", "1");	
			setMandatoryGlobalError(aTmp[i], "","none", "2");
			setMandatoryGlobalError(aTmp[i], "","none", "3");
			aTmp[i].value = aTmp[i].value.trim(); //trim la valeur
			
			//rempli le aEl si j'ai une valeur dans le champs
			if(aTmp[i].value != "")
			{ 
				aEl[cpt] =  aTmp[i];
				cpt++;
			}
		}
	}
	
	//Check si pas de caractere illegal
	for(i in aEl)
	{
		//Si le contenu a des caractere speciaux, je met l'erreur 1
		var bTmp = aEl[i].value.match(/[^a-z0-9_-]/g);
		bMatch = (bMatch && !bTmp);
		if(bTmp) 
			setMandatoryCustomError(aEl[i], false,"1");
		else
		{
			//je check si il y a une valeur identique, alors je met l'erreur 2
			bTmp = true
			for(j in aEl)
			{
				if(aEl[i].id!=aEl[j].id && aEl[i].value == aEl[j].value)
				{
					setMandatoryCustomError(aEl[i], false,"2");
					bTmp = false;
					break;
				}
			}
			
			bMatch = (bMatch && bTmp);
			if(bTmp) //Si tous les test sont passer je met dans param pour envoyer à la DB
				param += "&" + aEl[i].id + "=" + aEl[i].value;
		}
	}
	
	//Si j'ai eu des erreur, je retourne false
	if(!bMatch) 
		return false;
	
	//Si le param est vide, tous est vide donc return true
	if(param=="") 
		return true;
		

	//Sinon je check en AJAX si raccourci unique
	var xhr = getAjaxRequest();
	xhr.onreadystatechange=function()
	{
		if(xhr.readyState == 4)
			if(xhr.status == 200)
			{
				var xml = xhr.responseXML;
				var nodes = xml.getElementsByTagName('html')[0]; 
				var result = nodes.firstChild.nodeValue.trim();
				if(result == 1) //Si ok, je poste le formulaire
					oForm.submit(); //document.getElementById("formEditRaccourci").submit();
				else
				{
					//Met les erreurs
					aExistingValue = result.split(";");
					var aInError = new Array();
					for(i in aEl)
					{
						for(j=0; j<aExistingValue.length; j++)
						{
							if(aEl[i].value == aExistingValue[j])
							{
								setMandatoryCustomError(aEl[i], false, "3");	
								break;
							}
						}
					}
							
					//Enleve le divWaiting
					closeOnEndPopup();
				}
		    }
	}
	
	var url = window.location.href + "?plugin=ajaxmanager-plug-page-fct-isRaccourciUnique" + encodeURI(param);
	
	//Appelle Ajax 
	xhr.open("get", url, true);
	xhr.send(null);  //PAS DE RETOUR A LA FONCTION DE CALLBACK POUR PAS POSTER LE FORM
}