var IBE = {
  startGesamt: {},
  gesamt: 0,
  servicePrices: {},
  userClick: true,
  checkboxUebergreifend: false,
  readRateTotals: function() {
    jQuery("[id^=rate_gesamt_]").each(function(i,el) {
      IBE.startGesamt[jQuery(this).attr("id")] = parseFloat(jQuery(this).val());
    });
  },
  updatePricesRadio: function(radio) {
    var verfuegbarkeitId = jQuery(radio).attr("id").split("_")[2];
    
    var priceElId = "#preis_"+jQuery(radio).attr("id");
    if(jQuery(radio).val() != "none") {
      var price = parseFloat(jQuery(priceElId).val());
      IBE.servicePrices[jQuery(radio).attr("name")] = price;
    } else if (jQuery(radio).val() == "none") {
      IBE.servicePrices[jQuery(radio).attr("name")] = 0.0;
    }
    
    var sumServices = 0.0;
    jQuery.each(IBE.servicePrices, function(i,el) {
      sumServices += el;
    });
    
    if(multiBooking) {
      jQuery("#display_rate_gesamt_1").html(iwFormatFloat(IBE.startGesamt["rate_gesamt_1"]+sumServices, decimalSeperator));
    } else {
      jQuery("#display_rate_gesamt_"+verfuegbarkeitId).html(iwFormatFloat(IBE.startGesamt["rate_gesamt_"+verfuegbarkeitId]+sumServices, decimalSeperator));
    }
  },
  updatePricesSelect: function(select) {
    var verfuegbarkeitId = jQuery(select).attr("id").split("_")[2];
    
    var priceElId = "#preis_"+jQuery(select).attr("id");
    var price = parseFloat(jQuery(priceElId).val());
    IBE.servicePrices[jQuery(select).attr("id")] = price*jQuery(select).val().split("_")[1];
    
    var sumServices = 0.0;
    
    jQuery.each(IBE.servicePrices, function(i,el) {
      sumServices += el;
    });
    
    if(multiBooking) {
      jQuery("#display_rate_gesamt_1").html(iwFormatFloat(IBE.startGesamt["rate_gesamt_1"]+sumServices, decimalSeperator));
    } else {
      jQuery("#display_rate_gesamt_"+verfuegbarkeitId).html(iwFormatFloat(IBE.startGesamt["rate_gesamt_"+verfuegbarkeitId]+sumServices, decimalSeperator));
    }
  },
  updatePricesCheckbox: function(checkbox, uebergreifend) {
    var input;
    var checked;
    
    if(uebergreifend === 0) {
      input = checkbox;
    } else {
      input = uebergreifend;
    }
    
    checked = jQuery(input).is(":checked");
    
    var priceElId = "#preis_"+jQuery(checkbox).attr("id");
    if(!checked) {
      IBE.servicePrices[jQuery(checkbox).attr("id")] = 0.0;
    } else {
      var price = parseFloat(jQuery(priceElId).val());
      IBE.servicePrices[jQuery(checkbox).attr("id")] = price;
    }

    var sumServices = 0.0;
    
    jQuery.each(IBE.servicePrices, function(i,el) {
      sumServices += el;
    });
    
    var verfuegbarkeitId = jQuery(checkbox).attr("id").split("_")[2];
    
    if(multiBooking) {
      jQuery("#display_rate_gesamt_1").html(iwFormatFloat(IBE.startGesamt["rate_gesamt_1"]+sumServices, decimalSeperator));
    } else {
      jQuery("#display_rate_gesamt_"+verfuegbarkeitId).html(iwFormatFloat(IBE.startGesamt["rate_gesamt_"+verfuegbarkeitId]+sumServices, decimalSeperator));
    }
  },
  getSelectorAppendix: function(input) {
    var buttonindex;
    var anfrageNr;
    var gruppenId;
    var appendix;
    if(multiBooking) {
      anfrageNr = jQuery(input).attr("id").split("_")[3];
      gruppenId = jQuery(input).attr("id").split("_")[4];
      appendix = anfrageNr+"_"+gruppenId;
    } else {
      buttonindex = jQuery(input).attr("id").split("_")[3];
      anfrageNr = jQuery(input).attr("id").split("_")[4];
      gruppenId = jQuery(input).attr("id").split("_")[5];
      appendix = buttonindex+"_"+anfrageNr+"_"+gruppenId;
    }
    return appendix;
  },
  getServiceSelectorAppendix: function(input) {
    var partOne = IBE.getSelectorAppendix(input);
    var leistungKey;
    if(multiBooking) {
      leistungKey = jQuery(input).attr("id").split("_")[5]+"_"+jQuery(input).attr("id").split("_")[6];
    } else {
      leistungKey = jQuery(input).attr("id").split("_")[6]+"_"+jQuery(input).attr("id").split("_")[7];
    }
    return partOne+"_"+leistungKey;
  },
  getZimmerBox: function(input) {
    return "#zimmer_zusatzleistung_"+this.getSelectorAppendix(input);
  },
  triggerChildRadio: function(input) {
    var zimmerBox = IBE.getZimmerBox(input);
    var childRadio = zimmerBox+" input[type=radio][value="+jQuery(input).val()+"]";
    jQuery(childRadio).trigger("click");
  },
  triggerChildCheckbox: function(input) {
    var zimmerBox = IBE.getZimmerBox(input);
    var childCheckbox = zimmerBox+" input[type=checkbox][value="+jQuery(input).val()+"]";
    IBE.checkboxUebergreifend = true;
    jQuery(childCheckbox).trigger("click");
    jQuery(childCheckbox).each(function(i,el) {
      IBE.updatePricesCheckbox(el,input);
    });
    IBE.checkboxUebergreifend = false;
  },
  triggerChildSelect: function(input) {
    var zimmerBox = IBE.getZimmerBox(input);
    var childSelect = "select[id^=select_zusatzleistung_"+IBE.getServiceSelectorAppendix(input)+"_]";
    jQuery(childSelect).val(jQuery(input).val());
    jQuery(childSelect).trigger("change");
  }
}

