/**************************************
	- VISUAL HOME V -
**************************************/
function randomVisual()
{
	var sBackgroundId  = 'ultVisualNew2';
	var sBackgroundId2 = 'ultBodyNew';
	var sClassName	   = 'ultVisual';
	var oElement	   = (typeof(document.getElementById(sBackgroundId)) != 'undefined') ? document.getElementById(sBackgroundId) : null;
	var oElement2	   = (typeof(document.getElementById(sBackgroundId2)) != 'undefined') ? document.getElementById(sBackgroundId2) : null;
	var iRandomNumber  = randomNumber(1, 3);
	
	if(oElement != null) {
		oElement.className = sClassName + '_' + iRandomNumber;
	}
	if(oElement2 != null) {
		oElement2.className = sClassName + '_' + iRandomNumber;
	}
}

addLoadEvent(randomVisual);

/**************************************
	- FONCTIONS DE FORMULAIRES -
**************************************/

/**
 * Valide le formulaire
 * @param oForm (string) => id du formulaire
 * @return void
 */
function formSubmit(sForm)
{
	var oForm = new getObj(sForm);

	oForm.submit();
	return false;
}

/**
 * Valide le formulaire si on appuie sur la touche "entrée"
 * @param event (object) => évènement
 * @param oForm (object) => objet du formulaire à submit
 * @return void
 */
function formEventSubmit(event, oForm)
{
	if(browser == 'IE')
	{
		if(event.keyCode == 13) oForm.submit();
	}
	else
	{
		if(event.which == 13) oForm.submit();
	}
}



/*************************************
- function : blockImages()
- desc     : désactive le clic droit sur les images
/*************************************/
function blockImages()
{
	// on récupère toutes les images de la page
	var aImages = document.getElementsByTagName('img');

	// on récupère le nombre d'images total
	var iLength = aImages.length;

	//on boucle sur chaque image en désactivant le clic droit
	for(i = 0; i < iLength; i++) aImages[i].oncontextmenu = function() { return false; }
}


/*************************************
- function : imageZoomIn/Out(sId)
- @params  : oObj (objet) => contient l'objet de l'image à zoomer
- desc     : permet de zoomer une image avec un effet de fading
/*************************************/
iMaxWidth  = 125;    // taille maximal de l'image
iMinWidth  = 41;     // taille minimal de l'image
function imageZoomIn(oObj)
{
	// on affecte un style au DIV parent
	oObj.parentNode.parentNode.style.position = 'relative';

	// on récupère la position actuelle de l'image
	var curPosX   = oObj.offsetLeft;
	var curPosY   = oObj.offsetTop;

	// on lui affecte une nouvelle taille
	oObj.setAttribute('width',iMaxWidth);
	oObj.setAttribute('height',iMaxWidth);

	// on lui affecte une nouvelle position
	oObj.style.position = 'absolute';
	oObj.style.left		= eval(curPosX-((iMaxWidth-iMinWidth)/2))+'px';
	oObj.style.top 		= eval(curPosY-((iMaxWidth-iMinWidth)/2))+'px';
}

function imageZoomOut(oObj)
{
	// on réinitialise les attributs de l'image
	oObj.parentNode.parentNode.style.position = '';
	oObj.setAttribute('width',iMinWidth);
	oObj.setAttribute('height',iMinWidth);
	oObj.style.position = '';
	oObj.style.left = '';
	oObj.style.top = '';
}



/*************************************
- function : enableSelect(oForm, oObj1, oObj2, iValue)
- @params  : oForm (objet) 	  => contient l'objet du formulaire
             oObj1 (objet) 	  => contient l'objet du select à tester
			 oObj2 (objet) 	  => contient l'objet de l'élément à activer/désactiver
			 iValue (integer) => contient la valeur permettant de faire la condition (1 activer/0 désactiver)
- desc     : permet d'activer/désactiver un select
/*************************************/
function enableSelect(oForm, oObj1, oObj2, iValue)
{
	// si la valeur du champ sélectionné est inférieur ou égal à iValue, on désactive l'objet oObj2
	if(oObj1.options[oObj1.selectedIndex].value <= iValue)
	{
		oObj2.disabled = true;
		oObj2.options[0].selected = true;
	}

	// si la valeur du champ sélectionné est supérieur à iValue, on active l'objet oObj2
	else { oObj2.disabled = false; }
}



