///////////////////////////////////////////////////////////////////////////////////////////////////////
// FUNCIONAMIENTO DE LA COOKIE DE EUSKADI.NET
// Utilizacion:
//		La cookie de Euskadi.net controla dos parametros:
//			- Codigo del portal
//			- Idioma
// Estructura:
//			[codPortal_idioma]
// Comportamiento:
//		La funcion r01RedirectIndex(prehomeRedirect) carga los valores de los portales
//		para obtener la redirección correspondiente cuando se introduce el sólo el dominio.
//		En caso de que no haya datos cargados para el dominio, redireccionará a la página 
//		pasada como parámetro (Formato de la variable pageRedirect: /codPortal-codPagina/idioma/).
//
//		La redirección se hará a la página de prehome en caso de estar configurada para el portal, 
//		siempre que no se venga del mismo portal o los portales origen y destino no reusen ambos las cookies.
//
//		En cualquiera de estos dos casos (mismo portal de origen que destino o ambos reusan cookies), 
//		se redirigirá a la página Home siempre que exista una configuración 
//		de home para ese portal e idioma. Si no existiese, redirigirá a la Home de otro idioma o en su defecto
//		a la prehome.
//		
///////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * Objeto que contiene toda la informacion sobre un portal
 * Oid del portal
 *	Dominio
 *	Indica si se trata del dominio principal de la red de portales
 *	Si se reutiliza la cookie del portal principal
 *	codPortal-codPagina
 *	Array de paginas principales para cada idioma
	(se entra con el codigo de idioma 
*/
function r01PortalInfo(newPortalOid, newDomain, newIsMainDomain, newReuseCookie, newCodPreHome, newLangPages) {
	this.domain = r01gTrim(newDomain);
	this.portalOid = r01gTrim(newPortalOid);
	this.isMainDomain = newIsMainDomain;
	this.reuseCookie = newReuseCookie;
	this.codPreHome = r01gTrim(newCodPreHome);
	if (newLangPages != null) {
		this.languages = new Array();
		// Los codigos de paginas por idioma vienen en una cadena como
		//		idioma=codPortal-codPagina,idioma=codPortal-codPagina,etc
		var langPagesSplitted = newLangPages.split(",");
		var currLangSplitted = null;
		for (var i = 0; i < langPagesSplitted.length; i++) {
			currLangSplitted = langPagesSplitted[i].split("=");
			if (currLangSplitted.length == 2) {
				this.languages[i] = new Array(r01gTrim(currLangSplitted[0]), r01gTrim(currLangSplitted[1]));
			} else {
				throw "Error en la definicion de la informacion del portal!!!";
			}
		}
	}
}
/*
 * Redirige a la prehome o a la home de un portal dependiedo de la cookie
 */
function r01RedirectIndex(pageRedirect) {
	var url = window.location.href;			//Url pedida	
	var arrUrl = url.split("/");
	var domain = arrUrl[2];					//dominio (sin http)
	
	
	try {
		//Obtener información del portal al que se accede
		var portalInfoToRedirect = r01FindPortalInfoWithPortalDomain(domain);
		
		if (portalInfoToRedirect == null || portalInfoToRedirect == "undefined") {
			try {
				if (pageRedirect != null && pageRedirect != "undefined") {
					if (pageRedirect.substring(0,1) != "/") pageRedirect = "/" + pageRedirect;
					window.location.href = pageRedirect;
				} else {
					return null;
				}
			} catch (e) {
				return null;
			}
		}
		
		//Obtiene cookie (es de la forma 'portalOid:lang')	
		var cookieValue = r01readCookie("r01euskadiCookie");
		
		//Si no hay cookie
		if (cookieValue == null || cookieValue == "undefined" || cookieValue.indexOf("_") == -1) {
			//Redirigir a prehome
			return r01RedirectPrehome(portalInfoToRedirect);
		} 
		
		//Desglosamos cookie y obtenemos información del portal de la cookie	
		var arrCookie = cookieValue.split("_");
		var portalCookie = arrCookie[0];
		var langCookie = arrCookie[1];
		var portalInfoCookie = r01FindPortalInfoWithPortaOid(portalCookie);
		
		//Si el portal al que se dirige está en la cookie
		if (portalInfoToRedirect.portalOid == portalCookie) {
			if (portalInfoToRedirect.reuseCookie) {
				//Redirigir a home con idioma de cookie
				return r01RedirectHome(portalInfoToRedirect, langCookie);
			} else {
				// Redirigir a la prehome
				return r01RedirectPrehome(portalInfoToRedirect);
			}
		}		
				
		//reusa cookie?
		if (portalInfoToRedirect.reuseCookie) {
			//Si el portal de la cookie tambien reusa
			if (portalInfoCookie.reuseCookie) {
				//Redirigir a home con idioma de cookie
				return r01RedirectHome(portalInfoToRedirect, langCookie);
			} else {
				//Redirigir a prehome
				return r01RedirectPrehome(portalInfoToRedirect);
			}
		} else {
			//Redirigir a prehome
			return r01RedirectPrehome(portalInfoToRedirect);
		}
	} catch (e) {
		//Redirigir a prehome
		return r01RedirectPrehome(portalInfoToRedirect);
	}
}
/*
 * Redirige a la prehome del portal
 */
function r01RedirectPrehome(portalInfo) {
	try {
		window.location.href = "/" + portalInfo.codPreHome;
	} catch (e) {
		return null;
	}	
}
/*
 * Redirige a la home del portal
 * Si no se define en el idioma correspondiente redirige a la prehome
 */
function r01RedirectHome(portalInfo, lang) {
	try {
		var homePage = null;
		for (var i = 0; i < portalInfo.languages.length; i++) {
			if (portalInfo.languages[i][0] == lang && 
			    portalInfo.languages[i][1] != null &&
			    portalInfo.languages[i][1] != undefined &&
			    (portalInfo.languages[i][1]).replace(/ /g, "").length != 0) {
				homePage = "/" + portalInfo.languages[i][1] + "/" + lang;
				break;
			}
		}
		if (homePage != null) {
			window.location.href = homePage;
		} else {
			window.location.href = "/" + portalInfo.codPreHome;
		}
	} catch (e) {
		return null;
	}	
}
/*
 * Devuelve el objeto portalInfo a partir del dominio
 */
function r01FindPortalInfoWithPortalDomain(urlDomain) {
	for (var i = 0; i < r01PortalPagesInfoArray.length; i++) {
		var domainArr = r01PortalPagesInfoArray[i].domain.split(";");
		for (var j=0; j < domainArr.length; j++){
			if (domainArr[j].indexOf(urlDomain) != -1) {
				return r01PortalPagesInfoArray[i];
			}
		}
	}
	return null;
}
/*
 * Devuelve el objeto portalInfo a partir del oid del portal
 */
function r01FindPortalInfoWithPortaOid(portalOid) {
	for (var i = 0; i < r01PortalPagesInfoArray.length; i++) {
		if (r01PortalPagesInfoArray[i].portalOid == portalOid) {
			return r01PortalPagesInfoArray[i];
		}
	}
	return null;
}
/**
 * r01gTrim
 * Descripcion: devuelve una cadena sin espacios al comienzo y al final
 * @param str 	cadena
 * @return str 		
 */
function r01gTrim(str) {
	try {
		return str.replace(/^\s+|\s+$/g, "");
	}
	catch (e) {
		return str;
	}
}
///////////////////////////////////////////////////////////////////////////////////////
//                 FUNCIONES GENERALES PARA COOKIES
//////////////////////////////////////////////////////////////////////////////////////
/**
 * Crear una cookie que expira en el numero de dias indicad
 * @param name: El nombre de la cookie
 * @param value: El valor de la cookie
 * @param days: El numero de dias para que la cookie expire
 */
function r01createCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
	} else {
		var expires = "";
	}
	// Establecer la cookie
	document.cookie = name + "=" + value + expires + "; path=/";
}
/**
 * Leer el valor de la cookie con el nombre dado
 * @param name: El nombre de la cookie a leer
 */
function r01readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(";");
	for (var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == " ") {
			c = c.substring(1, c.length);
		}	// Eliminar caracteres en blanco...
		if (c.indexOf(nameEQ) == 0) {
			return c.substring(nameEQ.length, c.length);
		}
	}
	return null;
}
/**
 * Elimina una cookie
 * @param name: El nombre de la cookie a borrar
 */
function r01eraseCookie(name) {
	r01createCookie(name, "", -1);	// Simplemente poner la cookie en blanco y su expiracion a -1
}