var width992QueryHighContrast = window.matchMedia("(max-width: 992px)");
var highContrastCorrutineDelay = 2000;
var highContrastCorrutineActualTries = 0;
var highContrastCorrutineMaxTries = 3;

function initHighContrast () {
	// En caso de reducir la pantalla hasta tablet se suprimira el alto contraste
	width992QueryHighContrast.addListener(highContrastMobileHandler);
	
	var actualCookieValue = getCookie(params["HIGH_CONTRAST_COOKIE_NAME"]);
	
	if (actualCookieValue != null) {
		actualCookieValue = actualCookieValue.includes("true") ? true : false;	
	} else {
		initHighContrastCorrutine();
	}
	
	if (actualCookieValue && !window.matchMedia("(max-width: 992px)").matches) {
		$("body").addClass("alto-contraste");
	}
}

// Por si hubiese algun problema con las cookies se comprobara cada 2 segundos si ya estan cargadas
function initHighContrastCorrutine () {
	highContrastCorrutineActualTries++;
	if (highContrastCorrutineActualTries < highContrastCorrutineMaxTries) {
		setTimeout(function () {
			initHighContrast();
		}, highContrastCorrutineDelay);	
	}
}

function setHighContrast(){
	$("body").toggleClass("alto-contraste");
	setHighContrastCookie(params["HIGH_CONTRAST_COOKIE_NAME"], 10);
}

function setHighContrastCookie(cookieName, expirationDays) {
	var d = new Date();
	d.setTime(d.getTime() + (expirationDays * 24 * 60 * 60 * 1000));
	var expires = "expires="+ d.toUTCString();
	
	var actualCookieValue = getCookie(cookieName).includes("true") ? true : false;
	
	document.cookie = cookieName + "=" + !actualCookieValue + ";" + expires + ";path=/";
}

function getCookie(cookieName) {
	var name = cookieName + "=";
	var decodedCookie = decodeURIComponent(document.cookie);
	var ca = decodedCookie.split(';');
	for(var i = 0; i <ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == ' ') {
			c = c.substring(1);
		}
		if (c.indexOf(name) == 0) {
			return c.substring(name.length, c.length);
		}
	}
	return "";
}

// En movil o tablet no debemos tener el alto contraste
function highContrastMobileHandler() {
	var actualCookieValue = getCookie(params["HIGH_CONTRAST_COOKIE_NAME"]).includes("true") ? true : false;
	
	if (actualCookieValue) {
		// Si estamos en tablet se quita
		if (window.matchMedia("(max-width: 992px)").matches) {
			$("body").removeClass("alto-contraste");
		} else { // Si volvemos a desktop se pone
			$("body").addClass("alto-contraste");
		}	
	}
}
//REQUIERE: El portlet BusplusLoginPortlet debe estar situado en la pagina

var width992Query = window.matchMedia("(max-width: 992px)");
//var closeLoginFormAction = true; // Comprueba si se debe realizar la accion de cerrar la capa del login
//var loginFormOpen = false; // Comprueba si la capa del login esta abierta

function initSecondaryMenu () {
	width992Query.addListener(cleanMenu); //Funcion definida en BusplusLogin: loginPopup.js
	$("#language_modal_responsive").prependTo("#wrapper");
	setTimeout(function() {
		$(".secondary-menu").removeAttr("style");
	}, 2000);
}

/**
 * Restaura el aspecto de la pagina
 * (oculta la capa de black-div y recupera el color original de fondo del main menu)
 */
function cleanMenu(){
	$('#header .black-div').addClass("display-none");
	$("#header #menu-container").removeClass("menu-grey");
}

function showModalLanguage() {
	$('#language_modal_responsive').modal();	
}

function changeLanguageForm(id){
	$("#languageTypeHidden").val(id);
}

function submitLanguageForm(event){
	event.preventDefault();
	var element = "#a_language_" + $("#languageTypeHidden").val();
	 jQuery(element)[0].click();
}

/**
 * Rounds a number by the specified amount of decimals
 * @param value Number to round
 * @param decimals Amount of decimals to display 
 * @returns
 */
function roundDecimals(value, decimals){
	if( decimals==0 ){
		return Math.round(value)
	};
	var amountDecimals = Math.pow(10,decimals);
	return Math.round(value*amountDecimals)/amountDecimals;
}