/*************************************
- function : limitChoices(oObj, iMax, sException, sErr)
- @params  : oObj (objet)		 => contient l'objet de la checkbox
             iMax (integer) 	 => contient la limite de choix
			 sException (string) => contient l'id de l'élément étant une exception (choix autre ...)
			 sErr (string)		 => contient l'id du champs contenant le message d'erreur si limite atteinte
- desc     : permet de limiter le nombre de checkbox à cocher
/*************************************/
function limitChoice(oObj, iMax, sException, sErr)
{
	// initialisation des variables
	var iIsChecked  = 0;											// on initialise le compteur de case cochée
	var oForm	    = oObj.form;									// on récupère l'objet du formulaire
	var sObjId    	= oObj.getAttribute('id')						// on récupère l'id de l'objet actuel
	var oFormLength = oForm.elements.length;						// on récupère le nombre d'éléments du formulaire
	var oException  = (sException) ? new getObj(sException) : '';	// on récupère l'objet de l'exception
	var sErrMsg	    = document.getElementById(sErr).value;			// on récupère le message d'erreur si la limite est atteinte

	// on boucle sur tous les éléments du formulaire
	for(var i = 0; i < oFormLength; i++)
	{
		// on récupère l'objet et l'id de l'élément actuel de la boucle
		var oElement = oForm.elements[i];
		var sElementId = oElement.getAttribute('id');

		// on teste si l'élément actuel est une case à cocher
		if(oElement.type.toLowerCase() == 'checkbox')
		{

			// si une exception a été spécifiée
			if(oException)
			{
				// on décoche toutes les autres cases et on empêche de les cocher
				if(oException.checked == true)
					{
					// si l'objet actuel n'est pas l'exception, on décoche l'exception
					if(sObjId != sException) oException.checked = false;

					// si l'exception est cochée, on décoche toutes les cases sauf l'exception
					else if(sElementId != sException) oElement.checked = false;
				}
			}

			// on teste si elle a le même id que oObj et si elle est cochée
			if(oElement.checked)
			{
				// on incrément notre compteur
				iIsChecked++;

				// on teste si le compteur est supérieur à la limite iMax
				if(iIsChecked > iMax)
				{
					// on décoche la case, on décrémente le compteur et on envoie le message d'erreur
					oObj.checked = false;
					iIsChecked--;
					alert(sErrMsg);
				}
			}
		}
	}
}



/*************************************
- function : limitChoicesMulti(oObj, sModelName, iMax, sException, sErr)
- @params  : oObj (objet)		 => contient l'objet de la checkbox
			 sModelName (string) => contient le modèle de noms des checkboxs à controler
             iMax (integer) 	 => contient la limite de choix
			 sException (string) => contient l'id de l'élément étant une exception (choix autre ...)
			 sErr (string)		 => contient l'id du champs contenant le message d'erreur si limite atteinte
- desc     : permet de limiter, dans un même formulaire, un groupe de checkbox à cocher
/*************************************/
function limitChoiceMulti(oObj, sModelName, iMax, sException, sErr)
{
	// initialisation des variables
	var iIsChecked  = 0;											// on initialise le compteur de case cochée
	var oForm	    = oObj.form;									// on récupère l'objet du formulaire
	var sObjId    	= oObj.getAttribute('id')						// on récupère l'id de l'objet actuel
	var oFormLength = oForm.elements.length;						// on récupère le nombre d'éléments du formulaire
	var oException  = (sException) ? new getObj(sException) : '';	// on récupère l'objet de l'exception
	var sErrMsg	    = document.getElementById(sErr).value;			// on récupère le message d'erreur si la limite est atteinte

	// on boucle sur tous les éléments du formulaire
	for(var i = 0; i < oFormLength; i++)
	{
		// on teste si l'élément actuel est une case à cocher
		if(oForm.elements[i].type.toLowerCase() == 'checkbox')
		{

			// on récupère l'objet et l'id de l'élément actuel de la boucle
			var oElement   = oForm.elements[i];
			var sElementId = oElement.getAttribute('id');

			// on teste si l'id de l'élément actuel correspond au modèle
			if(sElementId.indexOf(sModelName) > -1)
			{

				// si une exception a été spécifiée
				if(oException)
				{
					// on décoche toutes les autres cases et on empêche de les cocher
					if(oException.checked == true)
					{
						// si l'objet actuel n'est pas l'exception, on décoche l'exception
						if(sObjId != sException) oException.checked = false;

						// si l'exception est cochée, on décoche toutes les cases sauf l'exception
						else if(sElementId != sException) oElement.checked = false;
					}
				}

				// on teste si elle a le même id que oObj et si elle est cochée
				if(oElement.checked)
				{
					// on incrément notre compteur
					iIsChecked++;

					// on teste si le compteur est supérieur à la limite iMax
					if(iIsChecked > iMax)
					{
						// on décoche la case, on décrémente le compteur et on envoie le message d'erreur
						oObj.checked = false;
						iIsChecked--;
						alert(sErrMsg);
					}
				}
			}
		}
	}
}



