//required variables plus their expected type
var frmRequired = new Array(
		'salutation|str',
		'applicantlastname|str',
		'applicantfirstname|str',
		'permanentaddress|str',
		'permanentcity|str',
		'permanentstateorprovince|str',
		'permanentpostalcode|str',
		'permanentphone|int',
		'presentphone|int',
		'birthlocation|str',
		'citizenship|str',
		'certificateofproof|str',
		'maritalstatus|str',
		'dependant_spouse|str',
		'dependant_children|int',
		'dependant_others|int',
		'notes|str',
		'Typeofdegree|str',
		'studyyear|str',
		'coursename|str',
		//'specialization|str',
		'yearnumberof|int',
		'totalnumberofyearsinprogram|int',
		'addressid|str',
		'faculty|str',
		'studytypestatus|str',
		'careergoals|str',
		'tuitionfees|flt',
		'lodgingfees|flt',
		'relocationcost|flt',
		'booksandsupplies|flt',
		'livingallowance|flt',
		'othercost|flt',
		'totalexpenses|flt',
		'personalstudyfunds|flt',
		'scholarships|flt',
		'familycontributions|flt',
		'applicantincome|flt',
		'spousalincome|flt',
		'otherincome|flt',
		'totalincome|flt'
	);
	
//french translations of the variables
var frmText = new Array(
		'Salutation',
		'le nom du candidat',
		'le prenom du candidat',
		'l\'adresse permanente',
		'le nom de la ville permante',
		'le nom de la province ou état permanente',
		'le code postal permanent',
		'le No de téléphone permanent',
		'le No de téléphone actuel',
		'le lieu de naissance',
		'Citoyenneté canadienne',
		'Preuve de citoyenneté',
		'État civil',
		'le nombre d\'autres personnes à charge',
		'le nombre d\'enfants à charge',
		'le nombre d\'autres personnes à charge',
		'la description des activités communautaires',
		'Diplôme visé',
		'l\'année d\'etude',
		'le nom du cours',
		//'le nom de la discipline',
		'le nombre d\'années sur le nombre total d\'années',
		'le nombre d\'années sur le nombre total d\'années',
		'le nom de l\'institution',
		'le nom de la faculté',
		'studytypestatus',
		'les objectifs de carrière',
		'les frais de scholarité',
		'le prix du logement',
		'le coût du déménagement',
		'le coût des livres et autre matériel d\'études',
		'"frais de subsistance"',
		'les autres coût',
		'le total des besoins',
		'le total des économies pour études',
		'le montant de la/des bourse(s)',
		'la contribution des parents',
		'les revenus d\'appoint',
		'le revenu du conjoint',
		'les autres revenus',
		'le total des ressources'
	);

var frmErrCodes = new Array();
frmErrCodes[1] = 'est/sont requis(e)';
frmErrCodes[2] = 'doit contenir un courriel';
frmErrCodes[3] = 'doit contenir un chiffre';
frmErrCodes[4] = 'Maximum de 2500 caractères, s.v.p.!';

function validate(frm)
{
	var err = new Array();
	var i = 0;
	regInt = /^[0-9]+$/;
	regFloat = /^[0-9]+\.?[0-9]*$/;
	
	//nice way to handle all required fields without
	//having to check each one manually
	for(i = 0; i < frmRequired.length; i++)
	{
		elem = frmRequired[i].split("|");
		eval("frmElem = frm."+elem[0]);
		if(frmElem.type == 'text' || frmElem.type == 'textarea' || frmElem.type == 'radio')
		{
			if(frmElem.value.length < 1)
			{
				err[i] = 1;
			}
		}
		else if(frmElem.type == 'select-one' || frmElem.type == 'select-multiple')
		{
			if(frmElem.options[frmElem.selectedIndex].value.length < 1)
			{
				err[i] = 1;
			}
		}

		//enforce ints / floats		
		if(elem[1] == 'int' && !err[i] && !frmElem.value.match(regInt))
		{
			err[i] = 3;
		}
		else if(elem[1] == 'flt' && !err[i] && !frmElem.value.match(regFloat))
		{
			err[i] = 3;
		}
	}
	
	//now to do a few manual checks
	//email
	if(frm.emailaddress.value.length > 0)
	{
		regEmail = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
		if(!frm.emailaddress.value.match(regEmail))
		{
			frmText[frmText.length] = "Courriel";
			err[frmText.length - 1] = 2;
		}
	}
	
	//careergoals
	if(frm.careergoals.value.length > 2500)
	{
		frmText[frmText.length] = "Objectifs de carrière";
		err[frmText.length - 1] = 4;
	}
	
	if(err.length > 0)
	{
		displayErr(err);
		return false;
	}
	
	return true;
}

function displayErr(err)
{
	var out = "Les érreurs suivantes ont été produites:\n";
	for(idx in err) 
	{
   		out += " - " + frmText[idx] + " " + frmErrCodes[err[idx]] + "\n";
	}
	
	alert(out);
}