$(document).ready(function () {
	
	if(params['busplusUser']){
		if(params['cashPoints'] && document.getElementById("secondarymenu-cashPoints")){
			// Puntos
			var pointsAsEuros = roundDecimals(params['cashPoints'], 2);
			document.getElementById("secondarymenu-cashPoints").innerHTML = '(' + pointsAsEuros + '€)';
		}
		if(params['cardCurrentBalance'] && document.getElementById("secondarymenu-busplusUserInfoBalance")){
			// Monedero
			var balance = roundDecimals(params['cardCurrentBalance'], 2);
			document.getElementById("secondarymenu-busplusUserInfoBalance").innerHTML = balance + '€';
		}
	}
	
});

var idFirstLevel = "1";
var idSecondLevel = "2";
var idThirdLevel = "3";
var idFourthLevel = "4";
//variable de control para check inner width
let mobile;

checkInnerWidth();
window.addEventListener('resize', checkInnerWidth);
$(document).ready(function () {
    if (typeof params["fullMainMenu"] !== "undefined") {
        initMenu(params["fullMainMenu"]);
    }
    moveSubheader();
    window.matchMedia("(max-width: 992px)").addListener(moveSubheader);

    // Manejar clics en todos los enlaces del menú
    $("#mainmenu a").on("click", function (event) {
        const li = $(this).parent("li"); // Obtener el elemento <li> padre
        const isSubmenu = $(this).closest(".contenedor-submenus").length > 0; // Verificar si está dentro de un submenú

        if (isSubmenu) {
            return;
        }

        $("#mainmenu a").removeClass("hover");
        $(this).addClass('hover');

        const arrayLevel = li.attr("data-arrayLevel")?.split(",").map(Number); // Leer y convertir el atributo
        const innerW = window.innerWidth;

        if (arrayLevel && !mobile) {
        // Enlace principal: bloquear y alternar submenú
            event.preventDefault();
            event.stopPropagation();
            toggleMenuList_tablets(arrayLevel, event); // Alternar submenú
        }
    });
    $(document).on("click", function (event) {
        // Verificar si el clic ocurrió fuera del menú principal y de submenús visibles
        if (
            !$(event.target).closest("#mainmenu").length && // Clic fuera del menú principal
            !$(event.target).closest(".contenedor-submenus:not(.novisible_992)").length // Clic fuera de submenús visibles
        ) {
            $("#mainmenu .contenedor-submenus").addClass("display-none"); // Ocultar submenús
            $("#mainmenu a").removeClass("hover");
            $(".black-div").addClass("display-none");
        }
    });

    // Evitar que el clic en los submenús cierre el menú
    $(".contenedor-submenus a").on("click", function (event) {
        event.stopPropagation(); // Prevenir que el clic cierre el menú
    });

});

/**
 * Cambia de posicion el subheader en funcion de la resolucion de la pantalla
 */
function moveSubheader(){
	var placeOfSubheaderForDesktop = document.getElementById("header");
	var placeOfSubheaderForTabletsMoviles = document.getElementById("mainmenu");


	if( window.matchMedia("(min-width: 992px)").matches ){
		if( placeOfSubheaderForDesktop ){

		    let placeOfLogin = document.getElementById("linkMenu");
			let dom_subheader = placeOfSubheaderForTabletsMoviles.getElementsByClassName("sub-header")[0];

			if( dom_subheader ){
				placeOfSubheaderForDesktop.insertAdjacentElement("afterbegin",dom_subheader);
				document.getElementsByClassName("header_home_linkbusplus_desktop")[0].insertAdjacentElement("afterbegin", placeOfLogin);
			}


		}
	}
	if( window.matchMedia("(max-width: 991px)").matches ){
		if( placeOfSubheaderForTabletsMoviles ){
		    let placeOfLogin = document.getElementById("linkMenu");
			let dom_subheader = placeOfSubheaderForDesktop.getElementsByClassName("sub-header")[0];

			if( dom_subheader ){
				placeOfSubheaderForTabletsMoviles.insertAdjacentElement("beforeend",dom_subheader);
				document.getElementsByClassName("header_home_linkbusplus_mobile")[0].insertAdjacentElement("afterbegin", placeOfLogin)
			}
		}
	}
};

