//****** FUNCIONALIDAD NECESARIA PARA LOGIN DEL USUARIO POR AJAX ******//
//****** Inicio Métodos llamados desde la UI (por acciones del usuario) ******//

//Llamada cuando el usuario hace clic en el boton de login estandar (con usuario y contraseña)
function login_ClickBotonLoginEstandar() {
	var sUsuario = document.getElementById("txtLoginUsuario").value;
	var sPassword = document.getElementById("txtLoginPassword").value;

	if (login_UsuarioValido(sUsuario, "txtLoginUsuario")) {
		if (login_PasswordValido(sPassword, "txtLoginPassword")) {
			//Limpio los textboxes para que quede mas prolija la página
			document.getElementById("txtLoginUsuario").value = "";
			document.getElementById("txtLoginPassword").value = "";

			//Intento loguear al usuario mediante ajax
			login_mostrarOcultarContenidoFloat("floatProcesando", "");
			login_AjaxValidarLoginEstandar(sUsuario, sPassword);
		}
	}
}

//Llamada cuando el usuario hace clic en el boton de login por FaceBook
function login_ClickBotonLoginFaceBook() {
	//Llamo al paso 1 de login por OAuth
	login_OAuthLoginProvider(1, "facebook");
}

//Llamada cuando el usuario hace clic en el boton de login por Twitter
function login_ClickBotonLoginTwitter() {
	//Llamo al paso 1 de login por OAuth
	login_OAuthLoginProvider(1, "twitter");
}

//Llamada cuando el usuario hace clic en el botón que reabre el popup de OAuth
function login_ClickBotonReabrirPopUpOAuth(xsOAuthProvider) {
	if (xsOAuthProvider == "twitter") {
		//Twitter requiere que se regenere el token
		login_OAuthLoginProvider(1, xsOAuthProvider);
	} else {
		//Asumo que es facebook. Puedo abrir el popup directamente.
		login_abrirPopupOAuthProvider();
	}
}

//Llamada cuando el usuario hace click en el boton de "reintentar"
function login_ClickBotonErrorReintentar() {
	login_MostrarCajaPrincipal();
}

//Llamada cuando el usuario hace clic en el boton de enviar el email para registro OAuth
function login_ClickBotonOAuthEnvioUsuarioEmail() {
	var sUsuario = document.getElementById("txtOAuthRegUsuario").value;
	var sEmail = document.getElementById("txtOAuthRegEmail").value;

	if (login_UsuarioValido(sUsuario, "txtOAuthRegUsuario")) {
		if (login_EMailValido(sEmail, "txtOAuthRegEmail")) {
			//Limpio los textboxes para que quede mas prolija la página
			document.getElementById("txtOAuthRegUsuario").value = "";
			document.getElementById("txtOAuthRegEmail").value = "";

			//Intento registrar al usuario mediante ajax
			login_mostrarOcultarContenidoFloat("floatProcesando", "");
			login_AjaxRegistrarUsuarioOAuth(sUsuario, sEmail, oDatosLogin.sOAuthProvider);
		}
	}
}

//Llamada cuando el usuario entra en el textbox de ingresar nick en el formulario de login
function login_FocusTextBoxNickLogin() {
	var oTxtNick = document.getElementById("txtLoginUsuario");
	if  (oTxtNick.value == "Usuario") {
		oTxtNick.style.color = "";
		oTxtNick.value = "";
	}
}

//Llamada cuando el usuario sale del textbox de ingresar nick en el formulario de login
function login_BlurTextBoxNickLogin(xbFirst) {
	var oTxtNick = document.getElementById("txtLoginUsuario");
	if (oTxtNick && (oTxtNick.value == "" | xbFirst)) {
		oTxtNick.style.color = "#AAAAAA";
		oTxtNick.value = "Usuario";
	}
}

//Llamada cuando el usuario entra en el textbox de ingresar password en el formulario de login
function login_FocusTextBoxPwdLogin() {
	var oTxtPwd = document.getElementById("txtLoginPassword");
	if  (oTxtPwd.value == "Clave") {
		try { oTxtPwd.type="password"; } catch (err) {}
		try {oTxtPwd.setAttribute("type","password"); } catch (err) {}
		oTxtPwd.style.color = "";
		oTxtPwd.value = "";
	}
}

