/* Prototypes */
function rand(l,u) { // lower bound and upper bound
  return Math.floor((Math.random() * (u-l+1))+l);
};

var errors = "";
var activeButton = true;
var type_elem = false;
var postalCodeNumber = "";
var isTravel = 0;
var isProduct = 0;
var countryIso = "";

var paymentActive = function () {
  // Fix Double Click in button Payment
  $(this).removeAttr('disabled').removeClass('btnDisabled');
}
var paymentDisabled = function() {
  // Fix Double Click in button Payment
  $(this).attr('disabled', 'disabled').addClass('btnDisabled');
}

/**
 * Comportamiento boton de pago
 */
var paymentButton = function(bool){
  if(bool){
    // habilita el boton de pago
    $('#paymentButton').removeClass('btnDisabled');

    if($('#paymentActionDisabled').length){
      // creamos un nuevo boton
      var oldButton = $('#paymentActionDisabled');
      var newButton = oldButton.clone();
      newButton.removeAttr('disabled');
      newButton.attr('id', 'paymentAction');
      newButton.insertBefore(oldButton);
      oldButton.remove();
    }
    else{
      $('#paymentAction').removeAttr('disabled');
    }
    activeButton = true;
  }
  else{
    // deshabilita el boton de pago
    $('#paymentButton').addClass('btnDisabled');

    // IE fix - explorer no permite cambiar el atributo de un campo desactivado
    if (jQuery.browser.msie){
      // creamos un nuevo boton
      var oldButton = $('#paymentAction');
      var newButton = oldButton.clone();
      newButton.attr('disabled', 'disabled');
      newButton.attr('id', 'paymentActionDisabled');
      newButton.insertBefore(oldButton);
      oldButton.remove();
     }
    else{
       $('#paymentAction').attr('disabled', 'disabled');
    }
    activeButton = false;
  }
}

/**
 * Payment Form Special Functions
 *
 * @description Functions to control the payment Form behaviors
 * @extra See letsbonus.validations.js to check the form behavior (paymentForm)
 */

/**
 * paymentMethodInputCreditCard(event, object)
 *
 * @description This function controls the input edit and decides when it has to jump to the next field to continue editing.
 * @author Angel Ruiz
 */

function paymentMethodInputCreditCard (evt, obj) {
    // if our key is not a control one ...
    if (evt.which > 46) {
        // if we have an active selection we reset the flag and go ...
        if (obj.lbSelected && obj.value.length > 3) {
            obj.lbSelected = false;
            return;
        }

  var maxValue = 3;
  var maxField = 5;

  if ($('#card_type').val() == 'CC_AMEX') {
      maxValue = 4;
      maxField = 4;
  }

        var nextId = parseInt(obj.id.slice(-1)) + 1;
        if (obj.value.length > maxValue || nextId == maxField) {
            $('#card_number'+nextId).focus();
            $('#card_number'+nextId).select();
        }
        obj.lbSelected = false;
    }
}

/**
 * paymentMethodConcatCreditCard()
 *
 * @description Fills our hidden field doing concat on the other mini card_number fields
 * @author Angel Ruiz
 */


function paymentMethodConcatCreditCard () {
    var maxValue = 4;
    $('#card_number').val('');

    if ($('#card_type').val() == 'CC_AMEX') {
  maxValue = 3;
    }

    for (var i = 1; i <= maxValue; i++) {
        $('#card_number').val($('#card_number').val() + $('#card_number'+i).val());
    }
}

/**
 * paymentMethodPasteCreditCard(event)
 *
 * @description Fills our hidden field doing concat on the other mini card_number fields
 * @author Angel Ruiz
 */

function paymentMethodPasteCreditCard (evt) {
    // We need to do a timeout cause jQuery won't let us to get the real event
    // For a strange reason the value is not inserted into the DOM "instantly"
    setTimeout(function () {
        // We remove spaces, dots and dashes from the paste
        var value = evt.currentTarget.value.replace(/[\s+\.+\-]/g,''),
      maxLength = 4;

  if ($('#card_type').val() == 'CC_AMEX') {
      maxLength = 5;
  }
        // Do it just if our pasted text is greater than maxLength
        if (value.length > maxLength) {
            for (var i = 0, f = 1; i < value.length; i += maxLength, f++) {
                $('#card_number'+f).val(value.substr(i, maxLength));
                $('#card_number').val($('#card_number').val() + $('#card_number'+f).val());
            }
        }
    }, 0);
}

function paymentMethodSavedCard (card) {
    switch (card) {
  case 37:
      $('#card_secure_code2').attr('maxlength', 4);
      break;
  default:
      $('#card_secure_code2').attr('maxlength', 3);
      break;
    }
}

function paymentMethodCardType (param) {

	// Filling our "banco" field with our payment method
	$('#banco').val(eval($('#card_type').val()));

	// Unmark errors
	$('div.validateError').hide();
	$('.validateError').removeClass('validateError');

	// Disable form elements
	var disableElements = function () {
        $('.cc').each(function (key, elm) {
            $(elm).attr('disabled', 'disabled');
        });

        $('#card_name').attr('disabled', 'disabled');
        $('#paymentFormMainData').slideUp();
    }

	// Enable form elements
	var enableElements = function (param) {
        $('.cc').each(function (key, elm) {
            if (param != 'init') {$(elm).val('');
        }
        $(elm).removeAttr('disabled');
    });

		$('#card_name').removeAttr('disabled');
		$('#paymentFormMainData').show('slow');
	}

	var inputOf4 = function (param) {
		enableElements(param);
		$('#card_number2').attr('maxlength', 4);
		$('#card_number3').attr('maxlength', 4);
		$('#card_number4').attr('maxlength', 4);
		$('#card_secure_code').attr('maxlength', 3);
		$('#card_number4').show();
	}

	var inputOf5 = function (param) {
		enableElements(param);
		$('#card_number2').attr('maxlength', 5);
		$('#card_number3').attr('maxlength', 5);
		$('#card_secure_code').attr('maxlength', 4);
		$('#card_number4').hide();
	}

	$('.minicard').each(function (key, elm) {
		$(elm).css({border: '1px solid transparent', borderRadius: '2px 2px', mozBorderRadius: '2px 2px'});
	});

	var selectedElement = $('#card_type').val();

    $('.'+selectedElement).css({border: '1px solid #B0B0B0', borderRadius: '2px 2px', mozBorderRadius: '2px 2px'});

	switch ($('#card_type').val()) {
		case 'CC_AMEX':
			$('#paymentForm').removeData('validator');
			paymentFullFormValidate();
			$('#authoriseCreditCard').show();
			inputOf5(param);
			break;
		case 'CC_PAYP':
			disableElements();
			$('#paymentForm').removeData('validator');
			paymentFakeFormValidate();
			$('#authoriseCreditCard').hide();
			if (typeof($('#gift').val()) != 'undefined') {
				paymentGiftFormValidate();
			}
			break;
		case 'CC_TRAN':
			disableElements();
			$('#paymentForm').removeData('validator');
			$('#authoriseCreditCard').hide();
			if (typeof($('#gift').val()) != 'undefined') {
				paymentGiftFormValidate();
			}
			break;
		default:
			if ($('#card_type').val() === 'CC_VISA' && getIsoCountryFromBodyClass() === 'uy') {
				disableElements();
				$('#paymentForm').removeData('validator');
				paymentFakeFormValidate();
				$('#authoriseCreditCard').hide();
				if (typeof($('#gift').val()) != 'undefined') {
					paymentGiftFormValidate();
				}
			} else {
      $('#paymentForm').removeData('validator');
       $('#authoriseCreditCard').show();
      paymentFullFormValidate();
      inputOf4(param);
			}
      break;
	}
}

/**
 * Deshabilitar elemento tipo boton o input (compatible con todos los navegadores)
 */

function disableElement(elem){
  if (jQuery.browser.msie){
    $(elem).hide();
  }
  else {
    $(elem).attr('disabled', 'disabled').addClass("opacity40");
  }
}

/**
 * Habilitar elemento tipo boton o input (compatible con todos los navegadores)
 */

function enableElement(elem){
  if (jQuery.browser.msie){
    $(elem).show();
  }
  else {
    $(elem).attr('disabled', '').removeClass("opacity40");
  }
}

