// util
if(typeof(util)=="undefined")
{
	var util = new Object();
}

util.form = new Object();

function FormUtilsCheckDate(str)
{
	var d=str.Trim();
	if(d=='')
	{
		return(true);
	}
	
	var m_names = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

	// get separator
	var separator='';
	var separatorsList=new Array("-", "/", " ");
	
	for(var i=0; i<separatorsList.length; i++)
	{
		if(d.indexOf(separatorsList[i], 0)!=-1)
		{
			separator=separatorsList[i];
			break;
		}
	}
	
	// if separator is SPACE, then the date should be dd {mm} yyyy, where {mm} is the
	// 3-letters short for the month name
	if(separator=="")
	{
		return(false);
	}
	else
	{
		if(isNaN(Date.parse(d)))
		{
			return(false);
		}
	}

	// check if the entered date is the same as the javascript date.
	var dateArray=util.string.stringToArray(d, separator, false);

	var date=new Date(d);
	var dateDD, dateMM;
	if(separator==" ")
	{
		var m;
		dateArray[1] = dateArray[1].toLowerCase();
		for(m=0; (m<m_names.length) && (m_names[m].toLowerCase()!=dateArray[1]); m++);
		if(m==m_names.length)
		{
			return(false);
		}
		dateMM = m + 1;
		dateDD = parseInt(util.string.leftTrimChar(dateArray[0], "0"));
	}
	else
	{
		dateDD=parseInt(util.string.leftTrimChar(dateArray[1], "0"));
		dateMM=parseInt(util.string.leftTrimChar(dateArray[0], "0"));
	}
	var dateYYYY=parseInt(dateArray[2]);
	if(dateYYYY>9999)
	{
		return(false);
	}
	if((dateMM!=(date.getMonth()+1)) || (dateDD!=date.getDate()) || (dateYYYY!=date.getFullYear()))
	{
		return(false);
	}
	return(true);
}
util.form.checkDate = FormUtilsCheckDate;

function FormUtilsCheckEmail(str)
{
	var pattern =  /^[a-z]([\.\-\_]{0,}[a-z_0-9]|[a-z_0-9]\.[a-z_0-9])+@([a-z0-9]|[a-z0-9][\.\-][a-z0-9])+\.[a-z]{2,}$/i
  return pattern.test(str)
}
util.form.checkEmail = FormUtilsCheckEmail;