//Llamada cuando el usuario sale del textbox de ingresar password en el formulario de login
function login_BlurTextBoxPwdLogin(xbFirst) {
	var oTxtPwd = document.getElementById("txtLoginPassword");
	if (oTxtPwd && (oTxtPwd.value == "" | xbFirst)) {
		try { oTxtPwd.type="text"; } catch (err) {}
		try { oTxtPwd.setAttribute("type","text"); } catch (err) {}
		oTxtPwd.style.color = "#AAAAAA";
		oTxtPwd.value = "Clave";
	}
}

//Llamada cuando el usuario hace click en el botón "Registrarse" en el formulario de login
function login_ClickBotonRegistrarse() {
	//Llamo al paso 1 de la funcion que hace todo el trabajo
	login_MostrarPantallaRegistroEstandar(1, "");
}

//Llamada cuando el usuario completó el formulario de registro e intenta registrarse
function login_ClickBotonRegistro() {
	var sUsuario = document.getElementById("txtRegUsuario").value;
	var sPassword = document.getElementById("txtRegPassword").value;
	var sConfPassword = document.getElementById("txtRegConfPassword").value;
	var sEmail = document.getElementById("txtRegEmail").value;
	var bRecibirAvisos = document.getElementById("chkRegAviso").checked;
	var bAceptoReglamento = document.getElementById("chkRegReglamento").checked;

	var sCaptcha = "";
	var sCaptchaKey = "";
	
	//Sólo proceso el captcha si está habilitado
	if (oDatosLogin.bUsarCaptcha) {
		sCaptcha = document.getElementById("txtRegCaptcha").value;
		sCaptchaKey = document.getElementById("hidRegCapchaKeyId").value;
	}
	
	if (login_UsuarioValido(sUsuario, "txtRegUsuario")) {
		if (login_PasswordValido(sPassword, "txtRegPassword")) {
			if (sPassword == sConfPassword) {
				if (login_EMailValido(sEmail, "txtRegEmail")) {
					//El captcha puede estar desactivado
					var bCaptchaOk = true;
					if (oDatosLogin.bUsarCaptcha) {
						bCaptchaOk = login_CaptchaValido(sCaptcha, "txtRegCaptcha");
					}
					if (bCaptchaOk) {
						if (bAceptoReglamento) {
							//Limpio los textboxes para que quede mas prolija la página
							document.getElementById("txtRegUsuario").value = "";
							document.getElementById("txtRegPassword").value = "";
							document.getElementById("txtRegConfPassword").value = "";
							document.getElementById("txtRegEmail").value = "";
							document.getElementById("txtRegCaptcha").value = "";
							document.getElementById("chkRegAviso").checked = true;
							document.getElementById("chkRegReglamento").checked = false;
							
							//Intento registrar al usuario mediante ajax
							login_mostrarOcultarContenidoFloat("floatProcesando", "");
							$.colorbox({
								inline:true,
								overlayClose:false,
								href:"#CajaFloat"
							});
							login_AjaxRegistrarUsuario(sUsuario, sPassword, sEmail, sCaptcha, sCaptchaKey, bRecibirAvisos);
						} else {
							//Aviso al usuario que no aceptó los TOS
							alert("Debes aceptar los términos del reglamento.");
							document.getElementById("chkRegReglamento").focus();
						}
					}
				}
			} else {
				//Informo al usuario que no coinciden las passwords.
				alert("La contraseña no coincide con su confirmación.");
				document.getElementById("txtRegPassword").focus();
			}
		}
	}
}

function login_MostrarReglamento() {
	window.open("/reglamento.html","reglamento","width=530,height=550,scrollbars=yes,titlebar=no,resizable=no");
}
//****** Fin Métodos llamados desde la UI (por acciones del usuario) ******//


//****** Inicio Métodos internos (privados?) ******//
//Guarda los callbacks a llamar cuando finaliza el proceso de login
function login_GuardarCallbacks(xfuncLoginOk, xfuncRegOk, xfuncRegOAuthOK) {
	oDatosLogin.funcLoginOk = xfuncLoginOk;
	oDatosLogin.funcRegOk = xfuncRegOk;
	oDatosLogin.funcRegOAuthOK = xfuncRegOAuthOK;
}

//Muestra la caja principal de login
function login_MostrarCajaPrincipal() {
	login_mostrarOcultarContenidoFloat("floatControlesLogin", "");
	$.colorbox({
		inline:true,
		overlayClose:false,
		href:"#CajaFloat"
	});
}