//Funcionamiento complejo, forma una matriz de cuatro por cuatro
function initMenu (listaItems) {
	for (var i = 0; i < listaItems.length; i++) {
		// Creamos el primer nivel de la lista
		createTextList("listaMenuWeb2020MainMenuPortlet", [i], listaItems[i], 0);

		// Creamos la estructura base dentro de cada primer item de --- la lista
		createMenuList(listaItems[i], i);

		if (typeof listaItems[i].children != "undefined") {	// Si tiene hijos

			for (var y = 0; y < listaItems[i].children.length; y++) {

				// Creamos el segundo nivel de la lista
				var secondLevelItem = listaItems[i].children[y];
				var secondLevelSelector = concatString(["col", secondLevelItem.column, i, "ul"]);
				createTextList(secondLevelSelector, [i,y], secondLevelItem, 3);

				if (typeof secondLevelItem.children != "undefined") {	// Si tiene hijos

					// Creamos el tercer nivel de la lista y de llegar a este nivel se le añadira una clase especial al segundo nivel
					var thirdLevelSelector = "menu"+i+""+y;

					$("#" + thirdLevelSelector).append(
						"<ul id='menu"+i+""+y+"ul' class='novisible_992'></ul>");
					var ulThirdLevelSelector =  "menu"+i+""+y+"ul";

					for (var x = 0; x < secondLevelItem.children.length; x++) {
						var thirdLevelItem = secondLevelItem.children[x];
						createTextList(ulThirdLevelSelector, [i,y,x], thirdLevelItem, 4);

						if (typeof thirdLevelItem.children != "undefined") {	// Si tiene hijos
							// Creamos el cuarto nivel de la lista y de llegar a este nivel se le añadira una clase especial al segundo nivel
							var fourthLevelSelector = "menu"+i+""+y+""+x;
							$("#" + concatString([fourthLevelSelector, "h"])).addClass("has-childs");

							$("#" + fourthLevelSelector).append(
								"<ul id='menu"+i+""+y+""+x+"ul' class='foutrhlevel'></ul>");
							var ulFourthLevelSelector = "menu"+i+""+y+""+x+"ul";

							for (var z = 0; z < thirdLevelItem.children.length; z++) {
								var fourthLevelItem = thirdLevelItem.children[z];
								createTextList(ulFourthLevelSelector, [i,y,x,z], fourthLevelItem, 5);
							}
						}


					}
				}


			}
		}


	}
}

/**
 * Crea un texto dentro de la lista
 * selector: el selector por el que se buscara en el DOM
 * arrayLevel: indica el nivel de profundidad, en el menu, del elemento que se va a crear
 * item: el elemento de menu
 * hElement: el numero del h con el que se creara este componente
 */
function createTextList (selector, arrayLevel, item, hElement) {

	var textStructure = "";
	var baseId = "menu"+arrayLevel.join("").toString();
	//var nextChildLevel = concatString(baseId,"ul");
	var iteration = arrayLevel[arrayLevel.length-1]
	var depth = arrayLevel.length;
	var classElement = "menu"+iteration;

	if(item.colorblue)
	{
		classElement= classElement +" isblue";
	}

	// Se construye el <li>
	if (item.children && item.children.length > 0) {
		textStructure += '<li'
		textStructure += ' id="' + baseId + '"';
		//textStructure += ' onmouseleave="hideMenuList_desktop(['+arrayLevel+'])";';
		//textStructure += ' onmouseover="showMenuList_desktop(['+arrayLevel+'])";';
		textStructure += ' onclick="toggleMenuList_tablets(['+arrayLevel+'],event)";';
        textStructure += ' data-arrayLevel="' + arrayLevel.join(",") + '"';
		if (depth ==1 ) {
			textStructure += ' class="icn-angle-down -mobile ' + item.classid + '"';
		} else if(depth ==2 ){
			textStructure += ' class="icon icn-plus ' + item.classid + '"';
		}



		textStructure += '>'
		// Si se quiere encapsular el texto en un <h?>
		if (hElement > 0) {
			textStructure += '<h' + hElement + ' id="' + concatString([baseId, "h"]) + '"><a href="' + item.url + '" class="' + classElement + ' has-childs" ';
			textStructure += 'onclick="event.stopPropagation()"><span>' + item.title + '</span></a></li>';
		} else {
			textStructure += '<a href="' + item.url + '" class="' + classElement + ' has-childs" ';
			textStructure += 'onclick="event.stopPropagation()"><span>' + item.title + '</span></a></li>';
		}
	} else {
		textStructure += '<li ';
		textStructure += 'id="' + baseId +'"';
		if (depth = 1) {
			//En caso de que no tenga hijos, y estemos en el primer nivel, mostramos tambien los
			//estilos del hover
			textStructure += 'class="' + item.classid + '"';
			//textStructure += ' onmouseover="showHoverOnly(\'' + baseId + '\')"';
			//textStructure += ' onmouseleave="hideHoverOnly(\'' + baseId + '\')"';
		} else {
			textStructure += 'class="' + item.classid + '"';
		}
		textStructure += ' ">';
		// Si se quiere encapsular el texto en un <h?>
		if (hElement > 0) {
			textStructure += '<h' + hElement + ' id="' + concatString([baseId, "h"]) + '"><a href="' + item.url + '" class="' + classElement+'"><span>' + item.title + '</span></a></h' + hElement + '></li>';
		} else {
			textStructure += '<a href="' + item.url + '" class="' + classElement + '"';

			if(item.url.includes("http") || item.url.includes("www.")){
				textStructure += ' target="_blank" ;'
			}

			textStructure += '><span>' + item.title + '</span></a></li>';
		}
	}

	$("#" + selector).append(textStructure);
}