/*************************************
- function : sendFormFrame(sForm,sFormFrame)
- @params  : sForm (string) 	 => contient l'id du formulaire principal
			 sFormFrame (string) => contient l'id du formulaire de la frame
			 sType (string)		 => contient le modèle de formulaire
- desc     : permet de récupérer les valeurs d'un formulaire d'iframe
/*************************************/
function sendFormFrame(sForm, sFormFrame, sType)
{
	// on teste le type
	switch(sType)
	{
		case 'signup':
			// on récupère l'objet du formulaire principal et celui de la frame
			var oForm = document.getElementById(sForm);
			var oFormFrame = window.frames.ultIframeGeo.document.getElementById(sFormFrame);

			// on affecte les valeurs du formulaire de la frame au formulaire principal
			oForm.elements.aboPays.value = (oFormFrame.elements.choixPays) ? oFormFrame.elements.choixPays.value : '';
			oForm.elements.aboRegion.value = (oFormFrame.elements.choixRegion) ? oFormFrame.elements.choixRegion.value : '';
			oForm.elements.aboVille.value = (oFormFrame.elements.choixVille) ? oFormFrame.elements.choixVille.value : '';
			oForm.elements.aboCp.value = (oFormFrame.elements.choixCp) ? oFormFrame.elements.choixCp.value : '';

			// si des champs sont vides, on envoie un message d'erreur
			if (oForm.elements.aboVille.value == '') alert(document.getElementById('errCountry').value);
			else if (oForm.elements.constDdnAnnee.value < 1908 || oForm.elements.constDdnAnnee.value == 'AAAA') alert(document.getElementById('errBirthday').value);
			else oForm.submit();
			break;

		case 'myprofile':
			// on récupère l'objet du formulaire principal et celui de la frame
			var oForm = document.getElementById(sForm);
			var oFormFrame = window.frames.ultIframeGeo.document.getElementById(sFormFrame);

			// on affecte les valeurs du formulaire de la frame au formulaire principal
			oForm.elements.aboPays.value = (oFormFrame.elements.choixPays) ? oFormFrame.elements.choixPays.value : '';
			oForm.elements.aboRegion.value = (oFormFrame.elements.choixRegion) ? oFormFrame.elements.choixRegion.value : '';
			oForm.elements.aboVille.value = (oFormFrame.elements.choixVille) ? oFormFrame.elements.choixVille.value : '';
			oForm.elements.aboCp.value = (oFormFrame.elements.choixCp) ? oFormFrame.elements.choixCp.value : '';

			// si des champs sont vides, on envoie un message d'erreur
			if (oForm.elements.aboVille.value == '') alert(document.getElementById('errCountry').value);
			else if (oForm.elements.constDdnAnnee.value < 1908 || oForm.elements.constDdnAnnee.value =='AAAA') alert(document.getElementById('errBirthday').value);
			else oForm.submit();
			break;
			
		case 'myprofileSearch':
			// on récupère l'objet du formulaire principal et celui de la frame
			var oForm = document.getElementById(sForm);
			var oFormFrame = window.frames.ultIframeGeo.document.getElementById(sFormFrame);

			// on affecte les valeurs du formulaire de la frame au formulaire principal
			oForm.elements.aboPays.value = (oFormFrame.elements.choixPays) ? oFormFrame.elements.choixPays.value : '';
			oForm.elements.aboRegion.value = (oFormFrame.elements.choixRegion) ? oFormFrame.elements.choixRegion.value : '';
			oForm.elements.aboVille.value = (oFormFrame.elements.choixVille) ? oFormFrame.elements.choixVille.value : '';
			oForm.elements.aboCp.value = (oFormFrame.elements.choixCp) ? oFormFrame.elements.choixCp.value : '';

			// si des champs sont vides, on envoie un message d'erreur
			oForm.submit();
			break;

		case 'advancedsearch':
			// on récupère l'objet du formulaire principal et celui de la frame
			var oForm = document.getElementById(sForm);
			var oFormFrame = window.frames.ultIframeGeo.document.getElementById(sFormFrame);

			// on affecte les valeurs du formulaire de la frame au formulaire principal
			oForm.elements.search_country.value = (oFormFrame.elements.choix_pays) ? oFormFrame.elements.choix_pays.value : '';
			oForm.elements.search_area.value = (oFormFrame.elements.choix_region) ? oFormFrame.elements.choix_region.value : '';
			oForm.elements.search_town.value = (oFormFrame.elements.choix_ville && oFormFrame.elements.choix_ville != 'undefined') ? oFormFrame.elements.choix_ville.value : '';
			oForm.elements.search_cp.value = (oFormFrame.elements.choix_Cp) ? oFormFrame.elements.choix_Cp.value : '';

			oForm.submit();
			break;
			
		case 'landing_n':
			// on récupère l'objet du formulaire principal et celui de la frame
			var oForm = document.getElementById(sForm);
			var oFormFrame = window.frames.ultIframeGeo.document.getElementById(sFormFrame);

			// on affecte les valeurs du formulaire de la frame au formulaire principal
			oForm.elements.aboPays.value = (oFormFrame.elements.choixPays) ? oFormFrame.elements.choixPays.value : '';
			oForm.elements.aboRegion.value = (oFormFrame.elements.choixRegion) ? oFormFrame.elements.choixRegion.value : '';
			oForm.elements.aboVille.value = (oFormFrame.elements.choixVille) ? oFormFrame.elements.choixVille.value : '';
			oForm.elements.aboCp.value = (oFormFrame.elements.choixCp) ? oFormFrame.elements.choixCp.value : '';

			// si des champs sont vides, on envoie un message d'erreur
			if (oForm.elements.aboVille.value == '') alert(document.getElementById('errCountry').value);
			else if (oForm.elements.constDdnAnnee.value < 1908 || oForm.elements.constDdnAnnee.value == 'AAAA') alert(document.getElementById('errBirthday').value);
			else oForm.submit();
			break;
	}
}



