////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////FUNCIONES DE INTERFAZ///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function botonActive(id) {
	document.getElementById(id).className = "login_input_submit_active";
}

function botonLink(id) {
	document.getElementById(id).className = "login_input_submit";
}

function botonHoverRegistrese(id) {
	document.getElementById(id).className = "login_input_registrese_hover";
}

function botonActiveRegistrese(id) {
	document.getElementById(id).className = "login_input_registrese_active";
}

function botonLinkRegistrese(id) {
	document.getElementById(id).className = "login_input_registrese";
}

function botonBotoneraActive(id) {
	document.getElementById(id).className = "botonera_input_active";
}

function botonBotoneraLink(id) {
	document.getElementById(id).className = "botonera_input";
}

function administrar(seccion) {
	parent.frames[1].location.href = seccion;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////FUNCIONES DE TEXTO//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function buscar(cadena, subcadena, desde) {
	for (var x = desde; x <= cadena.length; x++)
		if (cadena.substr(x, subcadena.length) == subcadena) return x;
	return false;
}

function quitarEspaciosIzquierda(texto) {
	var longitud = texto.length;
	for (var posicion = 0; posicion <= longitud - 1; posicion++) {
		if (texto.substr(posicion, 1) != " ") break;
	}
	if (posicion > longitud - 1) return "";
	return texto.substr(posicion);
}
	
function quitarEspaciosDerecha(texto) {
	var longitud = texto.length;
	for (var posicion = longitud - 1; posicion >= 0; posicion--) {
		if (texto.substr(posicion, 1) != " ") break;
	}
	if (posicion < 0) return "";
	return texto.substr(0, posicion + 1);
}
	
function quitarEspacios(texto) {
	return quitarEspaciosIzquierda(quitarEspaciosDerecha(texto));
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////FUNCIONES DE VALIDACIÓN/////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function esLetra(letra) {
	//Detecta si un cierto carácter es una letra. Debe tratarse de un carácter ASCII:
	if (letra.length != 1) return false;
	if (letra >= "A" && letra <= "Z") return true;
	if (letra >= "a" && letra <= "z") return true;
	var patron = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ";
	if (patron.indexOf(letra) !== -1) return true;
	return false;
}

function ipV4Legal (p_ip) {
	var ip = quitarEspacios(p_ip.toLowerCase());
	if (ip == "localhost") return "127.0.0.1";
	var longitud = ip.length;
	if (longitud < 7) return false;
	var puntos = 0;
	var posicion = 0;
	var caracter;
	var partes = new Array();
	while (posicion <= ip.length - 1) {
		caracter = ip.substr(posicion, 1);
		if (caracter == ".") {
			if (posicion == 0 || posicion == ip.length - 1) return false;
			if (ip.substr(posicion - 1, 1) == "." || ip.substr(posicion + 1, 1) == ".") return false;
			puntos++;
			if (puntos > 3) return false;
			partes[partes.length] = ip.substr(0, posicion) * 1;
			ip = ip.substr(posicion + 1);
			posicion = 0;
		}
		else if (!(caracter >= "0" && caracter <= "9"))
			return false;
		else
			posicion++;
	}
	if (puntos != 3) return false;
	partes[3] = ip * 1;
	ip = "";
	for (var x = 0; x <= 3; x++) {
		if (partes[x] > 255) return false;
		ip += (partes[x] + ".");
	}
	return ip.substr(0, ip.length - 1);
}

function dominioLegal(p_dominio) {
	/*
		Sintaxis 1 = IP
		Sintaxis 2 = dominio
		Sintaxis 2 = parte1.parte2....
		Alfabeto: Letras, números, guiones medios y bajos
		Para el futuro: barras ascendentes, numerales, dos puntos, signos de interrogación, =, &
	*/
	var dominio = quitarEspacios(p_dominio);
	var longitud = dominio.length;
	var caracter;
	if (longitud == 0) return false;
	for (var posicion = 0; posicion <= longitud - 1; posicion++) {
		caracter = dominio.substr(posicion, 1);
		if (caracter == ".") {
			if (posicion == 0 || posicion == longitud - 1) return false;
			if (dominio.substr(posicion - 1, 1) == "." || dominio.substr(posicion + 1, 1) == ".") return false;
		}
		else if (!(esLetra(caracter) || caracter == "_" || caracter == "-" || (caracter >= "0" && caracter <= "9"))) return false;
	}
	return dominio;
}

