www2.alsaferrol.es Open in urlscan Pro
212.163.31.177  Public Scan

Submitted URL: http://www2.alsaferrol.es/
Effective URL: https://www2.alsaferrol.es/
Submission: On July 23 via manual from ES — Scanned from ES

Form analysis 4 forms found in the DOM

Name: loginFormPOST https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginAction&p_auth=cgOVEeUd

<form class="form ng-pristine ng-invalid ng-invalid-required ng-valid-pattern" id="loginForm" name="loginForm" method="post"
  action="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&amp;p_p_lifecycle=1&amp;p_p_state=normal&amp;p_p_mode=view&amp;_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginAction&amp;p_auth=cgOVEeUd"
  novalidate="" data-ng-submit="manageSubmit($event)" autocomplete="off">
  <!-- Post Action -->
  <input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" value="">
  <input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" value="">
  <fieldset>
    <!-- componente login google -->
    <div class="row">
      <div class="col-xs-12 px-0" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <div class="g_id_signin" data-type="standard" data-shape="rectangular" data-theme="outline" data-text="signin_with" data-size="large" data-width="285" data-locale="es_ES" data-logo_alignment="left">
          <div class="S9gUrf-YoZ4jf" style="position: relative;">
            <div>
              <div tabindex="0" role="button" aria-labelledby="button-label" class="nsm7Bb-HzV7m-LgbsSe  hJDwNd-SxQuSe i5vt6e-Ia7Qfc uaxL4e-RbRzK" style="width:285px; max-width:400px; min-width:min-content;">
                <div class="nsm7Bb-HzV7m-LgbsSe-MJoBVe"></div>
                <div class="nsm7Bb-HzV7m-LgbsSe-bN97Pc-sM5MNb ">
                  <div class="nsm7Bb-HzV7m-LgbsSe-Bz112c"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" class="LgbsSe-Bz112c">
                      <g>
                        <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"></path>
                        <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"></path>
                        <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"></path>
                        <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"></path>
                        <path fill="none" d="M0 0h48v48H0z"></path>
                      </g>
                    </svg></div><span class="nsm7Bb-HzV7m-LgbsSe-BPrWId">Iniciar sesión con Google</span><span class="L6cTce" id="button-label">Iniciar sesión con Google</span>
                </div>
              </div>
            </div><iframe
              src="https://accounts.google.com/gsi/button?type=standard&amp;shape=rectangular&amp;theme=outline&amp;text=signin_with&amp;size=large&amp;width=285&amp;logo_alignment=left&amp;client_id=1095897870165-1bvb91t0n687k6l037s2ltfh9j4rtrga.apps.googleusercontent.com&amp;iframe_id=gsi_256218_15731&amp;as=TR1DVXqyg5lRgxrlgubDiQ&amp;hl=es_ES"
              allow="identity-credentials-get" id="gsi_256218_15731" title="Botón Iniciar sesión con Google" style="display: block; position: relative; top: 0px; left: 0px; height: 0px; width: 0px; border: 0px;"></iframe>
          </div>
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <p class="google-o"><strong class="google-o__text">o</strong></p>
      </div>
    </div>
    <!-- fin componente login google -->
    <!-- Form fields -->
    <div class="form-row row">
      <!-- Bloque para el input DocumentNumber -->
      <div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <div class="form-group">
          <label for="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusDocumentNumber">NIF / NIE / Pasaporte/Email<span class="asterisco">*</span>
            <!-- ngIf: showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName) -->
          </label>
          <input id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusDocumentNumber" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName" type="text"
            placeholder="Introduce tu documento de identidad o email" class="form-control ng-pristine ng-invalid ng-invalid-required"
            data-ng-class="{'invalid-field': showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName)}" data-ng-model="documentNumber" data-required="" data-ng-focus="">
          <div class="error-container ng-hide" data-ng-show="showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName)">
            <small class="error-message" data-ng-show="loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName.$error.required">Campo requerido.</small>
          </div>
        </div>
      </div>
    </div> <!-- row -->
    <div class="form-row row">
      <!-- Bloque para el input Password -->
      <div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <div class="form-group">
          <label for="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusPassword">Contraseña<span class="asterisco">*</span>
            <!-- ngIf: showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password) -->
          </label>
          <input id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusPassword" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password" type="password" placeholder="Introduce tu contraseña"
            class="form-control ng-pristine ng-invalid ng-invalid-required" data-ng-class="{'invalid-field': showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password)}" data-ng-model="password"
            data-required="" data-ng-focus="">
          <div id="show_password" data-ng-class="revealedPassword_formLogin() ? 'icn-eye c-password__icon--slash' : 'icn-eye'" class="c-password__icon icn-eye ng-hide" type="image" data-ng-show="showButtonRevealPassword_formLogin()"
            data-ng-click="mostrarContrasena_formLogin($event)" title="Ver contraseña">
            <span class="ui-hidden-accessible">Ver contraseña</span>
          </div>
          <div class="error-container ng-hide" data-ng-show="showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password)">
            <small class="error-message" data-ng-show="loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password.$error.required">Campo requerido.</small>
          </div>
        </div>
      </div>
    </div><!-- row -->
    <div class="form-row row">
      <div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <!-- Esta parte no debe ser visible en el paso 3 - Fin -->
        <!-- Recordar en futuras visitas -->
        <div class="rememberLogin-container">
          <input id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_rememberMe" class="ui-hidden-accessible" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_rememberMe" type="checkbox" value="true" checked="">
          <label class="label-checkbox checkbox-altocontraste" for="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_rememberMe"> Recuérdame para futuras visitas </label>
        </div>
      </div>
    </div><!-- row -->
    <div class="form-row row">
      <div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <button type="submit" class="btn btn-primary">Entrar</button>
      </div>
    </div> <!-- row -->
    <div class="form-row row">
      <div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <!-- Recuperar contraseña: Esta parte no debe ser visible en el paso 3 -->
        <!-- ngIf: !isThirdStep() -->
        <div class="recoverPass-container mt-3 ng-scope" data-ng-if="!isThirdStep()">
          <script type="text/javascript">
            params["isTestEnvironment"] = ""; // indica si estamos en entorno de desarrollo o produccion
            params["jsonDateFormat"] = "yyyy/MM/dd hh:mm:ss";
            params["timestamp"] = "1721093672000";
            params["responsive992"] = "991";
            params["responsive768"] = "767";
            params["groupId"] = "21643679";
            params["contextPath"] = '/o/Alsa-portlet';
            params["validNamePattern"] = "^[0-9a-zA-Zá-úÁ-ÚñÑÄËÏÖÜäëïöüàèìòùÀÈÌÒÙªº\\-\\s\\.]*$";
            //Si existe busplususer y no ha sido pasado como parámetro
            //Informacion para contenidos en ventanas emergentes de condiciones de compra, etc
            params["newsletterConditions"] = '21690005';
            //Constantes globales (se usaran en controladores y templates con constants.PASSPORT)
            //tipos de documentos a mostrar en los combos
            constants["PASSPORT"] = 0;
            constants["NIF"] = 1;
            constants["NIE"] = 2;
            if (params["activeGoogleTag"] == "true") {
              if ('') {
                alsa_GA.busplusAutoLogin('');
              }
              $(document).ready(function() {
                alsa_GA.externalLinksInit();
              });
            }
          </script>
          <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/busplusresetpassword-min.js?t=1721093672000" type="text/javascript"></script>
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/newPasswordFormApp.js?t=1721093672000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/newPasswordFormAppController.js?t=1721093672000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordApp.js?t=1721093672000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordDirective.js?t=1721093672000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordService.js?t=1721093672000" type="text/javascript"></script> -->
          <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordService.js?t=1721093672000" type="text/javascript"></script>
          <link rel="stylesheet" type="text/css" href="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/css/recover-password.css?t=1721093672000">
          <script type="text/javascript">
            params["namespaceRecoverPassword"] = "_BusplusLoginPortlet_WAR_Alsaportlet_";
            params["RESET_PASSWORD_SHOW_SMS"] = 'true';
            i18n.addTranslation('busplus.recover-password.title', '¿Has olvidado tu contraseña?');
            i18n.addTranslation('busplus.recover-password.question', 'Escribe tu número de documento NIF,NIE, Pasaporte.');
            i18n.addTranslation('busplus.recharge-card.document-number', 'Número de documento');
            i18n.addTranslation('busplus.recover-password.question.email-empty', 'Tu usuario no tiene un email asociado. Por favor, introduce los siguientes datos de tu usuario y una dirección de email para hacerte llegar tu contraseña.');
            i18n.addTranslation('busplus.login.error-email-message', 'Usuario sin dirección de email.');
            i18n.addTranslation('busplus.login.error-email-message2', 'La fecha de nacimiento introducida no coincide con la del usuario. Por favor inténtelo de nuevo.');
            i18n.addTranslation('busplus.recover-password.id-placeholder', 'NIF/NIE/Pasaporte');
            i18n.addTranslation('busplus.recover-password.send-password', 'Recuperar contraseña');
            i18n.addTranslation('busplus.recover-password.password-sent', 'Te hemos enviado un email con tu nueva contraseña.');
            i18n.addTranslation('busplus.recover-password.can-change',
              'Mira tu bandeja de correo y si no lo encuentras, revisa la bandeja de correo no deseado o spam. Si quieres modificar la nueva contraseña que te hemos enviado, entra en la sección "Tu perfil", dentro de tu Alsa Plus.');
            i18n.addTranslation('busplus.login.error-message', 'Credenciales incorrectas.');
            i18n.addTranslation('busplus.login.error-message.email-empty', 'busplus.login.error-message.email-empty');
            i18n.addTranslation('busplus.login.unknown-error-message', 'Error desconocido durante el login. Por favor inténtalo más tarde.');
            i18n.addTranslation('busplus.email.info.body-part1', 'Revisa tu bandeja de entrada, valida tu email para completar el registro Alsa Plus');
            i18n.addTranslation('busplus.document-number.label', 'NIF / NIE / Pasaporte');
            i18n.addTranslation('busplus.birth-date.label', 'Fecha de nacimiento');
            i18n.addTranslation('general.label.day', 'Día');
            i18n.addTranslation('general.label.month', 'Mes');
            i18n.addTranslation('general.label.year', 'Año');
            i18n.addTranslation('busplus.email.label', 'Email');
            i18n.addTranslation('zz23.busplus.recover-password.password-sent', 'Si tus datos son correctos, recibirás un email para crear una nueva contraseña');
            i18n.addTranslation('zz23.busplus.recover-password.can-change',
              'Solo tienes que hacer clic en el enlace que aparece en el email y crear una nueva contraseña. Si no encuentras el mail en la bandeja de entrada, revisa la bandeja de correo no deseado o spam.');
            i18n.addTranslation('zz23.busplus.recover-password.can-change.note', 'IMPORTANTE: Recuerda que este enlace solo tiene una validez de 30 minutos desde que recibes el email.');
            i18n.addTranslation('zzz01.alsaplus.login.lost-password-question', '¿Olvidaste tu contraseña?');
            i18n.addTranslation('validation.required-field', 'Campo requerido.');
            i18n.addTranslation('zzz05.validation.password.secure', 'Introduce una contraseña segura: al menos 8 caracteres que incluyan una mayúscula, una minúscula y un número.');
            i18n.addTranslation('validation.not-match', 'Los campos no coinciden');
            i18n.addTranslation('busplus.profile.password.new', 'Nueva contraseña');
            i18n.addTranslation('busplus.profile.password.new.repeat', 'Confirmar la nueva contraseña');
            i18n.addTranslation('zzz05.recover-password.do.not.remember.email.phonenumber', 'No recuerdo el email ni el teléfono asociado');
            i18n.addTranslation('zzz05.recover-password.verify.sms', 'Código de verificación recibido');
            i18n.addTranslation('zzz05.recover-password.verify.sms.message', 'Si tus datos son correctos, recibirás un sms con un código de acceso de un sólo uso');
            i18n.addTranslation('zzz05.recover-password.can.not.contact', '¡Parece que no podemos contactar contigo!');
            i18n.addTranslation('zzz05.recover-password.refill.form', 'Por favor, rellena este formulario para que podamos ayudarte.');
            i18n.addTranslation('zzz05.recover-password.contact.alsaplus', 'Contacto Alsa Plus');
            i18n.addTranslation('general.navigation.close', 'Cerrar');
            i18n.addTranslation('zzz05.recover-password.select.how', 'Selecciona cómo prefieres restablecer tu contraseña');
            i18n.addTranslation('zzz05.recover-password.sms', 'Mensaje de texto (SMS)');
            i18n.addTranslation('zzz01.alsaplus.change-password', 'Cambiar contraseña');
            i18n.addTranslation('zzz05.general.resend', 'Reenviar');
            i18n.addTranslation('zzz03.registered-user.registry.success.explanation', 'Tus datos se han guardado correctamente');
            i18n.addTranslation('contactForm.error.title', 'Se ha producido un error');
            i18n.addTranslation('zzz05.reset-password.retries.left1', 'Código de verificación erróneo, te queda/n');
            i18n.addTranslation('zzz05.reset-password.retries.left2', '\ intento/s.');
            i18n.addTranslation('zzz05.reset-password.sms.active', 'Ya tienes un código de verificación activo, revisa en tu teléfono e introduce el código de verificación');
            i18n.addTranslation('zzz05.reset-password.no.retries', 'Ya no te quedan intentos, vuelve a enviar el SMS');
            i18n.addTranslation('zzz05.reset-password.resend.sms', 'Código de verificación erróneo, ya no te quedan intentos, vuelve a enviar el SMS.');
            i18n.addTranslation('zzz05.reset-password.sms.timeout', 'Código de verificación expirado. Vuelve a solicitar el envío SMS.');
          </script>
          <div id="recoverPasswordApp">
            <data-sag-alsa-recover-password
              data-recover-password-url="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&amp;p_p_lifecycle=2&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_resource_id=AjaxRecoverPassword&amp;p_p_cacheability=cacheLevelPage&amp;p_p_auth=ECv0vmwH"
              data-recover-password-reset-email-url="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&amp;p_p_lifecycle=2&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_resource_id=AjaxRecoverPasswordResetEmail&amp;p_p_cacheability=cacheLevelPage&amp;p_p_auth=ECv0vmwH"
              data-recover-password-sms-url="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&amp;p_p_lifecycle=2&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_resource_id=AjaxRecoverPasswordSMS&amp;p_p_cacheability=cacheLevelPage&amp;p_p_auth=ECv0vmwH"
              data-recover-password-check-verification-code-url="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&amp;p_p_lifecycle=2&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_resource_id=AjaxRecoverPasswordCheckVerificationCode&amp;p_p_cacheability=cacheLevelPage&amp;p_p_auth=ECv0vmwH"
              data-recover-password-reset-password-url="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&amp;p_p_lifecycle=2&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_resource_id=AjaxRecoverPasswordResetPassword&amp;p_p_cacheability=cacheLevelPage&amp;p_p_auth=ECv0vmwH"
              class="ng-isolate-scope">
              <a href="#" data-ng-click="init('recoverPasswordModal')" class="recoverPass-container-link">
	<strong data-ng-bind="i18n.t('zzz01.alsaplus.login.lost-password-question')" class="ng-binding">¿Olvidaste tu contraseña?</strong>