//Chequea si el string es un nick valido
function login_UsuarioValido(xsUsuario, xsElemId) {
	if (/^\s*$/.test(xsUsuario)) {
		alert("Debes ingresar tu Usuario.");
		document.getElementById(xsElemId).focus();
		return false;
	}
	if (!/[A-Za-z0-9]{5,}/.test(xsUsuario)) {
		alert("El nombre de usuario solo puede tener numeros, letras y 5 caracteres como minimo.");
		document.getElementById(xsElemId).focus();
		return false;
	}
	if (xsUsuario.length > 20) {
		alert("El usuario no puede superar los 20 caracteres.");
		document.getElementById(xsElemId).focus();
		return false;
	}
	return true;
}

//Chequea si el string es un password valido
function login_PasswordValido(xsPassword, xsElemId) {
	if (!/[A-Za-z0-9]{5,}/.test(xsPassword)) {
		alert("Debes ingresar tu contraseña.");
		document.getElementById(xsElemId).focus();
		return false;
	}
	return true;
}

//Llama por AJAX a la página ejecuta el login de un usuario y procesa la respuesta
function login_AjaxValidarLoginEstandar(xsUsuario, xsPassword) {
	//Guardo el nick en memoria para mostrarlo en caso de errores
	oDatosLogin.sUsuario = xsUsuario;
	
	//Mando por ajax el pedido de login
	$.ajax({
		type: 'POST',
		url: "/system/modules/ar.com.unomedios.openid/templates/ajaxRequests.jsp",
		dataType: 'json',
		data: {
			operacion: "LoginUsuario",
			usuario: xsUsuario,
			password: xsPassword
		},
		error: function (jqXHR, textStatus, errorThrown) {
			//El llamado a la función de login falló. Aviso al usuario
			document.getElementById("txtLoginUsuario").value = oDatosLogin.sUsuario;
			alert("Ocurrió un error al procesar el login. Por favor intenta nuevamente");
			login_mostrarOcultarContenidoFloat("floatControlesLogin", "");
		},
		success: function(data) {
			if (data.exito) {
				//El login procesó correctamente. Modifico la página para que refleje eso.
				login_ReflejarLoginProcesadoCorrectamente(data.usuario, "");
			} else {
				if (data.error == "UsuarioOContraseniaInvalidos") {
					//No pude loguear al usuario. Le aviso
					document.getElementById("txtLoginUsuario").value = data.usuario;
					login_mostrarOcultarContenidoFloat("floatControlesLogin", "msjUsrPwdInvalido");
				} else if (data.error == "ContraseniaVacia") {
					//No ingresó el password. Le aviso
					document.getElementById("txtLoginUsuario").value = data.usuario;
					login_mostrarOcultarContenidoFloat("floatControlesLogin", "msjPwdVacio");
				} else if (data.error == "UsuarioVacio") {
					login_mostrarOcultarContenidoFloat("floatControlesLogin", "msjUsuarioVacio");
				} else if (data.error == "otro") {
					//Error interno. Le pido al usuario que intente nuevamente.
					document.getElementById("txtLoginUsuario").value = oDatosLogin.sUsuario;
					login_mostrarOcultarContenidoFloat("floatError", "");
				} else {
					//Código de error inválido. Le pido al usuario que intente nuevamente.
					document.getElementById("txtLoginUsuario").value = oDatosLogin.sUsuario;
					login_mostrarOcultarContenidoFloat("floatError", "");
				}
			}
		}
	});
}