function init_gen(){

  /* selector de pais/ciudad
   * al clickar en la ciudad actual desplega el selector de ciudades principales
   * cambia el icono y oculta la politica de privacidad
   */
  $(".selector #change_city").click(function() {
    // se desplega el selector de ciudad
        $("#cities").slideToggle();
        // cambia el icono de down a up
        $("#change_city #iconhead").toggleClass("down").toggleClass("up");
        // muestra las ciudades primarias
        $("#cities .primary").show();
        // oculta las ciudades primarias/secundarias
        $("#cities #viewallcities").hide();
        // si el selector de ciudades primarias/secundarias esta oculto...
        if ( $("#cities #viewallcities").hide() ) {
      $(".tab").addClass("closed");
    } else {
      $(".tab").removeClass("closed");
    }

  });

  /* selector de primarias + satelites
   * al clickar en ver todas las ciudades se desplega el selector de ciudades primarias+satelites
   */
  $(".tab .viewmorecities").click(function() {
    $(".tab #icon").toggleClass("up").toggleClass("down");
    $("#viewallcities").slideToggle();
    $("#cities .primary").slideToggle();
    $(".tab").toggleClass("closed");

  });


    /*     Preview home     */
  $('#combo_num_offers').change(
         function () {
             var url = $(this).val();
             document.location = url;
         }
   );

    $('#closePreview').click(function () {
           $('#barraPreview').hide();
           return false;
    });
    /*      Carrito compra    */
    if($("#quantity").val() !== undefined) {
    	//si el usuario no esta loggeado, el input #quantity no esta seteado
    	if($("#quantity").val() === "") {
    		var quantity = parseInt($("#quantitySelected").val());
    	} else var quantity = parseInt($("#quantity").val());

        var maxUnits = parseInt($("#max-units").val());
        var minUnits = parseInt($("#min-units").val());
        var category = $("#category").val();

        if (quantity == 1 || quantity <= minUnits)
            {
             disableElement("#remove_quantity");
            }

        if (quantity >= maxUnits)
            {
            disableElement("#add_quantity");
            }
        // Monta form de viajeros
        if( $('#travellersForm').length > 0 )
        {
           for (i=0; i<quantity; i++){
                    createFormTravellers(i);
           }
            getClientData();
            getInfoTravellers();
        }
    }

    //checkbox del añadir seguro. Opcion Extra! 2011-06-06
    $('#idExtraOption').live('click',function(){
      var cnt = parseInt($("#quantity").val());
      updatePrices(cnt);
    });

    $("#add_quantity").live('click', function() {
    	//si el user no esta loggeado y la quantity es uno, cogemos la quantity de #quantitySelected
    	if($("#quantity").val() === "") {
    		var quantity = parseInt($("#quantitySelected").val());
    	} else var quantity = parseInt($("#quantity").val());
        var maxUnits = $("#max-units").val();
        var minUnits = $("#min-units").val();
        var category = $("#category").val();
        var suma = "";

        // Add quantity
        if($("#is-multiple").val()==1)
            {
                quantity++;
                quantity++;
                suma = 2;
            } else {
                quantity++;
                suma = 1;
            }

        var quedastock = checkStock($("#idVariation").val(), quantity);
        if(quedastock == 0){
            $('.errors').show();
            return false;
  }
  // USER IS NOT LOGGED IN
//        } else if (quedastock == -1 && $('#mainFormShop').html() !== null) {
//	    return;
//	}

    $("#quantity").val(quantity);
    $("form#paymentWithEcard input[name=quantity]").val(quantity);
    $("form#paymentWithEcard input[name=quantityEnabled]").val(quantity);

    $("form#paymentWithoutEcard input[name=quantity]").val(quantity);
    $("form#paymentWithoutEcard input[name=quantityEnabled]").val(quantity);

    $("#quantitySelected").val(quantity);
        $("#quantityEnabled").val(quantity);
        $("form#salepostalForm input[name=quantity]").val(quantity);
        $("form#paymentForm input[name=quantity]").val(quantity);

        if(quantity > 1 && quantity > minUnits)
        {
            enableElement("#remove_quantity");
        } else {
            disableElement("#remove_quantity");
        }

    if(quantity == maxUnits){
        disableElement(this);
    }
    else {
        enableElement("#remove_quantity");
    }
    // si existe una provincia calcula los gastos de envio
    var shipmentAmount = shipmentCostsCalculateProcess(quantity);

    // Update prices
    updatePrices(quantity, shipmentAmount);

    // si existen los gastos de envio
    if("#shippingFee.shipmentTable"){
    	// 	anyade el formato de moneda al importe de gastos de envio
    	$("#shippingFee.shipmentTable").formatCurrency({region: countryIsoCode}).val();
    }

        // Monta form de viajeros
        if($('#travellersForm'))
        {
            for (i=0; i<suma; i++){
                createFormTravellers(quantity-suma+i);
            }
            getInfoTravellers();
        }
        checkShippingCost();
  });

    $("#remove_quantity").live('click',function() {
    	//si el user no esta loggeado y la quantity es uno, cogemos la quantity de #quantitySelected
    	if($("#quantity").val() === "") {
    		var quantity = parseInt($("#quantitySelected").val());
    	} else var quantity = parseInt($("#quantity").val());
        var minUnits = $("#min-units").val();
        var category = $("#category").val();
        var resta = "";

        $('.errors').hide();

      // Fix Double Click in button Payment
      $(this).removeAttr('disabled').removeClass('btnDisabled');

        // Remove quantity
        if($("#is-multiple").val()==1)
            {
                quantity--;
                quantity--;
                resta = 2;
            } else {
                quantity--;
                resta = 1;
            }
  var quedastock = checkStock($("#idVariation").val(), quantity);
  if (quedastock == -1 && $('#mainFormShop').html() !== null) {
      return;
  }
    $("#quantity").val(quantity);
    $("form#paymentWithEcard input[name=quantity]").val(quantity);
    $("form#paymentWithEcard input[name=quantityEnabled]").val(quantity);

    $("form#paymentWithoutEcard input[name=quantity]").val(quantity);
    $("form#paymentWithoutEcard input[name=quantityEnabled]").val(quantity);

    $("#quantitySelected").val(quantity);
        $("#quantityEnabled").val(quantity);
        $("form#salepostalForm input[name=quantity]").val(quantity);
    $("form#paymentForm input[name=quantity]").val(quantity);

    if(quantity == 1 || quantity <= minUnits){
        disableElement(this);
    } else{
        enableElement("#add_quantity");
    }

        if(quantity <= maxUnits){
            enableElement("#add_quantity");
    }

    // si existe una provincia calcula los gastos de envio
    var shipmentAmount = shipmentCostsCalculateProcess(quantity);

    // Update prices
    updatePrices(quantity, shipmentAmount);

    // si existen los gastos de envio
    if("#shippingFee.shipmentTable"){
    	// 	anyade el formato de moneda al importe de gastos de envio
    	$("#shippingFee.shipmentTable").formatCurrency({region: countryIsoCode}).val();
    }
        // Monta form de viajeros
        if($('#travellersForm'))
        {
            for (i=0; i<resta; i++){
                var tal = quantity+i;
                $('#trav_'+ tal).remove();
            }
            getInfoTravellers();
        }
        checkShippingCost();
  });

    /*$("select[name=id]").change(function(){
    $(this).closest('form').submit();
  });*/

    $("#paymentAction").live('click', function() {

      // froma 2011-05-13 #13933
      var checkbox = $("#terms_conditions");

      if( checkbox.length ) {
        if( !checkbox.is(':checked') ) {
          alert("Devi accettare le condizioni e termini d'uso");
          return false;
        }
      }

      var quantity = $("#quantity").val();
      var quedastock = checkStock($("#idVariation").val(), quantity);
      if(quedastock == 0){
        // Fix Double Click in button Payment
        paymentButton(true);
          $('.errors').show();
            //escondemos spinning wheel
            $('#paymentLoading').addClass('hidden');
          return false;
      } else {
          //mostramos spinning wheel
          $('#paymentLoading').removeClass('hidden');
        // Fix Double Click in button Payment
        paymentButton(false);
          $("#quantityEnabled").val(quantity);
          $("#paymentForm").submit();
      }
  });

    /*     fin carrito compra */

    $("#loginSubmit").click(function() {
    var quantity = $("#quantity").val();
        $("form#accessOrderForm input[name=quantity]").val(quantity);
  });

    $("form#travellersForm").submit(function(){
        var ret = true;
        var oblig = true;
        var msg = "";
        $(".requerido").each(function(){
            $(this).removeClass("validateError");
            $(this).val($.trim($(this).val()));
            if($(this).val()=="" || $(this).val()==$(this).parent().attr("title")) {
                $(this).addClass("validateError");
                ret = false;
                oblig = false;
            }
        });

        $(".email").each(function(){
            if( $(this).hasClass('requerido') &&
                !(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($(this).val())) ) {
                ret = false;
                msg = msg + ( "Campo E-mail incorrecto\n" );
                $(this).addClass("validateError");
            }
            else
                $(this).removeClass("validateError");
        });

        $(".numeric").each(function(){
            if( $(this).hasClass('requerido') &&
                !(/^[0-9]+$/.test($(this).val())) ) {
                ret = false;
                msg = msg + ( "El campo "  + $(this).attr("title") + " solo puede contener números\n" );
                $(this).addClass("validateError");
            }
            else
                $(this).removeClass("validateError");
        });

        if(!oblig) {
            alert("Rellena los campos obligatorios" + "\n" );
        } else if(!ret) {
            alert(msg);
        }
        return ret;
    });


    // shere friend modal form
    $('.basic-modal a.mail').click(function (e)
      {
        e.preventDefault();
        // get the product URL for the 'recommend to friend' mail
        var productUrl = $(this).attr('href');

        // OnClick, load the form and set his event handlers
        loadEmailFriendForm(productUrl) ;
      }
    );


    // Import Contacts modal form section recommend when logged in
    $('ul.providers li a').add( '#importContactsButton' ).click(function (e) {
        // OnClick, load the form and set his event handlers
        e.preventDefault();
        makeitModal();
        loadImportContactsForm(this.href);
      }
    );

    // Section recommend: show account create
    $('#accountCreateRecommend').click(function (e) {
        $('#accountCreateRecommend p').toggleClass('hidden');
        $('.ico-rounded_arrow').toggleClass('down');
        $('#newUser').slideToggle("fast");
      }
    );



    $('#news_unsuscribe').click(function() {
       var answer_news = $('input[name=answer]:checked').val();
       if( answer_news == 0){
           $('#newsletter_unsuscribe').attr('action','confirmation');
       }
    });

    errors = copyErrors;
    loadScript("/js/letsbonus.validations.js", function(){});


    //ischecked privacy and terms
    //Deprecated 20111214
    /*
    $('.subscriptionButton').click(function () {
      $('#newsletterHeaderForm').submit();

      if($('#chk_agree_how').length){
        if ($('#chk_agree_how').is(':checked')) {
            $('#newsletterHowForm').submit();
        } else {
          alert("E necessario accettare la politica di privacy");
          return false;
        }
      }
    });
     */

//    /* paymentMethods Visa - cuotas (AR) */
//    $("label[for=banc_visa_split]").click(function(e) {
//      // marcamos el radio de la opcion escogida
//      $('label input[id=banc_tpv_split]:eq(0)').attr('checked','checked');
//    });
//
//    /* paymentMethods Visa Nativa - cuotas (AR) */
//    $("label[for=banc_visa_native]").click(function(e) {
//      // marcamos el radio de la opcion escogida
//      $('label input[id=banc_tpv_native]:eq(0)').attr('checked','checked');
//    });
//
    /* paymentMethods Visa - cuotas (AR) */
    $("label[for=banc_visa_hipotecario], label[for=banc_visa_hipotecario] img").click(function(e) {
      // marcamos el radio de la opcion escogida
      $('label input[id=banc_visa_hipotecario]:eq(0)').attr('checked','checked');
    });

    /* paymentoptionCard Visa Mastercard */
    $("label[for=banc_tpv] span, label[for=banc_tpv] input").click(function(e) {
      // mostramos y ocultamos las capas
      $('.paymentoptionshowCard').slideDown();
      $('.paymentoptionshowPaypal').slideUp();
      // si existe pago de espectaculos
      if($('.paymentoptionShows').length > 0){
        $('.paymentoptionShows').slideUp();
      }
      // marcamos el radio de la opcion escogida
    $('label input[id=banc_tpv]:eq(0)').attr('checked','checked');

    if (e.currentTarget.id == 'banc_tpv'){
      // flag para saber si se ha recogido un evento en el elemento input
      type_elem = true;
    }
    });

    $("label[for=storedCards], #stored_card_radio_true").click(function(e) {
      // mostramos y ocultamos las capas
      $('#paymentFormGroup').slideUp();
      $('#savedCardsFormGroup').slideDown();
  	  $('#stored_card_radio_false').removeAttr('checked');
  	  $('#stored_card_radio_true').attr('checked','checked');
      $('#banco').val(CC_VISA);
  	  $('#paymentForm').removeData('validator');
  	  $('#paymentAuthorize').hide();
  	  $('label[for=storedCards] > span').addClass('up');
  	  $('label[for=newCards] > span').removeClass('up');
      $('label[for=storedCards] > a').removeClass('underline');
      $('label[for=newCards] > a').addClass('underline');
  	  paymentSavedCardsFormValidate();
    });

    $("label[for=newCards], #stored_card_radio_false").click(function(e) {
      // mostramos y ocultamos las capas
      $('#paymentFormGroup').slideDown();
      $('#savedCardsFormGroup').slideUp();
      $('#stored_card_radio_true').removeAttr('checked');
      $('#stored_card_radio_falsepaymentAuthorize').attr('checked','checked');
      $('#paymentForm').removeData('validator');
      $('#paymentAuthorize').show();
      $('label[for=storedCards] > span').removeClass('up');
      $('label[for=newCards] > span').addClass('up');
      $('label[for=storedCards] > a').addClass('underline');
      $('label[for=newCards] > a').removeClass('underline');
      paymentFullFormValidate();
    });

    /* paymentoptionPaypal */
    $("label[for=banc_paypal] span, label[for=banc_paypal] input").click(function(e) {
      // mostramos y ocultamos las capas
      $('.paymentoptionshowPaypal').slideDown();
      $('.paymentoptionshowCard').slideUp();
      // si existe pago de espectaculos
      if($('.paymentoptionShows').length > 0){
        $('.paymentoptionShows').slideUp();
      }
      // marcamos el radio de la opcion escogida
      $('label input[id=banc_paypal]:eq(0)').attr('checked','checked');

      if (e.currentTarget.id == 'banc_paypal'){
      // flag para saber si se ha recogido un evento en el elemento input
      type_elem = true;
    }
    });

    /* paymentoptionShows */
    $("label[for=banc_ticket] span, label[for=banc_ticket] input").click(function(e) {
      // mostramos y ocultamos las capas
      $('.paymentoptionshowPaypal').slideUp();
      $('.paymentoptionshowCard').slideUp();
      $('.paymentoptionShows').slideDown();
      // marcamos el radio de la opcion escogida
      $('label input[id=banc_ticket]:eq(0)').attr('checked','checked');

      if (e.currentTarget.id == 'banc_ticket'){
      // flag para saber si se ha recogido un evento en el elemento input
      type_elem = true;
    }
    });

    /* transPayment */
    $("label[for=banc_transfer] span, label[for=banc_transfer] input").click(function(e) {
      // mostramos y ocultamos las capas
      $('.paymentoptionshowPaypal').slideUp();
      $('.paymentoptionshowCard').slideUp();
      // si existe pago de espectaculos
      if($('.paymentoptionShows').length > 0){
        $('.paymentoptionShows').slideUp();
      }
      // marcamos el radio de la opcion escogida
      $('label input[id=banc_transfer]:eq(0)').attr('checked','checked');

      if (e.currentTarget.id == 'banc_transfer'){
      // flag para saber si se ha recogido un evento en el elemento input
      type_elem = true;
    }
    });

    // que no haga nada al clickar en el label de la opcion de pago pero si en caso de recoger un input
    $("label[for=banc_tpv], label[for=banc_paypal], label[for=banc_ticket], label[for=banc_transfer]").click(function(e) {
      // si el evento click tambien recoge accion en el input
      if (!type_elem){
        return false;
      }
      else{
        // inicializamos el flag
        type_elem = false;
      }

    });

  // TODO: se han deshabilitados las funcionalidades donde se aplicaban las dos acciones siguientes
  // de momento mantener el codigo por si se vuelve a habilitar - (Fede 09/06/2011)

    /* store card */
    /*$("label[for=stored_card_radio_true] span, label[for=stored_card_radio_true] input").click(function(e) {
      console.log('click radio_true:  ');
      // mostramos y ocultamos las capas
      $('.storedshowCard').slideDown();
      $('.newshowCard').slideUp();

      // marcamos el radio de la opcion escogida
      $('label input[id=stored_card_radio_true]:eq(0)').attr('checked','checked');

      if (e.currentTarget.id == 'stored_card_radio_true'){
        console.log('e.currentTarget.id radio_true:  ', e.currentTarget.id);
      // flag para saber si se ha recogido un evento en el elemento input
      type_elem = true;
    }
    });

    /* new card */
    /*$("label[for=stored_card_radio_false] span, label[for=stored_card_radio_false] input").click(function(e) {
      console.log('click radio_false:  ');
      // mostramos y ocultamos las capas
      $('.newshowCard').slideDown();
      $('.storedshowCard').slideUp();

      // marcamos el radio de la opcion escogida
      $('label input[id=stored_card_radio_false]:eq(0)').attr('checked','checked');

      if (e.currentTarget.id == 'stored_card_radio_false'){
        console.log('e.currentTarget.id radio_false:  ', e.currentTarget.id);
      // flag para saber si se ha recogido un evento en el elemento input
      type_elem = true;
    }
    });*/


  //Rellena hidden para validación de fecha de nacimiento
  $('select[name="client.birthDay"]').change(refillBithdayHidden);
  $('select[name="client.birthMonth"]').change(refillBithdayHidden);
  $('select[name="client.birthYear"]').change(refillBithdayHidden);

  //Rellena hidden para validación de sexo
  $('input[name="client.gender"]').change(function(){
    $('input[name="client.genderHidden"]').val($(this).val());
  });

  $('input[name="acceptLegalTerms"]').change(function(){
    if($(this).is(':checked')){
      $('input[name="acceptLegalTermsHidden"]').val('yes');
    }else{
      $('input[name="acceptLegalTermsHidden"]').val('');
    }
    //$('input[name="acceptLegalTermsHidden"]').val($(this).is(':checked'));
  });

  //start shop vars for ExtraOption Calc.
    //setting total
    if($("#idExtraOption").length == 1){
      var cnt = $('#quantity').val();
      updatePrices(cnt);
    }

    //Rellena hidden para validación de sexo
  $('input[name="salepostal.gender"]').change(function(){
    $('input[name="salepostal.genderHidden"]').val($(this).val());
  });

  $('#sel_clientpostal').live('change', function() {
    var url = window.location.host;
    if ( url.indexOf('secure') != -1 ) {
      var protocol = 'https://';
    }else {
      var protocol = 'http://';
    }
    if ($('#sel_clientpostal').val() > 0){
      var postalData = $.ajax({
        type: 'POST',
                    data: 'idPostal=' + $('#sel_clientpostal').val(),
        url: protocol + url + '/account/postal/getpostalclient' ,
        async: false,
        dataType : "json",
            success: function( obj ) {
          if (obj != false){
            $.each(obj,function (key, elm) {
              if (key != "gender"){
                if ($('#'+key) != undefined){
                  $('#'+key).val(elm);
                }
              } else {
                $('input[name="salepostal.gender"][value="'+elm+'"]').attr('checked',true);
                $('#genderHidden').val(elm);
              }
            });
          }
        }
      });
      $('input[name="saveClientpostal"]').attr("disabled",false);
    } else {
      $('#salepostalForm :input[type!="submit"][type!="radio"][type!="checkbox"][type!="hidden"]').val("");
      $('#salepostalForm :input[type="radio"]').attr("checked",false);
      $('#salepostalForm :input[type="checkbox"]').attr("checked",false);
      if ($('#sel_clientpostal option').length < 4){
        $('input[name="saveClientpostal"]').attr("disabled",false);
      } else {
        $('input[name="saveClientpostal"]').attr("disabled",true);
      }
    }
  });
}

function refillBithdayHidden(){
  birthDay=$('select[name="client.birthDay"]').val();
  birthMonth=$('select[name="client.birthMonth"]').val();
  birthYear=$('select[name="client.birthYear"]').val();
  if(birthDay!='' && birthMonth!='' && birthYear!=''){
    $('input[name="client.birthDate"]').val(birthMonth+'/'+birthDay+'/'+birthYear);
  }else{
    $('input[name="client.birthDate"]').val('');
  }
}

$(document).ready(init_gen);
// TODO: se han deshabilitados las funcionalidades donde se aplicaban los metodos
// newUser() y oldUser() de momento mantener el codigo por si se vuelve a habilitar - (Fede 09/06/2011)
/**
 *  Paymentmethods: funcion para ocultar los labels de Credit Card guardada y Nueva Credit Card
 **/
function newUser() {
  /* oculto label */
  $('.stored_card_radio_true').hide();
  $('.stored_card_radio_false').hide();
  $("#cardSecureCode").appendTo($('.cardsecurecode_newuser'));
  $("#cardSecureCode").show();
  /* muestro formulario para nueva credit card */
  $('.newshowCard').show();
}

/**
 *  Paymentmethods: funcion para ocultar los labels de Credit Card guardada y Nueva Credit Card
 **/
function oldUser() {
  /* muestro label */
  $('.stored_card_radio_true').show();
  $('.stored_card_radio_false').show();
  $("#cardSecureCode").appendTo($('.cardsecurecode_olduser'));
  $("#cardSecureCode").show();

  $(".stored_card_radio_false").click(function() {
    $("#cardSecureCode").appendTo($('.cardsecurecode_newuser'));
    $("#card_secure_code").attr("value","");
    $("#cardIdTransaction option:first").selected();
  });
  $(".stored_card_radio_true").click(function() {
    $("#cardSecureCode").appendTo($('.cardsecurecode_olduser'));
    $("#card_secure_code").attr("value","");
  });

  /* muestro formulario con el combo de la credit card la posibilidad de nueva credit card */
  $('.storedshowCard').show();

}

/** 2011-06-06 Opcion seguro o extra, primero verifica si existe la opcion,
 * luego anyade o quita segun cnt, cantidad + o -  **/
//return es el valor a anyadir a la suma total!    "bug" #16464
function extraOptionAddRemove(cnt){
  var rtn = 0;  //retorno
  var pPrice = 0;
  var id = '';
  if($('#idExtraOption')){
    //primero sube o baja la catidad a comprar
    $('#extraTravellers').val(cnt);  //el hidden input
    $('#extraTravellersShow').text(cnt); // valor que muestra en pantalla
    //ahora si checkbox checked calcula y suma
    if($('#idExtraOption').is(':checked')){
      var unitPrice = $('#extraUnitPrice').val();
      rtn = parseFloat(unitPrice)*cnt;
      pPrice = rtn.toFixed(2);
      id = $('#idExtraOption').val();
    }
  }
  $('#extraFee').text(pPrice); //el valor mostrado en pantalla
  $('#extraTotal').val(rtn); //valor del hidden input
  $('#extraFeeTotal').val(rtn); //valor del hidden input
  $('#extraFeeId').val(id); //para el envío del id al comprar
  $('#newUserExtraId').val(id); //nuevo usuario, se guarda ya en session.
  $('#LoginUserExtraId').val(id); //login usuario, se guarda ya en session.
  return rtn;
}

/**
 * Function to check if there is stock
 * @param id The variation ID
 * @param quantity The quantity of products selected
 */
function checkStock(id, quantity){
  var url = window.location.host;
  if ( url.indexOf('secure') != -1 ) {
    var protocol = 'https://';
  }else {
    var protocol = 'http://';
  }
    var stock = $.ajax({
    type: 'POST',
                data: 'quantity=' + quantity,
    url: protocol + url + '/shop/checkstock/' + id,
    async: false
  }).responseText;
  return stock;
}

/**
 * Function to update the prices automatically
 * @param quantity	The quantity of products selected
 */
