// JavaScript Document
//Module: Form Validator
//Version: 1.0.0
//Date: 06/11/2008
//Description: Functions to validate Fields in a form by controlling Required Fields and Contents.
//Programmed By: Roger Manich
//(c) 2008 Roger Manich All Rights reserved

function MM_ValidateFile()
{
	var bfind,p,nomarxiu='',availableextensions,currentext,arg = MM_ValidateFile.arguments;
	availableextensions = arg[1];
	nomarxiu = arg[0];
	p = nomarxiu.value.lastIndexOf(".");
	if (p == -1) return false;
	currentext = nomarxiu.value.substring(p+1);
	bfind = false;
	while (bfind == false)
	{
		p = availableextensions.indexOf(";");
		if (p == -1)
		{
			if (availableextensions == currentext) return true;
			bfind = true;
		}
		else
		{
			ext = availableextensions.substring(0,p);
			availableextensions = availableextensions.substring(p + 1);
			if (ext == currentext) return true;
		}
	}
	return false;
}

//Valida si un text és un correu. Verifica que tingui @ i que no acabi amb @
//Paràmetres: email (objecte argument)
function MM_AnyRadioChecked()
{
	var formulari, radioname,radios,num, args=MM_AnyRadioChecked.arguments;
	nom = args[0];
	formulari = args[1];
	//alert(" *" + formulari + " " + nom);
	opcions = eval("document." + formulari + "." + nom + ".length");
	//alert(opcions);
	for (i=0;i<opcions;i++)
	{
		 
		if (eval("document." + formulari + "." + nom + "[" + i + "].checked") == true) return true;
	}
	
	return false;
}
function MM_ValidateEmail()//v4.0
{
	var p=0,email='',args = MM_ValidateEmail.arguments;
	//Validem si és un correu
	email = args[0].value;
	p = email.indexOf('@');
	if (p<1 || p == (email.length-1)) return false;
	else return true;
}
//Verifica que una data sigui correcta (Li passem el ID del camp)
function MM_ValidateDate()
{
	var mydate,M1,M2,DateLen;
	var day,month,year;
	var day1,month1,year1;
	var args = MM_ValidateDate.arguments;
	fulldate  = document.getElementById(args[0]).value;
	M1 = fulldate.indexOf("/");
	M2 = fulldate.indexOf("/",M1+1);
	if ((M1 != 2) || (M2 != 5) || (fulldate.length < 10))
	{
		return false;
	}
	else
	{
		day = fulldate.substring(0,M1);
		month = fulldate.substring(M1+1,M2);
		year = fulldate.substring(M2+1);			
		mydate = new Date();
		mydate.setFullYear(year);
		mydate.setMonth(month-1);
		mydate.setDate(day);
		day2 = mydate.getDate();
		month2 = mydate.getMonth() + 1;
		year2 = mydate.getFullYear();
		if ((day != day2) || (month != month2) || (year != year2))
		{
			return false;
		}
	}
	return true;
}
//Verifica que el numero estigui entre un rang
//Paramtres: numero (objecte argument), rang del tipux MIN:MAX (objecte argument)
function MM_ValidateRange()//v4.0
{
	var p=0,minim=0,maxim=0,range='',numberx='',args = MM_ValidateRange.arguments;	
	range = args[1];
	numberx = args[0].value;
	p=range.indexOf(':');
	minim=range.substring(0,p);
	maxim=range.substring(p+1);
	//alert(minim + "<=" + numberx + "=>" +  eval(eval(minim)<=numberx) + " AND " + maxim + ">=" + numberx + "=>" + eval(eval(maxim)>=numberx));
	if ((eval(minim)<=numberx) && (eval(maxim)>=numberx))
	{
		//alert("TRUE");
		return true;
	}
	else
	{
		return false;
	}
}
//Verifica que el parametre sigui un numero
//paramtres: numero (objecte argument)
function MM_ValidateNumber()//v4.0
{
	var p=0,numberx='',args = MM_ValidateNumber.arguments;
	numberx = args[0].value;
	if (isNaN(numberx) == true) return false;
	else return true;
}
//Verifica que cada camp que es vol comprovar compleixi els requeriments
//Vector de paràmetres:
//1-. Nom del camp
//2-. I | T | R (Input, TextArea, RadioButton)
//3-. Requerit o no (R | '')
//4-. Tipus per I (IsText | IsEmail | IsNumber | IsRange |IsDate | IsFile)
//5-. '' | MIN:MAX (Si Tipus és IsRange)
//6-. Field Name Description
function MM_validateForm() { //v4.0
 if (document.getElementById){
    var min=0,max=0,p=0,range,TypeField,TypeContent,tmp,errors='',i,args=MM_validateForm.arguments;
    //Recorrem cadascun dels argunents
	for (i=0; i<args.length; i+=6)
	{
		
		//Determinem el tipus 
		TypeField = args[i + 1];
		TypeContent = args[i + 3];
		//Verificar si és requerit
		tmp = document.getElementById(args[i]);
		if (args[i + 2] == 'R' && (TypeField == 'I' || TypeField=='T'))
		{
			if (tmp.value == '')
			{
				errors += MM_ReportError(5,args[i+5]);
				//errors += "El camp " + args[i+5] + " és un camp requerit\n";
				alert (errors);
				document.MM_returnValue = (errors == '');
				return;
			}
			
		}
		//Validar el contingut
		switch(TypeField) 
		{
			case 'I':
				{	
					switch(TypeContent)
					{
						case 'IsText':{break;} //Validar el contingut
						case 'IsEmail':
						{
							if (MM_ValidateEmail(tmp) == false)
							{
								errors += MM_ReportError(0,args[i+5]);
								//errors += "> El camp " + args[i+5] + " no és un correu\n";
								alert(errors);
								document.MM_returnValue = (errors == '');
								return;
							}
							break;
						}
						case 'IsNumber':
						{
							if (MM_ValidateNumber(tmp) == false)
							{
								errors += MM_ReportError(1,args[i+5]);
								//errors += "> El camp " + args[i+5] + " ha de ser un numero\n";
								alert(errors);
								document.MM_returnValue = (errors == '');
								return;
							}	
							break;	
						}
						case 'IsRange':
						{
							if (MM_ValidateNumber(tmp) == false)
							{
								errors += MM_ReportError(1,args[i+5]);
								//errors += "> El camp " + args[i+5] + " ha de ser un numero\n";
								alert(errors);
								document.MM_returnValue = (errors == '');
								return;
							}
							if (MM_ValidateRange(tmp,args[i + 4]) == false)
							{
								
								range = args[i + 4];
								p=range.indexOf(':');
								min=range.substring(0,p);
								max=range.substring(p+1);
								errors += MM_ReportError(2,args[i+5],min,max);
								//errors += "> El camp " + args[i+5] + " ha de ser un numero entre " + min + " i " + max + "\n";
								alert(errors);
								document.MM_returnValue = (errors == '');
								return;
							}
							break;
							
						}
						case 'IsFile':
						{
							if (MM_ValidateFile(tmp,args[i+4]) == false)
							{
								errors += MM_ReportError(3,args[i+5]);
								alert(errors);
								document.MM_returnValue = (errors == '');
								return;
							}
							break;
						}
						case 'IsDate':
						{
							if (MM_ValidateDate(args[i]) == false)
							{
								errors += MM_ReportError(4,args[i+5]);
								//errors += "No és una data correcte en el camp" + args[i+5];
								alert(errors);
								document.MM_returnValue = (errors == '');
								return;
							}
							break;
						}
						default:alert(MM_ReportError(-1));
					}
					break;
				}
			case 'T':{break;}
			case 'R':
			{
				
				if (args[i + 2] == 'R') 
				{
					if (MM_AnyRadioChecked(args[i],args[i+3]) == false)
					{
						errors += MM_ReportError(6,args[i+5]);
						//errors += 'Has de seleccionar una opció de ' + args[i+5] + "\n";
						alert(errors);
						document.MM_returnValue = (errors == '');
						return;
					}
					
				}
				break;
			}
			default: {alert('UNKNOWN');break;}
		}
	} 
    document.MM_returnValue = (errors == '');
} }