/**
 * Crea la estructura basica del menu
 */
function createMenuList (rootElemnt, iteration) {
    //console.log('rootn element:');
    //console.log(rootElemnt);

	var listBaseStructure =
	'<div id="' + concatString(["contenedorDatosItemWeb2020MainMenuPortlet", iteration]) + '" class="display-none contenedor-submenus">' +
			'<div class="container">' +
				'<div class="main-menu-title">' +
					'<h2 id="' + concatString(['itemSeleccionadoWeb2020MainMenuPortlet', iteration]) + '"><a href="'+rootElemnt.url+'">' + rootElemnt.title + '</a></h2>' +
				'</div>' +
				'<ul id="' + concatString(['contenedorColumnasWeb2020MainMenuPortlet', iteration]) + '" class="contenedor-columnas">' +
					'<li id="' + concatString(['col-1', iteration]) + '" class="col-1-0"><ul id="' + concatString(['col-1', iteration, 'ul']) + '"></ul></li>' +
					'<li id="' + concatString(['col-2', iteration]) + '" class="col-2-0"><ul id="' + concatString(['col-2', iteration, 'ul']) + '"></ul></li>' +
					'<li id="' + concatString(['col-3', iteration]) + '" class="col-3-0"><ul id="' + concatString(['col-3', iteration, 'ul']) + '"></ul></li>' +
				'</ul>' +
			'</div>' +
	'</div>';
	var baseId = "menu"+iteration;
	$("#" + baseId).append(listBaseStructure);
}


function checkInnerWidth() {
    let inner = window.innerWidth;
    if(inner > 991) {
        mobile = false;
    }else {
        mobile = true;
    }
}

/**
 * Para Elementos de primer nivel, sin hijos, solo añade la clase hover
 *
 * @returns
 */
//function showHoverOnly(baseId) {
//	$("#" + baseId +" > a").addClass("hover");
//}

/**
 * Para Elementos de primer nivel, sin hijos, solo quita la clase hover
 *
 * @param arrayLevel
 * @returns
 */
//function hideHoverOnly(baseId) {
//	$("#" + baseId +" > a").removeClass("hover");
//}

/**
 * Acciones que solo tienen lugar en resoluciones desktop
 * para mostrar la opcion del menu principal indicada por el parametro "arrayLevel"
 * @param arrayLevel
 */
function showMenuList_desktop(arrayLevel) {
	if( window.matchMedia("(max-width: 991px)").matches ){
		return;
	}
	$(".black-div").removeClass("display-none");
	showMenuList(arrayLevel);
}


/**
 * Acciones que solo tienen lugar en resoluciones desktop
 * para ocultar la opcion del menu principal indicada por el parametro "arrayLevel"
 * @param arrayLevel
 */
function hideMenuList_desktop(arrayLevel) {
	if( window.matchMedia("(max-width: 991px)").matches ){
		return;
	}
	$(".black-div").addClass("display-none");
	hideMenuList(arrayLevel);
}

/**
 * Muestra los distintos elementos del menu
 * Pone la capa negra que cubrirá el contenido de la página
 * Pone los estilos del hover para los elementos principales del menú
 * Deshabilita el scroll en el contenido
 */
function showMenuList(arrayLevel) {
	var depth = arrayLevel.length;
	if( depth == idFirstLevel ){
		var iteration = arrayLevel[arrayLevel.length-1];
		//$("#contenedorDatosItemWeb2020MainMenuPortlet-" + iteration).siblings ("a").addClass("hover");
		$("#contenedorDatosItemWeb2020MainMenuPortlet-" + iteration).removeClass("display-none");
		$("#menu"+arrayLevel.join("")).addClass("open-menu");
	}
}


/**
 * Oculta los distintos elementos del menu
 * Quita la capa negra
 * Quita estilos hover
 * Habilita el scroll
 */