function updatePrices(quantity, shipmentAmount){

    var price		= $("#price").val();
    var defaultCredit   = $('#defaultCountryCredit').val();
    var maxCredit = $("#max-credit").val();
    var subtotal	= quantity * price;

    //update extra option #16464 - 2011-06-06
    var extraOptionVal = extraOptionAddRemove(quantity);

    // en caso de que se este modificando los gastos de envio, se pasa por parametro
    if(shipmentAmount && shipmentAmount != ''){
    	// add shipping Fee, if any
    	var shippingFee = shipmentAmount;
    }
    // sino, lo recogemos del html
    else{
    	// add shipping Fee, if any
    	var shippingFee = $("#hiddenShippingFee").val();
    }

    var shippingFeeValue = 0;
    if( shippingFee ) {
      shippingFeeValue = parseFloat( shippingFee );
    }
    //subtotal values
    $('#subtotalPriceV').text(subtotal);
    $('#subtotalPrice').text(subtotal);

    //the total price of all bought options.
    if ($('#unrestricted').val() == 1) {
    var finalPrice = subtotal + shippingFeeValue + extraOptionVal;
    } else {
        var finalPrice = subtotal + extraOptionVal;
    }

//    var finalPrice = subtotal + shippingFeeValue + extraOptionVal;
    //total price to show on span
    var totalPrice = finalPrice;

    // en caso de chile se comprueba la cantidad aumentada para habilitar el pago mediante transferencia
    applyPaymentOptions(isTravel, isProduct, totalPrice, countryIso);

    // recogemos el totalPrice
    getTotalPrice(totalPrice);

    //mjoancomarti
    // If client is logged in, we must treat the credits
    var credits = parseFloat($("#credit").val());

    var usedCredits = 0;
    // If total is bigger than 2 times the default country credit, we apply it
    if(credits > 0 && ((subtotal >= (defaultCredit*2) && maxCredit > 0 && $('#unrestricted').val() == 0) || ($('#unrestricted').val() == 1))) {

        // We show the div with credit information
        $('#useCredit').show();

        if(1 == $("#unrestricted").val()){
        var maxCredits = quantity * price;
      }else{
        var maxCredits = $("#defaultCountryCredit").val();
      }

        if (credits > 0 && maxCredits > 0 && $('#unrestricted').val() == 0) {
            var totalMaxCredits	= ( maxCredits);
            if((credits - totalMaxCredits) <= 0){
                usedCredits	= credits;
            }
            else{
                usedCredits	= totalMaxCredits;
            }
        } else if ($('#unrestricted').val() == 1) {
            usedCredits = credits;
        }

        if((finalPrice - usedCredits) < 0) {
            usedCredits	= finalPrice;
        }

        totalPrice = parseFloat(finalPrice) - parseFloat(usedCredits);
        //totalPrice = Math.round(totalPrice);

        /*
         * if Total price is positive
         * It means the user has to pay something
         * with his credit card.
         * So we load the payment methods (paymentForm)
         * into the page, using ajax
         * @date 2011-03-02
         * @author Matteo.Mazzanti@letsbonus.com
         */
        if( totalPrice > 0 )
        {
        	if(getIsoCountryFromBodyClass() == "cl"){
        		showPaymentButtonIfTotalPriceIsPositive("#totalPrice", ".payButtonContainer", "#paymentMethods", totalPrice);
        		// TODO: provisionalmente se modifica el comportamiento de la pagina cuando el usuario tiene credito, es necesario un refactor de updatePrices 25/11/11
        		//loadPaymentMethods_OnPositiveTotalPrice( totalPrice ) ;
        		// mostrar metodos de pago
        		//ponemos a true ya que comentamos la llamada del else
        		if($('#paymentMethods').is(':visible') == true){
        			initWithPaymentMethodChecked(true);
        		}
        	}
        	if( $("#travellersForm").length == 0 ||  $("#salepostalForm").length == 0 ) {
        		// TODO: provisionalmente se modifica el comportamiento de la pagina cuando el usuario tiene credito, es necesario un refactor de updatePrices 25/11/11
        		//loadPaymentMethods_OnPositiveTotalPrice( totalPrice ) ;
        		// mostrar metodos de pago
        		if($('#paymentMethods').is(':visible') == false){
        			initWithPaymentMethodChecked(true);
        	}

        }
        }
        else
        {
        	if(getIsoCountryFromBodyClass() == "cl"){
        		showPaymentButtonIfTotalPriceIsPositive("#totalPrice", ".payButtonContainer", "#paymentMethods", totalPrice);
        		// TODO: provisionalmente se modifica el comportamiento de la pagina cuando el usuario tiene credito, es necesario un refactor de updatePrices 25/11/11
        		//loadPaymentMethods_OnPositiveTotalPrice( totalPrice ) ;
        		// mostrar metodos de pago
        		if($('#paymentMethods').is(':visible') == false){
        			//comentamos esto ya que no es logica esta llamada
        			//initWithPaymentMethodChecked(true);
        		}
        	}
        	else{
        		// TODO: provisionalmente se modifica el comportamiento de la pagina cuando el usuario tiene credito, es necesario un refactor de updatePrices 25/11/11
        		//removePaymentMethods_OnNegativeTotalPrice() ;
        		// ocultar metodos de pago
        		if($('#paymentMethods').is(':visible') == true){
        			initWithPaymentMethodChecked(false);
        	}
        }
        }

        /*
         * In MX, if the total price is >= 5000
         * we change the payment methods to send the user
         * to MercadoPago
         *
         * DESABLED since Cuotaas 3D Adquira
         */
        // possiblePaymentMethodSwitch( totalPrice );


        // usedCredits
        // totalPrice
        var spanUsedCredit = $("#usedCredits").html();
        var spanTotalPrice = $("#totalPrice").html();


        $("#usedCredits").html(usedCredits);
        $('#usedCredits').formatCurrency({region: countryIsoCode}).val();


        //mjoancomarti(2011-05) Formateo de importes a mostrar con punto como separador de miles

        $("#totalPrice").formatCurrency({region: countryIsoCode}).val();
        if ( usedCredits == 0)
        {
          $("#usedCredits").html("");
        }
    } //end credit
    else {
        $('#useCredit').hide();
    }

    if ($('#unrestricted').val() == 0) {
        totalPrice += shippingFeeValue;
    }

    //setting total
    if($("#totalPrice")){
      $("#totalPrice").html(totalPrice);
      $("#quantity").val(quantity);
      //for login forms
      if( $("#traveller_quantity")){$("#traveller_quantity").val(quantity);}
      if( $("#quantity_reg")){$("#quantity_reg").val(quantity);}
      //format of currency, in spans. Bug #29472 se restringió a 0 el número de decimales
      $("#totalPrice").formatCurrency({region: countryIsoCode}).val(); //real price
      $("#subtotalPriceV").formatCurrency({region: countryIsoCode}).val(); //subtotal 1
      $("#subtotalPrice").formatCurrency({region: countryIsoCode}).val(); //subtotal 2
      if( $("#extraFee")){$("#extraFee").formatCurrency({region: countryIsoCode}).val();}
  }

    // 1. Seleccionamos el precio total.
    // 2. Seleccionamos el select.
    // 3. Indicamos a partir de que mes empieza a contar.
    // 4. Si tiene intereses, 'true' si no 'false'.
    updateQuotas($('#totalPrice').text(),'.withinterests','1',true);
    updateQuotas($('#totalPrice').text(),'.withoutinterest','2',false);
    updateQuotas($('#totalPrice').text(),'.withoutinterestmaster','1',false);
}

/**
 * Update the quotas
 * @returns
 */
function updateQuotas (pricetotal,select,meses,interests){
    var contador = 0,
    re = new RegExp(/\w\d*,?\d\w/),
    rep = new RegExp('(-?[0-9]+)([0-9]{3})'); //para poner punto en las unidades de millar
    // re
	// \w Cualquier caracter alfanumérico. Equivalente a [a-zA-Z0-9_].
	// \d un dígito. Equivale a [0-9].
	// * Cero o más ocurrencias.
	// ,? indica quese puede encontrar un punto decimal y el signo ? indica que puede faltar, lo cual hace que los valores enteros también sean válidos.
    pricetotal = String(pricetotal.replace('$','').replace('.',''));

	$(select+' option').each(function(){
		$selectoption = $(this);
		var selectoption = $selectoption.text();
        // eliminamos el punto de millar y la cifra de cada select
        selectoption = selectoption.trim().replace('.','').replace(re,'');
		if (interests){
			 var resultado = (pricetotal*interestjs[contador++]/meses++);
        }else{
            var resultado = (pricetotal/meses++);
        }
        resultado = resultado.toFixed(2);
        resultado = resultado.replace('.',',');
        // ponemos el punto a las unidades de millar
        while(rep.test(resultado)) {
            resultado = resultado.replace(rep, '$1.$2');
        }
        $selectoption.text(selectoption+resultado);
    });
}

/**
 * Load the payemnt methods
 * @returns
 */
function loadPaymentMethods_OnPositiveTotalPrice( totalPrice )
{
  if ( $("#paymentMethods").length == 0)
  {
    // froma 2011-05-10 - check protocol
    var url = window.location.host;
    if ( url.indexOf('secure') != -1 ) {
      var protocol = 'https://';
    }else {
      var protocol = 'http://';
    }

    var idVariationUndersale = $( 'span.idVariationUndersale' ).html() ;
    var idClientUnderSale = $( 'span.idClientUnderSale' ).html() ;
    var quantityUnderSale = $( 'span.quantityUnderSale' ).html() ;

    url = protocol + window.location.host
      + "/shop/getpaymentproviders/" + idVariationUndersale + "/" + idClientUnderSale + "/" + quantityUnderSale  ;
    // var variationId = $('input[name=id]').val() ;
    // var dataToSend = 'id=' + variationId ;
    $.ajax({
          type: "GET",
          url: url,
          // data: dataToSend,
          dataType: "text",
          success: function( dataReceived )
          {
            $(dataReceived).insertBefore( $( '#paymentSecureInfo' ));

            possiblePaymentMethodSwitch( totalPrice ) ;
          }
    });
  }
}
/**
 * hide and remove the payemnt methods
 * @returns
 */
function removePaymentMethods_OnNegativeTotalPrice()
{
  $('#paymentMethods').remove();
  $(".info-msg-validate .info-msg-validate ").remove(); /* */
}


function possiblePaymentMethodSwitch(totalPrice)
{
  if( totalPrice >= 30000 )
  {
    var hostSplit = window.location.host.split('.');

    if( $("#travellersForm").length == 0
      &&  $("#salepostalForm").length == 0
      && hostSplit[0] == 'mx' )
    {
      changePaymentMethods_OnHighTotalPrice() ;
    }
  }
  else if( totalPrice < 30000  )
  {
    var hostSplit = window.location.host.split('.');

    if( $("#travellersForm").length == 0
      &&  $("#salepostalForm").length == 0
      && hostSplit[0] == 'mx' )
    {
      changePaymentMethods_OnLowTotalPrice() ;
    }
  }
}


function changePaymentMethods_OnHighTotalPrice()
{
  $('#banc_bancomer').val( 'mx_catcaixa_sermepa' );
}

function changePaymentMethods_OnLowTotalPrice()
{
  $('#banc_bancomer').val( 'mx_bbva_bancomer' );
}

function clientpostalFormModal(id) {
  $('#modal-container').load('/account/postal/form/'+id, function(){
    makeitModal();
  });
};

/**
 * Function DOM Builder
 */
function createFormTravellers(i) {
  if($('#travellersForm').length == 0){return false;}
      var info = {nombre:"", apellidos:"", mail:"", phone:"", dni:""};
      var userIdRequired = "";
      with (DOMBuilder.elementFunctions)
      {
          var form = DIV({id: 'trav_'+i, 'class':'fldblock'},
                      FIELDSET(
                          H4(viajero +(i+1)),
                          DIV({'class': 'fldinline'},
                              LABEL({title: 'Nombre', 'for': 'travellers['+i+'][name]'},nombre,
                                  SPAN({'class':'req'}, ' *')
                              ),
                              INPUT({type: 'text',
                                          id: 'nombre_'+i,
                                          name: 'travellers['+i+'][name]',
                                          value: info.nombre,
                                          'class': 'fldtext requerido'})
                          ),
                          DIV({'class': 'fldinline'},
                              LABEL({title: 'Apellidos', 'for': 'travellers['+i+'][surname]'},apellidos,
                                  SPAN({'class':'req'}, ' *')
                              ),
                              INPUT({type: 'text',
                                          id: 'apellidos_'+i,
                                          name: 'travellers['+i+'][surname]',
                                          value: info.apellidos,
                                          'class': 'fldtext requerido'})
                          ),
                          DIV({'class': 'fldinline'},
                              LABEL({title: 'E-mail', 'for': 'travellers['+i+'][mail]'},email,
                                  SPAN({'class':'asterisco'})
                              ),
                              INPUT({type: 'text',
                                      id: 'email_'+i,
                                      name: 'travellers['+i+'][mail]',
                                      value: info.mail,
                                      'class': 'fldtext email'})
                          ),
                          DIV({'class': 'fldinline', id: 'next_'+i},
                              LABEL({title: 'Teléfono', 'for': 'travellers['+i+'][phoneNumber]'},phone,
                                  SPAN({'class':'asterisco'})
                              ),
                              INPUT({type: 'text',
                                              id: 'phone_'+i,
                                              name: 'travellers['+i+'][phoneNumber]',
                                              value: info.phone,
                                              'class': 'fldtext numeric'})
                          )
                      )
                  );

              $('#travellers').append(form);

              if(i==0){
                  var requerido =  SPAN({'class':'req'}, ' *');
                  $('.asterisco').after(requerido);
                  $('#email_0').addClass('requerido');
                  $('#phone_0').addClass('requerido');
              }

              if( $('#userIdRequired').val() == 1 ){
                  var tipoPapel = $('#userIdTyplogy').val();
                  var pasaporte = DIV({'class': 'fldinline'},
                                      LABEL({title: dni, 'for': 'travellers['+i+'][dni]'}, dni,
                                          SPAN({'class':'req'}, ' *')
                                      ),
                                      INPUT({type: 'text',
                                                      id: 'dni_'+i,
                                                      title: dni,
                                                      name: 'travellers['+i+'][dni]',
                                                      value: info.dni,
                                                      'class': 'fldtext requerido'})
                                  );
                  $('#next_'+i).after(pasaporte);
              }
      }
}

function getClientData(){

   $.ajax({
           type: "post",
           url: window.location.protocol + "//"+ window.location.host + "/getclientdata/",
           dataType : "json",
           success: function( obj ) {
             $('form#travellersForm input[name="travellers[0][name]"]').val(obj.name);
             $('form#travellersForm input[name="travellers[0][surname]"]').val(obj.surname);
             $('form#travellersForm input[name="travellers[0][mail]"]').val(obj.mail);
           }
    });
}

function getInfoTravellers(){
  var variation = $('#idVariation').val();
   $.ajax({
           type: "post",
           url: window.location.protocol + "//"+ window.location.host + "/getinfotravellers/",
           dataType : "json",
           data: {variationId:variation},
           success: function( obj ) {
               if(obj != null) {
                   for(i=0; i< obj.length; i++){
                      $('form#travellersForm input[name="travellers['+i+'][name]"]').val(obj[i].name);
                      $('form#travellersForm input[name="travellers['+i+'][surname]"]').val(obj[i].surname);
                      $('form#travellersForm input[name="travellers['+i+'][mail]"]').val(obj[i].mail);
                      $('form#travellersForm input[name="travellers['+i+'][phoneNumber]"]').val(obj[i].phoneNumber);
                      $('form#travellersForm input[name="travellers['+i+'][dni]"]').val(obj[i].dni);
                   }
               }
           }
    });
}

/**
 * Muestra el formulario para modificar datos personales
 */
function showDataForm()
{
  $(".infoData").slideUp();
  $("#dataform").fadeIn("slow");
}

/**
 * Oculta el formulario para modificar datos personales
 */
function hideDataForm(){
  $(".infoData").fadeIn("slow");
  $("#dataform").slideUp();
}

/**
 * Muestra el formulario para escoger la ciudad de las newsletters
 */
function showNewslettersDataForm(){
  $(".infoNewsletters").slideUp();
  $("#newslettersForm").fadeIn("slow");
}

/**
 * Oculta el formulario para escoger la ciudad de las newsletters
 */
function hideNewslettersDataForm(){
  $(".infoNewsletters").fadeIn("slow");
  $("#newslettersForm").slideUp();
}