//Llama por AJAX a la página que ejecuta la registración de un usuario OAuth y procesa la respuesta
function login_AjaxRegistrarUsuarioOAuth(xsUsuario, xsEmail, xsOAuthProvider) {
	//Guardo los datos para mostrarlos en caso de errores.
	oDatosLogin.sUsuario = xsUsuario;
	oDatosLogin.sEmail = xsEmail;
	
	//Mando por ajax el pedido de registro
	$.ajax({
		type: 'POST',
		url: "/system/modules/ar.com.unomedios.openid/templates/ajaxRequests.jsp",
		dataType: 'json',
		data: {
			operacion: "OAuthRegistroYLoginUsuario",
			provider: xsOAuthProvider,
			usuario: xsUsuario,
			email: xsEmail
		},
		error: function (jqXHR, textStatus, errorThrown) {
			//El llamado a la función de registro falló. Aviso al usuario
			document.getElementById("txtOAuthRegUsuario").value = oDatosLogin.sUsuario;
			document.getElementById("txtOAuthRegEmail").value = oDatosLogin.sEmail;
			alert("Ocurrió un error al procesar el registro. Por favor intenta nuevamente");
			login_mostrarOcultarContenidoFloat("floatRegistrarOAuthUsuario", "");
		},
		success: function(data) {
			if (data.exito) {
				//El usuario está registrado y logueado. Modifico la página para que refleje eso.
				login_ReflejarRegistroOAuthProcesadoCorrectamente(data.usuario, data.oauthproviderid);
				//Trakeamos que el usuario se registro.	
				_gaq.push('_trackPageview', '/confirmacionregistracion.html');
			} else {
				if (data.error == "EmailYaUsado") {
					//El email que quiso usar ya existe. Le aviso que use otro email
					document.getElementById("txtOAuthRegUsuario").value = data.usuario;
					document.getElementById("txtOAuthRegEmail").value = data.email;
					login_mostrarOcultarContenidoFloat("floatRegistrarOAuthUsuario", "msjOAuthEmailYaUsado");
				} else if (data.error == "NickYaUsado") {
					//El nick que quiso usar ya existe. Le aviso que use otro nick
					document.getElementById("txtOAuthRegUsuario").value = data.usuario;
					document.getElementById("txtOAuthRegEmail").value = data.email;
					login_mostrarOcultarContenidoFloat("floatRegistrarOAuthUsuario", "msjOAuthUsuarioYaUsado");
				} else if (data.error == "EmailInvalido") {
					//El email es inválido
					document.getElementById("txtOAuthRegUsuario").value = data.usuario;
					document.getElementById("txtOAuthRegEmail").value = data.email;
					login_mostrarOcultarContenidoFloat("floatRegistrarOAuthUsuario", "msjOAuthEmailInvalido");
				} else if (data.error == "NickInvalido") {
					//El nick es inválido
					document.getElementById("txtOAuthRegUsuario").value = data.usuario;
					document.getElementById("txtOAuthRegEmail").value = data.email;
					login_mostrarOcultarContenidoFloat("floatRegistrarOAuthUsuario", "msjOAuthNickInvalido");
				} else if (data.error == "otro") {
					//Error interno. Le pido al usuario que intente nuevamente.
					document.getElementById("txtOAuthRegUsuario").value = oDatosLogin.sUsuario;
					document.getElementById("txtOAuthRegEmail").value = oDatosLogin.sEmail;
					login_mostrarOcultarContenidoFloat("floatError", "");
				} else {
					//Código de error inválido. Le pido al usuario que intente nuevamente.
					document.getElementById("txtOAuthRegUsuario").value = oDatosLogin.sUsuario;
					document.getElementById("txtOAuthRegEmail").value = oDatosLogin.sEmail;
					login_mostrarOcultarContenidoFloat("floatError", "");
				}
			}
		}
	});
}