function mailLegal(p_mail) {
	/*
	Reglas RFC 2822:
		partelocal@dominio
		partelocal.length <= 64 (pero está bien visto que haya más de 64)
		partelocal (sintaxis 1) = letras en mayúsculas o minúsculas, dígitos del 0 al 9, puntos (no puede ser el primer ni el último carácter; no pueden aparecer dos puntos seguidos) ! # $ % * / ? | ^ { } ` ~ & ' + - = _
		partelocal (sintaxis 2) = "cualesquier caracteres" (aunque se desaconseja bastante) Si se incluyen comillas dobles dentro de comillas dobles, tienen que ir precedidas de \ (carácter de escape).
		partelocal es sensible a mayúsculas y a minúsculas.
		dominio.length <= 255
		dominio (sintaxis 1) = [IP]
		dominio (sintaxis 2) = Ver la función "dominio_legal".
	*/
	var mail = quitarEspacios(p_mail);
	var longitud = mail.length;
	var cod, caracter;
	//1) La longitud, debe ser de 3 caracteres, como mínimo:
	if (longitud < 3) return false;
	//2) Rastrear la arroba separadora de las partes (de atrás para adelante):
	var posicion = mail.lastIndexOf("@");
	//Si no hay arroba o está ubicada en algún extremo...
	if (posicion == -1 || posicion == 0 || posicion == longitud - 1) return false;
	//3) Separar al mail en dos partes:
	var parteLocal = mail.substr(0, posicion);
	var dominio = mail.substr(posicion + 1);
	//4) Validar la parte local:
	longitud = parteLocal.length;
	if (parteLocal.substr(0, 1) == '"' && parteLocal.substr(longitud - 1, 1) == '"') {
		//4a) Caso "a": La parte local está encerrada por comillas dobles. Debe tener una longitud de 3 caracteres, como mínimo:
		if (longitud < 3) return false;
		//Dentro de las comillas, puede ir cualquier cosa, pero si hay otra comilla, debe estar precedida por un carácter de escape:
		posicion = 1;
		longitud -= 2;
		while (posicion <= longitud) {
			//¿Qué ocurre si hay una comilla, pero no se encuentra el carácter de escape?:
			cod = parteLocal.substr(posicion - 1, 1);
			cod = cod.charCodeAt(0);
			if (parteLocal.substr(posicion, 1) == '"' && cod != 92) {
				//El carácter de escape no está, pero es una falta menor y se subsana:
				parteLocal = parteLocal.substr(0, posicion) + "\\" + parteLocal.substr(posicion);
				longitud++;
				posicion += 2;
			}
			else
				posicion++;  //Sólo es necesario incrementar la posición.
		}
	}
	else {
		//4b) La parte local no está entrecomillada. Será necesario verificar carácter por carácter:
		for (posicion = 0; posicion <= longitud - 1; posicion++) {
			caracter = parteLocal.substr(posicion, 1);
			/*
				Se admiten letras mayúsculas o minúsculas, dígitos del 0 al 9, puntos (no pueden ser el primer ni el último carácter; no pueden 
				aparecer dos puntos seguidos) ! # $ % * / ? | ^ { } ` ~ & ' + - = _
			*/
			if (caracter == ".") {
				if (posicion == 0 || posicion == longitud - 1) return false;
				if (parteLocal.substr(posicion - 1, 1) == "." || parteLocal.substr(posicion + 1, 1) == ".") return false;
			}
			//else if (!(esLetra(caracter) || (caracter >= "0" && caracter <= "9") || buscar("!#$%*/?|^{}`~&'+-=_", caracter, 0) !== false))
			else if (!(esLetra(caracter) || (caracter >= "0" && caracter <= "9") || buscar("!#$%*/?|^{}`~'+-=_", caracter, 0) !== false))
				return false;
		}
	}
	//5) Validar el domonio:
	longitud = dominio.length;
	//5a) No puede tener más de 255 caracteres:
	if (longitud > 255) return false;
	//5b) ¿Es una IP?:
	if (dominio.substr(0, 1) == "[" && dominio.substr(longitud - 1, 1) == "]") {
		//Parece serlo...
		if (longitud < 9) return false;
		dominio = ipV4Legal(dominio.substr(1, dominio.length - 2));
		if (dominio === false) return false;
		dominio = "[" + dominio + "]";
	}
	else {
		//5c) Es Normal: Estará sujeto al dictamen de la función dominio_legal.
		dominio = dominioLegal(dominio);
		if (dominio === false) return false;
	}
	//Fin de las comprobaciones: El mail es legal.
	return parteLocal + "@" + dominio;
}