function emailCheck(controlEmail, controlCond, esIngles)
{
    var emailStr = controlEmail.value;
    var condiciones = controlCond.checked;

	var checkTLD = 1;
	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	
	var matchArray = emailStr.match(emailPat);
	if (matchArray == null) {
	    if (esIngles)
	        alert("The email introduced is incorrect (@ and .’domain).");
	    else
		    alert("Su dirección de correo no aparece o es incorrecta (compruebe @ y .'s)");
		controlEmail.select();
		controlEmail.focus();
		return false;
	}
	
	var user = matchArray[1];
	for (i = 0; i < user.length; i++)
	{
		if (user.charCodeAt(i) > 127)
		{
		    if (esIngles)
		        alert("Your email contains invalid characters.");
		    else
		        alert("Su dirección de correo contiene caracteres no validos.");
		    controlEmail.select();
		    controlEmail.focus();
		    return false;
		}
	}
	if (user.match(userPat) == null)
	{
	    if (esIngles)
	        alert("Your email is not valid.");
	    else
	        alert("Su dirección de correo parece incorrecta, por favor, compruébelo.");
	    controlEmail.select();
	    controlEmail.focus();
	    return false;
	}
	
	var domain = matchArray[2];
	for (i = 0; i < domain.length; i++)
	{
		if (domain.charCodeAt(i) > 127)
		{
		    if (esIngles)
		        alert("The domain introduced for the email is not valid.");
		    else
		        alert("El dominio de la dirección introducida contiene caracteres no válidos.");
		    controlEmail.select();
		    controlEmail.focus();
		    return false;
		}
	}
	
	var IPArray = domain.match(ipDomainPat);
	if (IPArray != null)
	{
		for (var i = 1; i <= 4; i++)
		{
			if (IPArray[i] > 255)
			{
			    if (esIngles)
			        alert("The destiny IP is not valid!");
			    else
			        alert("¡La dirección IP de destino no es correcta!");
			    controlEmail.select();
			    controlEmail.focus();
			    return false;
			}
        }

        if (!condiciones)
		{
		    if (esIngles)
		        alert("You have to accept the conditions to continue.");
		    else
		        alert("Debe de aceptar las condiciones para continuar.");
		    controlCond.focus();
		    return false;
		}
		else
			return true;
	}
	
	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;
	for (i = 0; i < len; i++)
	{
		if (domArr[i].search(atomPat) == -1)
		{
		    if (esIngles)
		        alert("the email address seems to be incorrect, please could you check it.");
		    else
		        alert("La dirección de correo parece incorrecta, por favor compruébelo, incluyendo el uso incorrecto de signos de puntuación, comas , o puntos [.] al final de la dirección.");
		    controlEmail.select();
		    controlEmail.focus();
		    return false;
		}
	}
	
	if (checkTLD && domArr[domArr.length-1].length != 2 && domArr[domArr.length-1].search(knownDomsPat) == -1)
	{
	    if (esIngles)
	        alert("You email have to end with a domain.");
	    else
	        alert("Su dirección de correo debe terminar en un dominio.");
	    controlEmail.select();
	    controlEmail.focus();
	    return false;
	}
	
	if (len < 2)
	{
	    if (esIngles)
	        alert("The host name of the email is missing.");
	    else
	        alert("Falta el nombre del host en su dirección de correo - compruébelo. O debe de haber añadido un espacio en blanco al final de la dirección - corrija el error e inténtelo de nuevo.");
	    controlEmail.select();
	    controlEmail.focus();
	    return false;
	}

	if (!condiciones)
	{
	    if (esIngles)
	        alert("You have to accept the conditions to continue.");
	    else
	        alert("Debe de aceptar las condiciones para continuar.");
	    controlCond.focus();
	    return false;
	}

	return true;
}
