www.alsa.com Open in urlscan Pro
45.60.87.106  Public Scan

Submitted URL: https://alsa.com/
Effective URL: https://www.alsa.com/
Submission Tags: analytics-framework
Submission: On April 21 via api from US — Scanned from DE

Form analysis 4 forms found in the DOM

Name: loginFormPOST https://www.alsa.com/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=6nxtnEFG

<form class="form ng-pristine ng-invalid ng-invalid-required" id="loginForm" name="loginForm" method="post"
  action="https://www.alsa.com/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=6nxtnEFG"
  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>
    <!-- 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}">
        <!-- Recuperar contraseña: Esta parte no debe ser visible en el paso 3 -->
        <!-- ngIf: !isThirdStep() -->
        <div class="recoverPass-container 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"] = "1681166916000";
            params["responsive992"] = "991";
            params["responsive768"] = "767";
            params["groupId"] = "21643679";
            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=1681166916000" type="text/javascript"></script>
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/newPasswordFormApp.js?t=1681166916000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/newPasswordFormAppController.js?t=1681166916000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordApp.js?t=1681166916000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordDirective.js?t=1681166916000" type="text/javascript"></script> -->
          <!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordService.js?t=1681166916000" type="text/javascript"></script> -->
          <script type="text/javascript">
            params["namespaceRecoverPassword"] = "_BusplusLoginPortlet_WAR_Alsaportlet_";
            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 y te enviaremos un correo con tu nueva contraseña.');
            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?');
          </script>
          <div id="recoverPasswordApp">
            <data-sag-alsa-recover-password
              data-recover-password-url="https://www.alsa.com/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=YTIwGv9b"
              data-recover-password-reset-email-url="https://www.alsa.com/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=YTIwGv9b"
              class="ng-isolate-scope"><a href="#" data-ng-click="init('recoverPasswordModal')" class="recoverPass-container-link">
	<span data-ng-bind="i18n.t('zzz01.alsaplus.login.lost-password-question')" class="ng-binding">¿Olvidaste tu contraseña?</span>		
</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">
                  <data-ng-form role="form" name="recoverForm" data-ng-model="formRecovery" novalidate="" data-isolate-form="" class="ng-pristine ng-valid">
                    <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 ng-binding" data-ng-bind="i18n.t('busplus.recover-password.title')">¿Has olvidado tu contraseña?</h2>
                    </div>
                    <div class="sag-modal-content">
                      <div class="sag-modal-body" id="recoverPasswordModal-desc" aria-live="assertive">
                        <div data-ng-show="data == '' || (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 y te enviaremos un correo con tu nueva contraseña.</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 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>
                            <br>
                          </div>
                        </div>
                      </div>
                      <div class="sag-modal-footer">
                        <div class="recover-pass-button button-blue">
                          <!-- ngIf: data == '' || (!data.message && data.messageError!='email-empty' && data.messageError!='email-empty-error') -->
                          <div data-ng-if="data == '' || (!data.message &amp;&amp; data.messageError!='email-empty' &amp;&amp; data.messageError!='email-empty-error')" class="ng-scope">
                            <button type="button" class="btn btn-lg btn-primary btn-block" data-ng-click="recoverPassword(false)">
                              <span data-ng-bind="i18n.t('busplus.recover-password.send-password')" class="ng-binding">Recuperar contraseña</span>
                              <i data-ng-show="loading" id="recoverPasswordSpinner" class="fa fa-spinner fa-spin ng-hide"></i>
                            </button>
                          </div><!-- end ngIf: data == '' || (!data.message && data.messageError!='email-empty' && data.messageError!='email-empty-error') -->
                          <!-- 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-lg btn-primary btn-block ng-binding" data-dismiss="modal" data-ng-bind="i18n.t('ok')">Aceptar</button>
                          </div>
                        </div>
                      </div>
                    </div>
                    <!-- /.modal-content -->
                  </data-ng-form>
                </div>
                <!-- /.modal-dialog -->
              </div>
              <!-- /.modal -->
            </data-sag-alsa-recover-password>
          </div>
        </div><!-- end ngIf: !isThirdStep() -->
        <!-- 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 -->
    <!-- componente login google -->
    <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>
    <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">Über Google anmelden</span><span class="L6cTce" id="button-label">Über Google anmelden</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_459442_542729&amp;as=31sjly%2FwjlgkiTsc5j8ynw&amp;hl=es_ES"
              id="gsi_459442_542729" title="Schaltfläche „Über Google anmelden“" style="display: block; position: relative; top: 0px; left: 0px; height: 0px; width: 0px; border: 0px;"></iframe>
          </div>
        </div>
      </div>
    </div>
    <!-- fin componente login google -->
    <!-- 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">
          <span class="link-register-slogan">¿No eres cliente Alsa Plus?</span>
          <a href="https://www.alsa.com/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=MYdQ6KRF">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://www.alsa.com/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=6nxtnEFG

<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://www.alsa.com/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=6nxtnEFG"
  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="">
</form>

Name: journeySearchFormPOST https://www.alsa.com/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=6nxtnEFG