</a>
              <div class="sag-modal fade" id="recoverPasswordModal" aria-labelledby="recoverPasswordModal-title" role="dialog" aria-describedby="recoverPasswordModal-desc" tabindex="-1" aria-hidden="true">
                <div class="sag-modal-dialog sag-modal-dialog--medium pb-3">
                  <data-ng-form role="form" name="recoverForm" id="recoverForm" class="recover-password ng-pristine ng-valid-required ng-valid ng-valid-pattern" data-ng-model="formRecovery" novalidate="" data-isolate-form="">
                    <div class="sag-modal-header">
                      <button type="button" class="close" data-dismiss="modal">
                        <span aria-hidden="true"></span> <span class="sr-only ng-binding" data-ng-bind="i18n.t('general.navigation.close')">Cerrar</span>
                      </button>
                      <h2 id="recoverPasswordModal-title" class="sag-modal-title sag-modal-title--azul recover-password__modal-title">
                        <strong data-ng-bind="i18n.t('busplus.recover-password.title')" class="ng-binding">¿Has olvidado tu contraseña?</strong>
                      </h2>
                    </div>
                    <div class="sag-modal-content">
                      <div class="sag-modal-body" id="recoverPasswordModal-desc" aria-live="assertive">
                        <!-- Formulario de reset de contaseña -->
                        <!-- ngIf: RESET_PASSWORD_SHOW_SMS -->
                        <!-- Formulario reset contraseña SIN SMS -->
                        <!-- ngIf: !RESET_PASSWORD_SHOW_SMS -->
                        <div data-ng-if="!RESET_PASSWORD_SHOW_SMS" class="ng-scope">
                          <div data-ng-show="(data == '' &amp;&amp; !showContactFormRedirect) || (data != '' &amp;&amp; data.messageError)" class="ng-hide">
                            <!--  formulario para solicitar nueva password con dni (el usuario tiene email asociado) -->
                            <p data-ng-bind="i18n.t('busplus.recover-password.question')" class="ng-binding">Escribe tu número de documento NIF,NIE, Pasaporte.</p>
                            <!-- ngIf: data == '' || (data.messageError!='email-empty' && data.messageError!='email-empty-error') -->
                            <div class="form-group ng-scope" data-ng-if="data == '' || (data.messageError!='email-empty' &amp;&amp; data.messageError!='email-empty-error')">
                              <div data-ng-show="data.messageError" class="bg-danger ng-hide">
                                <p data-ng-bind="data.messageError" class="ng-binding"></p>
                              </div>
                              <label for="account-recovery" data-ng-bind="i18n.t('busplus.recharge-card.document-number')" class="ng-binding">Número de documento</label>
                              <input type="text" name="account-recovery" class="form-control ng-pristine ng-valid" id="account-recovery" autocomplete="off" placeholder="NIF/NIE/Pasaporte" data-ng-model="formRecovery.userIdentifier"
                                data-ng-disabled="loading" capitalize="">
                            </div><!-- end ngIf: data == '' || (data.messageError!='email-empty' && data.messageError!='email-empty-error') -->
                            <!--  formulario para solicitar nueva password con fecha nacimiento y nif (el usuario NO tiene email asociado) -->
                            <!-- ngIf: data != '' && (data.messageError=='email-empty' || data.messageError=='email-empty-error') -->
                          </div>
                        </div><!-- end ngIf: !RESET_PASSWORD_SHOW_SMS -->
                        <!-- Mensaje de success al seleccionar el reset por email -->
                        <div data-ng-show="data != ''" class="">
                          <div data-ng-show="data.message" class="ng-hide">
                            <h3 data-ng-bind="i18n.t(data.message)" class="ng-binding">Undefined translation: undefined</h3>
                            <p data-ng-bind="i18n.t(data.message2)" class="ng-binding">Undefined translation: undefined</p>
                            <p data-ng-bind="i18n.t(data.messageNote)" class="ng-binding">Undefined translation: undefined</p>
                          </div>
                        </div>
                        <div data-ng-show="showContactFormRedirect" class="ng-hide">
                          <p data-ng-bind="i18n.t('zzz05.recover-password.can.not.contact')" class="sag-modal-text ng-binding">¡Parece que no podemos contactar contigo!</p>
                          <p data-ng-bind="i18n.t('zzz05.recover-password.refill.form')" class="sag-modal-text ng-binding">Por favor, rellena este formulario para que podamos ayudarte.</p>
                          <p>
                            <a href="/contacto/alsaplus" class="sag-modal-text d-flex align-items-center">
								<span class="c-icn--form">
									<i class="icn-check-c"></i>
									<span class="c-icn--form__lines"></span>
								</span>
								<span data-ng-bind="i18n.t('zzz05.recover-password.contact.alsaplus')" class="ng-binding">Contacto Alsa Plus</span>
							</a>
                          </p>
                          <p class="text-right mb-0">
                            <button type="button" class="btn btn-primary" data-dismiss="modal" data-ng-click="updateShowContactFormRedirect(false)">
                              <span data-ng-bind="i18n.t('general.navigation.close')" class="ng-binding">Cerrar</span>
                            </button>
                          </p>
                        </div>
                        <!-- Formulario para rellenar el codigo de verificacion recibido por SMS -->
                        <div data-ng-show="sendSmsData != '' &amp;&amp; verificatedCodeData == ''" class="ng-hide">
                          <!-- <object data="sms-verification-code-form.html"></object> -->
                          <p class="sag-modal-text ng-binding" data-ng-bind="i18n.t('zzz05.recover-password.verify.sms.message')">Si tus datos son correctos, recibirás un sms con un código de acceso de un sólo uso</p>
                          <p class="recover-pass__verify-sms-text"><strong data-ng-bind="i18n.t('zzz05.recover-password.verify.sms')" class="ng-binding">Código de verificación recibido</strong></p>
                          <data-ng-form role="form" name="checkVerificationCodeForm" data-ng-model="formCheckVerificationCode" novalidate="" data-isolate-form="" class="ng-pristine ng-invalid ng-invalid-required">
                            <div class="row mx-0">
                              <div class="recover-pass__digit-container d-flex mb-3 col-md-6 col-md-offset-3 px-0">
                                <input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode1" name="userVerificationCode1"
                                  data-ng-model="formCheckVerificationCode.userVerificationCode1" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 1)">
                                <input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode2" name="userVerificationCode2"
                                  data-ng-model="formCheckVerificationCode.userVerificationCode2" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 2)">
                                <input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode3" name="userVerificationCode3"
                                  data-ng-model="formCheckVerificationCode.userVerificationCode3" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 3)">
                                <input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode4" name="userVerificationCode4"
                                  data-ng-model="formCheckVerificationCode.userVerificationCode4" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 4)">
                                <input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode5" name="userVerificationCode5"
                                  data-ng-model="formCheckVerificationCode.userVerificationCode5" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 5)">
                                <input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode6" name="userVerificationCode6"
                                  data-ng-model="formCheckVerificationCode.userVerificationCode6" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 6)">
                              </div>
                            </div>
                            <div data-ng-show="dataVerificationCode != '' || sendSmsData != ''" class="mb-3">
                              <div data-ng-show="dataVerificationCode.remainingAttempts" class="error-container ng-hide">
                                <small data-ng-bind="i18n.t('zzz05.reset-password.retries.left1') + ' ' + dataVerificationCode.remainingAttempts + i18n.t('zzz05.reset-password.retries.left2')" class="error-message ng-binding">Código de verificación
                                  erróneo, te queda/n intento/s.</small>
                              </div>
                              <div data-ng-show="dataVerificationCode.message || sendSmsData.message" class="error-container ng-hide">
                                <small data-ng-bind="dataVerificationCode.message || sendSmsData.message" class="error-message ng-binding"></small>
                              </div>
                            </div>
                            <div class="text-right">
                              <button type="button" class="btn btn-lg btn-primary mt-3" data-ng-click="checkVerificationCode()">
                                <span data-ng-bind="i18n.t('ok')" class="ng-binding">Aceptar</span>
                              </button>
                            </div>
                            <!-- ngIf: showResendSMS -->
                          </data-ng-form>
                        </div>
                        <div data-ng-show="verificatedCodeData != '' &amp;&amp; passwordResetMessage == ''" class="ng-hide">
                          <!-- <object data="reset-password-form.html"></object>-->
                          <!-- Formulario de reset de contraseña -->
                          <p class="sag-modal-text ng-binding" data-ng-bind="i18n.t('zzz01.alsaplus.change-password')">Cambiar contraseña</p>
                          <data-ng-form role="form" name="passwordResetForm" data-ng-model="passwordResetForm" novalidate="" data-isolate-form="" class="ng-pristine ng-invalid ng-invalid-required ng-invalid-pattern">
                            <div class="new-pass-form">
                              <div class="form-group">
                                <label data-ng-bind="i18n.t('busplus.profile.password.new')" class="ng-binding">Nueva contraseña</label>
                                <div class="input-with-icon">
                                  <input id="newPassword" type="password" name="newPassword" data-ng-model="passwordResetForm.newPassword" ng-pattern="/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/" required=""
                                    class="ng-pristine ng-invalid ng-invalid-required ng-invalid-pattern">
                                  <i class="c-password__icon icn-eye" data-ng-class="showPassword ? 'icn-eye c-password__icon--slash' : 'icn-eye'" data-ng-click="showPassword = !showPassword"></i>
                                </div>
                                <div class="error-container ng-hide" data-ng-show="showErrorMessage(passwordResetForm.newPassword)">
                                  <small class="error-message ng-binding" data-ng-show="passwordResetForm.newPassword.$error.required" data-ng-bind="i18n.t('validation.required-field')">Campo requerido.</small>
                                </div>
                              </div>
                              <div class="form-group">
                                <label data-ng-bind="i18n.t('busplus.profile.password.new.repeat')" class="ng-binding">Confirmar la nueva contraseña</label>
                                <div class="input-with-icon">
                                  <input id="newPasswordRepeat" type="password" name="newPasswordRepeat" data-ng-model="passwordResetForm.newPasswordRepeat" ng-pattern="/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/" required=""
                                    class="ng-pristine ng-invalid ng-invalid-required ng-invalid-pattern">
                                  <i class="c-password__icon icn-eye" data-ng-class="showPasswordRepeat ? 'icn-eye c-password__icon--slash' : 'icn-eye'" data-ng-click="showPasswordRepeat = !showPasswordRepeat"></i>
                                </div>
                                <div class="error-container ng-hide" data-ng-show="showErrorMessage(passwordResetForm.newPasswordRepeat)">
                                  <small class="error-message ng-binding" data-ng-show="passwordResetForm.newPasswordRepeat.$error.required" data-ng-bind="i18n.t('validation.required-field')">Campo requerido.</small>
                                </div>
                              </div>
                              <div class="error-container ng-hide" data-ng-show="resetPasswordData.passwordPatternError">
                                <small class="error-message ng-binding" data-ng-bind="i18n.t('zzz05.validation.password.secure')">Introduce una contraseña segura: al menos 8 caracteres que incluyan una mayúscula, una minúscula y un número.</small>
                              </div>
                              <div class="error-container">
                                <small class="error-message ng-binding ng-hide" data-ng-show="resetPasswordData.passwordMismatchError" data-ng-bind="i18n.t('validation.not-match')">Los campos no coinciden</small>
                              </div>
                            </div>
                            <div class="recover-pass-button button-blue text-right">
                              <button data-ng-click="resetPassword()" type="submit" class="btn btn-primary ng-binding" data-ng-bind="i18n.t('ok')">Aceptar</button>
                            </div>
                          </data-ng-form>
                        </div>
                        <div data-ng-show="passwordResetMessage != ''" class="">
                          <p class="sag-modal-text ng-binding" data-ng-bind="i18n.t(passwordResetMessage)">Undefined translation: undefined</p>
                          <p class="text-right mb-0">
                            <button type="button" class="btn btn-primary ng-binding" data-dismiss="modal" data-ng-bind="i18n.t('ok')">Aceptar</button>
                          </p>
                        </div>
                      </div>
                      <div class="sag-modal-footer">
                        <div class="recover-pass-button button-blue">
                          <!-- ngIf: (data == '' && sendSmsData == '' && !showContactFormRedirect) || (sendSmsData == '' && !data.message && data.messageError!='email-empty' && data.messageError!='email-empty-error' && !showContactFormRedirect) -->
                          <!-- ngIf: data != '' && (data.messageError=='email-empty' || data.messageError=='email-empty-error') -->
                          <div data-ng-show="data != '' &amp;&amp; data.message" class="ng-hide">
                            <button type="button" class="btn btn-primary mb-3 ng-binding" data-dismiss="modal" data-ng-bind="i18n.t('ok')">Aceptar</button>
                          </div>
                          <!-- ngIf: (data == '' || data.messageError) && sendSmsData == '' && verificatedCodeData == '' && !showContactFormRedirect -->
                        </div>
                      </div>
                    </div>
                    <!-- /.modal-content -->
                  </data-ng-form>
                </div>
                <!-- /.modal-dialog -->
              </div>
              <!-- /.modal -->
            </data-sag-alsa-recover-password>
          </div>
        </div><!-- end ngIf: !isThirdStep() -->
      </div>
    </div>
    <!-- Esta parte no debe ser visible en el paso 3, ni cuando se mostrando tambien la pagina de registro -->
    <!-- ngIf: !isThirdStep() && !isRenderModeBoth -->
    <div data-ng-if="!isThirdStep() &amp;&amp; !isRenderModeBoth" class="form-row row login-register ng-scope">
      <div class="form-group col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
        <span class="link-register">
          <strong class="link-register-slogan">¿No eres cliente Alsa Plus?</strong>
          <a href="https://www2.alsaferrol.es/web/bus/alsaplus-login/registro?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_IMjszzHEduc8&amp;p_p_lifecycle=0&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_auth=jcfyrB2f">Regístrate</a>
        </span>
      </div>
    </div><!-- end ngIf: !isThirdStep() && !isRenderModeBoth --><!-- row -->
    <!-- Esta parte no debe ser visible en el paso 3 - Fin -->
  </fieldset>
