// JavaScript Document

/*
* @Author = Michael Mafort <michaelmafort@gmail.com>
* @Since = 09/06/2007
* @License = Open
* @Access = public
*/

/*
* @Classe responsável pela validação de um formulário
* @Deve-se editar a variável radios de acordo com os nomes dos campos radios do formulário que se deseja validar
* @Exemplo de campos radios num formulario radios = "sexo,fumente";
* @A função é chamada dentro do form assim: onsubmit="return validateForm(this); return false"
* @Funciona tanto em IE quanto no FF (testes nos dois navegadores);
*/
var errors = "";
var mailMsg = "";
var radios = ""
var lang = "";

function validateForm( form , language ){
	
	language != 'en' ? lang = 'pt' : lang = language;
	errors = "";
	mailMsg = "";
	
	var txt = textInputs( form );
	var txa = textAreas( form );
	var sel = selects( form );
	var rad = "success";
	
	if( radios != "" ){
		rad = checkRadio( form );
	}
	
	if( ( txt == "error" ) || ( txa == "error" ) || ( sel == "error" ) || ( rad == "error" ) ){
		
		if( lang == 'pt' ){
			alert( "Por favor verifique o(s) campo(s) antes de submeter:\n\n" + splitMsg( errors ) );
			return false;
		}else{
			alert( "Please fill the field(s):\n\n" + splitMsg( errors ) );
			return false;
		}
		
		return false;
	}else{
		return true;
	}
	
	return false;
}

function textInputs( form ){
	inputs = form.getElementsByTagName('input');
	inputMail = "";
	
	for( i = 0 ; i < inputs.length ; i++ ){
		if( ( inputs[i].type == "text" ) || ( inputs[i].type == "password" ) || ( inputs[i].type == "file" ) ){
			if( ( inputs[i].title != "" ) && ( !inputs[i].disabled ) ){
				if( inputs[i].title == "E-mail" ){
					inputMail = inputs[i];
				}
				if( ( inputs[i].value == "" ) && ( inputs[i].title != "E-mail" ) && ( !inputs[i].disabled ) ){
						errors += inputs[i].title + ",";
				}
			}
		}
	}

	if( inputMail != "" ){
		mailMsg = validateMailAddress( inputMail.value );
	}
	
	if( mailMsg != "" ){
		errors += mailMsg + ",";
	}
	
	if( errors != "" ){
		return "error";
		return false;
	}
	
}

function checkRadio( form ){
	var checked = new Array();
	var radioName = radios.split(",");
	
	inputs = form.getElementsByTagName('input');
	
	for( x = 0 ; x < radioName.length ; x++ ){
		checked[x] = -1;
		for( i = 0 ; i < inputs.length ; i++ ){
			if( ( inputs[i].type == "radio" ) && ( inputs[i].name == radioName[x] ) && ( !inputs[i].disabled ) ){
				if( inputs[i].title != "" ){
					if( inputs[i].checked ){
						checked[x] = i;
					}
				}
			}
		}
	}
	
	for( i = 0 ; i < radioName.length ; i++ ){
		if( checked[i] == -1 ){
			errors += document.getElementById(radioName[i]).title + ",";
		}
	}
	
	if( errors != "" ){
		return "error";
	}
	
}

function selects( form ){
	inputs = form.getElementsByTagName('select');
	
	for( i = 0 ; i < inputs.length ; i++ ){
		selIndex = inputs[i].selectedIndex;
		if( ( inputs[i].title != "" )  && ( !inputs[i].disabled ) ){
			if( ( inputs[i].options[selIndex].value == "" ) || ( inputs[i].options[selIndex].value == undefined ) ){
				errors += inputs[i].title + ",";
			}
		}
	}
	
	if( errors != "" ){
		return "error";
	}
}

function textAreas( form ){
	inputs = form.getElementsByTagName('textarea');
	
	for( i = 0 ; i < inputs.length ; i++ ){
		if( inputs[i].title != "" ){
			if( ( inputs[i].value == "" )  && ( !inputs[i].disabled ) ){
				errors += inputs[i].title + ",";
			}
		}
	}
	
	if( errors != "" ){
		return "error";
	}
}

function validateMailAddress( mail ){
	var arrMail = mail.split( "@" );
	var user = arrMail[0];
	var dom = arrMail[1];
	var res = "";
	var specialChars = "!#$%&*()+=<>:;,?/}]{[";
	
	if( ( mail == "" ) || ( dom == undefined ) || ( dom == "" ) ){
		switch( lang ){
			case "pt" :
			res = "E-mail inválido ou vázio.";
			break;
			
			case "en" :
			res = "Invalid or empty e-mail address.";
			break;
		}
	}
	
	else{
		for( i = 0 ; i < mail.length; i++ ){
			for( x = 0 ; x < specialChars.length ; x++ ){
				if( mail.charAt(i) == specialChars.charAt(x) ){
					switch( lang ){
						case "pt" :
						res = "E-mail inválido ou vázio.";
						break;
						
						case "en" :

						res = "Invalid or empty e-mail address.";
						break;
					}
				}
			}
		}
		
		if( ( mail.indexOf( "@" ) == -1 ) || ( dom.indexOf(".") == -1 ) ){
			switch( lang ){
				case "pt" :
				res = "E-mail inválido ou vázio.";
				break;
				
				case "en" :
				res = "Invalid or empty e-mail address.";
				break;
			}
		}
	
	}
	
	return res;
	

}

function splitMsg( msg ){
	msg = msg.substr( 0 , msg.length - 1 );
	inputs = msg.split(",");
	var message = "";
	
	for( i = 0 ; i < inputs.length ; i++ ){
		message += "- " + inputs[i] + "\n";
	}
	
	return message;
}