//Llama por AJAX a la página que ejecuta la registración de un usuario y procesa la respuesta
function login_AjaxRegistrarUsuario(xsUsuario, xsPassword, xsEmail, xsCaptcha, xsCaptchaKey, xbRecibirAvisos) {
	//Guardo los datos para mostrarlos en caso de errores.
	oDatosLogin.sUsuario = xsUsuario;
	oDatosLogin.sEmail = xsEmail;
	
	var sRecibirAvisos = xbRecibirAvisos ? "true" : "false";

	//Mando por ajax el pedido de registro
	$.ajax({
		type: 'POST',
		url: "/system/modules/ar.com.unomedios.openid/templates/ajaxRequests.jsp",
		dataType: 'json',
		data: {
			operacion: "RegistroYLoginUsuario",
			usuario: xsUsuario,
			password: xsPassword,
			email: xsEmail,
			captcha: xsCaptcha,
			captchaKey: xsCaptchaKey,
			recibirAvisos: sRecibirAvisos
		},
		error: function (jqXHR, textStatus, errorThrown) {
			//El llamado a la función de registro falló. Aviso al usuario
			document.getElementById("txtRegUsuario").value = oDatosLogin.sUsuario;
			document.getElementById("txtRegEmail").value = oDatosLogin.sEmail;
			alert("Ocurrió un error al procesar el registro. Por favor intenta nuevamente");
			//Necesito renovar el captcha porque no sé si se usó.
			oDatosLogin.bRenovarCaptchaReg = true;
			login_MostrarPantallaRegistroEstandar(1, "");
		},
		success: function(data) {
			if (data.exito) {
				//El usuario está registrado. Me fijo si se lo activó y logueó
				login_ReflejarRegistroProcesadoCorrectamente();
				if (data.loggedIn) {
					//Está logueado. Llamo a la función que refleja que el usuario se logueó correctamente
					login_ReflejarLoginProcesadoCorrectamente(data.usuario, "");
				}
				//Trakeamos que el usuario se registro.	
				_gaq.push('_trackPageview', '/confirmacionregistracion.html');
			} else {
				if (data.error == "EmailYaUsado") {
					//El email que quiso usar ya existe. Le aviso que use otro email
					document.getElementById("txtRegUsuario").value = data.usuario;
					document.getElementById("txtRegEmail").value = data.email;
					//Necesito renovar el captcha
					oDatosLogin.bRenovarCaptchaReg = true;
					login_MostrarPantallaRegistroEstandar(1, "msjEmailYaUsado");
				} else if (data.error == "NickYaUsado") {
					//El nick que quiso usar ya existe. Le aviso que use otro nick
					document.getElementById("txtRegUsuario").value = data.usuario;
					document.getElementById("txtRegEmail").value = data.email;
					//Necesito renovar el captcha
					oDatosLogin.bRenovarCaptchaReg = true;
					login_MostrarPantallaRegistroEstandar(1, "msjUsuarioYaUsado");
				} else if (data.error == "PasswordInvalido") {
					//El password es inválido
					document.getElementById("txtRegUsuario").value = data.usuario;
					document.getElementById("txtRegEmail").value = data.email;
					login_MostrarPantallaRegistroEstandar(1, "msjPasswordInvalido");
				} else if (data.error == "EmailInvalido") {
					//El email es inválido
					document.getElementById("txtRegUsuario").value = data.usuario;
					document.getElementById("txtRegEmail").value = data.email;
					login_MostrarPantallaRegistroEstandar(1, "msjEmailInvalido");
				} else if (data.error == "NickInvalido") {
					//El nick es inválido
					document.getElementById("txtRegUsuario").value = data.usuario;
					document.getElementById("txtRegEmail").value = data.email;
					login_MostrarPantallaRegistroEstandar(1, "msjNickInvalido");
				} else if (data.error == "captchaInvalido") {
					//Escribió mal el captcha
					document.getElementById("txtRegUsuario").value = data.usuario;
					document.getElementById("txtRegEmail").value = data.email;
					//Necesito renovar el captcha
					oDatosLogin.bRenovarCaptchaReg = true;
					login_MostrarPantallaRegistroEstandar(1, "msjCaptchaRegIncorrecto");
				} else if (data.error == "otro") {
					//Error interno. Le pido al usuario que intente nuevamente.
					document.getElementById("txtRegUsuario").value = oDatosLogin.sUsuario;
					document.getElementById("txtRegEmail").value = oDatosLogin.sEmail;
					//Necesito renovar el captcha porque no sé si se usó.
					oDatosLogin.bRenovarCaptchaReg = true;
					login_mostrarOcultarContenidoFloat("floatError", "");
				} else {
					//Código de error inválido. Le pido al usuario que intente nuevamente.
					document.getElementById("txtRegUsuario").value = oDatosLogin.sUsuario;
					document.getElementById("txtRegEmail").value = oDatosLogin.sEmail;
					//Necesito renovar el captcha porque no sé si se usó.
					oDatosLogin.bRenovarCaptchaReg = true;
					login_mostrarOcultarContenidoFloat("floatError", "");
				}
			}
		}
	});
}

//Llama por AJAX a la página que guarda el proveedor y procesa la respuesta
function login_AjaxOAuthGuardarProveedor(xsProveedor) {
	$.ajax({
		type: 'POST',
		url: "/system/modules/ar.com.unomedios.openid/templates/ajaxRequests.jsp",
		dataType: 'json',
		data: {
			operacion: "OAuthGuardarProvider",
			proveedor: xsProveedor
		},
		error: function (jqXHR, textStatus, errorThrown) {
			//El llamado ajax falló. Aviso al usuario que intente nuevamente.
			alert("Ocurrió un error. Por favor intenta nuevamente");
		},
		success: function(data) {
			if (data.exito) {
				//El llamado ajax corrió bien. Continúo con el resto del proceso.
				login_OAuthLoginProvider(2);
			} else {
				//El llamado ajax falló. Aviso al usuario que intente nuevamente.
				alert("Ocurrió un error. Por favor intenta nuevamente");
			}
		}
	});
}

