var gasFieldId 		= new Array();
var gasFieldLabel 	= new Array();
var gasFieldPattern = new Array();
var gabFieldRequired = new Array();
var gsFormId 		= "start";
var gnIndice 		= new Array();

function changeForm(psFormId)
{
	gsFormId = psFormId;
	
	gasFieldId[gsFormId]		= new Array();
	gasFieldLabel[gsFormId]		= new Array();
	gasFieldPattern[gsFormId]	= new Array();
	gabFieldRequired[gsFormId]	= new Array();
	gnIndice[gsFormId]			= 0;
}

function addRequiredField(psId, psLabel, psAcceptedPattern, pbRequired)
{
	var nIndice = gnIndice[gsFormId];
	var sFormId = gsFormId;
	gasFieldId[sFormId][nIndice] 		= psId;
	gasFieldLabel[sFormId][nIndice] 	= psLabel;
	gasFieldPattern[sFormId][nIndice] 	= psAcceptedPattern;
	gabFieldRequired[sFormId][nIndice]  = pbRequired;
	
	Event.observe(psId, 'keyup', function() { verifField(sFormId, nIndice) });
	gnIndice[sFormId]++;
}

/**
 * Verifie les champs du formulaire et affiche un message alert si erreur
 * @param <none>
 * @return <void>
 */
function validForm(psFormId)
{
	bResult = true;
	var sMessage = "Les champs suivants sont non renseign\351s ou incorrects : \n\n";
	var nIndiceCurrent = 0;
//alert(gasFieldLabel[gsFormId][nIndiceCurrent]);
	for(nIndiceCurrent = 0 ; nIndiceCurrent < gnIndice[psFormId] ; nIndiceCurrent++)
	{
		if (!verifFieldForm(psFormId, nIndiceCurrent))
		{
			sMessage += " - " + gasFieldLabel[psFormId][nIndiceCurrent] + "\n"
			bResult = false;
		}
	}
	
	if (!bResult)
	{
		alert(sMessage);
	}

	return bResult;
}


function verifFieldForm(psFormId, pnIndice)
{
	var sValue = getFieldValue(psFormId, pnIndice);
	
//	if (gabFieldRequired[psFormId][pnIndice] == true)
//	{
//		if (sValue == '' || sValue == '0')
//		{
//			highlightField(psFormId, pnIndice, true);
//			showFieldErrorMessage(psFormId, pnIndice, true);
//			return false;
//		}
//	}
	
	// Si champ required et vide 		= false
	// Si champ required et rempli  	= on teste le pattern
	// Si champ non-required et vide 	= true
	// Si champ non-required et rempli 	= on teste le pattern
	
	var bRequired = gabFieldRequired[psFormId][pnIndice];
	var bEmpty = false;
	if (sValue == "" || sValue == "0") bEmpty = true;
	
//	alert("gasFieldLabel : " + gasFieldLabel[psFormId][pnIndice] + " / psFormId : " + psFormId + " / pnIndice : " + pnIndice + " / sValue : " + sValue + " / bRequired : " + bRequired);
	if ((bRequired == true)  && (bEmpty)) return false;
	if ((bRequired == false) && (bEmpty)) return true;
	
	if (!validRegExp(psFormId, pnIndice))
	{
		highlightField(psFormId, pnIndice, false);
		showFieldErrorMessage(psFormId, pnIndice, false);
		return false;
	}
	else
	{
		highlightField(psFormId, pnIndice, true);
		showFieldErrorMessage(psFormId, pnIndice, true);
		return true;
	}
}