/*************************************
- function : limitChars(oElement,iMax)
- @params  : oElement (objet) 	 => contient l'objet à limiter
			 iMax (integer)		 => contient le nombre maximum de caractères autoriser
			 sErrId (string)	 => contient l'id du message d'erreur
- desc     : permet de limiter le nombre de caractères dans un élément
/*************************************/
function limitChars(oElement, iMax, sErrId)
{
	var sErrMsg = document.getElementById(sErrId).value;

	if(oElement.value.length >= iMax)
	{
		oElement.value = oElement.value.substr(0, iMax);
		alert(sErrMsg);
	}
}



/*************************************
- function : resizeImage(sId, sImagePath,iMaxWidth)
- @params  : sId (string)			=> contient l'id de l'image à redimensionner
			 oImage (objet)			=> contient l'objet de l'image à redimensionner
			 iMaxWidth (integer)	=> contient la largeur maximum que l'image ne doit pas dépasser
- desc     : permet de redimensionner une image si elle dépasse iMaxWidth
/*************************************/
function resizeImage(sId, oImage, iMaxWidth)
{
	var oNewImage = document.getElementById(sId);

	var iImageWidth  = oImage.width;
	var iImageHeight = oImage.height;
	var iRatio 		 = iImageWidth/iImageHeight;

	if(iImageWidth > iMaxWidth)
	{
		oNewImage.width  = iMaxWidth;
		oNewImage.height = eval((iImageWidth-iMaxWidth)/iRatio);
	}
	else
	{
		oNewImage.width  = iImageWidth;
		oNewImage.height = iImageHeight;
	}
}



/*************************************
- function : randomNumber(iMax)
- @params  : iMin => contient le nombre de début
			 iMax => contient le nombre de fin
- desc     : permet de générer un nombre aléatoire entre iMin et iMax
/*************************************/
function randomNumber(iMin, iMax)
{
	return Math.floor(Math.random() * (iMax - iMin + 1)) + iMin;
}



/*************************************
- function : displayErrors(aElements)
- @params  : aElements => contient un tableau des champs à vérifier
- desc     : permet de focus la première erreur du tableau puis d'appliquer une class CSS à tous les éléments du tableau
/*************************************/
function displayErrors(aElements)
{
	// on initialise les variables
	var iCount = aElements.length;
	var bFlag  = 0;

	// on boucle les éléments du tableau
	for(i = 0; i < iCount; i++)
	{
		// on récupère l'objet et les class associées à l'élément
		var oElement = new getObj(aElements[i]);
		var sClasses = oElement.className;

		// on test si c'est le premier élément du tableau
		if(bFlag == 0)
		{
			// on focus l'élément
			oElement.focus();
			bFlag = 1;
		}

		// on applique la class CSS
		oElement.className  = sClasses.replace('ultInputText','ultInputTextError');
	}
}