/**
 * Muestra el formulario para escoger la ciudad de las newsletters
 */
function showBillingDataForm(){
  $(".billingAddressForm").slideUp();
  $(".infoBillingAddress").fadeIn("slow");
}

/**
 * Oculta el formulario para escoger la ciudad de las newsletters
 */
function hideBillingDataForm(){
  $(".infoNewsletters").fadeIn("slow");
  $("#newslettersForm").slideUp();
}

// Make the modal window - require jQuery Reveal Plugin 1.0
function makeitModal(clickBehaviour) {
  if(clickBehaviour == false){
    $('#modal-content').reveal({
       closeonbackgroundclick: clickBehaviour
    });

  }else {
    $('#modal-content').reveal();
  }
  // ugly hack
  if (jQuery.browser.msie){
    setTimeout(function(){
      $(".reveal-modal-bg").css({"filter":"alpha(opacity=60)"});
    }, 200 );
  }
  //vaciar contenido de la ventana modal para siguiente uso
  $('.reveal-modal-bg, .close-reveal-modal').click(function (e) {
    if($('#modal_variations').length > 0){
      $('#modal_variations').appendTo('#content').css({'display' : 'none'});
      $('#modal-content').removeClass('stretch-modal');
    }
    if($(".flashModal").length > 0){
      $(".flashModal").hide();
    }
    else if (($("#how-works-christmas").length > 0) || ($("#how-works-letssurprise").length > 0) || ($("#how-works-letssurprise-others-cities").length > 0)) {
    	$("#how-works-christmas").appendTo('#content').css({'display' : 'none'});
    	$("#how-works-letssurprise").appendTo('#content').css({'display' : 'none'});
    	$("#how-works-letssurprise-others-cities").appendTo('#content').css({'display' : 'none'});
    	$('#modal-content').removeClass('specialPromo');
    	$(".reveal-modal").css({'visibility' : 'hidden'});
    }
    /*else {
      //$('#modal-container').empty();
    }*/
  });
}


/* START SHAREFIRENDS FUCNTIONS */

function loadEmailFriendForm( productUrl )
{
  // Load Form
  var emptyString = '' ;
  $('#modal-container').load('/extra/email' , emptyString , function() {

      formMailValidate();

      $("#modal-container form input[name='url']").val( productUrl );

      $("form#formmail").submit(function(event) {
          event.preventDefault();
          doFormPost();
          return false;
        });

      $('#add-form-email-field').click(function() {
        $('<div class="fldblock lbinline relative"><input id="friendmail" type="text" name="share.friendMail[]" value="" title="" class="fldtext"/><span id="close">&nbsp;</span></div>')
        .css({'margin' : '10px 0 0 157px'})
        .insertAfter('#friendmail').fadeIn().focus();

        $('#close').click(function(){
          $(this).parent().slideUp('fast', function(){
            $(this).remove();
          });
        });

      });

      makeitModal();
      $('#modal-content').show();
      $('.reveal-modal-bg, .close-reveal-modal').click(function (e) {
        $('#modal-container').empty();
      });

    });

}


function doFormPost() {

   // data to send
    var name 		= $("form#formmail input[name='share.name']").val();
    var friendName  = $("form#formmail input[name='share.friendName']").val();
    var subject  	= $("form#formmail input[name='share.subject']").val();
    var text		= $("form#formmail textarea[name='share.text']").val();
   var urlm		= $("form#formmail input[name='url']").val();
    var friendMail = new Array();
    $("form#formmail input[name='share.friendMail[]']").each(function(i){
       friendMail[i] = this.value;
    });
   var dataToSend  =
   {
     name: name,
     friendName: friendName,
     friendMail: friendMail,
     subject: subject,
     text: text,
     url : urlm
   };

   // set the Url to be called
   var url = window.location.protocol + "//" + window.location.host + "/sharefriend/" ;
   //alert(url);


  // @todo attach the standard LB validator
  var error = false;
  var lang = $("form#formmail input[name='currentCountryIsoCode']").val();

  if($("form#formmail").valid()) {
     if(!error)
     {
         $.ajax({
             type: "POST",
             url: url,
             data: dataToSend,
             dataType: "text",
             success: function(resp)
             {
               $('#modal-container').empty();
               //alert(resp);
               $('#modal-container').append(resp);
               setTimeout(function(){
                   $("#modal-content").fadeOut('slow', function(){
                     $(".reveal-modal-bg").fadeOut('slow', function(){
                       $('#modal-container').empty();
                     });
                   });

                   $('#modal-container').empty().trigger('reveal:close');

                   // OnClick, load the form and set his event handlers
                   $('.basic-modal a.mail').click(function (e)
                   {
                     e.preventDefault();
                     $(".reveal-modal-bg").fadeIn('slow', function(){
                       $("#modal-content").fadeIn('slow');
                     });

                   });
                 }, 1000 );
             }
         });

     }
  }

}
/* END SHAREFIRENDS FUCNTIONS */

/**
 * Crea una lightbox teniendo en cuenta los parametros pasados
 */
function loadLightbox(provenance, country, img, original_url){
  // si hay imagen la cargamos en la variable
  if(img != ""){
    url_img = 'url(/media/img/promos/' + img + '.png)';
  }
  // en caso de no haber imagen se carga la de por defecto
  else {
    url_img = 'url(/media/img/countries/' + country + '/bg_lightbox_register.png)';
  }

  // cargamos el html con los parametros pasados
  $('#modal-container').load('/extra/first-lightbox?utm_source=' + provenance + '&original_url=' + original_url, function() {
    // instanciamos el modal
    makeitModal(false);
    // aplicamos los cambios de estilo
    applyLightboxStyle(url_img);
  });
}

/**
 * Aplica cambios visuales para los modales tipo lightbox
 */
function applyLightboxStyle(url_img){
	// TODO:  modificacion temporal para la promo letsmagic, modifica el estilo del formulario de registro de la lightbox
	var img = url_img.split("/");
	var imgName = img[4];
	imgName = imgName.split("_");
	if(imgName[0] == "letsmagic"){
		$("#newsletterLightboxForm").addClass("letsmagicStyle");
	}
	// TODO: quitar el codigo anterior al acabar la promo

  // anyadimos los cambios visuales
  $('#modal-content, #modal-container').addClass("lightbox");
  $('.close-reveal-modal').attr('class', 'closeModal');

  // cargamos la imagen pasada por parametro
  $('#modal-container').css('background-image', url_img);

  $('.closeModal').click(function (e) {
    // deshacemos los cambios visuales
    $('.closeModal').attr('class', 'close-reveal-modal');
    $("#modal-container").css('background-image', 'none');
    $('#modal-content, #modal-container').removeClass("lightbox");
    // cerramos la lightbox
    $(".reveal-modal-bg").fadeOut("fast");
    $("#modal-content").hide();
  });
}

/**
 * Atribuye estilo para destacar las opciones que salen en el modal al pasar el puntero por encima
 */
function hoverSelection(elem){
  // cuando el puntero este encima
  $(elem).live('mouseover',function(){
    // comprobamos que no este seleccionada
    if($(this).hasClass('option_selected') == false ){
      // aplicamos estilo
      $(this).addClass('option_hover');
    }
  });
  // cuando el puntero ya no este encima
  $(elem).live('mouseout',function(){
    // comprobamos que no sea una variacion seleccionada
    if($(this).hasClass('option_selected') == false){
      // aplicamos estilo
      $(this).removeClass('option_hover');
    }
  });
}

/**
 * Retorna al estilo original a una opcion deseleccionada
 */
function noSelectedOptionsStyle(elem){
  // por cada uno de las options
  $('.survey .option').each(function(){
    var s = $(this);
    // si no es el elemento seleccionado
    if( elem != s[0].id ){
      // quitamos la clase que indica la seleccion de la opcion
      s.removeClass('option_selected');
      $(this).removeClass('option_hover');
    }
  });
}

function surveyMessageSent(){
  // al enviar la encuesta la ocultamos
  $('.content-survey').fadeOut("slow");
   setTimeout(function(){
     // y se muestra un mensaje de confirmacion de envio
     $('.survey-response').fadeIn("slow");
  }, 800 );
}

/* END LIGTHBOX FUCNTIONS */

$(function(){
  $("a[rel^=external]").attr("target","_blank");

  $("form input[type=text], form textarea, .formtitle input[type=text], .formtitle textarea").each(function() {
    if($(this).attr("title") == "") {
      $(this).attr("title", $(this).parent().attr("title"));
    }
    $(this).focus(function() {
      if(!$(this).hasClass("date")) {
        if($(this).val() == $(this).attr("title")) {
          $(this).val("");
        }
      }
    }).blur(function() {
      if($(this).val() == "") {
        $(this).val($(this).attr("title"));
      }
    });
  });

  $("form").submit(function() {
    $("input[type=text], textarea", this).each(function() {
      if(!$(this).hasClass("date") && $(this).val() == $(this).attr("title")) {
        $(this).val("");
      }
    });
  });
});


/*
 * Import Contacts Fucntions START
 */

function loadImportContactsForm(url)
{
  // Load Form
  var emptyString = '' ;
  $('#modal-container').load(url , emptyString , function(){ });
}

/*
 * Import Contacts Fucntions END
 */


function loadScript(url, callback){

     var script = document.createElement("script");
     script.type = "text/javascript";

     if (script.readyState){  //IE
        script.onreadystatechange = function(){
         if (script.readyState == "loaded" || script.readyState == "complete"){
               script.onreadystatechange = null;
               callback();
            }
         };
     } else {  //Others
       script.onload = function(){
         callback();
       };
     }

     script.src = url;
     document.getElementsByTagName("head")[0].appendChild(script);
}

function stripTags(srcString){
  if (srcString === '') {return '';}
  srcString = srcString.replace('\&nbsp;','');
  return srcString.replace(new RegExp('(<[\\s\\S]+?>)', 'g'), '');
}