jQuery(document).ready(function() {
  if($("#ibefooter").is(":visible")) {
    $("#loading_animation").remove();
  }
});

jQuery(document).ready(function() {  
	jQuery('.zusatzleistung_info').each(function(i,el) {
	  jQuery(el).qtip({
      content: jQuery("#markup_"+jQuery(el).attr("id")),
      position: {
            my: 'left middle', 
            at: 'right middle'
      },
      style: {
        classes: 'ui-tooltip-light'
      }
    });
  });
  
  jQuery("#profil_buchen_button").click(function() {
    if(($('#ibe #firma').val() == '') && is_firma) { 
      alert(firma_text);
      return false;
    };
    return true;
  });
  
  jQuery(".container-plzort #plz").autocomplete({
    source:  function( request, response ) {
      $.ajax({
        url: zipServiceURI,
        dataType: "json",
        data: {
          country_id: jQuery("#land").val(),
          language: currentLang,
          zip: request.term
        },
        success: function( data ) {
          if(data.result.length === 1) {
            jQuery(".container-plzort #ort").val(data.result[0].city);
            jQuery(".container-plzort #plz").autocomplete("close");
            return;
          }
          
          response( $.map( data.result, function( item ) {
            return {
              label: item.zip + " " + item.city,
              value: item.zip,
              city: item.city
            }
          }));
        }
      });
    },
    minLength: 3,
    select: function( event, ui ) {
      jQuery(".container-plzort #ort").val(ui.item.city);
    }
  });
  
  jQuery("#anz_kinder1, #anz_kinder2, #anz_kinder3").hide();
  
  jQuery("#anz_kinder1, #anz_kinder2, #anz_kinder3").click(function() {
    var kinderContainerId = jQuery(this).attr("id").substring(10,11);
    jQuery("#container-anzkinder_"+kinderContainerId).slideToggle();
  });
  
  jQuery(".kinder_zeile_close").click(function() {
    var kinderContainerId = jQuery(this).attr("id").split("_")[3];
    jQuery("#container-anzkinder_"+kinderContainerId).slideUp();
  });
  
  jQuery(".zimmerAnzKinder").change(function() {
    var kinderContainerId = jQuery(this).attr("id").substring(13,14);
    var kinderSelectedCount = jQuery(this).val();
    var markup = "";
    if(kinderSelectedCount === "0") {
      jQuery("#anz_kinder"+kinderContainerId).hide();
      jQuery("#anz_kinder_hidden"+kinderContainerId).show();
      jQuery("#container-anzkinder_"+kinderContainerId).slideUp();
    } else {
      jQuery("#tableKinderBody_"+kinderContainerId).html("");
      for(var i = 1; i <= kinderSelectedCount; i++) {
        markup += printSelectKinder(kinderContainerId,i);
      }
      jQuery("#anz_kinder_hidden"+kinderContainerId).hide();
      jQuery("#anz_kinder"+kinderContainerId).show();
      jQuery("#tableKinderBody_"+kinderContainerId).html(markup);
      
      for(var i = 1; i <= kinderSelectedCount; i++) {
        var alterId = reqParAlter["zimmerAlterKind"+kinderContainerId+"_"+i];
        if(alterId != "") {
          jQuery("#zimmerAlterKind"+kinderContainerId+"_"+i).val(alterId);
        }
      }
      
      jQuery("#container-anzkinder_"+kinderContainerId).slideDown();
    }
  });
  
  jQuery(".zimmerAnzKinder").each(function(i,el) {
    jQuery(this).trigger("change");
    var kinderContainerId = jQuery(this).attr("id").substring(13,14);
    jQuery("#container-anzkinder_"+kinderContainerId).hide();
  });
  
  if(typeof multiBooking != "undefined") {
    
    //Einlesen aller Gesamtpreise
    IBE.readRateTotals();
    
    
    /*
    Bei click auf keine leistung radio:
    Zimmerweise Auswahlbox ausblenden
    Alle checkboxen abwählen
    Alle selects auf 0 stellen
    Preis neu berechnen
    */
    jQuery(".zusatzleistungen_gruppe_leistung .radio_zusatzleistung_keine").click(function() {
      var zimmerBox = IBE.getZimmerBox(this);
      jQuery(zimmerBox).slideUp();
      IBE.triggerChildRadio(this);
    });
    
    
    /*
    Bei click auf individuell radio auswahl:
    Zimmerweise Auswahlbox einblenden.
    Alle übergreifenden checkboxen abwählen.
    Alle übergreifenden selects auf 0 stellen.
    */
    jQuery(".zusatzleistungen_gruppe_leistung .radio_zusatzleistung_individuell").click(function() {
      var zimmerBox = IBE.getZimmerBox(this);
      jQuery(zimmerBox).slideDown();
    });
    
    
    /*
    Bei click auf individuell checkbox auswahl:
    Zimmerweise Auswahlbox einblenden.
    Alle übergreifenden checkboxen abwählen.
    Alle übergreifenden selects auf 0 stellen.
    */
    jQuery(".zusatzleistungen_gruppe_leistung .checkbox_zusatzleistung_individuell").click(function() {
      var zimmerBox = IBE.getZimmerBox(this);
      var triggeredId = jQuery(this).attr("id");
      if(jQuery(zimmerBox).is(":visible")) {
        jQuery(zimmerBox).slideUp();
        jQuery(this).parents(".zusatzleistungen_gruppe").find(".zusatzleistungen_zimmer_gruppe_leistung input[type=checkbox]:checked").each(function(i,el) {
          jQuery(el).removeAttr("checked");
          IBE.updatePricesCheckbox(el,0);
        });
      } else {
        jQuery(zimmerBox).slideDown();
      }
      jQuery(this).parents(".zusatzleistungen_gruppe").find(".zusatzleistungen_gruppe_leistung input[type=checkbox]:checked").each(function(i,el) {
        var elId = jQuery(el).attr("id");
        if(elId !== triggeredId) {
          jQuery(el).removeAttr("checked");
        }
      });
      jQuery(this).parents(".zusatzleistungen_gruppe").find("select").each(function(i,el) {
        jQuery(el).val(0);
      });
    });
    
    
    /*
    Bei auswahl eines übergreifenden radios:
    Zimmerweise Auswahlbox ausblenden
    Korespondierendes radio innherhalb der Zimmerbox anwählen
    Preis von Zimmerweisem radio berechnen
    */
    jQuery(".zusatzleistungen_gruppe_leistung .radio_zusatzleistung_uebergreifend").click(function() {
      var zimmerBox = IBE.getZimmerBox(this);
      jQuery(zimmerBox).slideUp();
      IBE.triggerChildRadio(this);
    });
    
    
    /*
    Bei auswahl/abwahl einer übergreifenden checkbox:
    Zimmerweise Auswahlbox ausblenden/einblenden
    Korespondierende checkbox innherhalb der Zimmerbox anwählen/abwählen
    Individuell checkbox abwählen
    Preis von Zimmerweiser checkbox berechnen
    */
    jQuery(".zusatzleistungen_gruppe_leistung .checkbox_zusatzleistung_uebergreifend").click(function() {
      var zimmerBox = IBE.getZimmerBox(this);
      jQuery(zimmerBox).slideUp();
      var individuellCheckbox = "#checkbox_individuell_zusatzleistung_"+IBE.getSelectorAppendix(this);
      jQuery(individuellCheckbox).removeAttr("checked");
      IBE.triggerChildCheckbox(this);
    });
    
    
    /*
    Bei änderung eines übergreifenden select:
    Zimmerweise Auswahlbox ausblenden
    Korespondierendes select innherhalb der Zimmerbox auf selben Wert setzen
    Preis des Zimmerweisen select berechnen
    */
    jQuery(".zusatzleistungen_gruppe_leistung select").change(function() {
      var zimmerBox = IBE.getZimmerBox(this);
      jQuery(zimmerBox).slideUp();
      var individuellCheckbox = "#checkbox_individuell_zusatzleistung_"+IBE.getSelectorAppendix(this);
      jQuery(individuellCheckbox).removeAttr("checked");
      IBE.triggerChildSelect(this);
    });
    
    
    /*
    Bei klick auf Zimmerweisem radio:
    Preis neu berechnen
    */
    jQuery(".zusatzleistungen_zimmer_gruppe_leistung input[type=radio]").click(function() {
      IBE.updatePricesRadio(this);
    });
    
    
    /*
    Bei klick auf Zimmerweisem checkbox:
    Preis neu berechnen
    */
    jQuery(".zusatzleistungen_zimmer_gruppe_leistung input[type=checkbox]").click(function() {
      if(!IBE.checkboxUebergreifend) {
        IBE.updatePricesCheckbox(this,0);
      }
    });
    
    
    /*
    Bei change auf Zimmerweises select:
    Preis neu berechnen
    */
    jQuery(".zusatzleistungen_zimmer_gruppe_leistung select").change(function() {
      IBE.updatePricesSelect(this);
    });
    
    
    /*
    Bei Ratenwechsel:
    Inkludierte Gruppen und Einzelleistungen ausblenden
    Ratentotal neu einlesen
    Ausgeblendete merken
    */
    jQuery(".rate_radio").click(function() {
      if(!multiBooking) {
        var radio = this;
        var anfrageNr = jQuery(this).attr("id").split("_")[1];
        var buttonindex = jQuery(this).attr("id").split("_")[0];
        var inkludierteGruppen = leistungenInRate[jQuery(this).attr("id")].gruppen;
        var inkludierteEinzelleistungen = leistungenInRate[jQuery(this).attr("id")].einzelleistungen;
        var ratenPreis = parseFloat(jQuery("#preis_"+jQuery(this).attr("id")).val());
        
        jQuery("#rate_gesamt_"+anfrageNr).val(ratenPreis);
        jQuery("#display_rate_gesamt_"+anfrageNr).html(iwFormatFloat(ratenPreis, decimalSeperator));
        
        IBE.readRateTotals();
        
        if((ausgeblendeteGruppen !== inkludierteGruppen) && (ausgeblendeteEinzelleistungen !== inkludierteEinzelleistungen)) {
          
          //Alle auswahlen bei Ratenwechsel zurücksetzen
          jQuery(radio).parents(".raten_zusatzleistungen").find(".radio_zusatzleistung_keine").trigger("click");
          jQuery(radio).parents(".raten_zusatzleistungen").find(".zusatzleistungen_gruppe_leistung input[type=checkbox]:checked").each(function(i,el) {
            jQuery(el).removeAttr("checked");
            IBE.triggerChildCheckbox(el);
          });
          jQuery(radio).parents(".raten_zusatzleistungen").find(".zusatzleistungen_zimmer_gruppe_leistung input[type=checkbox]:checked").each(function(i,el) {
            jQuery(el).trigger("click");
            IBE.updatePricesCheckbox(el,0);
          });
          jQuery(radio).parents(".raten_zusatzleistungen").find("select.select_zusatzleistung_uebergreifend").each(function(i,el) {
            jQuery(el).val("0");
            jQuery(el).trigger("change");
          });
          
          
          jQuery.each(ausgeblendeteGruppen, function(i,el) {
            jQuery("#gruppe_"+el).slideDown();
            jQuery("#titel_"+el).slideDown();
          });
        
          jQuery.each(ausgeblendeteEinzelleistungen, function(i,el) {
            jQuery(el).slideDown();
          });

          jQuery.each(inkludierteGruppen, function(i,el) {
            jQuery("#gruppe_"+el).slideUp();
            jQuery("#titel_"+el).slideUp();
          });
        
          jQuery.each(inkludierteEinzelleistungen, function(i,el) {
            jQuery(el).slideUp();
          });
        }
        
        ausgeblendeteGruppen = inkludierteGruppen;
        ausgeblendeteEinzelleistungen = inkludierteEinzelleistungen;
      }
    });
  }
});