function hideMenuList (arrayLevel) {
	var depth = arrayLevel.length;
	if (depth == idFirstLevel) {
		var iteration = arrayLevel[arrayLevel.length-1];
		//$("#contenedorDatosItemWeb2020MainMenuPortlet-" + iteration).siblings ("a").removeClass("hover");
		$("#contenedorDatosItemWeb2020MainMenuPortlet-" + iteration).addClass("display-none");
		$("#menu"+arrayLevel.join("")).removeClass("open-menu");
	}  if (depth < idThirdLevel) {
		var elementId = "menu"+arrayLevel.join("").toString();
		$("#" + elementId).removeClass("open-menu");
		$("#" + elementId).find('li.open-menu').removeClass("icn-minus").addClass("icn-plus");
		$("#" + elementId).find('li.open-menu').removeClass("open-menu");
		if ( $("#" + elementId).hasClass("icn-angle-up") ) {
			$("#" + elementId).removeClass("icn-angle-up").addClass("icn-angle-down");
		}
		if ( $("#" + elementId).hasClass("icn-minus") ) {
			$("#" + elementId).removeClass("icn-minus").addClass("icn-plus");
		}

		$("#" + elementId).find('ul:not(.foutrhlevel)[id^="menu"]').addClass("novisible_992");
	}

}


/**
 * Solo en pantallas de moviles/tablets, en funcion del estado del elemento del menu, realiza lo siguiente:
 * Muestra/oculta los distintos elementos del menu
 * Pone/quita la capa negra
 * Pone/quita estilos hover
 * Des/Habilita el scroll
 */
function toggleMenuList_tablets(arrayLevel, event) {
    event.stopPropagation();


    var depth = arrayLevel.length;

    if (depth == idFirstLevel) {
        var iteration = arrayLevel[arrayLevel.length - 1];
        var currentElement = $("#contenedorDatosItemWeb2020MainMenuPortlet-" + iteration);

        // Alternar visibilidad del submenú
        currentElement.toggleClass("display-none");
        const hidden = (currentElement.hasClass("display-none")) ? true : false;
        if(hidden) {
            $("#mainmenu a").removeClass("hover");
            $(".black-div").addClass("display-none");
        }
        else{
        	$(".black-div").removeClass("display-none");
        }
    }

    if (depth < idThirdLevel) {
        var elementId = "menu" + arrayLevel.join("").toString();
        var currentElement = $("#" + elementId);

        // Alternar visibilidad del submenú
        currentElement.toggleClass("open-menu");
        var childElement = currentElement.find("ul").first();
        childElement.toggleClass("novisible_992");
        //console.log("Submenú hijo alternado:", childElement.hasClass("novisible_992") ? "Oculto" : "Visible");

        // Alternar iconos de expansión
        if (currentElement.hasClass("icn-angle-down")) {
            currentElement.removeClass("icn-angle-down").addClass("icn-angle-up");
        } else if (currentElement.hasClass("icn-angle-up")) {
            currentElement.removeClass("icn-angle-up").addClass("icn-angle-down");
        } else if (currentElement.hasClass("icn-plus")) {
            currentElement.removeClass("icn-plus").addClass("icn-minus");
        } else if (currentElement.hasClass("icn-minus")) {
            currentElement.removeClass("icn-minus").addClass("icn-plus");
        }
    }

    toggleSiblingMenus(arrayLevel); // Cierra otros submenús
}



/**
 * Muestra/oculta los menus que sean distintos al que se recibe como parametro
 */
function toggleSiblingMenus( arrayLevel ) {
	var iteration = arrayLevel[arrayLevel.length-1]
	for (var i=0; i<=iteration-1; i++) {
		var arrayLevelSibling = arrayLevel.slice(0);
		arrayLevelSibling.pop();
		arrayLevelSibling.push(i)
		hideMenuList(arrayLevelSibling);
	}
	for (var i=iteration+1; i<params["fullMainMenu"].length; i++) {
		var arrayLevelSibling = arrayLevel.slice(0);
		arrayLevelSibling.pop();
		arrayLevelSibling.push(i)
		hideMenuList(arrayLevelSibling);
	}
}

/**
 * Esta funcion nos ayudara a que los selectores coincidan sin ensuciar demasiado el codigo
 */
function concatString (valores) {
	var finalString = "";
	for (var i = 0; i < valores.length; i++) {
		finalString += valores[i];
		if (i+1 != valores.length) {
			finalString += '-';
		}
	}

	return finalString;
}

$(document).ready(function(){
	$('.journey-row').addClass('show-twice');

	let items = $(".journey-row");
	let numToShow = 2;
	let button = $("#showMoreJourneys");
	let numToShowIncrement = numToShow;

	items.slice(0, numToShow).addClass('show');

	button.on('click', function() {
		let showing = items.filter('.show').length;
		numToShowIncrement += 2;
		items.slice(showing, numToShowIncrement).addClass('show');
		items.slice(showing, numToShowIncrement).removeClass('hidden');
		if (items.filter('.show').length === items.length) {
		  button.hide();
		}
	});
});