function trim(str, chars) {
  return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

/* qtip cvv2 paymentmethods */
$(document).ready(function() {

  $.fn.qtip.styles.styleCVV = { // Last part is the name of the style
     width: 230,
     background: '#E4DDD6',
     color: 'black',
     textAlign: 'center',
     border: {
        width: 7,
        radius: 5,
        color: '#E4DDD6'
     },
     tip: 'leftMiddle',
     name: 'dark' // Inherit the rest of the attributes from the preset dark style
  };

  $.fn.qtip.styles.shipmentCostsTable = { // Last part is the name of the style
     background: '#E4DDD6',
     color: 'black',
     textAlign: 'center',
     border: {
        width: 7,
        radius: 5,
        color: '#E4DDD6'
     },
     tip: 'topRight',
     name: 'dark' // Inherit the rest of the attributes from the preset dark style
  };

  $.fn.qtip.styles.styleFAQ = { // Last part is the name of the style
     width: 230,
     background: '#E4DDD6',
     color: 'black',
     textAlign: 'center',
     border: {
        width: 7,
        radius: 5,
        color: '#E4DDD6'
     },
     tip: 'leftTop',
     name: 'dark' // Inherit the rest of the attributes from the preset dark style
  };

  $.fn.qtip.styles.styleCreditCards = { // Last part is the name of the style
		     width: 400,
		     background: '#E4DDD6',
		     color: 'black',
		     textAlign: 'center',
		     border: {
		        width: 7,
		        radius: 5,
		        color: '#E4DDD6'
		     },
		     tip: 'leftTop',
		     name: 'dark' // Inherit the rest of the attributes from the preset dark style
		  };

  $.fn.qtip.styles.styleFlashFAQ = { // Last part is the name of the style
      width: 300,
      background: '#CEC8C3',
      color: 'black',
      textAlign: 'left',
      border: {
        width: 7,
        radius: 5,
        color: '#CEC8C3'
      },
      tip: 'topLeft',
      name: 'dark' // Inherit the rest of the attributes from the preset dark style
  };
  	$.fn.qtip.styles.styleLetsMagic = {
  		width: 320
		,background: 'none'
		,border: 'none'
		,padding: '0'
  	};
  $.fn.qtip.styles.styleLetsSurprise = { // Last part is the name of the style
		  width: 300,
		  background: '#CEC8C3',
		  color: 'black',
		  textAlign: 'left',
		  border: {
			  width: 7,
			  radius: 5,
			  color: '#CEC8C3'
		  },
		  tip: 'topLeft',
		  name: 'dark' // Inherit the rest of the attributes from the preset dark style
  };
  
  $.fn.qtip.styles.faqSurpriseCard = { // Last part is the name of the style
          width: 300,
          background: '#CEC8C3',
          color: 'black',
          textAlign: 'left',
          border: {
              width: 7,
              radius: 5,
              color: '#CEC8C3'
          },
          tip: 'leftBottom',
          name: 'dark' // Inherit the rest of the attributes from the preset dark style
  };
  
  if($('#letsmagic').length){
  $('#letsmagic').qtip({
      content: $(".letsmagicImg").html()
      ,style: 'styleLetsMagic'
      ,position: {
          corner: {
              tooltip: 'topRight',
              target: 'bottomLeft'
          }
	          ,target: $('#letsMagicTooltipTarget')
          ,adjust: {
	              x: 30
	              ,y: -5
          }
      }
      ,show: 'mouseover'
      ,hide: 'mouseout'
   });
  }
  if($('.ecardSend.detail').length){
	    $('.ecardSend.detail').qtip({
	       content: $("#ecardSendContent").html(),
	       style: 'styleLetsSurprise',
	       position: {
	           corner: {
	               tooltip: 'topLeft',
	               target: 'topLeft'
	           },
	           target: $('.ecardSendContent'),
	           adjust: {
	               x: 320,
	               y: 50
	           }
	       },
	       show: 'mouseover',
	       hide: 'mouseout'
	    });
  }
  if($('#authorise_display').length){
    $('#help_authorize').qtip({
       content: $("#authorise_tooltip_content").html(),
       style: 'styleCVV',
       position: {
           corner: {
               tooltip: 'topLeft',
               target: 'topLeft'
           },
           target: $('.authorize_tooltip_target'),
           adjust: {
               x: 15,
               y: -70
           }
       },
       show: 'mouseover',
       hide: 'mouseout'
    });
  }

  if($('.help_cvv').length){
    $('.help_cvv').qtip({
       content: $("#tooltip_cvv2").html(),
       style: 'styleCVV',
       position: {
           corner: {
               tooltip: 'topLeft',
               target: 'topLeft'
           },
           target: $('.cvv_tooltip_target'),
           adjust: {
               x: 15,
               y: -70
           }
       },
       show: 'mouseover',
       hide: 'mouseout'
    });
  }

  if($('.shipmentInfo.shipmentText').length){
    $('.shipmentInfo.shipmentText').qtip({
       content: $(".shipmentCopy").html(),
       style: 'shipmentCostsTable',
       position: {
           corner: {
               tooltip: 'topRight',
               target: 'bottomLeft'
           },
           target: $('.shipmentTextTooltipTarget'),
           adjust: {
               x: 0,
               y: 15
           }
       },
       show: 'mouseover',
       hide: 'mouseout'
    });
  }

  if($('.pyamentFaqs').length){
    // controla los tooltips de preguntas frecuentas
    $('.pyamentFaqs .faq').each(function(){
      // recogemos las clases de cada pregunta
      var res = $(this).attr('class');
      // separamos las clases
      res = res.split(" ");
      // recogemos la segunda
      res = res[1];
      $(this).qtip({
          // concatenamos para recoger el contenido a mostrar
          content:$('.content_' + res),
          // aplicamos estilo de tooltip
          style: 'styleFAQ',
          position: {
               corner: {
                   tooltip: 'topLeft',
                   target: 'topLeft'
               },
               target: $('.faq_tooltip_target_' + res),
               adjust: {
                   x: 15,
                   y: -10
               }
           },
          // mostramos solo cuando no exista otro tooltip
          show: {solo: true, ready: false, when: 'mouseover'},
          hide: { when: 'mouseout', fixed: true }
      });
    });
  }

  if($('.cardsFormContent').length){
	    // controla los tooltips de preguntas frecuentas
	    $('.cardsFormContent .cardTooltip').each(function(){
	      // recogemos las clases de cada pregunta
	      var res = $(this).attr('class');
	      // separamos las clases
	      res = res.split(" ");
	      // recogemos la segunda
	      res = res[1];
	      $(this).qtip({
	          // concatenamos para recoger el contenido a mostrar
	          content:$('.cardContent_' + res),
	          // aplicamos estilo de tooltip
	          style: 'styleCreditCards',
	          position: {
	               corner: {
	                   tooltip: 'topLeft',
	                   target: 'topLeft'
	               },
	               target: $('.card_tooltip_target_' + res),
	               adjust: {
	                   x: 15,
	                   y: -10
	               }
	           },
	          // mostramos solo cuando no exista otro tooltip
	          show: {solo: true, ready: false, when: 'mouseover'},
	          hide: { when: 'mouseout', fixed: true }
	      });
	    });
	  }

  if($('.faqFlashOffers ').length){
    // controla los tooltips de preguntas frecuentas
    $('.faqFlashOffers .faq').each(function(){
      // recogemos las clases de cada pregunta
      var res = $(this).attr('class');
      // separamos las clases
      res = res.split(" ");
      // recogemos la segunda
      res = res[1];
      $(this).qtip({
          // concatenamos para recoger el contenido a mostrar
          content:$('.content_' + res),
          // aplicamos estilo de tooltip
          style: 'styleFlashFAQ',
          position: {
               corner: {
                   tooltip: 'topMiddle',
                   target: 'leftMiddle'
               },
               target: $('.faq_tooltip_target_' + res),
               adjust: {
                   x: 200,
                   y: 7
               }
           },
          // mostramos solo cuando no exista otro tooltip
          show: {solo: true, ready: false, when: 'mouseover'},
          hide: { when: 'mouseout', fixed: false }
      });
    });
  }
  $('.eCardFaq').qtip({
       content: $("#eCardFaqContent"),
       style: 'faqSurpriseCard',
       position: {
           corner: {
               tooltip: 'topLeft',
               target: 'topLeft'
           },
           target: $('.eCardFaq'),
           adjust: {
               x: 15,
               y: -55
           }
       },
       // mostramos solo cuando no exista otro tooltip
      show: {solo: true, ready: false, when: 'mouseover'},
      hide: { when: 'mouseout', fixed: true }
    });
  $('.surpriseFaq').qtip({
	  content: $("#surpriseFaqContent"),
      style: 'faqSurpriseCard',
	  position: {
		  corner: {
			  tooltip: 'topLeft',
			  target: 'topLeft'
		  },
          target: $('.surpriseFaq'),
		  adjust: {
			  x: 15,
              y: -90
		  }
	  },
	  // mostramos solo cuando no exista otro tooltip
	  show: {solo: true, ready: false, when: 'mouseover'},
	  hide: { when: 'mouseout', fixed: true }
  });

});

function getStock(ciudad,idVariation){
  if ($('#saleQuantity').val() == ''){
    return false;
  }
  var result =$.ajax({
    type: 'post',
        async: false,
    url: 'http://'+ window.location.host +'/'+ ciudad +'/ajax/stock',
    data: {'idVariation':idVariation}
  }).responseText;
  result=jQuery.parseJSON(result);
  if (result['stock']==0){
    alert(result['texto_agota']);
    return false;
  } else {
    return true;
  }
}

/**
 * Slide cities auxiliar
 * */
$(document).ready(function() {
  if($('#slides').length){
    $('#slides').slides({
      start: 1,
      container: 'slides_container_aux',
      next: 'next_city_aux',
      currentClass: 'current',
      generatePagination: false

    });
  }
});

/*
 * Controla que se haya aceptado las condiciones de viaje
 */
function acceptTravelConditions(){
  // deshabilitamos el boton de compra
  paymentButton(false);

  $("#travelConditionAccept").click(function(){
      if($(this).is(":checked")){
        // habilitamos el boton de compra
        paymentButton(true);
      }
      else{
        // el boton queda deshabilitado
        paymentButton(false);
      };
  });
}

/**
 * Controla el modal a desplegar con google maps como contenido
 */
function showGoogleMap(zoom, latitude, longitude, title, frontitle, affiliate ){

  var geocoder = new google.maps.Geocoder();

  var latLng = new google.maps.LatLng(latitude, longitude)
  var map = new google.maps.Map(document.getElementById('GoogleMap'), {
      zoom: zoom,
      center: latLng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  var mLatLin = new google.maps.LatLng(latitude, longitude);

  if(affiliate == 1){
    var icono = new google.maps.MarkerImage("/media/img/vivirvip/vivirvip_google-maps-marker.png", null, null, new google.maps.Point(13, 32), new google.maps.Size(26, 32));
  }
  else{
    var icono = new google.maps.MarkerImage("/media/img/main/google-maps-marker.png", null, null, new google.maps.Point(13, 32), new google.maps.Size(26, 32));
  }
  var infowindow = new google.maps.InfoWindow({
      content: title
    });

  var marker = new google.maps.Marker({
      position: mLatLin,
      title: frontitle,
      map: map,
      popup:false,
      draggable: false,
      icon: icono
  });

  var geocodePosition = function (pos) {
      geocoder.geocode({
        latLng: pos
      }, function(responses) {
        if (responses && responses.length > 0) {
          var address = responses[0].formatted_address;
            $('#DireccionMasCercana').text(address);
        } else {
          $('#DireccionMasCercana').text('Error en la carga de datos de Google Maps.');
        }
      });
    }

  $('#linkGoogleMap').attr('href','http://maps.google.com/maps?z='+zoom+'&q=loc:'+latitude+'+'+longitude);
  $("#modal-content").reveal();
  $('.reveal-modal-bg, .close-reveal-modal').click(function (e) {
    $('#modal-container').empty();
  });

//	//geocodePosition(mLatLin);
//
//	//ventana popup del marker
//	//infowindow.open(map, marker);
};

/**
 * Modificacion en el formulario salepostal IT, para una oferta en concreto (43739)
 */
function submitProcess() {
  // recogemos el valor de los dos campos
    var address1 = $('#address_via').val();
    var address2 = $('#address_nr').val();

    // controlamos que no se envie el codigo postal de ejemplo
    var postalAddress = $('#extraAddress1').val();
    if(postalCodeNumber == postalAddress){
      $('#extraAddress1').val("");
    }

    // si se han introducido los valores necesarios
    if(address1 != '' && address2 != ''){
      // concatenamos el valor
      var address = address1 + " " + address2;
      // anyadimos el valor a un input oculto
      $('#address').val(address);
      // enviamos la info
      $('#salepostalForm').submit();
    }
}

/**
 * Introduce un codigo postal de ejemplo en el formulario
 */
function exampleCap(postalCode){
  postalCodeNumber = postalCode;
  // recogemos el valor del campo correspondiente al codigo postal
    var address1 = $('#extraAddress1').val();
    // si esta vacio introducimos el ejemplo
    if(address1 == ''){
      // asignamos el valor pasado por parametro al campo
      $('#extraAddress1').val(postalCode);
      // aplicamos un estilo diferente
      $('#extraAddress1').css('color','#777');
    }
    // vaciamos el campo en cuanto se haga click en el
    $('#extraAddress1').click(function(){
      $('#extraAddress1').val("");
    })
    // al hacer click en la pagina
    $(document).click(function(e){
      // si el elemento donde se ha hecho click es diferente al campo
      if(e.target.id != 'extraAddress1'){
        // recogemos el valor del campo
        address1 = $('#extraAddress1').val();
        // si esta vacio o esta lleno y es igual al valor de la variable pasada por parametro
        if(address1 == '' || address1 != '' && address1 == postalCode){
            // asignamos el valor pasado por parametro al campo
            $('#extraAddress1').val(postalCode);
            $('#extraAddress1').css('color','#777');
          }
        else {
          // aplicamos el estilo correspondiente al resto de datos introducidos por el user
          $('#extraAddress1').css('color','#333333');
        }
      }
    });
}

/**
 * Previene la introduccion de numeros en un campo de un formulario
 */
function noAlphanumeric(input){
    $('#' + input).keyup(function(){
      if ($(this).val() != ""){
        $(this).val($(this).val().replace(/[^0-9\.]/g, ""));
      }
    });
}

/**
 * Controla la aparición de la opcion de pago por transferencia
 */
function applyPaymentOptions(travel, product, totalPrice, country){
  // flag para mostrar u ocultar el metodo de pago
  var show = false;
  // almacena si es viaje o no para cuando se cambie la cantidad a comprarde forma dinamica
  isTravel = travel;
  // almacena si es un producto o no para cuando se cambie la cantidad a comprar de forma dinamica
  isProduct = product;
  // almacena el pais
  countryIso = country;

  if($('#transPayment')){
    // cantidad designada para que salga la opcion de pago por transferencia segun el pais
    switch (country){
    case 'cl':
      var quantity = 70000;
      // si el producto es de viajes o supera la cantidad
      if(isTravel == 1 || totalPrice > quantity ){
        var show = true;
      }
      break;
    case 'pt':
      var quantity = 100;
      // si el producto es de viajes y supera la cantidad o es un producto boutique y supera la cantidad
      if(isTravel == 1 && totalPrice > quantity || isProduct == 1 && totalPrice > quantity ){
        var show = true;
      }
      break;
    case 'ar':
      // si el producto es de viajes
      if(isTravel == 1 ){
        var show = true;
      }
      break;
    }

    // si es true
    if(show){
      // se muestra la opcion de transferencia bancaria
      $('#transPayment').show();
    } else {
      // en caso contrario se oculta
      $('#transPayment').hide();
    }
  }
}

/**
 * Disable combo metodo de pago AR
 */
function disableCombo() {
  // si existen los combos
  if($("div#visa_split select").length > 0
        && $("div#visa_hipotecario select").length > 0) {
    // recogemos los label
    var visaOption = "div#visa_split";
    var visaHipotecarioOption = "div#visa_hipotecario";
//    var visaNativeOption = "div#visa_native";
    var visaMastercardOption = "div#mastercard";

    // deshabilitamos la segunda opcion por defecto
//$(visaOption + ' select').attr("disabled","disabled");
    $(visaHipotecarioOption + ' select').attr("disabled","disabled");
//    $(visaNativeOption + ' select').attr("disabled","disabled");
    $(visaMastercardOption + ' select').attr("disabled","disabled");

//        $('.card').click(function (e) { e.preventDefault(); e.stopPropagation() });
//
    // al seleccionar una opcion deshabilitamos la otra
        $("label:not(" + visaOption + ")").click(function() {
            $(visaOption + ' select').attr("disabled","disabled");
            $(visaOption + ' input').attr("checked","");
        });

        $(visaOption + ' label').click(function(){
            $('#visa_split select').attr("disabled","");
            $(visaOption + ' input').attr("checked","checked");
        });
        $(visaOption + ' .creditCardImg').click(function(){
            $(visaHipotecarioOption + ' select').attr("disabled","disabled");
            $(visaOption + ' select').attr("disabled","");
            $(visaOption + ' input').attr("checked","checked");
        });
        $("label:not(" + visaHipotecarioOption + ")").click(function() {
            $(visaHipotecarioOption + ' select').attr("disabled","disabled");
            $(visaHipotecarioOption + ' input').attr("checked","");
        });

        $(visaHipotecarioOption + ' label').click(function(){
        	$(visaHipotecarioOption + ' select').attr("disabled","");
        	$(visaHipotecarioOption + ' input').attr("checked","checked");
        });
        $(visaHipotecarioOption + ' .creditCardImg').click(function(){
        	$(visaOption + ' select').attr("disabled","disabled");
        	$(visaHipotecarioOption  + ' select').attr("disabled","");
        	$(visaHipotecarioOption + ' input').attr("checked","checked");
        });
//
//        $("label:not(" + visaNativeOption + ")").click(function() {
//            $(visaNativeOption + ' select').attr("disabled","disabled");
//        });
//
//        $(visaNativeOption + ' label').click(function(){
//            $(visaNativeOption + ' select').attr("disabled","");
//        });
//
//        $("label:not(" + visaMastercardOption + ")").click(function() {
//            $(visaMastercardOption + ' select').attr("disabled","disabled");
//        });
//
//        $(visaMastercardOption + ' label').click(function(){
//            $(visaMastercardOption + ' select').attr("disabled","");
//        });
  }
}

/**
 *	Muestra un banner en el caso de que el usuario se conecte via movil
 */
function loadbnr_mobile(){
    //android
    var ua = navigator.userAgent.toLowerCase();
    var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
    if(isAndroid) {
    	//add banner
    	$('.loadbnr_mobile').after('<a href="http://ad.letsbonus.com/es/mobile"><img src="/media/img/countries/es/bnr_app_mobile.jpg" width="990" height="139" /></a>');
    }

    // iphone/ipod
    if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
       if (document.cookie.indexOf("iphone_redirect=false") == -1)
       	//add banner
    	$('.loadbnr_mobile').after('<a href="http://ad.letsbonus.com/es/mobile"><img src="/media/img/countries/es/bnr_app_mobile.jpg" width="990" height="139" /></a>');
    }
}
$(document).ready(function() {
/**
 *	Si existe la id sidebar y no es una promo especial se anyade una clase al content para mostrar el fondo del sidebar
 *  y se cambia la imagen de fondo del menu
 */
  if ( ($("#sidebar").length > 0) && ($("#offersSpecialPromo").length == 0 ) ) {
    $("#content").addClass('bg');
    $(".menu-bg-right").addClass('bg');
  }

/**
 *	Si es el lightbox de paypal se oculta la frase "ya estoy registrado"
 */
  if ($("#promo-content").length > 0) {
    $(".registered p").hide();
  }

});

/**
 * ------------------ Script to activate content tabs on ------------------
 * ------------------- General Terms & Conditions Section  ----------------
 */

$(function() {

  //When page loads...
  $(".tab_content").hide(); //Hide all content
  $("#tabs a:first").addClass("active").show(); //Activate first tab
  $(".tab_content:first").show(); //Show first tab content

  var tabContainers = $('.tab_content');

      $('#tabs a').click(function () {

          $('#tabs a').removeClass('active');
          $(this).addClass('active');
          tabContainers.hide().filter(this.hash).fadeIn(500); //Find hash value which corrensponds to the id of the needed text container

          return false;
      });

});

// Function for going instantly to the fisrt tab, scrolls to top
function conditionsFirstTabNow(){
	$(".tab_content").hide(); //Hide all content
	$('#tabs a').removeClass('active'); //Deactivate all tabs
	$("#tabs a:first").addClass("active").show(); //Activate first tab
	$(".tab_content:first").show(); //Show first tab content
	scroll(0,0); // Scroll to top
}


/**
 * ------------------ Facebook SDK Asynchronous Loading ------------------
 * ------------------- for better performance init  ----------------
 */
$(document).ready(function () {
    window.fbAsyncInit = function() {
  FB.init({
    appId: '160301600647859',
    status: true,
    cookie: true,
    xfbml: true
  });
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol + '//connect.facebook.net/es_ES/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
    }

});






/**
 * ------------------ Script to make Commerce Poll a ------------------
 * ------------------------ Two Step Form  ---------------------
 */

$(function() {

  var poll_form = $('#formspoll'),
    first_step = $('#first-step'),
    second_step = $('#second-step'),
    send_button = $('#poll_input'),
    pagination = $('#form-pagination');
    stopSubmit = true;

    send_button.click(function(e) {
      if (stopSubmit == true) {
       first_step.fadeOut(500, function() {
          second_step.fadeIn(500, function() {
            pagination.text('2/2');
          });
      });
       e.preventDefault();
       stopSubmit = false;
      } else {
        poll_form.submit();
      }
    });
});

//========= Metodos para gastos de envio

/**
 * Presenta los resultados en una lista segun los parametros buscados en un input
 */
function autocompletePatch() {
	// modificacion en memoria de la funcion original
	$.ui.autocomplete.prototype._renderItem = function( ul, item) {
		// modificacion expresion regular del termino a buscar
		var re = new RegExp("^" + this.term, "i") ;
		// resaltamos los terminos de la busqueda en la lista desplegada
		var t = item.label.replace(re,"<span class='bold brown'>" + this.term + "</span>");
		// presentamos los resultados en una lista
		return $( "<li></li>" ).data( "item.autocomplete", item ).append( "<a>" + t + "</a>" ).appendTo( ul );
	};
}

/**
 * Autocompleta el campo provincias con sugerencias segun lo que va escribiendo el usuario
 */
function autocompleteProvinces(elem){
	var obj = setProvinces();
	// si el objeto de provincias no esta vacio
	if (obj != ""  || obj != undefined){
		var provinces = [];
		// recorremos el objeto y lo volcamos en una array
		for(var i=0; i < obj.length; i++){
			provinces[i] = obj[i].name;
		}

		// recoge los terminos de busqueda y los presenta en formato de lista segun los parametros que se van tipeando
		autocompletePatch();

		// cargamos la provincias para el autocompletado
		$(elem).autocomplete({
			source: function(request, responseFn) {
				// termino a buscar
				var re = $.ui.autocomplete.escapeRegex(request.term);
				var matcher = new RegExp( "^" + re, "i" );
				// compara el termino con la array de provincias
				var a = $.grep( provinces, function(item,index){
					var ret = matcher.test(item);
					return matcher.test(item);
				});
				responseFn( a );
			},
			// retardo en presentar los resultados
			delay: 0
		});
	}

}

/**
 * Recoge si el usuario esta logueado durante el proceso de pago (desde salepostal hasta proceso de pago)
 * @param bool: boleano
 * @returns {getIfUserIsLogged}
 */
function getIfUserIsLogged(bool){
	this.b_isLogged = bool;
}

/**
 * Devuelve si el usuario esta logueado durante el proceso de pago (desde salepostal hasta proceso de pago)
 * @returns: boleano
 */
function setIfUserIsLogged(){
	return this.b_isLogged;
}

/**
 * Recoge el json con las provincias
 */
function getProvinces(obj){
	this.obj_provinces = obj;
}

/**
 * Devuelve el json con las provincias
 * @returns
 */
function setProvinces(){
	return this.obj_provinces;
}

/**
 * Recoge la provincia escogida por el usuario en el formulario desde la BB.DD
 */
function getProvinceFromDataBase(provinceDB){
	this.str_provinceDB = provinceDB;
}
/**
 * Devuelve la provincia escogida por el usuario en el formulario desde la BB.DD
 */
function setProvinceFromDataBase(){
	return this.str_provinceDB;
}

/**
 * Recoge el json con las zonas de entrega
 */
function getProductDeliveryZone(obj){
	this.obj_deliveryZone = obj;
}

/**
 * Devuelve el json con las zonas de entrega
 * @returns
 */
function setProductDeliveryZone(){
	return this.obj_deliveryZone;
}

/**
 * Recoge el id de la zona de gastos de envio de la provincia seleccionada
 * @param province: provincia escogida
 * @returns {getSelectedProvinceId}
 */
function getSelectedProvinceId(provinceId){
	this.selectedProvinceByUser = provinceId;
}

/**
 * Devuelve el id de la zona de gastos de envio de la provincia seleccionada
 * @returns
 */
function setSelectedProvinceId(){
	return this.selectedProvinceByUser;
}
/**
 * Recoge el importe total
 */
function getTotalPrice(totalPrice){
	this.totalPrice = totalPrice;
}

/**
 * Devuelve el importe total
 */
function setTotalPrice(){
	return this.totalPrice;
}

/**
 * Anyadimos al prototipo de array una nueva funcion que elimina valores duplicados de un Array
 */
Array.prototype.uniqueRank = function(a){
  return function(){return this.filter(a)}}(function(a,b,c){return c.indexOf(a,b+1)<0
});

/**
 * Devuelve una array ordenada de forma ascendente si se utiliza con el metodo sort()
 * @param a
 * @param b
 * @returns {Number}
 */
function sortNumber(a,b) {
	return a - b;
}

/**
 * Recoge copys pasados por parametro
 * @param copy
 * @returns {getCopy}
 */
function getCopy(copy){
	this.copy = copy;
}

/**
 * Devuelve el contenido de los copys pasados
 * @returns
 */
function setCopy(){
	return this.copy;
}

/**
 * Obtiene la iso de un pais recogiendola de la clase de la etiqueta body
 * @returns
 */
function getIsoCountryFromBodyClass(){
	var iso = $("body").attr("class").split(" ");
	return iso[0];
}

/**
 * Comprueba que la variable pasada por parametro este definida
 * @param variable: variable a comprobar
 * @returns {Boolean}
 */
function isDefined(variable){
	return (typeof(window[variable]) != "undefined");
}

/**
 * Define el comportamiento de la tabla de costes de envio y el contenido del tooltip segun si el usuario esta logueado
 * @param logged: boolean que indica si el usuario esta logueado o no
 * @param selectedProvince: indica si el usuario ha escogido una provincia para la entrega
 * @param bool: boleano que indica si la tabla se tiene que generar de forma dinamica, no al cargar la pagina
 */
function controlDeliveryZoneTable(logged, selectedProvince, bool){
	// si esta logueado y ha escogido una provincia
	if(logged && (selectedProvince != '' && selectedProvince != undefined)){
		// en caso de tener que generar la tabla de forma dinamica anyadimos el ultimo parametro
		if(bool){
			// construye la tabla de gastos de envio con los datos
			pushDataToDeliveryZoneTable(selectedProvince);
		}

		if($("table.deliveryPriceTable tr").length > 1){
			// podemos mostrar la tabla con los gastos de envio
			$(".shipmentTable").show();
		}
		else{
			// ocultamos todo lo referente a la tabla
			$(".shipmentTable").hide();
			// mostramos el importe
			$("#shippingFee.shipmentTable").show();
		}
		// ocultamos el copy que sustituye a la tabla de envios
		$(".shipmentInfo").hide();
	}
	else{
		// dependiendo de si esta logueado o no se muestra un copy u otro
		if(logged){
			if(selectedProvince == undefined){
				$(".shipmentCostsText").html(setCopy()[1]);
				// configuramos la pagina para el formato antiguo
				showStandardShipmentCosts();
			}
			else{
				$(".shipmentCostsText").html(setCopy()[1]);
				// ocultamos la tabla de gastos de envio ya que no hay una provincia seleccionada para calcularlos
				$(".shipmentTable").hide();
			}
		}
		else{
			$(".shipmentCostsText").html(setCopy()[0]);
			// ocultamos la tabla de gastos de envio ya que no hay una provincia seleccionada para calcularlos
			$(".shipmentTable").hide();
		}
		// mostramos el copy de que se debe escoger una provincia
		$(".shipmentInfo").show();
	}
}

/**
 * Oculta elementos para que se vean los gastos de envio en formato standard(antiguo)
 */
function showStandardShipmentCosts(){
	$(".shipmentCostsTable.shipmentTable, .shipmentCostsTable.text").hide();
	$("#shippingFee.shipmentTable").show();

}

/**
 * Volcado de datos en la tabla de gastos de envio
 * @param selectedProvince: provincia seleccionada por el usuario
 */
function pushDataToDeliveryZoneTable(selectedProvince){
	// objeto donde guardaremos los datos a manipular
	var data = {
            provinceZoneName: "", 						// variable que almacena la zona(name) de entrega segun la provincia escogida
			provinceZone: "", 							// variable que almacena la zona(id) de entrega segun la provincia escogida
			quantityZone: [],							// array que almacena cuantas zonas hay
			ranksId: [],								// array que almacena las id's de los rangos
			concatenatedRanks: [],						// array que almacena los rangos en formato concatenado
			deliveryZones: setProductDeliveryZone(), 	// volcamos el objeto de zonas de entrega
			provinces: setProvinces(),					// volcamos el objeto de provincias
			relationalRanksData: [],					// array que recoge los rangos concatenados con su id de zona correspondiente
			concatenatedOrderedRanks: []				// array que recoge los rangos concatenados para poder ordenarlos
	}

	// si existen datos
	if (data.deliveryZones != "" || data.deliveryZones != undefined){

		// Obtenemos la id de la zona de entrega
		for(var i=0; i < data.provinces.length; i++){
			// si la provincia seleccionada se encuentra dentro del objeto de provincias
			if(selectedProvince.toLowerCase() == (data.provinces[i].name).toLowerCase()){
				// recogemos la id de la zona escogida
				data.provinceZone = data.provinces[i].idDeliveryZone;
                data.provinceZoneName = data.provinces[i].deliveryZoneName;
            }
			}
        // flag para almacenar la zona(numero) volcada
        if(!zoneNumber){
            var zoneNumber = 0;
		}

		// si no existe volcamos la zona
		if($(".zoneTitle").length == 0){
			// creamos el elemento que indica la zona y la volcamos
            $("<th class='zoneTitle bold'>" + data.provinceZoneName + "</th>").insertAfter('.deliveryZone th:last');
            zoneNumber = data.provinceZone;
		}
		// sino en caso de que la provincia haya cambiado actualizamos la zona
		else {
            if(data.provinceZone != zoneNumber){
                $(".zoneTitle").html(data.provinceZoneName);
                zoneNumber = data.provinceZone;
			}
		}

		// obtenemos los rangos de envio segun la zona escogida
		for(i=0; i < data.deliveryZones.length; i++){
			// si coincide la zona escogida con alguna de las zonas disponibles
			if(data.provinceZone == data.deliveryZones[i].idDeliveryZone){
				// guardamos el rango mas la id en formato concatenado
				data.concatenatedRanks[i] = data.deliveryZones[i].quantityMin + data.deliveryZones[i].quantityMax + "_" + data.deliveryZones[i].id;
				// guardamos la id de cada rango a parte para poder volcarlos en orden
				data.ranksId[i] = data.deliveryZones[i].id;
			}
		}

		// por cada id de rango de zona almacenada
		for(i=0; i < data.ranksId.length; i++){
			if(data.concatenatedRanks[i] != undefined){
				// recogemos la id de la zona de entrega junto a su rango correspondiente de forma separada
				data.relationalRanksData[i] = data.concatenatedRanks[i].split("_");
				// recogemos los rangos concatenados en otra array para poder ordenarlos
				data.concatenatedOrderedRanks[i] = data.relationalRanksData[i][0];
			}
		}

		// ordenamos las id en el formato a volcar
		data.concatenatedOrderedRanks.sort(sortNumber);

		// comprobamos si existen ya filas creadas
		var rows = $("table.deliveryPriceTable tr").length;
		if(rows > 1){
			$("table.deliveryPriceTable tr:gt(0)").remove();
		}

		// por cada rango concatenado
		for(i=0; i < data.concatenatedOrderedRanks.length; i++){
			// por cada rango mas id concatenada
			for (var j=0; j < data.relationalRanksData.length; j++){
				if(data.relationalRanksData != undefined){
					// limpiamos la array de elementos vacios (undefined,false,NaN,0)
					data.relationalRanksData = data.relationalRanksData.filter(Boolean);
					// si coinciden los rangos
					if(data.concatenatedOrderedRanks[i] == data.relationalRanksData[j][0]){
						// recogemos la id que corresponde a ese rango
						var objectId = data.relationalRanksData[j][1];
						// volcamos el rango y el precio correspondiente a las zonas de forma ascendente
						for(var h = 0; h < data.deliveryZones.length; h++){
							if(objectId == data.deliveryZones[h].id){
								$("<tr class='rank" + data.deliveryZones[h].id + "'>" +
										"<td>" + data.deliveryZones[h].quantityMin + " - " + data.deliveryZones[h].quantityMax + "</td>" +
										"<td class='tablePrice'>" + data.deliveryZones[h].price + "</td>" +
								"</tr>").insertAfter("table.deliveryPriceTable tr:last");
							}
						}
					}
				}
			}
		}
		if($(".tablePrice")){
			$(".tablePrice").formatCurrency({region: countryIsoCode}).val()
		}
	}
}

/**
 * Vuelca datos en un combo designado por parametro
 * @param data: datos con los que se montan los options (pasar como objeto o array)
 * @param select: elemento select donde iran los options
 * @param message: en caso de existir coloca el copy como primer option con valor 0 por defecto
 */
function pushDataToSelectOptions(data, select, message){
	var options = '';
	// por cada dato pasado
	for(var i=0; i < data.length; i++){
		// si existe un copy lo coloca como primera opcion
		if(i == 0 && message != ''){
			options += '<option value="0">' + message + '</option>';
		}
		options += '<option id="' + data[i].id + '" value="' + data[i].name + '">' + data[i].name + '</option>';
	}
	// vuelca los datos en el select pasado por parametro
	$(select).html(options);
}

/**
 * Recoge la opcion escogida en el select de provincias y ejecuta las acciones a tomar
 * @param combo: combo a procesar
 */
function onChangeCombo(combo){
	// volcamos los objetos de provincias y zonas
	var provinces = setProvinces();
	var zones = setProductDeliveryZone();

	// al cambiar el combo
	$(combo).change(function(e){
		// recogemos la opcion escogida y comprobamos de que sea valida
		if($(e.currentTarget) && e.currentTarget.value != 0){
			var optionValue = $("#" + e.currentTarget.id + " option:selected").val();
			// seteamos el campo oculto con la id de la provinicia
			$("#idGeographicArea").val($("#" + e.currentTarget.id + " option:selected").attr("id"));

			//preparamos la pagina para presentar los datos de gastos de envio
			controlDeliveryZoneTable(true, optionValue, true);
		}
		else{
			//preparamos la pagina para presentar el copy de gastos de envio
			controlDeliveryZoneTable(false, optionValue, false);
		}

		// recogemos la id de la zona de gastos de envio a la que pertenece la opcion escogida
		var optionZoneId = setProductDeliveryZoneSelectedByUser(optionValue);

		// pasamos el id de la zona de la provincia seleccionada para poder acceder al dato desde otros metodos
		getSelectedProvinceId(optionZoneId);

		// recogemos la cantidad y la comparamos con el atributo quantityMin del objeto productDeliveryZone
		if($("#quantity") && $("#quantity").val() !== undefined) {
	        var quantity = parseInt($("#quantity").val());
		}

		// calculamos los costes de envio segun la provincia escogida y lo actualizamos en la vista
		var shipmentAmount = calculateShipmentCosts(quantity, setSelectedProvinceId())

		// actualizamos el importe total
		updatePrices(quantity, shipmentAmount);

		// anyade el formato de moneda al importe de gastos de envio
		$("#shippingFee.shipmentTable").formatCurrency({region: countryIsoCode}).val();
	});
}

/**
 * Devuelve la id de la zona de gastos de envio a la que pertenece la provincia escogida
 * @param optionValue: provincia escogida
 * @returns: la id de la zona a la que pertenece la provincia
 */
function setProductDeliveryZoneSelectedByUser(optionValue){
	// volcamos el objeto de provincias
	var provinces = setProvinces();
	if(!optionValue || optionValue == ''){
		var optionValue = setProvinceFromDataBase();
	}
	// por cada provincia
	for(var i=0; i < provinces.length; i++){
		// si coincide la opcion escogida
		if(optionValue == provinces[i].name){
			// recogemos el id de la zona de gastos de envio a la que pertenece
			var optionZoneId = provinces[i].idDeliveryZone;
		}
	}
	return optionZoneId;
}

/**
 * Calcula los gastos de envio segun la provincia y las unidades escogidas y lo actualiza en la vista
 * @param quantity: cantidad de producto seleccionado
 * @param optionZoneId: provincia escogida
 */
function calculateShipmentCosts(quantity, optionZoneId){
	// en caso de que no exista la id de la zona
	if(!optionZoneId || optionZoneId == ''){
		// la recogemos de la base de datos
		var optionZoneId = setProductDeliveryZoneSelectedByUser(setProvinceFromDataBase());
	}
	// volcamos el objeto de zonas
	var zones = setProductDeliveryZone();

	// por cada zona
	for(var j=0;j < zones.length; j++){
		// si coincide con la zona de la provincia escogida
		if(zones[j].idDeliveryZone == optionZoneId){
			// si la cantidad a comprar esta entre los rangos de la zona de entrega
			if(quantity >= zones[j].quantityMin && quantity <= zones[j].quantityMax){
				// volcamos el importe de envio
				var amount = zones[j].price;
			}
		}
	}
	// actualizamos el importe en la vista
	if(amount && amount > 0){
		if($("#shippingFee")){
			$("#shippingFee.shipmentTable").html(amount);
            $("#hiddenShippingFee").val(amount);
		}
		// devolvemos el importe de gastos de envio
		return amount;
	}
}

/**
 * Recoge las comprobaciones y metodos para calcular los gastos de envio al sumar/restar cantidad
 */
function shipmentCostsCalculateProcess(quantity){
	// si el usuario esta logueado
	if(setIfUserIsLogged()){
		// si se han pasado provincias
		if(setProvinces()){
			// si existe una provincia seleccionada en el combo de provincias
			if(setSelectedProvinceId()){
				// actualiza el coste de gastos de envio
				var shipmentAmount = calculateShipmentCosts(quantity, setSelectedProvinceId())
			}
			// sino es que ya se ha escogido la provincia y la recogemos de los datos pasados
			else if(setProductDeliveryZoneSelectedByUser(setProvinceFromDataBase())){
				// actualiza el coste de gastos de envio
				var shipmentAmount = calculateShipmentCosts(quantity, setProductDeliveryZoneSelectedByUser(setProvinceFromDataBase()))
			}
		}
		else{
			var shipmentAmount = '';
		}
	}
	else{
		var shipmentAmount = '';
	}
	return shipmentAmount;
}

/**
 * Controla cuando se debe de preparar el tooltip de la tabla de gastos de envio
 */
function shipmentTooltip(){
	if($('.shipmentCostsTable.shipmentTable').length){
		if($("#province").length > 0){
			$("#province").change(function(e){
				shipmentTableTooltip();
			});
		}
		else{
			shipmentTableTooltip();
		}
	}
}

/**
 * Configura el tooltip de la tabla de gastos de envio
 */
function shipmentTableTooltip(){
	$('.shipmentCostsTable.shipmentTable').qtip({
		content: $(".productDeliveryZoneTable").html(),
		style: 'shipmentCostsTable',
		position: {
			corner: {
				tooltip: 'topRight',
				target: 'bottomLeft'
			},
			target: $('.shipmentCostsTooltipTarget'),
			adjust: {
				x: 0,
				y: 15
			}
		},
		show: 'mouseover',
		hide: 'mouseout'
	});
}
// ================================================================================================================= //

/**
 * Recoge la accion que indica el modo de pago escogido
 * @param elem: elemento clickado
 */
function selectedPaymentOption(elem){
	$(elem).click(function(e){
    	// recoge el input correspondiente a la opcion escogida
    	var op = $(e.currentTarget).parents().find("input");
    	// se checkea
    	$(op[0]).attr('checked', 'checked');
    	// si se ha checkeado envia el form
    	if(op.is(":checked")){
    		$('#paymentForm').submit();
    	}
    })
}

/**
 * Anyade un borde sombreado al elemento pasado por parametro al pasar el mouse por encima
 * @param elem: elemento hover
 */
function addBorderShadow(elem){
	$(elem).mouseover(function(e){
    	$(this).addClass('borderShadow');
    });
    $(elem).mouseout(function(e){
    	$(this).removeClass('borderShadow');
    });
}

/**
 * Prepara los elementos al cargar la pagina de pagos de AR
 */
function onLoadPaymentPage(){
	// ocultamos los formularios
	$(".cardsFormContent, .payButtonContainer").hide();

	// el formulario de visa queda desplegado junto con el boton de compra
	$(".firstBox").show();
	$(".cardsFormContent.firstBox").append($(".payButtonContainer").show());
	$(".firstBox .ico-rounded_arrow").addClass("up");

	// hace que las imagenes pequenyas puedan seleccionar el input al que pertenecen
	$(".cardsFormContent .littleCardimg, .cardsFormContent .cardImg").click(function(e){
		$(this).parent().find("input").attr('checked','checked');
	})
}

/**
 * Despliega un contenido oculto segun la accion
 * @param firedElem: elemento asociado a la accion click
 * @param content: contenido a mostrar
 * @param bool: boleano que indica si existe un boton
 * @param button: boton pasado por parametro
 */
function dropDownHideContent(firedElem, content, bool, button){
	// dividimos los elementos en los que se puede realizar la accion click
	var clickElem = firedElem.split(",");
	$(firedElem).click(function(e){
		// desactivamos todos los inputs
		$("input:radio").attr("checked", false);
		$("select").attr("disabled", "disabled");

		// si hay que controlar el boton de pago para que aparezca dentro del formulario de pago
		if(bool){
			putBuyButtonOnClick(e.currentTarget,content, button);
		}
		// ponemos todas las flechas hacia abajo
		$(clickElem[1]).removeClass("up");
		// ocultamos todos los formularios de tarjetas
		$(content).slideUp("fast");

		// recogemos el contenedor a mostrar/ocultar
		var cont = $(this).parent().find(content);

		// dependiendo de la visibilidad del contenedor
		if($(cont).css("display") == 'none'){
			//marcamos el primer input del contenedor por defecto al abrirlo
			var input = $(cont).parents().find("input:first");
			$(input[0]).attr("checked","checked");
			// si es visa o mastercard habilitamos tambien el primer select
			if(input[0].id == "banc_visa_split" || input[0].id == "banc_mastercard"){
				var sel = $(input[0]).parents().find("select:first").get(0);
				$(sel).attr("disabled","");
			}

			// mostramos capa
			$(cont).slideDown("fast")
			// modificamos direccion flecha
			$(this).addClass("up");
		}
		else {
			// ocultamos capa
			$(cont).slideUp("fast")
			$(this).removeClass("up");
		}

		// prevenimos el efecto recogida de la capa al ocultarla
		return false;
	});
}

/**
 * Coloca el boton de pago en el contenedor designado
 * @param e: elemento clickado
 * @param content: contenedor donde ira el boton
 * @param button: boton a mover
 */
function putBuyButtonOnClick(e,content, button){
	// si existe el boton de compra
	if($(button).length > 0){
		// si no es amex
		if($(e).attr("class") != "amexCard" ){
			// recogemos el contenedor donde ira el boton
			var elem = $(e).parent().find(content)
			// se anyade el boton de pago
			$(elem).append($(button));
			// nos aseguramos que no este oculto
			$(button).show();
		}
	}
}

/**
 * Muestra/Oculta varios elementos en el proceso de pago en CL segun el importe total
 * @param totalP: id del precio total
 * @param button: clase del contenedor del boton de pago
 * @param paymentSection: formulario de los metedos de pago
 * @param price: precio total actualizado via ajax
 */
function showPaymentButtonIfTotalPriceIsPositive(totalP, button, paymentSection, price){
	// si existe
	if($(totalP).length > 0){
		// si es mayor de 0
		if(price > 0){
			// oculta boton de pago
			$(button).hide();
			// muestra formulario de metodos de pago
			$(paymentSection).show();
		}
		else{
			if($("#travelAuth").length > 0){
				$("#travelAuth").show();
			}
			$(button).show();
			$(paymentSection).hide();
		}
	}
}

/**
 * Mueve el checkbox de aceptar condiciones para viajes hacia el metodo de pago escogido
 */
function moveTravelConditionsCheckbox(){
	if($('#paymentTravelAuthorize').length > 0){
	    $('#paymentMethods .gradientBox').mouseover(function(e){
	    	if(!jQuery.browser.msie){
				$(this).append($('#paymentTravelAuthorize'));
	    	}
	    	else{
	    		$('#paymentTravelAuthorize').insertAfter(this);
	    	}
	    });
	}
}

/**
 * Funcion genérica para option que muestra contenido con un efecto slide
 * param1: id sobre el que se hace click
 * param2: id que se ve afectado al aplicar la funcion
 */
function optionSlide(param1,param2) {
	$('#' + param1).click(function(){
		if($(this).is(':checked')){
			$('#' + param2).slideDown();
		}else{
			$('#' + param2).slideUp();
		}
	});
}

/**
 * Funcion genérica para option que muestra/oculta contenido
 * param1: id sobre el que se hace click
 * param2: id que se ve afectado al aplicar la funcion
 */
function optionShow(param1,param2) {
	$('#' + param1).click(function(){
		if($(this).is(':checked')){
			$('#' + param2).slideDown();
		}else{
			$('#' + param2).slideUp();
		}
	});
}
//================================ eCard
/**
 * Funcion mostrar/ocultar formularios de Personaliza tu regalo
 * param1: show
 * param2 - param3 - param4: hide
 * param5 anyade los gastos de envio si es true
 */
function optionCustomizeGift(param1,param2,param3,param4,param5) {
	if($('#'+param1).is(":checked")){
        $('.sendMethod > label').removeClass('bold');
        $('label[for=' + param1 + ']').addClass('bold');
		$('#' + param2).show();
		$('#' + param3).hide();
		$('#' + param4).hide();
        if (param5) addShippingCost();
        else removeShippingCost();
	}
	if($("#eCard").is(":checked")){
		$("#paymentWithoutEcard div.submit").hide();
		displayFirstOptionByDefault();
	}
	$('#' + param1).click(function(){
		if($(this).is(':checked')){
            //ponemos en negrita el label del checked
            $('.sendMethod > label').removeClass('bold');
            $('label[for=' + param1 + ']').addClass('bold');
			$('#' + param2).slideDown();
			$('#' + param3).slideUp();
			$('#' + param4).slideUp();
            if (param5) addShippingCost();
            else removeShippingCost();
		}
	});
}

/**
 * Funcion que checkea que si el checkbox del ecard esta activo o no
 * si esta activo, tambien comprueba el option del envio del eCard
 */
function checkShippingCost(){
	if (!$('#eCard').is(':checked') && isSurprise == 0) removeShippingCost();
	else if (($('#eCard').is(':checked') && $("#where-send-2").is(':checked')) || isSurprise == 1) addShippingCost();
}

/**
 * Suma gastos de envio del eCard
 */
function addShippingCost(){
    $('#shippingCosts').show();
    var quantity = parseInt($("#quantity").val());
    updatePrices(quantity, cardShippingCosts);
}

/**
 * Quita gastos de envio del eCard
 */
function removeShippingCost(){
    $('#shippingCosts').hide();
    var quantity = parseInt($("#quantity").val());
    updatePrices(quantity);

}

// getters
/**
 * Recoge el objeto eCard
 */
function getEcardInfo(ecardObject){
	this.obj_ecard =  ecardObject;
}

/**
 * Recoge del DOM el pais y el nombre de la imagen seleccionada
 */
function setAttributesFromSelectedThumb(e){
		// separamos los elementos por slash
		var thumbAttributes = (e.currentTarget.src).split("/");
		// anyadimos la id del thumb seleccionado al array
		thumbAttributes.push(e.currentTarget.id);
		// pasamos el array
		return thumbAttributes;
}

// setters
/**
 * Devuelve el objeto eCard
 */
function setEcardInfo(){
	return this.obj_ecard;
}

/**
 * Funcion mostrar texto mientras se escribe
 * en el textarea para personalizar la tarjeta regalo
 */
function customizeMsg(obj) {
    var msgText=obj.value;
    var pattern=/\n/g;
    msgText=msgText.replace(pattern,"<br />");
    $('#contentTxt').html(msgText);
    $('#inputContentTxt').val(msgText);
}
$(document).ready(function() {
	$('#ecard-message').keyup(function() {
		var totChar = 150;
	    var lengtTxt = $(this).val().length;
	    var tot = totChar - lengtTxt;
	    $('#numTotalChar').html(tot);
	    if(tot <= 0){
	        $('#ecard-message').attr("maxlength", 150);
	    }
	});
})

/**
 * Objeto que servira para trabajar con el JSON de eCard
 */
function eCardObjectLiteralData(){
	var data = {
			object: setEcardInfo(),
			categories: "",
			images: "",
			onPageLoad: true
	}
	return data;
}

/**
 * Prepara las categorias de eCard para el volcado en la pagina
 */
function pushEcardCategories(){
	// utilizamos las variables creadas para eCard
	var data = eCardObjectLiteralData();
	// por cada categoria
	for(var i=0;i < data.object.length; i++){
		// variables que serviran para destacar la primera opcion como checked
		var categorySelected = '';
		var checked = '';
		if(i == 0){
			// volcamos la clase
			categorySelected = 'categorySelected';
			checked = 'checked';
		}
		else{
			categorySelected = '';
			checked = '';
		}
		// montamos las categorias en una variable
		data.categories += '<div class="cardCategory ' + categorySelected + '">' +
							'<input type="radio" value="' + data.object[i].id + '" checked="' + checked + '" name="card.idCardCategory" class="cardCategory" id="ecard_' + data.object[i].id + '">' +
							'<label for="ecard_' + data.object[i].id + '">' + data.object[i].translateName + '</label></div>';
	}
	// volcamos las categorias
	$(".selectTemplate").html(data.categories);
}

/**
 * Prepara los thumbs para el volcado en la pagina
 */
function pushEcardImages(){
	// utilizamos las variables creadas para eCard
	var data = eCardObjectLiteralData();

	// recogemos la categoria seleccionada
	var categorySelected = setEcardCategorySelected();

	// buscamos la categoria en el objeto
	for(var i=0;i < data.object.length; i++){
		// si coincide
		if(categorySelected == data.object[i].id){
			var clear = '';
			if(j == 3){
				clear = '<div class="clear"></div>';
			}
			else{
				clear = '';
			}
			// recogemos todas las imagenes correspondientes a la categoria
		    for(var j=0;j < data.object[i].templates.length; j++){

		    	// Anyado la clase active al primero
		    	if(j==0){
		    		var activeimg=' class="active"';
		    	}else{
		    		var activeimg='';
		    	}
				// montamos las imagenes que pertenecen a la categoria seleccionada
				data.images += '<div class="template">' +
								'<img'+activeimg+' id="' + data.object[i].templates[j].id + '" alt="'+ data.object[i].name +'" title="' + data.object[i].templates[j].imageFileName + '" src="https://letsbonus.s3.amazonaws.com/ecard/' + data.object[i].countryIsoCode + '/' + data.object[i].name + '/thumbs/' + data.object[i].templates[j].imageFileName + '" />' +
								'</div>' + clear;
			}

		}
	}
	// volcamos la imagenes
	$("#eCardTemplates").html(data.images);

	// iniciamos el listener para cuando el usuario seleccione una imagen
	$('#eCardTemplates img').bind('click', function(e){
		// Si no esta activo mostramos la img
		if(!$(this).hasClass('active')){
			//Controlo cual esta activo
			$("#eCardTemplates .template img").removeClass("active").css('opacity','0.5');
			$(this).addClass("active").css('opacity','1');

			// muestra la imagen grande del thumb seleccionado
			displaySelectedEcardImg(e);
		}
	});
}
/**
 * Listener para el checkbox de regalar plan, realiza varios procesos al checkear esta opcion
 */
function onCheckEcardGiveOption(){
	$("input#eCard").bind("click", function(e){
		// controlamos el boton de pago segun las opciones escogidas
		controlPaymentButton(e);
		// modifica la pagina segun las acciones del usuario
		displayFirstOptionByDefault();
	});
}

/**
 * Comportamiento de la pagina de eCard al cargar por primera vez
 */
function displayFirstOptionByDefault(){
  	//comprobamos si la primera opcion esta checked, para ponerla o no en engrita
    if($("#where-send-1").is(":checked")) $('label[for=where-send-1]').addClass('bold');
	checkShippingCost();
	// utilizamos las variables creadas para eCard
	var data = eCardObjectLiteralData();
	// si se acaba de cargar la pagina
	if(data.onPageLoad == true){
		$(".categorySelected input:eq(0)").attr("checked", "checked");

		var firstElement =  ["","","", "", data.object[0].countryIsoCode, data.object[0].name, "", data.object[0].templates[0].imageFileName, 1];
		// inicializamos la seleccion de la primera categoria y el volcado de los thumbs
		pushThumbImages();
		// pasamos los atributos para mostrar la imagen grande
		putSelectedPreviewImg(firstElement);
		// y desactivamos esta condicion
		data.onPageLoad = false;
	}
}

/**
 * Muestra o oculta el boton de compra segun la opcion seleccionada
 * @param e: opcion seleccionada
 */
function controlPaymentButton(e){
	//ocultamos el boton de compra
	if($(e.currentTarget).is(":checked")){
		$("#paymentWithoutEcard div.submit").hide();
	}
	else{
		$("#paymentWithoutEcard div.submit").show();
	}
}
/**
 * Proceso de volcado de la imagen grande
 * @param e: thumb seleccionado
 */
function displaySelectedEcardImg(e){
	// volcamos la imagen seleccionada en la ventana de preview
	putSelectedPreviewImg(setAttributesFromSelectedThumb(e));
}

/**
 * Vuelca la url del thumb seleccionado para ver la imagen en formato grande
 * @param thumbAttributes: parametros con los que se construye la imagen grande
 */
function putSelectedPreviewImg(thumbAttributes){
		$imgfirst = $('#eCardTemplates .template img.active');
		var categoryImg = $imgfirst.attr('alt');
		var nameImg = $imgfirst.attr('title');
		var idImg = $imgfirst.attr('id');

		//variables cache
		$previewPhoto = $("#previewPhoto");
		$previewImg = $("#previewImg");

		// ruta src
		var imgSelected = 'https://letsbonus.s3.amazonaws.com/ecard/' + thumbAttributes[4] + '/' + categoryImg + '/web/' + nameImg;

		// Anyado la class loading
		$previewPhoto.addClass("loading");

		// Escondo la img
		$previewImg.fadeOut();

		// volcamos la id de la imagen en un input oculto
		$("#bigImgSelected").val(idImg);

		// Anyado la img por ajax para controlar cuando se carga
		var _image = new Image();
		_image.src = imgSelected;
		_image.id = 'previewImg';
		$(_image).load(function(){
			$previewPhoto.removeClass("loading");
			$previewPhoto.html(_image);
			$("#previewImg").fadeIn();
			_image.alt = "eCard";
		});
}

/**
 * Recoge del DOM el valor de la categoria seleccionada
 */
function getEcardCategorySelected(){
	this.eCardCategorySelected = $("input[name=card.idCardCategory]:checked").val();
}

/**
 * Devuelve el valor de la categoria seleccionada
 */
function setEcardCategorySelected(){
	return this.eCardCategorySelected;
}

/**
 * Inicia el proceso de volcado de las imagenes segun la categoria seleccionda por el usuario
 */
function onSelectEcardCategory(){
	$("input[name=card.idCardCategory]").bind('click', function(e){
		// preparamos el volcado de las thumbs
		pushThumbImages();
		// controla el estilo de las categorias seleccionadas y no seleccionadas
		categoriesStyle(this);
	});
}
/**
 * Proceso que prepara el volcado de las thumbs de eCard
 */
function pushThumbImages(){
	// recogemos la categoria seleccionada
	getEcardCategorySelected();
	// volcamos las imagenes de la categoria seleccionada
	pushEcardImages();
}

/**
 * Aplica estilo a la categoria al pasar con el mouse por encima para destacarla
 */
function onHoverEcardCategory(){
	// cuando el puntero esta encima
	$('.selectTemplate .cardCategory').mouseover(function(){
		// comprobamos que no sea un elemento seleccionado
		if($(this).hasClass('categorySelected') == false){
			// aplicamos estilo
			$(this).css('font-weight','bold');
		}
	});
	// cuando el puntero ya no este encima
	$('.selectTemplate .cardCategory').mouseout(function(){
		// comprobamos que no sea una opcion seleccionada
		if($(this).hasClass('categorySelected') == false){
			// aplicamos estilo
			$(this).css('font-weight','normal');
		}
	});
}

/**
 * Controla el estilo de las categorias seleccionadas y no seleccionadas
 */
function categoriesStyle(e){
	$('.cardCategory').removeClass('categorySelected').css('font-weight','normal');
	$(e).parent().addClass('categorySelected').css('font-weight','bold');

	var data = eCardObjectLiteralData();
	var firstElement =  ["","","", "", data.object[0].countryIsoCode, data.object[0].name, "", data.object[0].templates[0].imageFileName, 1];
	putSelectedPreviewImg(firstElement);
}

/**
 * Pone como checked las opciones de pago
 */
function initWithPaymentMethodChecked(bool){
	if($("#customizeGift").length == 0){
	    var b = bool;
	    loadScript("/js/letsbonus.validations.js", function(){
	         switch (getIsoCountryFromBodyClass()) {
	          case 'es':
	          case 'it':
	          case 'pt':
	          case 'co':
	          case 'uy':
	                  // si el precio total es mayor que 0
	                if(b){
	                    // muestra los metodos de pago
	                    validateCardTyping();
	                      $("#paymentMethods").insertBefore($(".initPaymentMethods"));
	                      if($("#paymentAuthorize").length > 0){
	                          $("#paymentAuthorize").show();
	                          $('#paymentMethods').show();
	                      }
	                    if(getIsoCountryFromBodyClass() == 'it'){
	                        $(".payButtonContainer").insertAfter($("#paymentMethodsForm"));
	                        $(".terms_conditions_it").insertAfter($(".payButtonContainer"));
	                        $(".terms_conditions_it").show();
	                    }
	                  }
	                  else if(b == false && b != undefined){
	                      // oculta los metodos de pago
	                      $(".paymentFormContent").append($("#paymentMethods"));
	                    $('#paymentMethods').hide();
	                    $("#paymentAuthorize").hide();
	                    $("#paymentForm").append($(".payButtonContainer"));
	                    if(getIsoCountryFromBodyClass() == 'it'){
	                        $(".terms_conditions_it").insertAfter($(".payButtonContainer"));
	                        $(".terms_conditions_it").show();
	                  	}
	                  }
	                // esta opcion se ejecuta al cargar la pagina
	                if(b == undefined){
	                    //$("#paymentMethods").insertBefore($(".initPaymentMethods"));
	                    //$('#paymentMethods').show();
	                    if($("#stored_card_radio_true").length > 0 && $('#stored_card_radio_true').is(':visible') == true && this.total_price > 0){
	                        // mostramos y ocultamos las capas
	                        $('#paymentFormGroup').slideUp();
	                        $('#savedCardsFormGroup').slideDown();
	                        $('#stored_card_radio_false').removeAttr('checked');
	                        $('#stored_card_radio_true').attr('checked','checked');
	                        $('#banco').val(CC_VISA);
	                        $('#paymentForm').removeData('validator');
	                        $('#paymentAuthorize').hide();
	                        paymentSavedCardsFormValidate();
	                    }
	                    else if($("label[for=newCards]").lengh > 0 && $('#stored_card_radio_false').is(':visible') == true && this.total_price > 0) {
	                        // mostramos y ocultamos las capas
	                        $('#paymentFormGroup').slideDown();
	                        $('#savedCardsFormGroup').slideUp();
	                        $('#stored_card_radio_true').removeAttr('checked');
	                        $('#stored_card_radio_false').attr('checked','checked');
	                        $('#paymentForm').removeData('validator');
	                        $('#paymentAuthorize').toggle();
	                        paymentFullFormValidate();
	                    }
	                    else{
	                        if(this.total_price > 0){
	                            $("#paymentMethods").insertBefore($(".initPaymentMethods"));
	                            $('#paymentMethods').show();
	                        }
	                        else{
	                            $(".paymentFormContent").append($("#paymentMethods"));
	                            $('#paymentMethods').hide();
	                            if(getIsoCountryFromBodyClass() == 'it' || getIsoCountryFromBodyClass() == 'uy'){
	                                $("#paymentForm").append($(".payButtonContainer"));
	                                if($(".terms_conditions_it").length > 0){
	                                    $(".terms_conditions_it").insertAfter($(".payButtonContainer"));
	                                    $(".terms_conditions_it").show();
	                                }
	                            }
	                        }
	                        // disaparmos el listener para la validacion en caso de que no haya entrado en ningun caso anterior
	                        paymentFullFormValidate();
	                    }
	                }
	              break;
	          case 'ar':
	                      if(b){
	                          if($("#visa_hipotecario").length > 0){
	                              $(".payButtonContainer").insertAfter($("#visa_hipotecario"));
	                          }
	                          else{
	                              $(".payButtonContainer").insertBefore($("#paymentAuthorize"));
	                          }
	                          $("#paymentMethods").insertBefore($(".initPaymentMethods"));
	                        $('#paymentMethods').show();
	                      }
	                      else if(b == false && b != undefined){
	                          $(".paymentFormContent").append($("#paymentMethods"));
	                        $('#paymentMethods').hide();
	                          $(".payButtonContainer").insertBefore($("#paymentAuthorize"));
	                      }
	                      if(b == undefined){
	                          if($("#visa_hipotecario").length > 0 && $("#visa_hipotecario").is(':visible') == true && this.total_price > 0){
	                              $(".payButtonContainer").insertAfter($("#visa_hipotecario"));
	                          }
	                          else{
	                              $(".payButtonContainer").insertBefore($("#paymentAuthorize"));
	                              $('#paymentMethods').hide();
	                          }
	                      }
	              break;
	          case 'mx':
	          case 'cl':
	                  if(b){
	                      $("#paymentMethods").insertBefore($(".initPaymentMethods"));
	                      $('#paymentMethods').show();
	                      if(getIsoCountryFromBodyClass() == 'mx'){
	                          $(".payButtonContainer").show();
	                      } else $(".payButtonContainer").hide();
	                  }
	                  else if(b == false && b != undefined){
	                      $(".paymentFormContent").append($("#paymentMethods"));
	                      $('#paymentMethods').hide();
	                      $(".payButtonContainer").insertBefore($("#paymentAuthorize"));
	                      $(".payButtonContainer").show();
	                  }
	                  if(b == undefined){
	                      if(this.total_price > 0){
	                          $("#paymentMethods").insertBefore($(".initPaymentMethods"));
	                          $('#paymentMethods').show();
	                          if(getIsoCountryFromBodyClass() == 'mx'){
	                              $(".payButtonContainer").show();
	                          } else $(".payButtonContainer").hide();
	                      }
	                      else{
	                          $(".paymentFormContent").append($("#paymentMethods"));
	                          $('#paymentMethods').hide();
	                          $(".payButtonContainer").insertBefore($("#paymentAuthorize"));
	                          $(".payButtonContainer").show();
	                      }
	                  }
	              break;
	          default:
	               // nothing
	              break;
	            }


	    });
	}
}

/**
 * Recoge el valor del precio total y modifica la vista segun el valor
 * @param totalPrice: valor total de la compra
 */
function getTotalPriceFromPaymentFormOnPageLoad(totalPrice){
	this.total_price = totalPrice;
}

/**
 * Recoge un flag para poder enviar el formulario
 * @param formValidated: flag boleano
 */
function sendFamilyNewsletterForm(formValidated){
	// si es true
	if(formValidated){
		// enviamos el formulario por ajax
		sendFamilyNewsletterData();
	}
}

function getClientStatus(isLogged, isSubscribed, isClient){
	// recogemos las variables de estado y las guardamos en una array
	this.clientStatus = {
			'isLogged':isLogged,
	        'isSubscribed':isSubscribed,
	        'isClient':isClient
	};
}
/**
 * Devuelve una array de estados del cliente
 * @returns: array
 */
function setClientStatus(){
	return this.clientStatus;
}

/**
 * Monta el formulario de registro de la newsletter de family & kids segun el estado del cliente
 */
function putFamilyNews(){
	// recogemos toda la capa donde esta el formulario de registro a la news de family & kids
	var form = $(".sidebarNewsRegister");
	// si el usuario esta logueado
	if(setClientStatus().isLogged){
		// si el usuario ya esta inscrito en la newsletter
		if(setClientStatus().isSubscribed){
			// ocultamos el formulario de registro
			form.hide();
		}
		else{
			// mostramos el formulario
			form.show();
			// procesamos los elementos a mostrar
			$(".sidebarNewsRegister .second").hide();
			$(".sidebarNewsRegisterButton").insertAfter(".sidebarNewsRegisterForm");
			$(".sidebarNewsRegister .first").show();

			// datos a enviar cuando el usuario se quiere apuntar a la news
			var dataToSend = {
				prevSection: $("#prevSection").val(),
				utm_source: $("#utm_source").val()
			};

			// al apuntarse a la news
			$("input.first").bind('click', function(){
				$.ajax({
			           type: "post",
			           url: window.location.protocol + "//" + window.location.host + "/newsletter/familyplanform/insert",
			           dataType : "json",
			           data: dataToSend,
			           success: function(response){
			        	   // ocultamos todos los elementos
			        	   $(".sidebarNewsRegisterTitles, .sidebarNewsRegisterForm, .sidebarNewsRegisterButton").fadeOut("slow", function(){
			        		   // mostramos el mensaje de exito en la peticion
			        		   $(".sidebarNewsSuccessMsg").fadeIn("fast");
			        		   // si no es cliente
					           if(!response.isClient){
					        	   // mostramos el boton de registro
					        	   showRegisterButtonInSidebarNewsletterBanner();
					        	   // al clickar redirigir a la pagina de registro
					        	   redirectToRegisterPage();
					           }
			        	   });
			           },
			           error: function(){
			        	   $(".sidebarNewsRegister .sendError.validateError").insertAfter(".sidebarNewsRegisterButton").fadeIn("fast");
			           }
			    });
			});
		}
	}
	else{
		// mostramos el formulario de registro a la newsletter
		form.show();
		$(".sidebarNewsRegisterButton").removeClass("marleft30");
		$(".sidebarNewsRegisterButton").addClass("marleft5");
		$(".sidebarNewsRegisterButton").insertAfter(".sidebarNewsRegisterForm fieldset");
		$(".sidebarNewsRegisterTxt .second").show();
		$(".sidebarNewsRegisterForm, .sidebarNewsRegisterButton input.second").show();
		$(".sidebarNewsRegister .first, .sidebarNewsSuccessMsg").hide();

		// al apuntarse a la news
		$(".sidebarNewsRegisterButton input.second").bind('click', function(){
			// validamos el formulario
			familyNewsletterRegisterValidate();
		});

	}
}

function showRegisterButtonInSidebarNewsletterBanner(){
   // ocultamos todos los botones menos el de regitro
   $(".sidebarNewsRegisterButton .first, .sidebarNewsRegisterButton .second").hide();
   $(".sidebarNewsRegisterButton").insertAfter(".sidebarNewsSuccessMsg");
   $(".sidebarNewsRegisterButton").addClass("marleft30");
   $(".sidebarNewsRegisterButton, .sidebarNewsRegisterButton .registerAccountButton").fadeIn("fast");
}

/**
 * Redirige al usuario a la pagina de registro
 */
function redirectToRegisterPage(){
	$(".sidebarNewsRegisterButton .registerAccountButton").bind('click', function(e){
		e.preventDefault();
		// redirigimos al usuario a la pagina de registro
		window.location = window.location.protocol + "//" + window.location.host + "/account/create";
	})
}

function sendFamilyNewsletterData(){
	// datos a enviar cuando el usuario se quiere apuntar a la news sin estar logueado
	var dataToSend = {
		'newsletter.mail': $(".sidebarNewsRegister input[name='newsletter.mail']").val(),
		'newsletter.idCity': $(".sidebarNewsRegister select[name='newsletter.idCity']").val(),
		acceptLegalTermsHidden: $(".sidebarNewsRegister #acceptLegalTermsHidden").val(),
		prevSection: $("#prevSection").val(),
		utm_source: $("#utm_source").val()
	};
	// realizamos el envio por ajax
	$.ajax({
		type: "post",
		url: window.location.protocol + "//" + window.location.host + "/newsletter/familyplanform/insert",
		dataType : "json",
		data: dataToSend,
		success: function(response){
     	   // ocultamos todos los elementos
     	   $(".sidebarNewsRegisterTitles, .sidebarNewsRegisterForm, .sidebarNewsRegisterButton").fadeOut("slow", function(){
     		   // mostramos el mensaje de exito en la peticion
     		   $(".sidebarNewsSuccessMsg, .sidebarNewsSuccessMsg .first").fadeIn("fast");
     		   // si no es cliente
		           if(!response.isClient){
		        	   // mostramos el boton de registro
		        	   showRegisterButtonInSidebarNewsletterBanner();
		        	   // al clickar redirigir a la pagina de registro
		        	   redirectToRegisterPage();
		           }
     	   });
        },
		error: function(){
			$(".sidebarNewsRegister .sendError.validateError").insertAfter(".sidebarNewsRegisterButton").fadeIn("fast");
		}
	});
}

/**
 * Devuelve el numero de pestanyas existentes en el menu de navegacion
 * @returns
 */
function setMenuTabsQuantity(){
	// recoge la cantidad de pestanyas existentes en el menu de navegacion
	var tabs = $(".menulist li").length;
	return tabs;
}

/**
 * Aplica/Quita el borde derecho a las pestanyas siempre que el numero de estas sea menor/mayor a lo indicado por parametro
 * @param maxTabsNumber: parametro que indica el numero de pestanyas maximas
 */
function controlBorderRightForLastTabOfTheMenu(maxTabsNumber){
	// si el numero de pestanyas es menor al maximo permitido
	if(setMenuTabsQuantity() < maxTabsNumber){
		// aplicamos el borde derecho para delimitar el area clickable
		$(".menulist li a:last").addClass("applyBorderRightForMenuTab");
	}
	// sino
	else{
		// eliminamos el borde derecho
		$(".menulist li a:last").addClass("removeBorderRightForMenuTab");
	}
}
