/* VALIDACION DE FORMULARIO IMPLEMENTADA POR NAMASTECH */

// antes de poner el componente en la aplicación se tiene que definir como vamos a tratar los idiomas
var language_cat = 1;
var language_esp = 2;
var language_eng = 3;


// valores fijos
var language_esp_def = 1;
var language_cat_def = 2;
var language_eng_def = 3;

var language_global = null;

var msn_alert = '';
var validationBool = true;

var colorTRUE = '#000000';
var colorFALSE = '#FF0000';
//esta función se tiene que llamar antes que nada para partir del idioma en que se quiere que salga la validacion

function setLanguageGlobal(idLanguage)
{
	switch(idLanguage)
	{
		case this.language_cat:
			this.language_global = this.language_cat_def;
			break;
		
		case this.language_esp:
			this.language_global = this.language_esp_def;
			break;
		
		case this.language_eng:
			this.language_global = this.language_eng_def;
			break;
		default:
	}
}

//diccionario de frases para los alerts

function msn_empty(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" no puede estar vacío");
				break;
			case 2:
				getAlert("El camp "+name+" no pot estar buit");
				break;
			case 3:
				getAlert("Text field "+name+" can't be empty");
				break;
			default:	
	}	
}

function msn_email(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" tiene que ser de la forma AAA@BBB.CCC");
				break;
			case 2:
				getAlert("El camp "+name+" té que tenir la forma AAA@BBB.CCC");
				break;
			case 3:
				getAlert("Text field "+name+" have to have Email form AAA@BBB.CCC");
				break;
			default:	
	}	
}

function msn_date(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" tiene que ser de la forma DD/MM/AAAA");
				break;
			case 2:
				getAlert("El camp "+name+" té que tenir la forma DD/MM/AAAA");
				break;
			case 3:
				getAlert("Text field "+name+" have to have Email form DD/MM/YYYY");
				break;
			default:	
	}	
}


function msn_phone(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" tiene que tener 9 dígitos sin espacios");
				break;
			case 2:
				getAlert("El camp "+name+" té que tenir 9 dígits sense espais");
				break;
			case 3:
				getAlert("Text field "+name+" have to have 9 numbers without spaces");
				break;
			default:	
	}	
}

function msn_alfa(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" solo puede tener letras");
				break;
			case 2:
				getAlert("El camp "+name+" només pot tenir lletres");
				break;
			case 3:
				getAlert("Text field "+name+" can only have letters");
				break;
			default:	
	}	
}

function msn_numbers(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" solo puede tener números");
				break;
			case 2:
				getAlert("El camp "+name+" només pot tenir números");
				break;
			case 3:
				getAlert("Text field "+name+" can only have numbers");
				break;
			default:	
	}	
}

function msn_select(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" tiene que tener elemento/s seleccionado/s");
				break;
			case 2:
				getAlert("El camp "+name+" té que tenir element/s seleccionat/s ");
				break;
			case 3:
				getAlert("Text field "+name+" have to have selected option/s");
				break;
			default:	
	}	
}

function msn_password(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El password introducido tiene que coincidir con el repetido");
				break;
			case 2:
				getAlert("El password escrit té que coincidir amb el repetit");
				break;
			case 3:
				getAlert("Input Password and Repeated Password have to be the same");
				break;
			default:	
	}	
}

function msn_year(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" ha de ser de la forma AAAA");
				break;
			case 2:
				getAlert("El camp "+name+" té que ser AAAA");
				break;
			case 3:
				getAlert("Text field "+name+" have to be YYYY");
				break;
			default:	
	}	
}