<form name="journeySearchForm" id="journeySearchForm"
  action="https://www.alsa.com/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=6nxtnEFG"
  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");
    </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>
    <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. Campo obligatorio" title="Pulse para escribir la fecha de ida" disabled="disabled">
                  <!-- ngIf: departureDate == '' || departureDate == undefined --><span class="icn-angle-down ng-scope" data-ng-if="departureDate == '' || departureDate == undefined">Fecha de
                    ida</span><!-- end ngIf: departureDate == '' || departureDate == undefined -->
                  <!-- ngIf: departureDate != '' -->
                </button>
                <input class="departureDateNoClick ng-pristine ng-valid hasDatepicker" type="hidden" data-ng-model="departureDate" value="" 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" 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="" class="form-control ng-pristine ng-invalid ng-invalid-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="" 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: 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>
      </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>
    <div data-ng-show="journeySearchStartsUnfolded || journeySearchActuallyUnfolded" class="">
      <script type="text/javascript">
        params["AjaxPreLoadVoucherURL"] =
          'https://www.alsa.com/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://www.alsa.com/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["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">
        <!--  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>
    <!-- ngIf: windowResolution < CONSTANTS.RESPONSIVE_992 -->
    <div id="btSearchDiv" class="boton button-blue" data-ng-show="journeySearchStartsUnfolded || journeySearchActuallyUnfolded">
      <input data-ng-disabled="journeySearchForm.$invalid" 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

Con su consentimiento, nosotros y nuestros socios utilizamos cookies o
tecnologías similares para almacenar, acceder y tratar datos personales como su
visita a esta página web, las direcciones de IP y los identificadores de
cookies. Algunos socios no requieren su consentimiento para tratar sus datos y
se amparan en su interés comercial legítimo. Puede retirar su consentimiento o
rechazar el tratamiento de los datos en función de su interés legítimo en
cualquier momento, pulsando en "Más información" en nuestra Política de
privacidad de esta página web. Ver nuestros socios

Nosotros y nuestros socios hacemos el siguiente tratamiento de datos:Anuncios y
contenido personalizados, medición de anuncios y del contenido, información
sobre el público y desarrollo de productos, Cookies Analíticas, Cookies
publicitarias, Datos de localización geográfica precisa e identificación
mediante las características de dispositivos

Más información →Aceptar y cerrar



CAMBIO DE LENGUAJE

Español Español
Deutsch Deutsch
Català Català
Français Français
Galego Galego
English English
Italiano Italiano
Portugues Portugues
Euskara Euskara
Aceptar
 * Español
    * Deutsch Deutsch
    * Català Català
    * Français Français
    * Galego Galego
    * English English
    * Italiano Italiano
    * Portugues Portugues
    * Euskara Euskara
   
   Español
 * Atención al cliente
 * 
 * Alsa Empresas
 * Inicia Sesión
   
   
   ACCESO
   
   Cerrar
   NIF / NIE / Pasaporte/Email*
   Campo requerido.
   Contraseña*
   Ver contraseña
   Campo requerido.
   ¿Olvidaste tu contraseña?
   Cerrar
   
   
   ¿HAS OLVIDADO TU CONTRASEÑA?
   
   Escribe tu número de documento NIF,NIE, Pasaporte y te enviaremos un correo
   con tu nueva contraseña.
   
   
   
   Número de documento
   
   
   UNDEFINED TRANSLATION: UNDEFINED
   
   Undefined translation: undefined
   
   Undefined translation: undefined
   
   
   Recuperar contraseña
   Aceptar
   Recuérdame para futuras visitas
   Entrar
   
   o
   
   
   Über Google anmeldenÜber Google anmelden
   ¿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.
   
   Inicia Sesión

Toggle navigation




Inicia
sesión
 * 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
      
      
      * ACCESIBILIDAD Y NECESIDADES ESPECIALES
      
      
      * VIAJA CON TU MASCOTA
      
      
      * ESTACIONES
   
   
    * * 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
        
        * AUDIBLE DE AMAZON
    * 

 * 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
          
          * 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
        
        * NIEVE Y ESQUÍ

 * Alsa Plus
   
   
   ALSA PLUS
   
    * 
    * 
    * 

 * Monedero
   
   
   MONEDERO
   
    * 
    * 
    * 


ACCESO


NOS MUEVEN TUS MOTIVOS

Siempre que haya un motivo, tendremos una forma de llegar a él
Cerrar


BUSCADOR

Cerrar
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
Fecha de ida
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
Todas las combinaciones

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



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!

Bonos gratis

Nos mueven tus motivos

En Alsa creemos que no hay trayecto grande o pequeño, que lo importante no es el
destino, sino ese motivo que tienes para llegar allí. Siempre que haya un
motivo, tendremos una forma de llegar a él.

Nos mueves

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
 * Contacto
 * Confianza Online


SÍGUENOS

 * 
 * 
 * 
 * 
 * 
 * 



 * 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

Agregar acceso directo

Alsa alsa.es

Cancelar Añadir



Sig>
Abril 2023

LuMaMiJuViSáDo     123456789101112131415161718192021222324252627282930