function FormUtilsCheck(field, fieldName, empty, type, min, max, message)
{
	var str = field.value;
	if(empty && ((str=="") || (str==null)))
	{
		FormUtilsShowMessage("Please enter a value in the \"" + fieldName + "\" field.", message);
//		alert("Veuillez entrer une valeur dans le champs \"" + fieldName + "\".");
		field.focus();
		return(false);
	}
	
	switch(type.toLowerCase())
	{
		case "string":
			if(empty || (!empty && str!=""))
			{
				if((min!=null) && (str.length<min))
				{
					FormUtilsShowMessage("Please enter at least " + min + " characters in the \"" +
						fieldName + "\" field.", message);
/*
					alert("Veuillez entrer au moins " + min + " caractères dans le champs \"" +
						fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
			}
			if((max!=null) && (str.length>max))
			{
				FormUtilsShowMessage("Please enter at most " + max + " characters in the \"" +
					fieldName + "\" field.\r\n(Current count: " + str.length + " characters)", message);
/*
				alert("Veuillez entrer au plus " + max + " caractères dans le champs \"" +
					fieldName + "\".\r\n(Dénombrement actuel: " + str.length + " caractères)");
*/
				field.select();
				field.focus();
				return(false);
			}
			break;
		case "int":	
			if(empty || (!empty && str!=""))
			{
				if(isNaN(parseInt(str)))
				{
					FormUtilsShowMessage("Please enter an integer value in the \"" + fieldName +
						"\" field.", message);
/*
					alert("Veuillez entrer un nombre entier dans le champs \"" + fieldName +
						"\".");
*/
					field.select();
					field.focus();
					return(false);
				}
				str = parseInt(str);
				if((min!=null) && (str<min))
				{
					FormUtilsShowMessage("Please enter a value superior to " + min + 
						" in the \"" + fieldName + "\" field.", message);
/*
					alert("Veuillez entrer un nombre supérieur à " + min + 
						" dans le champs \"" + fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
				if((max!=null) && (str>max))
				{
					FormUtilsShowMessage("Please enter a value inferior to " + max + 
						" in the \"" + fieldName + "\" field.", message);
/*
					alert("Veuillez entrer un nombre inféfieur à " + max + 
						" dans le champs \"" + fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
			}
			break;
		case "float":	
			if(empty || (!empty && str!=""))
			{
				if(isNaN(parseFloat(str)))
				{
					FormUtilsShowMessage("Please enter an float value in the \"" + fieldName +
						"\" field.", message);
/*
					alert("Veuillez entrer un nombre décimal dans le champs \"" + fieldName +
						"\".");
*/
					field.select();
					field.focus();
					return(false);
				}
				str = parseFloat(str);
				if((min!=null) && (str<min))
				{
					FormUtilsShowMessage("Please enter a value superior to " + min + 
						" in the \"" + fieldName + "\" field.", message);
/*
					alert("Veuillez entrer un nombre supérieur à " + min + 
						" dans le champs \"" + fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
				if((max!=null) && (str>max))
				{
					FormUtilsShowMessage("Please enter a value inferior to " + min + 
						" in the \"" + fieldName + "\" field.", message);
/*
					alert("Veuillez entrer un nombre inférieur à " + min + 
						" dans le champs \"" + fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
			}
			break;
		case "date":
			if(empty || (!empty && str!=""))
			{
				if(!FormUtilsCheckDate(str))
				{
					FormUtilsShowMessage("Please enter a valid date in the \"" +
						fieldName + "\" field.", message);
/*
					alert("Veuillez entrer une date valide dans le champs \"" +
						fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
				str = Date.parse(str);
				if((min!=null) && (str<Date.parse(min)))
				{
					FormUtilsShowMessage("Please enter a date past " + min + ".", message);
//					alert("Veuillez entrer une date ultérieure à " + min + ".");
					field.select();
					field.focus(); 
					return(false);
				}
				if((max!=null) && (str>Date.parse(max)))
				{
					FormUtilsShowMessage("Please enter a date prior to " + max + ".", message);
//					alert("Veulliez entrer une date antérieure à " + max + ".");
					field.select();
					field.focus(); 
					return(false);
				}
			}
			break;
		case "email":
			if(empty || (!empty && str!=""))
			{
				if(!FormUtilsCheckEmail(str))
				{
					FormUtilsShowMessage("Please enter a valid e-mail address in the \"" +
						fieldName + "\" field.", message);
/*
					alert("Veuillez entrer une adresse email valide dans le champs \"" +
						fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
			}
			break;
		case "pattern":
			if(empty || (!empty && str!=""))
			{
				if(!min.test(str))
				{
					FormUtilsShowMessage("Please enter a valid " + max + " in the \"" +
						fieldName + "\" field.", message);
/*
					alert("Veuillez entrer un(e) " + max + " valide dans le champs \"" +
						fieldName + "\".");
*/
					field.select();
					field.focus();
					return(false);
				}
			}
			break;
	}
	return(true);
}
util.form.check = FormUtilsCheck;

function FormUtilsCheckRadio(field, fieldName, message)
{
	for(var i=0; ((i<field.length) && (!field[i].checked)); i++);
	if(i==field.length)
	{
		FormUtilsShowMessage("Please select an option for \"" + fieldName + "\"", message);
//		alert("Veuillez choisir une option pour \"" + fieldName + "\"");
		return(false);
	}
	return(true);
}

util.form.checkRadio = FormUtilsCheckRadio;

function FormUtilsCheckSelect(field, fieldName, emptyValue, message)
{
	var selIn = field.selectedIndex;
	var ok = true;
	if(selIn==-1)
	{
		ok = false;
	}
	else
	{
		if(emptyValue!=null)
		{
			if(field.options[selIn].value==emptyValue)
			{
				ok = false;
			}
		}
	}
	if(!ok)
	{
		FormUtilsShowMessage("Please select a value for \"" + fieldName + "\"", message);
		field.focus();
	}
	return(ok);
}

util.form.checkSelect = FormUtilsCheckSelect;

function FormUtilsShowMessage(str, message)
{
	if(message==null)
	{
		alert(str);
	}
	else
	{
		alert(message);
	}
}

function FormUtilsGetListItemName(options, value)
{
	var name;
	for(var i=0; i<options.length; i++)
	{
		if(options[i].value==value)
		{
			name = options[i].text;
			break;
		}
	}
	if(name==null)
	{
		name = "[undefined]";
	}
	return(name);
}

util.form.getListItemName = FormUtilsGetListItemName;

function FormUtilsGetListItemIndex(options, value)
{
	var i;
	for(i=0; i<options.length; i++)
	{
		if(options[i].value==value)
		{
			break;
		}
	}
	if(i==options.length)
	{
		i = -1;
	}
	return(i);
}

util.form.getListItemIndex = FormUtilsGetListItemIndex;