function msn_file(name)
{
	switch(this.language_global)
	{
			case 1:
				getAlert("El campo "+name+" ha de ser de la forma IIBB_FILE_X.extension");
				break;
			case 2:
				getAlert("El camp "+name+" té que ser IIBB_FILE_X.extensio");
				break;
			case 3:
				getAlert("Text field "+name+" have to be IIBB_FILE_X.extension");
				break;
			default:	
	}	
}


	function msn_empty_id(name, id)
	{
		if (id == "") id = 1;
		switch(id)
		{
				case 2:
					return("El campo "+name+" no puede estar vacío");
					break;
				case 1:
					return("El camp "+name+" no pot estar buit");
					break;
				case 3:
					return("Text field "+name+" can't be empty");
					break;
				default:	
		}	
	}
	
	function msn_phone_id(name, id)
	{
		if (id == "") id = 1;
		switch(id)
		{
				case 2:
					return("El campo "+name+" tiene que tener 9 dígitos sin espacios");
					break;
				case 1:
					return("El camp "+name+" ha de tenir 9 dígits sense espais");
					break;
				case 3:
					return("Text field "+name+" have to have 9 numbers without spaces");
					break;
				default:	
		}	
	}
	
	function msn_email_id(name, id)
	{
		if (id == "") id = 1;
		switch(id)
		{
				case 2:
					return("El campo "+name+" tiene que ser de la forma AAA@BBB.CCC");
					break;
				case 1:
					return("El camp "+name+" ha de tenir la forma AAA@BBB.CCC");
					break;
				case 3:
					return("Text field "+name+" have to have Email form AAA@BBB.CCC");
					break;
				default:	
		}	
	}
	
	function msn_date_id(name, id)
	{
		if (id == "") id = 1;
		switch(id)
		{
				case 2:
					return("El campo "+name+" tiene que ser de la forma DD/MM/AAAA");
					break;
				case 1:
					return("El camp "+name+" ha de tenir la forma DD/MM/AAAA");
					break;
				case 3:
					return("Text field "+name+" have to have Email form DD/MM/YYYY");
					break;
				default:	
		}	
	}
	
	function msn_cp_id(name, id)
	{
		if (id == "") id = 1;
		switch(id)
		{
				case 2:
					return("El campo "+name+" tiene que tener 5 dígitos sin espacios");
					break;
				case 1:
					return("El camp "+name+" ha de tenir 5 dígits sense espais");
					break;
				case 3:
					return("Text field "+name+" have to have 5 numbers without spaces");
					break;
				default:	
		}	
	}

//funcion que nos devuelve el valor del campo que coincida con la propiedad name

function getValueComponent(name)
{
	return document.getElementsByName(name)[0].value;	
}

// validadores de campos

function validation_empty(name) 
{
	var valueAux =	getValueComponent(name).replace(/^\s*|\s*$/g,"");
	if ((valueAux == null) || (valueAux.length == 0)) return true;
	return false;
}

function validation_alfa (name)
{
	var valueAux =	getValueComponent(name);
	var filtro = /^[A-Za-zñÑçÇáéíóúàèìòùäëïöüÁÉÍÓÚÀÈÌÒÙÄËÏÖÜ ]*$/;

	if(filtro.test(valueAux)) return true;
	return false;
}

function validation_password (name)
{
	var valueAux =	getValueComponent(name);
	var valueAux2 = getValueComponent(name+"2");
	return (valueAux == valueAux2);
}

function validation_number (name)
{
	var valueAux =	getValueComponent(name);
	var filtro = /^[0-9]*$/;

	if(filtro.test(valueAux)) return true;	
	return false;
}

function validation_phone (name)
{
	var valueAux =	getValueComponent(name);
	var filtro = /^[0-9]*$/;

	if(filtro.test(valueAux) && valueAux.length == 9) return true;	
	return false;
}

function validation_cp (name)
{
	var valueAux =	getValueComponent(name);
	var filtro = /^[0-9]*$/;

	if(filtro.test(valueAux) && valueAux.length == 5) return true;	
	return false;
}

/*
function validation_email (name)
{
	return true;
	
	var valueAux =	getValueComponent(name);
	var filtro=/^[A-Za-z0-9_.]*@[A-Za-z0-9_.]*$/;

	if(filtro.test(valueAux)) return true;
	return false;
}*/
	function validation_email (name)
	{
		var valueAux =	getValueComponent(name);
		var filtro=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	
		if(filtro.test(valueAux)) return true;
		return false;

	}

function validation_date (name)
{
	var valueAux =	getValueComponent(name);
	var filtro=/^[0-9]+[0-9]+[/]+[0-9]+[0-9]+[/]+[0-9]+[0-9]+[0-9]+[0-9]$/;

	if(filtro.test(valueAux)) return true;
	return false;
}

function validation_year (name)
{
	var valueAux =	getValueComponent(name);
	var filtro=/^[0-9]+[0-9]+[0-9]+[0-9]$/;
	if(filtro.test(valueAux) && valueAux.length == 4) return true;
	return false;
}