</form>

Name: _BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_loginGoogleFormPOST https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginGoogleAction&p_auth=cgOVEeUd

<form class="form ng-pristine ng-valid" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_loginGoogleForm" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_loginGoogleForm" method="post"
  action="https://www2.alsaferrol.es/web/bus/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&amp;p_p_lifecycle=1&amp;p_p_state=normal&amp;p_p_mode=view&amp;_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginGoogleAction&amp;p_auth=cgOVEeUd"
  enctype="application/x-www-form-urlencoded" novalidate="">
  <input type="hidden" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_credential" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_credential">
  <input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" value="">
  <input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" value="">
  <input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_googleRememberLogin" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_googleRememberLogin">
</form>

Name: journeySearchFormPOST https://www2.alsaferrol.es/web/bus/checkout?p_p_id=PurchasePortlet_WAR_Alsaportlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_PurchasePortlet_WAR_Alsaportlet_javax.portlet.action=searchJourneysAction&p_auth=cgOVEeUd

<form name="journeySearchForm" id="journeySearchForm"
  action="https://www2.alsaferrol.es/web/bus/checkout?p_p_id=PurchasePortlet_WAR_Alsaportlet&amp;p_p_lifecycle=1&amp;p_p_state=normal&amp;p_p_mode=view&amp;_PurchasePortlet_WAR_Alsaportlet_javax.portlet.action=searchJourneysAction&amp;p_auth=cgOVEeUd"
  data-ng-submit="false" aria-label="Buscador" method="post" role="form" class="ng-pristine ng-invalid ng-invalid-required" novalidate="novalidate">
  <div id="journeySearchDivContainer" class="search-general new-search" data-test-id="journeySearchDivContainer" data-ng-view="">
    <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_code" name="code" value="">
    <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_serviceType" name="serviceType" value="">
    <input type="hidden" value="0" name="accessible">
    <style>
      @media (min-width: 768px) {

        input::-webkit-calendar-picker-indicator,
        input::-webkit-inner-spin-button {
          display: none;
        }

        input[name="numPassengers"] {
          cursor: pointer !important;
        }

        #journeySearchForm button {
          border: none;
          border-radius: 0;
          padding: 0;
          color: #363738;
          background: none;
          width: 100%;
        }
      }
    </style>
    <script type="text/javascript">
      i18n.addTranslation("zz22.accessibility.field.required", "Campo obligatorio");
      params["ajaxUpdateFavoriteStation"] =
        'https://www2.alsaferrol.es/web/bus/home?p_p_id=JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxUpdateFavoriteStation&p_p_cacheability=cacheLevelPage';
      i18n.addTranslation("zzz06.favorite-stations.error.generic", 'Ha ocurrido un error, inténtalo más tarde');
      i18n.addTranslation("zzz06.favorite-stations.error.max-origins", 'Has alcanzado el máximo de orígenes favoritos');
      i18n.addTranslation("zzz06.favorite-stations.error.max-destinations", 'Has alcanzado el máximo de destinos favoritos');
      i18n.addTranslation("zz17.journey.passengerType.ADULT.comment", 'De 26 a 59 años');
      i18n.addTranslation("zz13.journey.passengerType.YOUNG.comment", 'De 12 a 25 años');
      i18n.addTranslation("zz13.journey.passengerType.SENIOR.comment", 'Más de 60 años');
      i18n.addTranslation("zz13.journey.passengerType.CHILD.comment", 'De 4 a 11 años');
      i18n.addTranslation("zz13.journey.passengerType.BABY.comment", 'Hasta los 3 años');
      i18n.addTranslation("zzz06.journey.passengerType.ADULT.busnautic-comment", 'De 30 a 64 años');
      i18n.addTranslation("zzz06.journey.passengerType.YOUNG.busnautic-comment", 'De 7 a 29 años');
      i18n.addTranslation("zzz06.journey.passengerType.SENIOR.busnautic-comment", 'Más de 65 años');
      i18n.addTranslation("zzz06.journey.passengerType.CHILD.busnautic-comment", 'De 4 a 6 años');
      i18n.addTranslation("zzz06.journey.passengerType.BABY.busnautic-comment", 'De 1 a 3 años');
      // WA-6094
      params["isInitiallyBusNautic"] = 'false'
      params["busNauticDestinations"] = ["10529", "10528"]
    </script>
    <div style="left: -9999px; position: absolute; color: #fff">
      <!-- LISTADO DE ERRORES ACCESIBLE -->
      <!-- Origen -->
      <!-- ngIf: showErrorMessage(journeySearchForm.originStationNameId) && !origen -->
      <!-- Destino -->
      <!-- ngIf: showErrorMessage(journeySearchForm.destinationStationNameId) && !destino -->
      <!-- Fecha Ida -->
      <!-- ngIf: (showErrorMessage(journeySearchForm._departureDate) && journeySearchForm.originStationNameId.$valid && journeySearchForm.destinationStationNameId.$valid) && !ida -->
      <!-- Fecha Vuelta -->
      <!-- ngIf: (showErrorMessage(journeySearchForm._returnDate) && (journeySearchForm._departureDate.$valid && journeySearchForm.destinationStationNameId.$valid)
			&& (!$scope.search.travelType.open_return && !$scope.search.travelType.outward) && !vuelta) -->
    </div>
    <!-- Modal journeyNotAvailableNowModal -->
    <div class="sag-modal sag-modal--youngPromo fade" id="journeyNotAvailableNowModal" role="dialog">
      <div class="sag-modal-dialog">
        <div class="sag-modal-header">
          <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">form.modal.close</span></button>
          <h2>Billete no disponible en web</h2>
        </div>
        <div class="sag-modal-content">
          <div class="sag-modal-body" id="journeyNotAvailableNowModal-desc">
            <div class="row">
              <div class="col-xs-12">
                <p>La compra de servicios a partir de las 21:00 deberá realizarse en el bus</p>
              </div>
            </div>
          </div>
          <div class="sag-modal-footer">
            <button type="button" class="btn btn-primary btn-primary-bck" data-dismiss="modal">Lo entiendo</button>
          </div>
        </div><!-- /.modal-content -->
      </div><!-- /.modal-dialog -->
    </div><!-- /.modal -->
    <div class="responsive-search" data-back-button-history="">
      <div class="form-group first icn-journey-background">
        <!-- Origen -->
        <div id="contenedor-origen" class="col-md-12 aller-retour-responsive">
          <label for="_originStationNameId_">Origen</label>
          <button id="_originStationNameId_" type="button" data-ng-click="launchSlideForm($event, journeySearchForm.originStationNameId, 'origen', 'originStationNameField')"
            data-ng-keypress="launchSlideForm($event, journeySearchForm.originStationNameId, 'origen', 'originStationNameField', 'letter')" aria-label="Origen. Campo obligatorio" title="Pulse para escribir el origen">
            <!-- ngIf: originStationName == '' --><span data-ng-if="originStationName == ''" class="ng-scope">Escribe el origen</span><!-- end ngIf: originStationName == '' -->
            <!-- ngIf: originStationName != '' -->
          </button>
          <input type="hidden" data-ng-model="originStationName" value="" name="originStationNameId" required="" data-same-as="previousOriginName" data-original="originStationName" readonly="readonly" disabled="disabled"
            data-test-id="originStationNameLink" class="ng-pristine ng-invalid ng-invalid-required ng-valid-same-as">
          <div class="error-container ng-hide" data-ng-show="showErrorMessage(journeySearchForm.originStationNameId)">
            <small class="error-message" data-ng-show="journeySearchForm.originStationNameId.$error.required">Campo requerido.</small>
            <small class="error-message ng-hide" data-ng-show="journeySearchForm.originStationNameId.$error.sameAs &amp;&amp; !journeySearchForm.originStationNameId.$error.required">Origen no válido</small>
          </div>
        </div>
        <div class="simula-screen">
          <div class="form-group first animate-show-hide horizontal ng-hide origin" data-ng-show="origen == true" data-click-outside="origen">
            <a class="volver icons" data-ng-click="closeSlideForm($event,'origen','originStationNameField')" data-ng-keypress="closeSlideForm($event,'origen','originStationNameField')" aria-label="Volver" tabindex="0"><span class="origen icn-arrow-left icons-color"></span></a>
            <div class="col-md-12 aller-retour-responsive">
              <div class="responsive-screen">
                <span class="valida-input">
                  <input type="text" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_originStationNameId" name="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_originStationNameId"
                    data-ng-model="originStationName" class="form-control ng-pristine ng-valid ui-autocomplete-input" data-test-id="originStationName" role="textbox" placeholder="Escribe el origen" aria-label="Escribe el origen"
                    data-close-focus="_originStationNameId_" data-focus="originStationNameField" autocomplete="off">
                </span>
              </div>
            </div>
            <a class="cerrar icons visible_992" data-ng-click="closeSlideForm($event,'origen','originStationNameField')" data-ng-keypress="closeSlideForm($event,'origen','originStationNameField')" aria-label="Cerrar Escribe el origen" tabindex="0"><span class="icn-close icons-color"></span></a>
          </div>
        </div>
        <!-- Boton switch entre origen y destino -->
        <a data-ng-click="(journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid || disableSwitchButton)?false:switchStationsForm($event)" data-ng-keypress="(journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid || disableSwitchButton)?false:switchStationsForm($event)" role="link" class="icn-up-down-arrow" data-ng-class="{'disabled': disableSwitchButton}" id="angularSwitchStations" title="Intercambiar origen y destino" tabindex="0" aria-label="Intercambiar origen y destino">
				<span class="ui-hidden-accessible">Intercambiar origen y destino</span>
		</a>
        <!-- Destino -->
        <div class="col-md-12 aller-retour-responsive" id="contenedor-destino">
          <label id="destinationId" for="_destinationStationNameId_">Destino</label>
          <button id="_destinationStationNameId_" type="button" class="destination" data-ng-click="launchSlideForm($event, journeySearchForm.destinationStationNameId, 'destino', 'destinationStationNameField')"
            data-ng-keypress="launchSlideForm($event, journeySearchForm.destinationStationNameId, 'destino', 'destinationStationNameField', 'letter')" data-ng-disabled="journeySearchForm.originStationNameId.$invalid"
            aria-label="Destino. Campo obligatorio" title="Pulse para escribir el destino" disabled="disabled">
            <!-- ngIf: destinationStationName == '' --><span data-ng-if="destinationStationName == ''" class="ng-scope">Escribe el destino</span><!-- end ngIf: destinationStationName == '' -->
            <!-- ngIf: destinationStationName != '' -->
          </button>
          <input type="hidden" data-ng-model="destinationStationName" value="" name="destinationStationNameId" data-test-id="destinationStationNameLink" data-same-as="previousDestinationName" data-original="destinationStationName" readonly="readonly"
            disabled="disabled" required="" class="ng-pristine ng-invalid ng-invalid-required ng-valid-same-as">
          <div class="error-container ng-hide" data-ng-show="showErrorMessage(journeySearchForm.destinationStationNameId) &amp;&amp; journeySearchForm.originStationNameId.$valid">
            <small class="error-message" data-ng-show="journeySearchForm.destinationStationNameId.$error.required">Campo requerido.</small>
            <small class="error-message ng-hide" data-ng-show="journeySearchForm.destinationStationNameId.$error.sameAs &amp;&amp; !journeySearchForm.destinationStationNameId.$error.required">Destino no válido</small>
          </div>
        </div>
        <div class="simula-screen destination-screen">
          <div class="form-group first animate-show-hide horizontal ng-hide destination" data-ng-show="destino == true" data-click-outside="destino">
            <a class="volver icons" data-ng-click="closeSlideForm($event,'destino','destinationStationNameField')" aria-label="Volver"><span class="icn-arrow-left icons-color"></span></a>
            <div class="col-md-12 aller-retour-responsive">
              <div class="responsive-screen">
                <span class="valida-input">
                  <input type="text" placeholder="Escribe el destino" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_destinationStationNameId" class="form-control destinaton-input ng-pristine ng-valid ui-autocomplete-input"
                    data-test-id="destinationStationName" role="textbox" data-ng-model="destinationStationName" aria-label="Escribe el destino" data-close-focus="_destinationStationNameId_" data-focus="destinationStationNameField" autocomplete="off">
                </span>
              </div>
            </div>
            <a class="cerrar icons visible_992" data-ng-click="closeSlideForm($event,'destino','destinationStationNameField')" data-ng-keypress="closeSlideForm($event,'destino','destinationStationNameField')" aria-label="Cerrar Escribe el destino" tabindex="0"><span class="icn-close icons-color"></span></a>
          </div>
        </div>
        <div class="alsaspam" aria-hidden="true">
          <label for="alsaspam">Debes aceptar las condiciones de compra y política de privacidad*</label>
          <input type="checkbox" id="alsaspam" name="alsaspam">
        </div>
        <!-- input hidden originId -->
        <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_originStationId" name="originStationId" data-ng-value="originStationId" value="">
        <!-- input hidden originStationSimplifiedName -->
        <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_originStationSimplifiedName" name="originStationSimplifiedName" data-ng-value="originStationSimplifiedName" value="">
        <!-- input hidden originStationIsMoveliaStop -->
        <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_originStationIsMoveliaStop" name="originStationIsMoveliaStop" data-ng-value="originStationIsMoveliaStop" value="">
        <!-- input hidden destinationId -->
        <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_destinationStationId" name="destinationStationId" data-ng-value="destinationStationId" value="">
        <!-- input hidden destinationStationSimplifiedName -->
        <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_destinationStationSimplifiedName" name="destinationStationSimplifiedName" data-ng-value="destinationStationSimplifiedName" value="">
        <!-- input hidden destinationStationIsMoveliaStop -->
        <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_destinationStationIsMoveliaStop" name="destinationStationIsMoveliaStop" data-ng-value="destinationStationIsMoveliaStop" value="">
      </div>
      <div id="unfoldJourneySearch" data-ng-show="!journeySearchStartsUnfolded &amp;&amp; !journeySearchActuallyUnfolded" class="boton button-blue ng-hide">
        <button data-ng-disabled="journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid" name="unfoldJourneySearchForm" id="unfoldJourneySearchForm" data-test-id="unfoldJourneySearchForm"
          class="unfoldJourneySearchForm" data-ng-click="unfoldJourneySearch($event); launchSlideForm($event, journeySearchForm._departureDate, 'ida', 'departureDateField', 'number');" disabled="disabled">
          <span>Buscar por fechas</span>
        </button>
      </div>
      <div id="secondPartJourneySearchForm" data-ng-show="journeySearchStartsUnfolded || journeySearchActuallyUnfolded" class="">
        <!-- BLOQUE DE FECHAS -->
        <div class="form-group second icn-calendar">
          <div class="ida-vuelta">
            <!-- Fecha de Ida -->
            <div id="containerOutwardDate" class="col-md-6 ida disabled" data-ng-class="{'disabled':journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid}">
              <label for="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_departureDate_bt">Fecha de ida</label>
              <div data-test-id="departureDateLink">
                <button id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_departureDate_bt" type="button" data-ng-disabled="journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid"
                  data-ng-click="(journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid)?false:launchSlideForm($event, journeySearchForm._departureDate, 'ida', 'departureDateField', 'number')"
                  data-ng-keypress="(journeySearchForm.originStationNameId.$invalid || journeySearchForm.destinationStationNameId.$invalid)?false:launchSlideForm($event, journeySearchForm._departureDate, 'ida', 'departureDateField', 'number')"
                  aria-label="Fecha de ida. 23/07/2024" title="Pulse para escribir la fecha de ida" disabled="disabled">
                  <!-- ngIf: departureDate == '' || departureDate == undefined -->
                  <!-- ngIf: departureDate != '' --><span class="icn-angle-down ng-binding ng-scope" data-ng-if="departureDate != ''" data-ng-bind="formatterDateToString(departureDate)">Mar., 23 Jul.</span><!-- end ngIf: departureDate != '' -->
                </button>
                <input class="departureDateNoClick ng-pristine ng-valid hasDatepicker" type="hidden" data-ng-model="departureDate" value="23/07/2024" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_departureDate"
                  name="departureDate" readonly="">
              </div>
              <div class="error-container ng-hide" data-ng-show="(showErrorMessage(journeySearchForm._departureDate) &amp;&amp; journeySearchForm.originStationNameId.$valid &amp;&amp; journeySearchForm.destinationStationNameId.$valid)">
                <small class="error-message ng-hide" data-ng-show="journeySearchForm._departureDate.$error.required">Campo requerido.</small>
                <small class="error-message ng-hide" data-ng-show="journeySearchForm._departureDate.$error.dateformat &amp;&amp; !journeySearchForm._departureDate.$error.required">Formato de fecha incorrecto.</small>
                <small class="error-message ng-hide" data-ng-show="journeySearchForm._departureDate.$error.compareDate &amp;&amp; !journeySearchForm._departureDate.$error.required &amp;&amp; !journeySearchForm._departureDate.$error.dateformat">Fecha
                  anterior a la actual.</small>
              </div>
            </div>
            <div class="simula-screen">
              <div class="form-group second date ida animate-show-hide horizontal ng-hide" data-ng-show="ida == true" data-click-outside="ida">
                <a class="volver icons" data-ng-click="closeSlideForm($event,'ida')" data-ng-keypress="closeSlideForm($event,'ida')" aria-label="Volver" data-test-id="closeDepartureDateMobile" tabindex="0">
				   			<span class="icn-arrow-left icons-color"></span>
				   		</a>
                <div class="ida-vuelta">
                  <div class="responsive-screen">
                    <span class="valida-input">
                      <label for="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890__departureDate_bt">Fecha de ida</label>
                      <input type="text" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890__departureDate_bt" name="_departureDate" data-today="" data-compare-date="" data-original="departureDate"
                        data-ng-disabled="CONSTANTS.RESPONSIVE_768 > windowResolution" placeholder="dd/mm/aaaa" value="23/07/2024" class="form-control ng-pristine ng-valid ng-valid-required ng-valid-compare-date" title="Formato de fecha dd/mm/aaaa"
                        data-date-from="" data-test-id="departureDate" data-date-to="" data-ng-model="departureDate" required="" data-close-focus="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_departureDate_bt"
                        data-focus="departureDateField" autocomplete="off">
                    </span>
                  </div>
                </div>
                <!-- ngIf: ida == true -->
              </div>
            </div>
            <!-- Fecha de Vuelta -->
            <div class="col-md-6 returnDate disabled" id="containerReturnDate"
              data-ng-class="{'disabled':journeySearchForm.originStationNameId.$invalid || journeySearchForm._departureDate.$invalid || journeySearchForm.destinationStationNameId.$invalid || blockTrain || mustDestinationReturnOnSameDate, 'train':blockTrain}">
              <!-- vuelta -->
              <!-- ngIf: !search.travelType.open_return -->
              <div data-ng-if="!search.travelType.open_return" class="ng-scope">
                <label for="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890__returnDate_bt">Fecha de vuelta</label>
                <button id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890__returnDate_bt" tabindex="-1" type="button" class="add-return"
                  data-ng-disabled="journeySearchForm.originStationNameId.$invalid || journeySearchForm.departureDate.$invalid || journeySearchForm.destinationStationNameId.$invalid || blockTrain || disabled || mustDestinationReturnOnSameDate"
                  data-ng-click="(journeySearchForm.originStationNameId.$invalid || journeySearchForm._departureDate.$invalid || journeySearchForm.destinationStationNameId.$invalid || blockTrain || mustDestinationReturnOnSameDate)?false:launchOpenReturn($event, 'journeySearchForm','_returnDate', 'vuelta', 'returnDateField')"
                  data-ng-keydown="(journeySearchForm.originStationNameId.$invalid || journeySearchForm._departureDate.$invalid || journeySearchForm.destinationStationNameId.$invalid || blockTrain || mustDestinationReturnOnSameDate)?false:launchOpenReturn($event, 'journeySearchForm','_returnDate', 'vuelta', 'returnDateField', 'number')"
                  data-test-id="returnDateLink" aria-label="Fecha de vuelta. " title="Pulse para escribir la fecha de vuelta" disabled="disabled">
                  <!-- ngIf: returnDate == '' || returnDate == undefined --><span data-ng-if="returnDate == '' || returnDate == undefined" class="ng-scope">Añadir vuelta</span><!-- end ngIf: returnDate == '' || returnDate == undefined -->
                  <!-- ngIf: returnDate != '' -->
                </button>
              </div><!-- end ngIf: !search.travelType.open_return -->
              <!-- vuelta abierta -->
              <!-- ngIf: search.travelType.open_return -->
              <!-- "aspa" para borrar la fecha de vuelta -->
              <!-- ngIf: journeySearchForm._departureDate.$valid && journeySearchForm.originStationNameId.$valid && journeySearchForm.destinationStationNameId.$valid && !search.travelType.outward && returnDate != undefined && !mustDestinationReturnOnSameDate -->
              <input data-ng-model="returnDate" type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890__returnDate" name="returnDate" value="" data-date-from="" data-date-to="" readonly=""
                class="ng-pristine ng-valid hasDatepicker">
              <div class="error-container ng-hide" data-ng-show="(showErrorMessage(journeySearchForm._returnDate) &amp;&amp; (journeySearchForm._departureDate.$valid &amp;&amp; journeySearchForm.destinationStationNameId.$valid)
						&amp;&amp; (!$scope.search.travelType.open_return &amp;&amp; !$scope.search.travelType.outward))">
                <small class="error-message ng-hide" data-ng-show="journeySearchForm._returnDate.$error.required">Campo requerido.</small>
                <small class="error-message ng-hide" data-ng-show="journeySearchForm._returnDate.$error.dateformat &amp;&amp; !journeySearchForm._returnDate.$error.required">Formato de fecha incorrecto.</small>
                <small class="error-message ng-hide" data-ng-show="journeySearchForm._returnDate.$error.compareDate &amp;&amp; !journeySearchForm._returnDate.$error.required &amp;&amp; !journeySearchForm._returnDate.$error.dateformat">Fecha anterior
                  a la de salida.</small>
              </div>
            </div>
            <div class="simula-screen">
              <div class="form-group second date animate-show-hide horizontal ng-hide responsive-screen return" data-ng-show="vuelta == true" data-click-outside="vuelta">
                <a class="volver icons" data-ng-click="closeSlideForm($event,'vuelta')" data-ng-keypress="closeSlideForm($event,'vuelta')" aria-label="Volver" data-test-id="closeReturnDateMobile" tabindex="0"><span class="icn-arrow-left icons-color"></span></a>
                <div class="ida-vuelta">
                  <div class="close-date">
                    <span class="valida-input">
                      <label for="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_returnDate">Fecha de vuelta</label>
                      <input data-ng-model="returnDate" title="Formato de fecha dd/mm/aaaa" placeholder="dd/mm/aaaa" data-dateformat="returnDate" aria-label="Fecha de vuelta" data-ng-disabled="CONSTANTS.RESPONSIVE_768 > windowResolution" type="text"
                        id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_returnDate" data-compare-date="23/07/2024" data-original="returnDate" name="_returnDate" value="" data-test-id="returnDate"
                        class="form-control ng-pristine ng-valid-compare-date ng-valid ng-valid-required" data-date-from="" data-date-to="" data-ng-required="search.travelType.value == 'RETURN'" aria-hidden="true"
                        data-close-focus="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890__returnDate" data-focus="returnDateField" autocomplete="off">
                    </span>
                  </div>
                </div>
                <!-- ngIf: vuelta == true -->
              </div>
            </div>
          </div>
        </div>
        <!-- FIN BLOQUE DE FECHAS -->
        <div class="absolute-and-flex">
          <div class="form-group second bloquePassengersResponsive icn-seat">
            <div class="passengers iosFixed">
              <a class="numPassengers" title="Pasajeros" data-ng-click="togglePassengers($event)" data-ng-keypress="togglePassengers($event)" tabindex="0" aria-label="Pasajeros: 1 Adulto (De 26 a 59 años)" data-test-id="numTotalPassengers" role="button">

						<label>Pasajeros</label>

						<span role="region" aria-live="polite" id="passengersDescription" class="num ng-binding" data-ng-bind="getDescriptionPassengerType()">1 Adulto (De 26 a 59 años)</span>
						<span class="icn-angle-down hidden-xs hidden-sm"></span>
						<span class="icn-angle-down hidden-md hidden-lg"></span>
					</a>
              <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_locationMode" name="locationMode" value="">
              <div class="error-container ng-hide" data-ng-show="journeySearchForm.numPassengers.$error.isZero">
                <small class="error-message ng-hide" data-ng-show="journeySearchForm.numPassengers.$error.isZero">Campo requerido.</small>
              </div>
            </div>
            <div class="simula-screen">
              <div class="form-group second bloquePassengersResponsive animate-show-hide horizontal ng-hide responsive-screen" data-ng-show="passengerOn == true" data-click-outside="paxNum" data-test-id="passengerInputsContainer">
                <div class="form-group row" id="passengersListInputs" tabindex="0" style="visibility: visible;">
                  <!-- ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible -->
                  <div class="passenger-type ng-scope" data-ng-repeat="passengerType in passengerTypes track by $index" data-on-finish-render="ngRepeatFinished" data-ng-init="paxIndex = $index" data-ng-if="passengerType.isVisible">
                    <data-sag-alsa-pax-types pax-type="passengerType.passengerType" pax-name="passengerType.passengerNameJourneySearch" pax-age="passengerType.age" pax-comment="passengerType.passengerComment" pax-is-adult="passengerType.isAdult"
                      pax-last-amount="passengerType.lastAmount" pax-list-index="$index" initial-root-passengers="initialPassengers" pax-constraints="" class="ng-isolate-scope">
                      <div class="pax-container" data-test-id="passengerType-row" id="JourneySearchPaxType_1" data-test-passenger-type="1">
                        <div class="col-xs-12 col-md-12 passenger d-flex align-items-center">
                          <div class="passenger-cal d-flex justify-content-between align-items-center">
                            <!-- ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: (numPaxType>0 && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) --><a href="#" data-ng-if="(numPaxType>0 &amp;&amp; ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) &amp;&amp; paxType=='3') || (paxType!='3') ) )" data-ng-click="subsPax($event)" data-ng-keypress="subsPax($event)" data-ng-keydown="keyboardController($event);" aria-label="Eliminar un Adultos" data-test-id="subsPassenger" class="simula-less-active icn-minus ng-scope" tabindex="0" role="button" aria-hidden="false"></a><!-- end ngIf: (numPaxType>0 && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                            <div class="passengerTypeNum ng-binding" data-ng-class="{'zero':numPaxType==0}" data-test-id="numPassengers" aria-controls="passengersDescription">1</div>
                            <!-- ngIf: ($root.paxTotalNum>=maxPassengers || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) --><a href="#" data-ng-if="($root.paxTotalNum<maxPassengers &amp;&amp; ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) &amp;&amp; paxType=='3') || (paxType!='3') ) )" tabindex="0" data-ng-click="addPax($event)" data-ng-keypress="addPax($event)" data-ng-keydown="keyboardController($event);" aria-label="Añadir un Adultos" data-test-id="addPassenger" class="simula-more-active icn-plus ng-scope" role="button" aria-hidden="false"></a><!-- end ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                          </div>
                          <div class="passenger-text">
                            <label for="<portlet:namespace/>passengerType-1" class="ng-binding">Adultos</label>
                            <div class="passengerComment ng-binding" id="passengerComment_1">De 26 a 59 años</div>
                            <!-- 		<div class="passengerComment" id="passengerCommentInfo_{{paxType}}"></div> -->
                            <input type="hidden" class="input-mini form-control" name="passengerType-1" id="<portlet:namespace/>passengerType-1" value="1" data-adult="true" data-test-id="passengerType-1" title="Pasajeros de tipo Adultos. ">
                          </div>
                        </div>
                      </div>
                    </data-sag-alsa-pax-types>
                  </div><!-- end ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible -->
                  <div class="passenger-type ng-scope" data-ng-repeat="passengerType in passengerTypes track by $index" data-on-finish-render="ngRepeatFinished" data-ng-init="paxIndex = $index" data-ng-if="passengerType.isVisible">
                    <data-sag-alsa-pax-types pax-type="passengerType.passengerType" pax-name="passengerType.passengerNameJourneySearch" pax-age="passengerType.age" pax-comment="passengerType.passengerComment" pax-is-adult="passengerType.isAdult"
                      pax-last-amount="passengerType.lastAmount" pax-list-index="$index" initial-root-passengers="initialPassengers" pax-constraints="" class="ng-isolate-scope">
                      <div class="pax-container" data-test-id="passengerType-row" id="JourneySearchPaxType_4" data-test-passenger-type="4">
                        <div class="col-xs-12 col-md-12 passenger d-flex align-items-center">
                          <div class="passenger-cal d-flex justify-content-between align-items-center">
                            <!-- ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) --><i data-ng-if="( numPaxType<=0  || (($root.paxTotalAdults<=0 &amp;&amp; $root.paxTotalYoung<=0 &amp;&amp; $root.paxTotalSenior<=0) &amp;&amp; paxType=='3') )" title="Eliminar un Jóvenes" tabindex="-1" data-test-id="subsPassenger" class="simula-less icn-minus ng-scope" aria-hidden="true"></i><!-- end ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: (numPaxType>0 && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                            <div class="passengerTypeNum ng-binding zero" data-ng-class="{'zero':numPaxType==0}" data-test-id="numPassengers" aria-controls="passengersDescription">0</div>
                            <!-- ngIf: ($root.paxTotalNum>=maxPassengers || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) --><a href="#" data-ng-if="($root.paxTotalNum<maxPassengers &amp;&amp; ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) &amp;&amp; paxType=='3') || (paxType!='3') ) )" tabindex="0" data-ng-click="addPax($event)" data-ng-keypress="addPax($event)" data-ng-keydown="keyboardController($event);" aria-label="Añadir un Jóvenes" data-test-id="addPassenger" class="simula-more-active icn-plus ng-scope" role="button" aria-hidden="false"></a><!-- end ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                          </div>
                          <div class="passenger-text">
                            <label for="<portlet:namespace/>passengerType-4" class="ng-binding">Jóvenes</label>
                            <div class="passengerComment ng-binding" id="passengerComment_4">De 12 a 25 años</div>
                            <!-- 		<div class="passengerComment" id="passengerCommentInfo_{{paxType}}"></div> -->
                            <input type="hidden" class="input-mini form-control" name="passengerType-4" id="<portlet:namespace/>passengerType-4" value="0" data-adult="true" data-test-id="passengerType-4" title="Pasajeros de tipo Jóvenes. ">
                          </div>
                        </div>
                      </div>
                    </data-sag-alsa-pax-types>
                  </div><!-- end ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible -->
                  <div class="passenger-type ng-scope" data-ng-repeat="passengerType in passengerTypes track by $index" data-on-finish-render="ngRepeatFinished" data-ng-init="paxIndex = $index" data-ng-if="passengerType.isVisible">
                    <data-sag-alsa-pax-types pax-type="passengerType.passengerType" pax-name="passengerType.passengerNameJourneySearch" pax-age="passengerType.age" pax-comment="passengerType.passengerComment" pax-is-adult="passengerType.isAdult"
                      pax-last-amount="passengerType.lastAmount" pax-list-index="$index" initial-root-passengers="initialPassengers" pax-constraints="" class="ng-isolate-scope">
                      <div class="pax-container" data-test-id="passengerType-row" id="JourneySearchPaxType_5" data-test-passenger-type="5">
                        <div class="col-xs-12 col-md-12 passenger d-flex align-items-center">
                          <div class="passenger-cal d-flex justify-content-between align-items-center">
                            <!-- ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) --><i data-ng-if="( numPaxType<=0  || (($root.paxTotalAdults<=0 &amp;&amp; $root.paxTotalYoung<=0 &amp;&amp; $root.paxTotalSenior<=0) &amp;&amp; paxType=='3') )" title="Eliminar un Mayores" tabindex="-1" data-test-id="subsPassenger" class="simula-less icn-minus ng-scope" aria-hidden="true"></i><!-- end ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: (numPaxType>0 && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                            <div class="passengerTypeNum ng-binding zero" data-ng-class="{'zero':numPaxType==0}" data-test-id="numPassengers" aria-controls="passengersDescription">0</div>
                            <!-- ngIf: ($root.paxTotalNum>=maxPassengers || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) --><a href="#" data-ng-if="($root.paxTotalNum<maxPassengers &amp;&amp; ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) &amp;&amp; paxType=='3') || (paxType!='3') ) )" tabindex="0" data-ng-click="addPax($event)" data-ng-keypress="addPax($event)" data-ng-keydown="keyboardController($event);" aria-label="Añadir un Mayores" data-test-id="addPassenger" class="simula-more-active icn-plus ng-scope" role="button" aria-hidden="false"></a><!-- end ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                          </div>
                          <div class="passenger-text">
                            <label for="<portlet:namespace/>passengerType-5" class="ng-binding">Mayores</label>
                            <div class="passengerComment ng-binding" id="passengerComment_5">Más de 60 años</div>
                            <!-- 		<div class="passengerComment" id="passengerCommentInfo_{{paxType}}"></div> -->
                            <input type="hidden" class="input-mini form-control" name="passengerType-5" id="<portlet:namespace/>passengerType-5" value="0" data-adult="true" data-test-id="passengerType-5" title="Pasajeros de tipo Mayores. ">
                          </div>
                        </div>
                      </div>
                    </data-sag-alsa-pax-types>
                  </div><!-- end ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible -->
                  <div class="passenger-type ng-scope" data-ng-repeat="passengerType in passengerTypes track by $index" data-on-finish-render="ngRepeatFinished" data-ng-init="paxIndex = $index" data-ng-if="passengerType.isVisible">
                    <data-sag-alsa-pax-types pax-type="passengerType.passengerType" pax-name="passengerType.passengerNameJourneySearch" pax-age="passengerType.age" pax-comment="passengerType.passengerComment" pax-is-adult="passengerType.isAdult"
                      pax-last-amount="passengerType.lastAmount" pax-list-index="$index" initial-root-passengers="initialPassengers" pax-constraints="" class="ng-isolate-scope">
                      <div class="pax-container" data-test-id="passengerType-row" id="JourneySearchPaxType_2" data-test-passenger-type="2">
                        <div class="col-xs-12 col-md-12 passenger d-flex align-items-center">
                          <div class="passenger-cal d-flex justify-content-between align-items-center">
                            <!-- ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) --><i data-ng-if="( numPaxType<=0  || (($root.paxTotalAdults<=0 &amp;&amp; $root.paxTotalYoung<=0 &amp;&amp; $root.paxTotalSenior<=0) &amp;&amp; paxType=='3') )" title="Eliminar un Niños" tabindex="-1" data-test-id="subsPassenger" class="simula-less icn-minus ng-scope" aria-hidden="true"></i><!-- end ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: (numPaxType>0 && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                            <div class="passengerTypeNum ng-binding zero" data-ng-class="{'zero':numPaxType==0}" data-test-id="numPassengers" aria-controls="passengersDescription">0</div>
                            <!-- ngIf: ($root.paxTotalNum>=maxPassengers || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) --><a href="#" data-ng-if="($root.paxTotalNum<maxPassengers &amp;&amp; ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) &amp;&amp; paxType=='3') || (paxType!='3') ) )" tabindex="0" data-ng-click="addPax($event)" data-ng-keypress="addPax($event)" data-ng-keydown="keyboardController($event);" aria-label="Añadir un Niños" data-test-id="addPassenger" class="simula-more-active icn-plus ng-scope" role="button" aria-hidden="false"></a><!-- end ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                          </div>
                          <div class="passenger-text">
                            <label for="<portlet:namespace/>passengerType-2" class="ng-binding">Niños</label>
                            <div class="passengerComment ng-binding" id="passengerComment_2">De 4 a 11 años</div>
                            <!-- 		<div class="passengerComment" id="passengerCommentInfo_{{paxType}}"></div> -->
                            <input type="hidden" class="input-mini form-control" name="passengerType-2" id="<portlet:namespace/>passengerType-2" value="0" data-adult="false" data-test-id="passengerType-2" title="Pasajeros de tipo Niños. ">
                          </div>
                        </div>
                      </div>
                    </data-sag-alsa-pax-types>
                  </div><!-- end ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible -->
                  <div class="passenger-type ng-scope" data-ng-repeat="passengerType in passengerTypes track by $index" data-on-finish-render="ngRepeatFinished" data-ng-init="paxIndex = $index" data-ng-if="passengerType.isVisible">
                    <data-sag-alsa-pax-types pax-type="passengerType.passengerType" pax-name="passengerType.passengerNameJourneySearch" pax-age="passengerType.age" pax-comment="passengerType.passengerComment" pax-is-adult="passengerType.isAdult"
                      pax-last-amount="passengerType.lastAmount" pax-list-index="$index" initial-root-passengers="initialPassengers" pax-constraints="" class="ng-isolate-scope">
                      <div class="pax-container" data-test-id="passengerType-row" id="JourneySearchPaxType_3" data-test-passenger-type="3">
                        <div class="col-xs-12 col-md-12 passenger d-flex align-items-center">
                          <div class="passenger-cal d-flex justify-content-between align-items-center">
                            <!-- ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) --><i data-ng-if="( numPaxType<=0  || (($root.paxTotalAdults<=0 &amp;&amp; $root.paxTotalYoung<=0 &amp;&amp; $root.paxTotalSenior<=0) &amp;&amp; paxType=='3') )" title="Eliminar un Bebés" tabindex="-1" data-test-id="subsPassenger" class="simula-less icn-minus ng-scope" aria-hidden="true"></i><!-- end ngIf: ( numPaxType<=0  || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: (numPaxType>0 && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                            <div class="passengerTypeNum ng-binding zero" data-ng-class="{'zero':numPaxType==0}" data-test-id="numPassengers" aria-controls="passengersDescription">0</div>
                            <!-- ngIf: ($root.paxTotalNum>=maxPassengers || (($root.paxTotalAdults<=0 && $root.paxTotalYoung<=0 && $root.paxTotalSenior<=0) && paxType=='3') ) -->
                            <!-- ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) --><a href="#" data-ng-if="($root.paxTotalNum<maxPassengers &amp;&amp; ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) &amp;&amp; paxType=='3') || (paxType!='3') ) )" tabindex="0" data-ng-click="addPax($event)" data-ng-keypress="addPax($event)" data-ng-keydown="keyboardController($event);" aria-label="Añadir un Bebés" data-test-id="addPassenger" class="simula-more-active icn-plus ng-scope" role="button" aria-hidden="false"></a><!-- end ngIf: ($root.paxTotalNum<maxPassengers && ((($root.paxTotalAdults>0||$root.paxTotalYoung>0||$root.paxTotalSenior>0) && paxType=='3') || (paxType!='3') ) ) -->
                          </div>
                          <div class="passenger-text">
                            <label for="<portlet:namespace/>passengerType-3" class="ng-binding">Bebés</label>
                            <div class="passengerComment ng-binding" id="passengerComment_3">Hasta los 3 años</div>
                            <!-- 		<div class="passengerComment" id="passengerCommentInfo_{{paxType}}"></div> -->
                            <input type="hidden" class="input-mini form-control" name="passengerType-3" id="<portlet:namespace/>passengerType-3" value="0" data-adult="false" data-test-id="passengerType-3" title="Pasajeros de tipo Bebés. ">
                          </div>
                        </div>
                      </div>
                    </data-sag-alsa-pax-types>
                  </div>
                  <!-- end ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index --><!-- ngIf: passengerType.isVisible --><!-- end ngRepeat: passengerType in passengerTypes track by $index -->
                  <div class="passengers-buttons">
                    <a class="icons-color" data-ng-click="closePassengers($event);" data-ng-keypress="closePassengers($event);" tabindex="0" data-test-id="closePassengersLink">
									Aceptar
								</a>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <!-- ngIf: youngPromoActive -->
          <div data-ng-if="youngPromoActive" class="c-journeysearch-check-young ng-scope">
            <input type="checkbox" id="checkYoungPromoCode" data-ng-model="checkYoungPromoCode" data-ng-change="clickCheckYoungPromoCode(checkYoungPromoCode)" class="ng-pristine ng-valid">
            <label for="checkYoungPromoCode">Verano Joven 2024 (18-30 años)</label>
          </div><!-- end ngIf: youngPromoActive -->
          <!-- ngIf: windowResolution >= CONSTANTS.RESPONSIVE_992 -->
          <div data-ng-if="windowResolution >= CONSTANTS.RESPONSIVE_992" class="visible_992 form-group second bloque-check-combinations-responsive ng-scope">
            <input id="check-all-combinations-desktop" type="checkbox" name="checkAllCombinations">
            <label for="check-all-combinations-desktop" class="checkbox-altocontraste"> Todas las combinaciones </label>
          </div><!-- end ngIf: windowResolution >= CONSTANTS.RESPONSIVE_992 -->
          <div data-ng-show="journeySearchStartsUnfolded || journeySearchActuallyUnfolded" class="">
            <script type="text/javascript">
              params["AjaxPreLoadVoucherURL"] =
                'https://www2.alsaferrol.es/web/bus/home?p_p_id=JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxPreLoadVoucher&p_p_cacheability=cacheLevelPage';
              params["AjaxPreLoadVoucherDeleteURL"] =
                'https://www2.alsaferrol.es/web/bus/home?p_p_id=JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxPreLoadVoucherDelete&p_p_cacheability=cacheLevelPage';
              params["ajaxCheckYoungPromoCode"] =
                'https://www2.alsaferrol.es/web/bus/home?p_p_id=JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxCheckYoungPromoCode&p_p_cacheability=cacheLevelPage';;
              params["promoCodeAppliedTitle"] = 'BONO APLICADO:';
              i18n.addTranslation('zzz04.busplus.promocode.preloadvoucher', 'BONO APLICADO:');
              i18n.addTranslation('zzzz04.journey-search.modal-pass.tooltip.preload', '¡Hemos cargado tu bono!');
              params["digitalVoucher"] = false;
            </script>
            <div class="promo-code">
              <!-- Modal youngPromoCodeModal -->
              <div class="sag-modal sag-modal--youngPromo fade" id="youngPromoCodeModal" role="dialog">
                <div class="sag-modal-dialog">
                  <div class="sag-modal-header">
                    <button type="button" class="close" data-dismiss="modal" data-ng-click="unCheckYoungPromoCode()"><span aria-hidden="true"></span><span class="sr-only">form.modal.close</span></button>
                    <h2>Verano Joven 2024</h2>
                  </div>
                  <div class="sag-modal-content">
                    <div class="sag-modal-body" id="youngPromoCodeModal-desc">
                      <div class="row">
                        <div class="col-xs-12">
                          <p class="mb-0 text-left">Introduce tu código de registro</p>
                          <div class="form-group">
                            <input id="youngPromoCode" class="form-control input--not-label ng-pristine ng-valid" name="youngPromoCode" type="text" placeholder="JV24-XXXXXXXXX-XXXXX" data-ng-model="youngPromoCode" data-ng-init="youngPromoCodeInit()"
                              maxlength="20">
                          </div>
                          <p>Si no estás dado de alta recuerda que es imprescindible que te registres en <a href="https://veranojoven.transportes.gob.es/" target="_blank">veranojoven.transportes.gob.es</a></p>
                          <p><a href="https://veranojoven.transportes.gob.es/" target="_blank">No recuerdo mi código</a></p>
                        </div>
                      </div>
                    </div>
                    <div class="sag-modal-footer">
                      <button type="button" class="btn btn-primary btn-primary-bck" data-ng-click="youngPromoCodeModalAccept()">Aceptar</button>
                    </div>
                  </div><!-- /.modal-content -->
                </div><!-- /.modal-dialog -->
              </div><!-- /.modal -->
              <!-- Modal youngPromoCodeErrorModal -->
              <div class="sag-modal sag-modal--youngPromo fade" id="youngPromoCodeErrorModal" role="dialog">
                <div class="sag-modal-dialog">
                  <div class="sag-modal-header">
                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">form.modal.close</span></button>
                    <h2>Verano Joven 2024</h2>
                  </div>
                  <div class="sag-modal-content">
                    <div class="sag-modal-body" id="youngPromoCodeErrorModal-desc">
                      <div class="row">
                        <div class="col-xs-12">
                          <!-- ngIf: !youngPromoCodeErrorModalMsg -->
                          <p data-ng-if="!youngPromoCodeErrorModalMsg" class="ng-scope">¡Parece que no estás registrado!</p><!-- end ngIf: !youngPromoCodeErrorModalMsg -->
                          <!-- ngIf: !youngPromoCodeErrorModalMsg -->
                          <p data-ng-if="!youngPromoCodeErrorModalMsg" class="ng-scope">Recuerda que es imprescindible que te des de alta en <a href="https://veranojoven.transportes.gob.es/" target="_blank">veranojoven.transportes.gob.es</a> para
                            acceder al descuento.</p><!-- end ngIf: !youngPromoCodeErrorModalMsg -->
                          <!-- ngIf: youngPromoCodeErrorModalMsg -->
                        </div>
                      </div>
                    </div>
                    <div class="sag-modal-footer">
                      <button type="button" class="btn btn-primary btn-primary-bck" data-dismiss="modal">Aceptar</button>
                    </div>
                  </div><!-- /.modal-content -->
                </div><!-- /.modal-dialog -->
              </div><!-- /.modal -->
              <!--  popup para pedir si se quiere cargar bono -->
              <!-- Código promocional/bono cargado en home y paso 1 en desktop y mobile -->
              <!-- Bono cargado desde pop up -->
              <div class="form-group" id="promoCodeFieldset" style="display: none;">
                <p class="promotional-code">
                  <!-- ngIf: isBusnavidad -->
                  <!-- ngIf: !isBusnavidad --><span data-ng-if="!isBusnavidad" class="ng-scope">Código promocional/Bonos:</span><!-- end ngIf: !isBusnavidad -->
                </p>
                <span id="promoCodeLabel" class="promoCodeFieldsetCode" data-test-id="promoCodeLabel"></span>
                <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_promoCode" name="promoCode" value="">
                <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_jsonAlsaPassPassenger" name="jsonAlsaPassPassenger" value="">
                <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_jsonVoucherPassenger" name="jsonVoucherPassenger" value="">
                <a href="#" id="promoCodeClear" class="icn-close" data-ref="promoCodeLabel" data-ref-code="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_promoCode" data-ref-alsapass-passenger="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_jsonAlsaPassPassenger" data-ref-voucher-passenger="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_jsonVoucherPassenger">
					<span class="ui-hidden-accessible">Borrar</span>
				</a>
                <!-- TOOLTIP CUANDO SE CARGA EL BONO DESDE EL SÍ DEL POPUP-->
                <div id="tooltipPromoCode" class="tooltip bottom tooltip--alsa" role="tooltip" style="opacity: 1;display: none;">
                  <div class="tooltip-arrow"></div>
                  <span class="tooltip-inner">¡Hemos cargado tu bono!</span>
                </div>
              </div>
              <!--  Carga inicial home. Texto de codigo promocional para abrir input en home mobile, home desktop y paso 1 -->
              <!-- Se descarga un código/bono con el aspa de cierre en la home y en el paso 1 con el aspa de cierre-->
              <a href="#" role="button" id="promoCodeWindow" data-ref="promoCodeForm" data-url="" class="icn-discount-bg c-promo-code__link" data-test-id="promoCodeLink">
				<!-- ngIf: isBusnavidad -->
				<!-- ngIf: !isBusnavidad --><span data-ng-if="!isBusnavidad" class="ng-scope">Código promocional/Bonos</span><!-- end ngIf: !isBusnavidad -->
			</a>
              <!--  input donde meter codigo promocional en home, mobile y paso 1 de compra -->
              <div id="promoCodeForm" style="display: none;">
                <label for="promoCode">
                  <!-- ngIf: isBusnavidad -->
                  <!-- ngIf: !isBusnavidad --><span data-ng-if="!isBusnavidad" class="ng-scope">Código promocional/Bonos</span><!-- end ngIf: !isBusnavidad -->
                </label>
                <div class="input-wrapper">
                  <!-- ngIf: !isBusnavidad --><input type="text" id="promoCode" data-ng-if="!isBusnavidad" placeholder="Código / Bono" data-test-id="promoCodeInput" value="" class="ng-scope"><!-- end ngIf: !isBusnavidad -->
                  <!-- ngIf: isBusnavidad -->
                  <a href="#" class="icn-close" onclick="hidePromoCode()"><span class="ui-hidden-accessible">Borrar</span></a>
                </div>
                <a href="#" id="promoCodeChecker" class="promo-code-checker-display" data-ref="promoCode" data-fieldset="promoCodeFieldset" data-test-id="promoCodeCheckLink" role="button">
			Comprobar
		</a>
              </div>
            </div>
          </div>
        </div>
      </div>
      <input type="hidden" data-is-zero="$root.paxTotalNum" data-ng-model="$root.paxTotalNum" data-ng-value="$root.paxTotalNum" name="numPassengers" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_numPassengers"
        class="ng-pristine ng-valid ng-valid-is-zero" value="1">
      <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_regionalZone" name="regionalZone" value="">
      <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_travelType" name="travelType" data-ng-value="search.travelType.value" value="OUTWARD">
      <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_LIFERAY_SHARED_isTrainTrip" name="LIFERAY_SHARED_isTrainTrip" data-ng-value="false" value="false">
      <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_LIFERAY_SHARED_isRoundTrip" name="LIFERAY_SHARED_isRoundTrip" data-ng-value="false" value="false">
      <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_LIFERAY_SHARED_isShipTrip" name="LIFERAY_SHARED_isShipTrip" data-ng-value="false" value="false">
      <input type="hidden" id="_JourneySearchPortlet_WAR_Alsaportlet_INSTANCE_JourneySearch_21651890_LIFERAY_SHARED_destinationStationIdIcon" name="LIFERAY_SHARED_destinationStationIdIcon" data-ng-value="">
    </div>
    <!-- ngIf: windowResolution < CONSTANTS.RESPONSIVE_992 -->
    <div id="btSearchDiv" class="boton button-blue" data-ng-show="journeySearchStartsUnfolded || journeySearchActuallyUnfolded">
      <input data-ng-disabled="journeySearchForm.$invalid || journeyNotAvailableNow" data-ng-click="manageSubmit($event)" type="button" name="journeySearchFormButtonjs" value="Buscar" id="journeySearchFormButtonjs" data-test-id="submitBtn"
        disabled="disabled">
    </div>
    <div id="journeySearchIntro" class="intro" style="display: none;"></div>
    <div class="promo-code-error" style="display: none">Código promocional incorrecto: {0}</div>
  </div>
  <div class="sag-modal fade" id="promoCodeModal" aria-labelledby="promoCodeModal-title" aria-describedby="promoCodeModal-desc" tabindex="-1" role="dialog" data-test-id="promoCodeModal">
    <div class="sag-modal-dialog">
      <div class="sag-modal-header">
        <button type="button" aria-label="Cerrar" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">Cerrar</span></button>
        <h2 id="promoCodeModal-title" class="sag-modal-title">Código promocional/Bonos</h2>
      </div>
      <div class="sag-modal-content">
        <div class="sag-modal-body" id="promoCodeModal-desc" data-test-id="modalMsg"> Código promocional incorrecto: {0} </div>
        <div class="sag-modal-footer">
          <button type="button" class="btn btn-primary" data-dismiss="modal" data-test-id="modalDismissBtn">Cerrar</button>
        </div>
      </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
  </div><!-- /.modal -->
  <div class="sag-modal fade" id="promoCodeQModal" aria-labelledby="promoCodeQModal-title" aria-describedby="promoCodeQModal-desc" tabindex="-1" role="dialog" data-test-id="promoCodeQModal">
    <div class="sag-modal-dialog">
      <div class="sag-modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">Cerrar</span></button>
        <h2 id="promoCodeQModal-title" class="sag-modal-title">Código promocional/Bonos</h2>
      </div>
      <div class="sag-modal-content">
        <div class="sag-modal-body" id="promoCodeQModal-desc">
        </div>
        <div class="sag-modal-footer">
          <button type="button" id="cancelQModal" class="btn btn-primary" data-dismiss="modal" data-test-id="modalDismissBtn"> Cerrar </button>
          <button type="button" id="okQModal" class="btn btn-primary" data-test-id="modalAcceptBtn"> Aceptar <i id="okSpinner" class="fa fa-spinner fa-spin fa-lg hidden-spin" data-test-id="loadingInProgress"></i>
          </button>
        </div>
      </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
  </div><!-- /.modal -->
  <div class="sag-modal fade" id="maxPassengersModal" aria-labelledby="maxPassengersModal-title" aria-describedby="maxPassengersModal-desc" role="dialog" tabindex="-1">
    <div class="sag-modal-dialog">
      <div class="sag-modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">Cerrar</span></button>
        <h2 id="maxPassengersModal-title" class="sag-modal-title">Información</h2>
      </div>
      <div class="sag-modal-content">
        <div class="sag-modal-body" id="maxPassengersModal-desc"> Has alcanzado el número máximo de pasajeros para una sola reserva </div>
        <div class="sag-modal-footer">
          <button type="button" class="btn btn-primary" data-dismiss="modal">Cerrar</button>
        </div>
      </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
  </div><!-- /.modal -->
  <div class="sag-modal fade" id="journeySearchModal" aria-labelledby="journeySearchModal-title" aria-describedby="journeySearchModal-desc" role="dialog" tabindex="-1">
    <div class="sag-modal-dialog">
      <div class="sag-modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">Cerrar</span></button>
        <h2 id="journeySearchModal-title" class="sag-modal-title">Datos incorrectos o incompletos</h2>
      </div>
      <div class="sag-modal-content">
        <div class="sag-modal-body" id="journeySearchModal-desc">
        </div>
        <div class="sag-modal-footer">
          <button type="button" class="btn btn-primary" data-dismiss="modal">Cerrar</button>
        </div>
      </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
  </div><!-- /.modal -->
</form>

Name: hrefFmPOST #

<form action="#" aria-hidden="true" class="hide" id="hrefFm" method="post" name="hrefFm"><span></span><input hidden="" type="submit"></form>

Text Content

En Alsa utilizamos cookies, propias y de terceros, para mejorar la experiencia
de usuario y mejorar nuestros servicios mediante el análisis anónimo de los
hábitos de navegación. Al pulsar en «Aceptar y Cerrar», consientes la colocación
de estas cookies. Pulsa el botón «Más información» para cambiar tus
preferencias. Ver socios Para obtener más información sobre las cookies, lee la
política de cookies de Alsa.
Con tu consentimiento, nosotros y nuestros 2 socios usamos cookies o tecnologías
similares para almacenar, acceder y procesar datos personales, como tus visitas
a esta página web, las direcciones IP y los identificadores de cookies. Algunos
socios no te piden consentimiento para procesar tus datos y se amparan en su
legítimo interés comercial. Puedes retirar tu consentimiento u oponerte al
procesamiento de datos según el interés legítimo en cualquier momento haciendo
clic en ''Obtener más información'' o en la política de privacidad de esta
página web.

Nosotros y nuestros socios hacemos el siguiente tratamiento de datos:Almacenar
la información en un dispositivo y/o acceder a ella , Analítica y medición,
Publicidad y contenido personalizados, medición de publicidad y contenido,
investigación de audiencia y desarrollo de servicios

Más información →Rechazar y cerrarAceptar y cerrar



CAMBIO DE LENGUAJE

Español
Català
Français
Galego
English
Italiano
Portugues
Euskara
Deutsch
Aceptar
 * Español
    * Català
    * Français
    * Galego
    * English
    * Italiano
    * Portugues
    * Euskara
    * Deutsch
   
   Español
 * Atención al cliente
 * Alsa Empresas

 * Alsa Empresas
 * Inicia Sesión
   
   
   ACCESO
   
   Cerrar
   
   
   ACCESO
   
   
   Iniciar sesión con GoogleIniciar sesión con Google
   
   o
   
   NIF / NIE / Pasaporte/Email*
   Campo requerido.
   Contraseña*
   Ver contraseña
   Campo requerido.
   Recuérdame para futuras visitas
   Entrar
   ¿Olvidaste tu contraseña?
   Cerrar
   
   
   ¿HAS OLVIDADO TU CONTRASEÑA?
   
   Escribe tu número de documento NIF,NIE, Pasaporte.
   
   
   
   Número de documento
   
   
   UNDEFINED TRANSLATION: UNDEFINED
   
   Undefined translation: undefined
   
   Undefined translation: undefined
   
   ¡Parece que no podemos contactar contigo!
   
   Por favor, rellena este formulario para que podamos ayudarte.
   
   Contacto Alsa Plus
   
   Cerrar
   
   Si tus datos son correctos, recibirás un sms con un código de acceso de un
   sólo uso
   
   Código de verificación recibido
   
   
   Código de verificación erróneo, te queda/n intento/s.
   
   Aceptar
   
   Cambiar contraseña
   
   Nueva contraseña
   
   Campo requerido.
   Confirmar la nueva contraseña
   
   Campo requerido.
   Introduce una contraseña segura: al menos 8 caracteres que incluyan una
   mayúscula, una minúscula y un número.
   Los campos no coinciden
   Aceptar
   
   Undefined translation: undefined
   
   Aceptar
   
   Aceptar
   ¿No eres cliente Alsa Plus? Regístrate
   
   Close
   
   
   TE HEMOS ENVIADO UN EMAIL...
   
   
   REVISA TU BANDEJA DE ENTRADA, VALIDA TU EMAIL PARA COMPLETAR EL REGISTRO ALSA
   PLUS.
   
   Si no encuentras el email, revisa tu bandeja de correo no deseado o spam.
   
   Close
   
   
   LO SENTIMOS, HA HABIDO UN ERROR AL COMPROBAR TU INVITACIÓN
   
   Por favor, solicita a tu amigo que te genere una nueva invitación.
   Si lo prefieres, puedes continuar con el proceso de alta en Alsa Plus, pero
   PERDERÁS las ventajas de ingresar por invitación.

Toggle navigation





 * Destinos y rutas
   
   
   DESTINOS Y RUTAS
   
   
    * * RUTAS
        
        * MADRID - BARCELONA
        
        * MADRID - GRANADA
        
        * BILBAO - MADRID
        
        * MADRID - TOLEDO
        
        * MÁLAGA - GRANADA
        
        * MADRID - LISBOA
        
        * MADRID - PARÍS
        
        * MADRID - OPORTO
        
        * MÁS RUTAS
   
   
    * * DESTINOS
        
        * MADRID
        
        * GRANADA
        
        * BARCELONA
        
        * BILBAO
        
        * OVIEDO
        
        * PARÍS
        
        * LISBOA
        
        * BURDEOS
        
        * MÁS DESTINOS
   
   
    * * AEROPUERTOS
        
        * MADRID-BARAJAS T4
        
        * MÁLAGA-COSTA DEL SOL
        
        * ALICANTE-ELCHE
        
        * BARCELONA-EL PRAT T1
        
        * GRANADA-JAÉN
        
        * IBIZA
        
        * OPORTO-SÁ CARNEIRO
        
        * GINEBRA
        
        * MÁS AEROPUERTOS

 * Tu viaje
   
   
   TU VIAJE
   
   
    * * HORARIOS
      
      
      * ALSA, MOVILIDAD SEGURA
      
      
      * GESTIÓN DE BILLETES
        
        * CAMBIOS Y ANULACIONES
        
        * POLÍTICA DE CAMBIOS Y ANULACIONES
        
        * SOLICITAR FACTURA
      
      
      * EQUIPAJE
      
      
      * MOVILIDAD ACCESIBLE E INCLUSIVA
   
   
    * * TARIFAS Y DESCUENTOS
        
        * OFERTAS
          
          * TARIFA JOVEN DE 12 A 25
          
          * TARIFA GRUPOS +4
          
          * TARIFA MAYORES DE 60
        
        * BLOQUEA EL ASIENTO DE AL LADO
   
   
    * * BONOS DISPONIBLES
        
        * BONOS GRATUITOS
        
        * BONOS REGIONALES HASTA 50% DTO.

 * A bordo
   
   
   A BORDO
   
   
    * * TIPOS DE AUTOBÚS
        
        * COMFORT
        
        * SUPRA
      
      
      * LOCALIZA TU BUS
   
   
    * * ENTRETENIMIENTO A BORDO
        
        * WIFI
        
        * ALSA RADIO
        
        * OCIO AUDIOVISUAL
    * 

 * Servicios de movilidad
   
   
   SERVICIOS DE MOVILIDAD
   
   
    * * URBANOS Y METROPOLITANOS
        
        * BILBAO
        
        * JAÉN
        
        * TORREJÓN DE ARDOZ
        
        * FERROL
        
        * A CORUÑA
        
        * MURCIA
        
        * MAR MENOR - CARTAGENA
        
        * MÁS URBANOS Y METROPOLITANOS
      
      
      * ALSA MOBI4U
      
      
      * ALSA CAB
      
      
      * OTROS SERVICIOS
        
        * SOPORTES PUBLICITARIOS
      
      
      * ALSA RAIL
   
   
    * * REGIONALES, NACIONALES E INTERNACIONALES
        
        * REGIONALES
          
          * SERVICIO AUTOBUSES COMUNIDAD DE MADRID
          
          * CATALUÑA
          
          * ASTURIAS
          
          * CANTABRIA
          
          * COMUNIDAD VALENCIANA
          
          * MÁS REGIONALES
        
        * NACIONALES
          
          * MADRID - GUADALAJARA
          
          * MURCIA - ALMERÍA
        
        * INTERNACIONALES
          
          * PORTUGAL
          
          * ITALIA
          
          * FRANCIA
          
          * MÁS INTERNACIONALES
   
   
    * * ALQUILER
        
        * AUTOBUSES
        
        * COCHES CON CONDUCTOR
        
        * BODAS
        
        * OTROS EVENTOS
      
      
      * TURÍSTICOS
        
        * AUTOBUSES TURÍSTICOS
        
        * TREN DE FELIPE II
        
        * TRENES HISTÓRICOS
          
          * TRENES PATRIMONIO FERROVIARIO
        
        * NIEVE Y ESQUÍ

 * Alsa Plus
   
   
   ALSA PLUS
   
    * 
    * 
    * 

 * Monedero
   
   
   MONEDERO
   
    * 
    * 
    * 


VERANO JOVEN 90% DTO.

para viajar del 01/07 al 30/09
Cerrar


BUSCADOR

Cerrar
form.modal.close


BILLETE NO DISPONIBLE EN WEB

La compra de servicios a partir de las 21:00 deberá realizarse en el bus

Lo entiendo
Origen Escribe el origen
Campo requerido. Origen no válido

Intercambiar origen y destino
Destino Escribe el destino
Campo requerido. Destino no válido

Debes aceptar las condiciones de compra y política de privacidad*
Buscar por fechas
Fecha de ida
Mar., 23 Jul.
Campo requerido. Formato de fecha incorrecto. Fecha anterior a la actual.
Fecha de ida
Fecha de vuelta Añadir vuelta
Campo requerido. Formato de fecha incorrecto. Fecha anterior a la de salida.
Fecha de vuelta
Pasajeros 1 Adulto (De 26 a 59 años)
Campo requerido.
1
Adultos
De 26 a 59 años
0
Jóvenes
De 12 a 25 años
0
Mayores
Más de 60 años
0
Niños
De 4 a 11 años
0
Bebés
Hasta los 3 años
Aceptar
Verano Joven 2024 (18-30 años)
Todas las combinaciones
form.modal.close


VERANO JOVEN 2024

Introduce tu código de registro



Si no estás dado de alta recuerda que es imprescindible que te registres en
veranojoven.transportes.gob.es

No recuerdo mi código

Aceptar
form.modal.close


VERANO JOVEN 2024

¡Parece que no estás registrado!

Recuerda que es imprescindible que te des de alta en
veranojoven.transportes.gob.es para acceder al descuento.

Aceptar

Código promocional/Bonos:

Borrar

¡Hemos cargado tu bono!
Código promocional/Bonos
Código promocional/Bonos
Borrar
Comprobar


Código promocional incorrecto: {0}
Cerrar


CÓDIGO PROMOCIONAL/BONOS

Código promocional incorrecto: {0}
Cerrar
Cerrar


CÓDIGO PROMOCIONAL/BONOS

Cerrar Aceptar
Cerrar


INFORMACIÓN

Has alcanzado el número máximo de pasajeros para una sola reserva
Cerrar
Cerrar


DATOS INCORRECTOS O INCOMPLETOS

Cerrar


Verano Joven

90 % dto

Viaja por menos de 4€

Ya disponible



Bonos

Gestiona tus billetes

Localiza tu bus



15% de descuento si te haces Alsa Plus

Date de alta como Alsa Plus en la web ¡y consigue 15% de descuento! Para
obtenerlo, regístrate gratis y no te olvides de hacer clic en "Deseo recibir
ofertas y descuentos personalizados..."

¡Hazte Alsa Plus!

150 becas gratuitas y contrato indefinido

150 becas gratuitas a mujeres para la obtención de los permisos de conductora de
autobús (CAP+carnet D) y compromiso de contratación indefinida a jornada
completa tras la aprobación de exámenes.

¡Apúntate!

Alsa, Movilidad Segura

En Alsa seguimos trabajando para garantizarte la máxima seguridad en cada viaje.
Aplicamos estrictos protocolos de limpieza y desinfección y nuestros buses
cuentan con el mejor equipamiento para que viajes seguro y tranquilo.

Movilidad Segura





Compensa tu huella

Ahora puedes compensar la huella de carbono de tu viaje y colaborar en nuestros
proyectos de reforestación para luchar contra el cambio climático. ¡Gracias por
viajar en autobús!

Conoce el Bosque Alsa



 * Tarifas y descuentos
   
   Elige entre nuestras tarifas mínima, reducida o flexible, y entre nuestros
   descuentos: familia numerosa, personas con discapacidad... Muévete al mejor
   precio.
   
   Aprovecha nuestras tarifas

 * Horarios
   
   Consulta todos nuestros horarios y disfruta de todas las ventajas de
   organizar tus rutas de autobús, conociendo las salidas de cada trayecto antes
   de reservar tu billete.
   
   Elige tu horario

 * Equipaje
   
   Puedes llevar contigo hasta 30 kilos de equipaje de forma gratuita. Y, si
   necesitas equipaje extra, no te preocupes, podrás añadir hasta otros 20 kilos
   más.
   
   Descubre más



Descárgate la App

Todo son ventajas: navega de forma sencilla, localiza tu bus en tiempo real,
elige tu forma de pago favorita... y no imprimas tu billete, podrás mostrarlo o
descargarlo en tu wallet.

Google Play Apple Store Huawei App Gallery



 * Sobre Alsa
 * Gestiona tus billetes
 * Empleo y formación
 * Soportes publicitarios
 * Fondos públicos
 * Contacto
 * Confianza Online


SÍGUENOS

 * 
 * 
 * 
 * 
 * 
 * 

Logo Alsa

 * Aviso legal
 * Política de privacidad
 * Política de cookies
 * Condiciones de compra
 * Mapa web
 * Accesibilidad web



.....


Estás usando un navegador desactualizado o muy antiguo. Te recomendamos que lo
actualices o que uses un navegador más moderno.

Te sugerimos navegadores como Firefox o Chrome para mejorar tu experiencia de
navegación en www.alsa.es.


Cerrar

Sig>
Julio 2024

LuMaMiJuViSáDo12345678910111213141516171819202122232425262728293031    



Please ensure Javascript is enabled for purposes of website accessibility