//Llama por AJAX a la página que obtiene la URL del popup
function login_AjaxOAuthObtenerURLPopUp(xsProveedor) {
	$.ajax({
		type: 'POST',
		url: "/system/modules/ar.com.unomedios.openid/templates/ajaxRequests.jsp",
		dataType: 'json',
		data: {
			operacion: "OAuthObtenerURLPopUp",
			proveedor: xsProveedor
		},
		error: function (jqXHR, textStatus, errorThrown) {
			//El llamado ajax falló. Aviso al usuario que intente nuevamente.
			alert("Ocurrió un error. Por favor intenta nuevamente");
		},
		success: function(data) {
			if (data.exito) {
				oDatosLogin.sUrlPopup = data.urlpopup;
				//El llamado ajax corrió bien. Continúo con el resto del proceso.
				login_OAuthLoginProvider(3);
			} else {
				//El llamado ajax falló. Aviso al usuario que intente nuevamente.
				alert("Ocurrió un error. Por favor intenta nuevamente");
			}
		}
	});
}

//Oculta o muestra los elementos del float.
function login_mostrarOcultarContenidoFloat(xsElemPpal, xsElemSec) {
	//Elemento principal: Que parte del float mostrar
	document.getElementById("floatControlesLogin").style.display = (xsElemPpal == "floatControlesLogin") ? "block" : "none";
	document.getElementById("floatProcesando").style.display = (xsElemPpal == "floatProcesando") ? "block" : "none";
	document.getElementById("floatFaceBook").style.display = (xsElemPpal == "floatFaceBook") ? "block" : "none";
	document.getElementById("floatTwitter").style.display = (xsElemPpal == "floatTwitter") ? "block" : "none";
	document.getElementById("floatError").style.display = (xsElemPpal == "floatError") ? "block" : "none";
	document.getElementById("floatRegistrarOAuthUsuario").style.display = (xsElemPpal == "floatRegistrarOAuthUsuario") ? "block" : "none";
	document.getElementById("floatRegistrarUsuario").style.display = (xsElemPpal == "floatRegistrarUsuario") ? "block" : "none";

	//Elemento secundario: mensajes de error, etc dentro del elemento principal
	document.getElementById("msjUsrPwdInvalido").style.display = (xsElemSec == "msjUsrPwdInvalido") ? "block" : "none";
	document.getElementById("msjPwdVacio").style.display = (xsElemSec == "msjPwdVacio") ? "block" : "none";
	document.getElementById("msjUsuarioVacio").style.display = (xsElemSec == "msjUsuarioVacio") ? "block" : "none";
	document.getElementById("msjOAuthEmailYaUsado").style.display = (xsElemSec == "msjOAuthEmailYaUsado") ? "block" : "none";
	document.getElementById("msjOAuthUsuarioYaUsado").style.display = (xsElemSec == "msjOAuthUsuarioYaUsado") ? "block" : "none";
	document.getElementById("msjOAuthEmailInvalido").style.display = (xsElemSec == "msjOAuthEmailInvalido") ? "block" : "none";
	document.getElementById("msjOAuthNickInvalido").style.display = (xsElemSec == "msjOAuthNickInvalido") ? "block" : "none";
	document.getElementById("msjCaptchaRegIncorrecto").style.display = (xsElemSec == "msjCaptchaRegIncorrecto") ? "block" : "none";
	document.getElementById("msjEmailYaUsado").style.display = (xsElemSec == "msjEmailYaUsado") ? "block" : "none";
	document.getElementById("msjUsuarioYaUsado").style.display = (xsElemSec == "msjUsuarioYaUsado") ? "block" : "none";
	document.getElementById("msjEmailInvalido").style.display = (xsElemSec == "msjEmailInvalido") ? "block" : "none";
	document.getElementById("msjNickInvalido").style.display = (xsElemSec == "msjNickInvalido") ? "block" : "none";
	document.getElementById("msjPasswordInvalido").style.display = (xsElemSec == "msjPasswordInvalido") ? "block" : "none";
}