/*************************************
- function : initLayer(sLayerId)
- @params  : sLayerId => contient l'id du layer
- desc     : permet de centrer le layer verticalement et de corriger le bug des input sous IE
/*************************************/
function initLayer(sLayerId)
{
	var oHtml		  = document.getElementsByTagName('html')[0];
	var oBody		  = document.body;
	var oLayer 		  = new getObj(sLayerId);
	var iScreenWidth  = getWindowWidth();
	var iScreenHeight = getWindowHeight();
	var iPosX 		  = eval((iScreenWidth-oLayer.offsetWidth)/2)+'px';
	var iPosY 		  = eval((iScreenHeight-oLayer.offsetHeight)/2)+'px';

	oHtml.style.overflow = 'hidden';
	oBody.style.overflow = 'hidden';
	oLayer.style.left 	 = iPosX;
	oLayer.style.top  	 = iPosY;

	if(browser+version == 'IE6')
	{
		oIframe = document.createElement('iframe');

		with(oIframe.style)
		{
			position	= 'absolute';
			width    	= '100%';
			height		= '100%';
			top			= 0;
			left		= 0;
			filter    	= 'alpha(opacity=0)';
			zIndex		= 1;
		}

		document.body.appendChild(oIframe);
	}
}



// GD20040124
///////// manage checkboxes
function testchecked(f,k,n)
{
	for(var i=0;i<f.elements.length;i++)
	{
		obj = f.elements[i]; objType = obj.type.toLowerCase(); // create form object
		if((objType == 'checkbox') && obj.name != n)
		{
			if(k) // if need to be checked
			{
				if(!obj.checked) return false; // return false if a checkbox isn't checked
			}
			else if(obj.checked) return false; // return false if a checkbox is checked
		}
	}
	return true;
}

function checkall()
{
	var checkit = (arguments[0].checked) ? 1 : 0;
	for(var i=0;i<arguments[1].elements.length;i++)
	{
		obj = arguments[1].elements[i]; objType = obj.type.toLowerCase();
		if((objType == 'checkbox') && obj.name != arguments[0].name) obj.checked = checkit;
	}
}

function checkchecked(f,n)
{
	f.controlbox.checked = testchecked(f,true,n);
}

// action function
function actionGo()
{
	f = document.formMailsIndex;
	f.action.value = arguments[0];
	if(testchecked(f,false,f.controlbox.name)) // if no checkbox's checked
	{
		var error = document.getElementById('ultCheckError');
		if(error) alert(error.innerHTML);
		return;
	}
	f.submit();
}
///////// manage checkboxes END

/* pixel de presence */
pres_pixel = new Image();
cpt = 0;
function presence()
{
    cpt = Math.floor((Math.random()*10))+cpt;
    pres_pixel.src = '/home/presence.php?cpt='+cpt;
    mach = setTimeout("presence()",60000);
}
setTimeout("presence()",60000);
/* end */




/**************************************
	- FONCTIONS DE CHEKBOX (Tout selectioner dans signup/profil.php) -
**************************************/

function selectAll(bChecked, sForm, sModelName)
{
	var oForm       = new getObj(sForm);
	var iFormLength = oForm.length;
	
	for(i = 0; i < iFormLength; i++)
	{
		if(oForm.elements[i].type.toLowerCase() == 'checkbox')
		{
			var oElement   = oForm.elements[i];
			var sElementId = oElement.getAttribute('id') ? oElement.getAttribute('id') : '';

			if(sElementId.indexOf(sModelName) > -1)
			{
				if(bChecked == true)
				{
		 			oForm.elements[i].checked = true;
				}
					else
				{
		 			oForm.elements[i].checked = false;
				}
			}
		}
	}
}

/*************************************
- function : resetPassword();
- @params  : aucun
- desc     : permet d'effacer tous les passwords dans la page 
pour empêcher l'utilisation des passwords mémorisés par le navigateur
/*************************************/

function resetPassword()
	{
		var arrElements = document.getElementsByTagName("input");
		var nbElements = arrElements.length;
		var strAttributeName = "type";
		var strAttributeValue = "password";
		var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
		var arrPwd = new Array();
		for(var i=0; i<arrElements.length; i++)
		{
			oCurrent = arrElements[i];
			oAttribute = oCurrent.getAttribute(strAttributeName);
			if(typeof oAttribute == "string" && oAttribute.length > 0)
			{
				if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute)))
				{
				arrPwd.push(oCurrent);
				}
			}
		}
		var nbPwd = arrPwd.length;
		for(i=0;i<nbPwd;i++)
		{
		arrPwd[i].value = "";
		}
	}


function checkEmail(sEmail) {
	var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(sEmail)) {
		return false;
	}
	else {
		return true;
	}
}