// Comprueba que los campos esten rellenados y no sean espacios blancos
function haveWhites(cadena) {
	base = cadena.split(" ");
	base = base.join("");
	if (base.length == 0) return true;
	return false;
}

function checkEmail(emailStr) {
	if (emailStr.length == 0) return false;

	// Dividimos el email en tres partes basicas
	// Parte 1: Antes de la @
	// Parte 2: Entre la @ i el primer .
	// Parte 3: Desde el punto hasta el final

	var email = new Array();
	email = emailStr.split('@');
	var username = email[0];
	var domain = email[1];

	// Comprobamos que existe un posible dominio definido y un usuario
	if (email.length != 2 || domain.length < 3) return false;

	// Analizamos el dominio
	var firstPoint = domain.indexOf('.');
	var base = domain.substr(1,firstPoint);
	var extension = domain.substr(firstPoint+1,domain.length);

	// Comprobamos que la base del dominio y la extension tengan un minimo de caracteres
	if (base.length < 2 || extension.length < 2) return false;

	return true;
}


function validate_form(nameForm,aRequired,redirect) {
	var myForm = document.getElementById(nameForm);
	var bHaveErrors = false;
	var aBadFields = new Array()
	var urlForm = redirect;

	/* Eliminamos posibles mensajes de advertencia, informacion o error */
  	removeMessage();

	/* Revisamos todos los elementos pasados por parametro */
	for (var i = 0; i < aRequired.length; i++) {
		var sNameField = aRequired[i];
		var oField = $(sNameField);
		if (oField) {
			if (haveWhites(oField.value)) {
				oField.style.border = '1px solid #f00';
				bHaveErrors = true;
				aBadFields.push(sNameField);
			} else {
				oField.style.border = '1px solid #7f9db9';
			}

			if (oField.type == 'textarea') {
				if (haveWhites(oField.value) || oField.value.length < 5 ) {
					oField.style.border = '1px solid #f00';
					bHaveErrors = true;
					aBadFields.push(sNameField);
				} else {
					oField.style.border = '1px solid #7f9db9';
				}
			}

			if (oField.type == 'select-one') {
			    var indice = oField.selectedIndex;
			    var valor = oField.options[indice].value;
				if (valor == '0') {
					oField.style.border = '1px solid #f00';
					bHaveErrors = true;
					aBadFields.push(sNameField);
				} else {
					oField.style.border = '1px solid #7f9db9';
				}
			}


			if (sNameField == 'fechaBegin' || sNameField == 'fechaEnd') {
				compareDate = $('fechaEnd');
				if (!valFechas(oField,compareDate)) {
					oField.style.border = '1px solid #f00';
					bHaveErrors = true;
					aBadFields.push(sNameField);
				} else {
					oField.style.border = '1px solid #7f9db9';
				};
			}

			if (sNameField == 'email' || sNameField == 'correo') {
				if (!checkEmail(oField.value)) {
					oField.style.border = '1px solid #f00';
					bHaveErrors = true;
					aBadFields.push(sNameField);
				} else {
					oField.style.border = '1px solid #7f9db9';
				};
			}
		}
	}
	if (bHaveErrors) {
		$(aBadFields[0]).focus();
		replaceMessage('error');
		return false;
	} else {
		replaceMessage('process');
		myForm.action = urlForm;
		myForm.submit();
	}
	return;

}

function prepare_languages(sTag,sLanguages) {
	var languages = sLanguages.split(",");
	for (var i = 0; i < languages.length; i++) {
		languages[i] = sTag + languages[i];
	}
	return languages;
}


function esDigito(sChr){
	var sCod = sChr.charCodeAt(0);
	return ((sCod > 47) && (sCod < 58));
}

function valSep(oTxt){
	var bOk = false;
	bOk = bOk || ((oTxt.value.charAt(2) == "-") && (oTxt.value.charAt(5) == "-"));
	bOk = bOk || ((oTxt.value.charAt(2) == "/") && (oTxt.value.charAt(5) == "/"));
	return bOk;
}

function finMes(oTxt){
	var nMes = parseInt(oTxt.value.substr(3, 2), 10);
	var nAno = parseInt(oTxt.value.substr(6), 10);
	var nRes = 0;
	switch (nMes){
		case 1: nRes = 31; break;
		case 2: nRes = 28; break;
		case 3: nRes = 31; break;
		case 4: nRes = 30; break;
		case 5: nRes = 31; break;
		case 6: nRes = 30; break;
		case 7: nRes = 31; break;
		case 8: nRes = 31; break;
		case 9: nRes = 30; break;
		case 10: nRes = 31; break;
		case 11: nRes = 30; break;
		case 12: nRes = 31; break;
	}
	return nRes + (((nMes == 2) && (nAno % 4) == 0)? 1: 0);
}

function valDia(oTxt){
	var bOk = false;
	var nDia = parseInt(oTxt.value.substr(0, 2), 10);
	bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));
	return bOk;
}

function valMes(oTxt){
	var bOk = false;
	var nMes = parseInt(oTxt.value.substr(3, 2), 10);
	bOk = bOk || ((nMes >= 1) && (nMes <= 12));
	return bOk;
}

function valAno(oTxt){
	var bOk = true;
	var nAno = oTxt.value.substr(6);
	bOk = bOk && ((nAno.length == 2) || (nAno.length == 4));
	if (bOk){
		for (var i = 0; i < nAno.length; i++){
			bOk = bOk && esDigito(nAno.charAt(i));
		}
	}
	return bOk;
}

function valFecha(oTxt){
	var bOk = true;
	if (oTxt.value != ""){
		bOk = bOk && (valAno(oTxt));
		bOk = bOk && (valMes(oTxt));
		bOk = bOk && (valDia(oTxt));
		bOk = bOk && (valSep(oTxt));
		return bOk;
	}
}

function fechaMayorOIgualQue(fec0, fec1){
	var bRes = false;
	var sDia0 = fec0.value.substr(0, 2);
	var sMes0 = fec0.value.substr(3, 2);
	var sAno0 = fec0.value.substr(6, 4);
	var sDia1 = fec1.value.substr(0, 2);
	var sMes1 = fec1.value.substr(3, 2);
	var sAno1 = fec1.value.substr(6, 4);
	if (sAno0 > sAno1) bRes = true;
	else {
		if (sAno0 == sAno1){
			if (sMes0 > sMes1) bRes = true;
			else {
				if (sMes0 == sMes1) {
					if (sDia0 >= sDia1) bRes = true;
				}
			}
		}
	}
	return bRes;
}

function valFechas(nValue1,nValue2){
	var bOk = false;
	if (valFecha($(nValue1))){
		if (valFecha($(nValue2))){
			if (fechaMayorOIgualQue($(nValue2), $(nValue1))){
				bOk = true;
			 } else {
				$(nValue2).focus();
			 }
		} else {
			$(nValue2).focus();
		}
	} else {
		$(nValue1).focus();
	}
	return bOk;
}