//Función usada para iniciar el login de facebook.
//Dado que hay llamados por ajax, la función se divide en 3 partes:
// 1: Llamo al proceso Ajax que guarda el proveedor
// 2: Llamo al proceso Ajax que obtiene la URL del popup OAuth
// 3: Abro el popup
function login_OAuthLoginProvider(xiPaso, xsProvider) {
	if (xiPaso == 1) {
		//Guardo el provider
		oDatosLogin.sOAuthProvider = xsProvider;
		//Llamo a la página que guarda en sesión que el provider es facebook
		login_AjaxOAuthGuardarProveedor(xsProvider);
	} else if (xiPaso == 2) {
		//Llamo a la página que obtiene la URL del popup
		login_AjaxOAuthObtenerURLPopUp(oDatosLogin.sOAuthProvider);
	} else if (xiPaso == 3) {
		//Cambio el contenido del div flotante informando que se tiene que abrir un popup
		switch(oDatosLogin.sOAuthProvider) {
			case "facebook":
				login_mostrarOcultarContenidoFloat("floatFaceBook", "");
			break;
			case "twitter":
				login_mostrarOcultarContenidoFloat("floatTwitter", "");
			break;
		}
		//Limpio el provider
		oDatosLogin.sOAuthProvider = "";
		//Abro el popup
		login_abrirPopupOAuthProvider();
	}
}

//Modifica la página para mostrar que el usuario se logueo correctamente
function login_ReflejarLoginProcesadoCorrectamente(xsNick, xsOAuthProvider) {
	//Modifico la variable que uso para saber si esta logueado
	oDatosLogin.bLogueado = true;
	//Modifico la UI de la página para que refleje que el usuario se logueó.
	headerSetLoginStatus(true, xsNick, xsOAuthProvider);
	//Cierro el contenido float
	$.colorbox.close();
	//Me fijo si setearon un callback de login
	if (oDatosLogin.funcLoginOk) {
		//Hay callback. Lo llamo
		oDatosLogin.funcLoginOk();
	}
	//Limpio todos los callbacks
	login_GuardarCallbacks(null, null, null);
}

//Modifica la página para mostrar que el usuario OAuth se registró correctamente
function login_ReflejarRegistroOAuthProcesadoCorrectamente(xsNick, xsOAuthProvider) {
	//Me fijo si setearon un callback de registro OAuth
	if (oDatosLogin.funcRegOAuthOk) {
		//Hay callback. Lo llamo
		oDatosLogin.funcRegOAuthOk();
	}
	//Limpio los callbacks de registro
	oDatosLogin.funcRegOAuthOk = null;
	oDatosLogin.funcRegOk = null;
	//Llamo a la función que refleja que el usuario se logueó correctamente
	login_ReflejarLoginProcesadoCorrectamente(xsNick, xsOAuthProvider);
}

//Modifica la página para mostrar que el usuario se registró correctamente
function login_ReflejarRegistroProcesadoCorrectamente() {
	//Me fijo si setearon un callback de registro.
	if (oDatosLogin.funcRegOk) {
		//Hay callback. Lo llamo
		oDatosLogin.funcRegOk();
	}
	//Limpio los callbacks de registro
	oDatosLogin.funcRegOAuthOk = null;
	oDatosLogin.funcRegOk = null;
}

//Chequea si el string valida como Email
function login_EMailValido(xsEmail, xsElemId) {
	if (!/^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*\.[a-zA-Z]{2,4}$/.test(xsEmail)) {
		alert("El email ingresado es inválido");
		document.getElementById(xsElemId).focus();
		return false;
	}
	return true;
}

//Chequea si el string valida como captcha
function login_CaptchaValido(xsCaptcha, xsElemId) {
	if (!/^\S+$/.test(xsCaptcha)) {
		alert("El captcha ingresado es inválido");
		document.getElementById(xsElemId).focus();
		return false;
	}
	return true;
}

//Limpia el string para que valide como nick
function login_LimpiarNickUsuario(xsNick) {
	var sNick = xsNick.replace(/\s/, "");
	if (sNick.length > 10) {
		sNick = sNick.substring(0, 10);
	}
	return sNick;
}