function validation_file (name)
{
	var valueAux =	getValueComponent(name);

	var parts = valueAux.substr(0, 10);
	if(parts!='IIBB_FILE_')
		return false;
	return true;
	
}

function getAlert(msn)
{
	this.msn_alert += msn + "\n";
}

function getFocus(name)
{
	document.getElementsByName(name)[0].style.border="1px solid "+colorFALSE;
}

function getNotFocus(name, type)
{
	document.getElementsByName(name)[0].style.border="1px solid "+colorTRUE;
}

function finishValidation()
{
	if(!this.validationBool)
	{
		alert(this.msn_alert);
		this.msn_alert = '';
		this.validationBool = true;
		return false;
	}
	var argv = finishValidation.arguments;
	if(argv.length>0)
	{
		for(i=0; i<argv.length; i++)
		{
			finishMultiList(argv[i]);
		}
		
	}
	return true;
}

function finishMultiList(name)
{
	name += '2[]';
	var elem = document.getElementsByName(name)[0];
	for(j=0;j<elem.options.length;j++)
	{
		elem.options[j].selected = true;
	}

}

function validation_component (etiq, name, type, empty)
{   

	var boolAux = true;
	if((empty == 1) && validation_empty(name))
	{
		msn_empty(etiq);
		getFocus(name);
		this.validationBool = false;
		boolAux = false;
	}

	if((empty == 0) && type !=6 && validation_empty(name) )
	{
		getNotFocus(name, type);
		return true;
	}

	if(type == 6) return true;
	
	type = parseInt(type);
	switch (type)
	{
		case 0:
			break;
		case 1:
			if(!validation_alfa(name))
			{
				getFocus(name);
				msn_alfa(etiq);
				this.validationBool = false;	
				boolAux = false;
			}
			break;
		case 2:
			if(!validation_number(name))
			{
				getFocus(name);
				msn_number(etiq);				
				this.validationBool = false;	
				boolAux = false;						
			}
			break;
		case 3:
			if(!validation_phone(name))
			{
				getFocus(name);
				msn_phone(etiq);
				this.validationBool = false;		
				boolAux = false;					
			}
			break;
		case 4:
			if(!validation_email(name))
			{
				getFocus(name);
				msn_email(etiq);
				this.validationBool = false;	
				boolAux = false;			
			}
			break;
		case 5:
			if(!validation_select(name))
			{
				getFocusSelect(name);
				msn_select(etiq);
				this.validationBool = false;		
				boolAux = false;		
			}
			break;
		case 6:
		//caso especial. Código extraño pero validado.
			if(!validation_comboSelect(name+'2[]'))
			{
				name += '[]';
				getFocusSelect(name);
				msn_select(etiq);
				this.validationBool = false;		
				boolAux = false;		
			}
			//código necesario
			name += '[]';

			break;

		case 7:
			if(!validation_date(name))
			{
				getFocus(name);
				msn_date(etiq);
				this.validationBool = false;	
				boolAux = false;			
			}
			break;
		
		case 8:
			if(!validation_password(name))
			{
				getFocus(name);
				msn_password(etiq);
				this.validationBool = false;	
				boolAux = false;			
			}
			break;
		case 9:
			if(!validation_year(name))
			{
				getFocus(name);
				msn_year(etiq);				
				this.validationBool = false;	
				boolAux = false;						
			}
			break;

		case 10:
			if(!validation_file(name))
			{
				getFocus(name);
				msn_file(etiq);				
				this.validationBool = false;	
				boolAux = false;						
			}
			break;

		default:
	}
	//si ha pasado la validacion...
	//quitado (boolAux && type !=0)
	if(boolAux && type !=6)
		getNotFocus(name, type);
}

function validation_select(name)
{
	var boolVal = false;
	var elem = document.getElementsByName(name)[0];
	var i = 0;
	for(i=0;!boolVal && i<elem.options.length;i++)
	{
		boolVal = elem.options[i].selected;

	}
	if(elem.options[i-1].value == 's')
		boolVal = false;
	return boolVal;
}

function validation_comboSelect(name)
{
	var elem = document.getElementsByName(name)[0];
	return elem.options.length > 0;
}

function getFocusSelect(name)
{
	document.getElementsByName(name)[0].style.border="1px solid "+colorFALSE;
}