function verifField(psFormId, pnIndice)
{
	var sValue = getFieldValue(psFormId, pnIndice);
	
	if (gabFieldRequired[psFormId][pnIndice] == true)
	{
		if (sValue == '' || sValue == '0')
		{
			highlightField(psFormId, pnIndice, true);
			showFieldErrorMessage(psFormId, pnIndice, true);
			return false;
		}
	}

	if (sValue.length == 0) 
	{
		highlightField(psFormId, pnIndice, true);
		showFieldErrorMessage(psFormId, pnIndice, true);
		return true;
	}
	
	if (!validRegExp(psFormId, pnIndice))
	{
		highlightField(psFormId, pnIndice, false);
		showFieldErrorMessage(psFormId, pnIndice, false);
		return false;
	}
	else
	{
		highlightField(psFormId, pnIndice, true);
		showFieldErrorMessage(psFormId, pnIndice, true);
		return true;
	}
}




function validRegExp(psFormId, pnIndice)
{
//	alert("validRegExp("+psFormId+", "+pnIndice+")");
	if (gasFieldPattern[psFormId][pnIndice] == "") 
		return true;
//alert("gasFieldPattern[psFormId][pnIndice]" + gasFieldPattern[psFormId][pnIndice])
	if (pnIndice>=0 && pnIndice<gnIndice[psFormId])
	{
		// Prepare l'expression reguliere selon le pattern
		var oExpression = new RegExp(gasFieldPattern[psFormId][pnIndice], 'gi');
		
		// Recupere la valeur du champs
		var sValue = getFieldValue(psFormId, pnIndice);

		// Test le pattern sur la valeur du champs
		return oExpression.test(sValue);
	}
	else
	{
		return false;
	}
}

function getFieldValue(psFormId, pnIndice)
{
	if (document.getElementById(gasFieldId[psFormId][pnIndice]))
		return document.getElementById(gasFieldId[psFormId][pnIndice]).value;
	else
		return "";
}

function highlightField(psFormId, pnIndice, pbValid)
{
	if (document.getElementById(gasFieldId[psFormId][pnIndice]))
	{
		if (!pbValid)
			document.getElementById(gasFieldId[psFormId][pnIndice]).className = 'highlight';
		else
			document.getElementById(gasFieldId[psFormId][pnIndice]).className = '';
	}
}

function showFieldErrorMessage(psFormId, pnIndice, pbValid)
{
	var oDiv = document.getElementById('_' + gasFieldId[psFormId][pnIndice]);
	if (oDiv)
	{
		if (pbValid)
			document.getElementById('_' + gasFieldId[psFormId][pnIndice]).style.display = 'none';
		else
			document.getElementById('_' + gasFieldId[psFormId][pnIndice]).style.display = '';
			
		//document.getElementById('_' + gasFieldId[gsFormId][pnIndice]).innerHTML = psErrorMessage;
	}
}

function setFocus(psFormId, pnIndice)
{
	if (document.getElementById(gasFieldId[psFormId][pnIndice]))
	{
		document.getElementById(gasFieldId[psFormId][pnIndice]).focus();
	}
}


function increment(psId, pnIncrement, pnMax)
{
	var nValue = parseInt(document.getElementById(psId).value);
	if (nValue == "") nValue = 0;
	if (nValue < pnMax)
	{
		document.getElementById(psId).value = nValue + pnIncrement;		
	}
}

function decrement(psId, pnIncrement, pnMin)
{
	var nValue = parseInt(document.getElementById(psId).value);
	if (nValue == "") nValue = 0;
	if (nValue > pnMin)
	{
		document.getElementById(psId).value = nValue - pnIncrement;		
	}	
}

function updateFieldDateTime(psId)
{
	var sDateId = psId + "_date";
	var sTimeId = psId + "_time";
		
	var sDateValue = document.getElementById(sDateId).value;
	var sTimeValue = document.getElementById(sTimeId).value;
	
	if (sDateValue=='00/00/0000')		
		document.getElementById(sDateId).value = '';
	
	if (sDateValue!='' && sDateValue!='00/00/0000')	
		document.getElementById(psId).value = sDateValue + " " + sTimeValue;
	else
		document.getElementById(psId).value = '';
		
//	alert('updateFieldDateTime("'+psId+'")');
}

function updateFieldDateTimeTemporised(psId)
{
	setTimeout('updateFieldDateTime("' + psId + '", 1000)');
}