//Muesta el formulario de registro.
//Dado que puedo tener un llamado ajax en el medio, la funcion se divide en 2 pasos:
// 1: Chequeo si necesito hacer el llamado ajax y lo hago
// 2: Muestro el formulario
function login_MostrarPantallaRegistroEstandar(xiPaso, xsElemInterno) {
	if (xiPaso == 1) {
		//Chequeo si es necesario obtener un captcha nuevo
		if (oDatosLogin.bRenovarCaptchaReg && oDatosLogin.bUsarCaptcha) {
			//Llamo a la funcion AJAX que genera un nuevo captcha
			login_AjaxRegistroGenerarCaptcha(xsElemInterno);
		} else {
			//No hace falta generar el captcha. Continuo con el paso 2
			login_MostrarPantallaRegistroEstandar(2, xsElemInterno);
		}
	} else if (xiPaso == 2) {
		//Muestro el formulario de registro
		login_mostrarOcultarContenidoFloat("floatRegistrarUsuario", xsElemInterno);
		$.colorbox({
			inline:true,
			overlayClose:false,
			href:"#cajaFloatRegistracion"
		});
	}
}

//Llama a la página que genera el código de captcha y procesa la respuesta
function login_AjaxRegistroGenerarCaptcha(xsElemInterno) {
	oDatosLogin.sElemInterno = xsElemInterno;
	$.ajax({
		type: 'POST',
		url: "/system/modules/ar.com.unomedios.openid/templates/ajaxRequests.jsp",
		dataType: 'json',
		data: {
			operacion: "RegistroGenerarCaptcha"
		},
		error: function (jqXHR, textStatus, errorThrown) {
			//El llamado ajax falló. Aviso al usuario que intente de nuevo.
			alert("Ocurrió un error. Por favor intenta nuevamente");
		},
		success: function(data) {
			if (data.exito) {
				//Se generó un nuevo captcha.
				//Cambio la imagen
				document.getElementById("imgRegCaptcha").src = "/jcaptcha?key=" + data.captchaKey;
				//Actualizo el valor del input hidden
				document.getElementById("hidRegCapchaKeyId").value = data.captchaKey;
				//Aviso que no hace falta renovar el captcha nuevamente.
				oDatosLogin.bRenovarCaptchaReg = false;
				//Continuo con el paso 2 de la funcion que me llamó
				login_MostrarPantallaRegistroEstandar(2, oDatosLogin.sElemInterno);
			} else {
				//El llamado ajax falló. Aviso al usuario que intente nuevamente.
				alert("Ocurrió un error. Por favor intenta nuevamente");
			}
		}
	});
}

function login_abrirPopupOAuthProvider() {
	window.open(oDatosLogin.sUrlPopup, "OAuthLogin","");
}

//****** Fin Métodos internos (privados?) ******//


//****** Inicio Métodos OAuth llamados desde popup ******//

//El popup de OAuth nos informa que tuvo errores. Informo al usuario
function login_OAuthError() {
	login_mostrarOcultarContenidoFloat("floatError", "");
}

//El popup de OAuth nos informa que el usuario se logueo correctamente.
function login_OAuthUserLoggedIn(xsNick, xsProviderName) {
	//Llamo a la función que refleja que el usuario se logueó correctamente.
	login_ReflejarLoginProcesadoCorrectamente(xsNick, xsProviderName);
}

//El popup de OAuth nos informa que hay que registrar al usuario OAuth. Muestro el formulario de registro de usuario OAuth
function login_OAuthRegisterUser(xsProviderName, xsOAuthUsuario, xsOAuthEMail) {
	//Guardo los datos recibidos en variables globales para persistirlos mientras que el usuario completa su email
	oDatosLogin.sOAuthProvider = xsProviderName;

	if (xsOAuthUsuario.length > 0) {
		document.getElementById("txtOAuthRegUsuario").value = login_LimpiarNickUsuario(xsOAuthUsuario);
	}
	if (xsOAuthEMail.length > 0) {
		document.getElementById("txtOAuthRegEmail").value = xsOAuthEMail;
	}
	//Muesto el formulario de ingreso de email al usuario
	login_mostrarOcultarContenidoFloat("floatRegistrarOAuthUsuario", "");
}

function login_OAuthUserCancelled() {
	//El usuario no autorizó al proveedor OAuth para que nos dé los datos. Muestro la pantalla de login.
	//TODO: Consultar si no quieren que se muestre un mensaje al usuario.
	login_mostrarOcultarContenidoFloat("floatControlesLogin", "");
}
//****** Fin Métodos OAuth llamados desde popup ******//
