var countPersons = 0;
var totalPersons = 0;
var bookingError = 'Es ist ein Fehler aufgetreten';
var bookingErrorRequired = 'Bitte füllen Sie dieses Feld aus';
var bookingErrorEmail = 'Bitte geben Sie eine gültige E-Mail Adresse an';
var bookingErrorPersons = 'Sie müssen mindestens eine Person angeben';
var bookingPerson = 'Person';
var bookingFirstname = 'Vorname';
var bookingLastname = 'Nachname';
var bookingBirthday = 'Geburtsdatum';
var bookingExtensions = 'Verlängerungswochen';
var months = 'Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember';
var shortMonths = 'Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez';
var days = 'Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag';
var shortDays = 'So,Mo,Di,Mi,Do,Fr,Sa';

$(document).ready(function() {

    if ($.tools != undefined)
    {
        $.tools.dateinput.localize('de', {
            'months'        : months,
            'shortMonths'   : shortMonths,
            'days'          : days,
            'shortDays'     : shortDays
        });

        $.tools.validator.localize('de', {
            '*'             : bookingError,
            '[required]'    : bookingErrorRequired,
            ':email'        : bookingErrorEmail,
            'minPersons'    : bookingErrorPersons
        });
    }


    /*** LISTENANSICHT ***/
    if ($('.et_typeicons').length > 0 && typeIconTooltip)
    {

        $('.et_typeicons img[title]').tooltip({
            position: 'top left',
            offset: [-10, 290],
            tipClass: 'et_tooltip',
            opacity: 0.9,
            predelay: 250
        });
    }

    $('.et_link_noticelist').click(function() {
        var date_id = this.id.match(/\d+/)[0];
        
        addToNoticelist(date_id, $(this));
    });


    /*** REISEFINDER ***/
    $('.et_finder_submit').click(function() {
        $(this).parentsUntil('.et_finder').submit();
    });

     $('.et_finder input[type="text"], .et_finder select').each(function() {
         if ($(this).outerWidth() > $(this).parent().width())
         {
             var new_width = $(this).width() - ($(this).outerWidth() - $(this).parent().width());

             $(this).width(new_width);
         }
     });

    $('.et_finder input, .et_finder select').keypress(function(e) {
        if (e.keyCode == 13)
        {
           $(this).parentsUntil('.et_finder', 'form').submit();
        }
    });


    if ($('.dateInputField').length > 0)
    {
        $('.dateInputField').dateinput({
            format: 'dd.mm.yyyy',
            selectors: false,
            lang: 'de',
            min: -1,
            max: 1095
        });
    }

    if ($('#type1').length > 0 && $('#type2').length > 0)
	{
		// Selectboxen ändern bei nue laden der seite
		updateTypes($('#type1'), $('#type2'), 2);
		updateTypes($('#type2'), $('#type1'), 1);

		$('#type1').change(function() {
			updateTypes($('#type1'), $('#type2'), 2);
		});

		$('#type2').change(function() {
			updateTypes($('#type2'), $('#type1'), 1);
		});
	}

    



    /*** SLIDER ***/
    if ($('.et_slider').length > 0)
    {
        $('.et_slider').each(function() {
            var conf_id = $(this).parent().parent().attr('id');
            var delay = eval('sliderDelay_' + conf_id);
            var autoplay = eval('sliderAutoplay_' + conf_id);
            var speed = eval('sliderSpeed_' + conf_id);

            $(this).scrollable({
                circular: true,
                next: '.et_slider_next',
                prev: '.et_slider_prev',
                speed: speed
            }).autoscroll({
                interval: (delay * 1000),
                autoplay: autoplay
            });
        });


        $('.et_slider_item').each(function() {
            var link = $(this).find('a').attr('href');
            var base_url = $('base').attr('href');
            var image = $(this).find('img')[0];

            var rating = $(this).find('.et_rating');
            rating = $(rating).length > 0 ? $(rating)[0] : false; 

            $(this).click(function() {
                window.location.href = base_url + link;
            });

            $(this).mouseenter(function() {
                if (rating != false)
                {
                    $(rating).fadeTo('fast', 1);
                }
                else
                {
                    $(image).fadeTo('fast', 0.8);
                }
            });

            $(this).mouseleave(function() {
                if (rating != false)
                {
                    $(rating).fadeTo('fast', 0);
                }
                else
                {
                    $(image).fadeTo('fast', 1);
                }
            });
        });
    }


    
    /*** DETAILANSICHT ***/
    var images = new Array();
    $('.scrollable .items img').each(function() {
        var large_source = $(this).attr('name').split('|');

        if (large_source.length == 2)
        {
            images[images.length] = {
                href: large_source[1],
                title: $(this).attr('alt')
            };
        }
    });

    if ($('.scrollable').length > 0)
    {
        $('.scrollable').scrollable({
          speed: 300,
          size: 4
        });
    }

    $('.scrollable .items img').click(function() {
        // schauen, ob aktuelles Bild
        if ($(this).hasClass('active')) {return;}

        // URL des großen Bildes auslesen
      	var url = $(this).attr('name').split('|')[0];
        
        // Alt-Text des Bildes auslesen
        var altText = $(this).attr('alt');

        // Name Attribut auslesen
        var name = $(this).attr('name');

        // Element, worin Bild enthalten ist selektieren und halbtransparent machen
        var wrap = $('#et_detail_image_wrap').fadeTo('medium', 0.5);

        // Neues Bild laden
        var img = new Image();

        // Aufrufen einer Funktion nach laden des Bilder
        img.onload = function() {
            // wraper sichtbar machen
            wrap.fadeTo('fast', 1);

            // Bild wechseln
            wrap.find('img').attr('src', url);
            wrap.find('img').attr('alt', altText);
            wrap.find('img').attr('title', altText);
            wrap.find('img').attr('name', name);
            wrap.find('img').removeAttr('width');
            wrap.find('img').removeAttr('height');
        };

        // Bild laden
        img.src = url;

        // Bild auf aktiv stellen
        $('.items img').removeClass('active');
        $(this).addClass('active');
    });

    if (images.length > 0)
    {
        $('#et_detail_image_wrap_inner img:first').css('cursor', 'pointer');
        
        $('#et_detail_image_wrap_inner img:first').click(function() {
            var source = $(this).attr('name').split('|')[1];

            $(images).each(function(i) {
                if (images[i].href == source) {pos=i;return false};
            });
        
            $.fancybox(images, {
                titlePosition: 'inside',
                index: pos,
                centerOnScroll: true,
                cyclic: true,
                titleFormat: function(title, currentArray, currentIndex) {
                    return title + '<div style="float: right">Bild ' +  (currentIndex + 1) + ' von ' + currentArray.length + '</div>';
                },
                onComplete: function() {
                    if ($(document).height() < $(window).height())
                    {
                        $('body').css('overflow', 'hidden');
                    }
                }
            });
        });
    }


    // Merkliste
    $('.et_detail .et_noticelist_link').click(function() {
        addToNoticelist($('#noticelist_id').val(), this);
    });

    $('.et_noticelist .et_button').click(function() {
        var url = $('base').attr('href') + '?eID=easytourist_removeFromNoticelist';
        var date_id = $(this).attr('id');
        var table_row = $(this).parentsUntil('table', 'tr');

        $.ajax({
            url: url,
            type: 'post',
            dataType: 'json',
            data: {
                date_id: date_id
            },
            success: function(r) {
                if ($('.et_noticelist_info .et_price').length > 0)
                {
                    $('.et_noticelist_info .et_price').html(r.count);
                }

                $(table_row).remove();
            }
        });
    });


    // Terminumschalten
    $('.et_detail #dateselector').change(function() {
        var base_url = $('base').attr('href');

        window.location.href = base_url + $(this).val();
    });




    $('div[id^="optionlink_"]').each(function() {
        var id = this.id.match(/\d+/)[0];
        var elm = $('#optiondescription_' + id)[0];
		var label = $(this).html();

        if (elm != undefined)
        {
            $(this).css('cursor', 'pointer');
           
            $(this).click(function() {
                var button = this;
              
                $(elm).slideToggle('fast', function() {
                    $(this).is(':visible') ? $(button).html(label.replace('▼', '▲')) : $(button).html(label);
                });
            });
        }
    });




    

    $('.et_detail_hotel_images').each(function() {
        var text_height = $(this).next().outerHeight();
        var height = parseInt($(this).css('height'));
        var width = $(this).outerWidth(true);

        $(this).css('width', width);

        if (text_height > height)
        {
            $(this).height(text_height);
        }

        if ($(this)[0].scrollHeight > height)
        {
            width += 25;
            $(this).css('width', width);

			if (text_height > $(this).next().outerHeight())
			{
            	$(this).height($(this).next().outerHeight());
			}
        }
    });


    var open_from_popup = false;
    var open_popup = null;

    fancybox_settings = new Array();

    $('span[id^="hoteldetail_"]').each(function() {
        var id = this.id.match(/\d+/)[0];

        fancybox_settings[id] = {
            type: 'inline',
            content: '#hoteldetail_text_' + id,
            centerOnScroll: true,
            autoDimensions: false,
            width: $('#hoteldetail_text_' + id).width(),
            height: $('#hoteldetail_text_' + id).height(),
            onStart: function() {
                if (open_from_popup)  $(open_popup).unwrap();

                open_from_popup = true;
                open_popup = '#hoteldetail_text_' + id;
            },
            onClosed: function() {
                $('#hoteldetail_text_' + id).unwrap();
                open_from_popup = false;
            },
            onComplete: function() {
                if ($(document).height() < $(window).height())
                {
                    $('body').css('overflow', 'hidden');
                }
            }
        };

        $('#hoteldetail_' + id).fancybox(fancybox_settings[id]);
    });

    $('.et_detail_hotel:last').addClass('last');


    if ($('a.hotel_images_group').length > 0)
    {
        $('a.hotel_images_group').fancybox({
            titlePosition: 'inside',
            centerOnScroll: true,
            cyclic: true,
            titleFormat: function(title, currentArray, currentIndex) {
                var bar = title + '<div style="float: right">Bild ' +  (currentIndex + 1) + ' von ' + currentArray.length + '</div>';

                if (open_from_popup)
                {
                    var id = open_popup.match(/\d+/)[0];
                
                    bar = title + '<div style="float: right"><a href="javascript:;" onclick="$.fancybox(fancybox_settings[' + id + '])">Beschreibung anzeigen</a>&nbsp;&nbsp;&nbsp;Bild ' +  (currentIndex + 1) + ' von ' + currentArray.length + '</div>';
                }
            
                return bar;
            },
            onClosed: function() {
                if (open_from_popup)
                {
                    $(open_popup).unwrap();
                    open_from_popup = false;
                }
            }
        });
    }

    

    if ($('#et_detail_tabs').length > 0)
    {
        $('#et_detail_tabs').tabs('#et_detail_panes > div', {effect: 'fade'});
    }

    $('.hide_after_load').hide();






    /*** BUCHUNGSFORMULAR ***/
    $('.et_form_reset').click(function() {
        $('#et_booking_form')[0].reset();
        $('.et_person_details').remove();
        $('#totalPrice').text(0);
        $('#selected_station_price').text(0);
        $('#station').val('');
        $('#stationname').val('');
        $('#stationprice').val(0);
        countPersons = 0;
        totalPersons = 0;
    });

    // Verlängerungswochen laden
    var extensions;
    if ($('#et_booking_form') != undefined)
    {
        var url = $('base').attr('href')+'?eID=easytourist_get_extensions';

        $.ajax({
            url: url,
            type: 'post',
            dataType: 'json',
            data: {
                date_id: $('#dateid').val()
            },
            success: function(r) {
                extensions = r;
            }
        });
    }
    
    $('select[id^="category"]').change(function() {
        var priceId = this.id.match(/\[([0-9]{1,})\]/)[1];
        var container = $(this).parents('li');
        
        if ($(container).find('.et_person_details').length > 0)
        {
            $(container).find('.et_person_details').replaceWith(generatePersonsInput($(this).val(), priceId, container, extensions[priceId]));
        }
        else
        {
            $(container).append(generatePersonsInput($(this).val(), priceId, container, extensions[priceId]));
        }
        registerValidator();
    });

    $('#selectStation').change(function() {
        if ($(this).val() == '')
        {
            var station = {
                station: '',
                stationname: '',
                stationprice: 0
            };
        }
        else
        {
            var jsonString = $(this).val().replace(/'/g, '"');
            var station = $.parseJSON(jsonString);
        }

        $('#station').val(station.station);
        $('#stationname').val(station.stationname);
        $('#stationprice').val(station.stationprice);

        $('#selected_station_price').text(station.stationprice);
    });

    $('select[id^="category"], select[id^="option"], #selectStation').change(function() {
        calculatePrice();
    });

    $('#openAgbPopup').click(function() {
        var url = $('base').attr('href') + '?eID=easytourist_agb&travel=' + $('#travelid').val();

        var popUpParams = "menubar=0,location=0,toolbar=0,status=0,resizable=0,dependent=1,scrollbars=yes,height=570,width=650;";
        var popup = window.open(url, 'easytourist_agb', popUpParams);
        popup.focus();
    });

    $('#et_submit_booking').click(function() {
        $('#et_booking_form').submit();
    });

    if ($('#et_booking_form').length > 0)
    {
        $('#et_booking_form')[0].reset();
        registerValidator();
    }

});

function registerValidator()
{
    $.tools.validator.fn('select[name$="\\[persons\\]"]', function(el, value) {
        var firstElement = $('select[name$="\\[persons\\]"]:first');

        return (el[0] == firstElement[0] && totalPersons == 0) ? $.tools.validator.messages['minPersons'].de : true;
    });

    $.tools.validator.fn('[name$="firstname\\]"]', function(el, value) {
		var patternStr = '^[0-9]{1,}\. ' + bookingPerson;
		var pattern = new RegExp(patternStr);
        return value.match(pattern) ? $.tools.validator.messages['[required]'].de : true;
    });

    // Fehlermeldungen zurücksetzen
    if ($('#et_booking_form').data('validator') != undefined) {
        $('#et_booking_form').data('validator').destroy();
    }

    $('#et_booking_form').validator({
        'lang': 'de',
        'errorClass': 'et_invalid',
        'position': 'top right',
        'offset': [-10, -55],
        'messageClass': 'et_error_message'
    }).bind('onFail', function(e, els) {
        $(els[0].input).focus();
    });
}



function calculatePrice()
{
    var countPersons = 0;
    var totalPrice = 0;

    // Preis für Zimmer ermitteln
    $('select[id^="category"]').each(function() {
        var persons = parseInt($(this).val());
        var priceField = $(this).attr('id').replace('persons', 'price');
        var price = parseFloat($('input[name="' + priceField + '"]').val());

        if ( ! isNaN(persons))
        {
            countPersons += persons;
            totalPrice += (persons * price);
        }
    });

    // Preis für Verlängerungswochen ermitteln
    $('select[id$="[extension]"]').each(function() {
        if ($(this).val() != '')
        {
            var price = parseFloat($(this).val().split('|')[0]);

            totalPrice += price;
        }
    });

    // Preis für Abfahrtsort berechnen
    var stationprice = parseFloat($('#stationprice').val());
    if ( ! isNaN(stationprice))
    {
        totalPrice += (stationprice * countPersons)
    }

    // Anzahl der Personen bei Optionen auf max Personenzahl beschränken
    $('select[id^="option"]').each(function() {
        var numberSelected = $(this).val();
        var selectIndex = numberSelected <= countPersons ? numberSelected : countPersons;
        
        $(this).find('option').remove();

        for (var i = 0; i <= countPersons; i++)
        {
            var option = $('<option value="' + i + '">' + i + '</option>');

            if (i == selectIndex)
            {
                $(option).attr('selected', 'selected');
            }

            $(this).append(option);
        }
    });

    // Preis für Optionen ermitteln
    $('select[id^="option"]').each(function() {
        var persons = parseInt($(this).val());
        var priceField = $(this).attr('id').replace('persons', 'price');
        var price = parseFloat($('input[name="' + priceField + '"]').val());

        totalPrice += (persons * price);
    });

    $('#totalPrice').text(totalPrice);

    totalPersons = countPersons;
}


function generatePersonsInput(count, priceId, container, extensions)
{
    // Fehlermeldungen zurücksetzen
    if ($('#et_booking_form').data('validator') != undefined) {
        $('#et_booking_form').data('validator').reset();
    }
    
    if (count == 0)
    {
        return;
    }


    var content = $('<div class="et_person_details" />');
    $(content).append('<div class="et_label">' + bookingFirstname + '</div><div class="et_label">' + bookingLastname + '</div><div class="et_label">' + bookingBirthday + '</div>');

    if (extensions != undefined && extensions.length > 0)
    {
        $(content).append('<div class="et_label et_extensions">' + bookingExtensions + '</div>');
    }

    $(content).append('<div class="et_clear"></div>');

    for (var i = 0; i < count; i++)
    {
        countPersons++;

        var firstname = $(container).find('#person\\[' + priceId + '\\]\\[' + i + '\\]\\[firstname\\]').val();
        var surname = $(container).find('#person\\[' + priceId + '\\]\\[' + i + '\\]\\[surname\\]').val();
        var bdDay = $(container).find('#person\\[' + priceId + '\\]\\[' + i + '\\]\\[birthday\\]\\[day\\]').val();
        var bdMonth = $(container).find('#person\\[' + priceId + '\\]\\[' + i + '\\]\\[birthday\\]\\[month\\]').val();
        var bdYear = $(container).find('#person\\[' + priceId + '\\]\\[' + i + '\\]\\[birthday\\]\\[year\\]').val();
        var extension = $(container).find('#person\\[' + priceId + '\\]\\[' + i + '\\]\\[extension\\]').val();

        var wrapper = $('<div class="et_field" />');

        if (i == 0) {
            $(wrapper).addClass('first');
        }

        var fnField = $('<input type="text" required="required" />')
            .attr('name', 'person[' + priceId + '][' + i + '][firstname]')
            .attr('id', 'person[' + priceId + '][' + i + '][firstname]')
            .attr('value', (i+1) + '. ' + bookingPerson);

        $(fnField).click(function() {
            if ($(this).hasClass('initValue'))
            {
                $(this).val('').removeClass('initValue');
            }
        });
        

        var snField = $('<input type="text" required="required" />')
            .attr('id', 'person[' + priceId + '][' + i + '][surname]')
            .attr('name', 'person[' + priceId + '][' + i + '][surname]');

        if (firstname == undefined && countPersons == 1 && $('#firstname').val() != '' && $('#surname').val() != '')
        {
            fnField.attr('value', $('#firstname').val());
            snField.attr('value', $('#surname').val());
        }
        else if ((firstname != undefined && firstname != $(fnField).val()))
        {
            fnField.attr('value', firstname);
            snField.attr('value', surname);
        }
        else
        {
            fnField.addClass('initValue');
        }

        $(wrapper).append($(fnField));
        $(wrapper).append($(snField));
        

        $(wrapper).append($('<div class="et_dateselect" />').dateselect({
            'fieldnameDay': 'person[' + priceId + '][' + i + '][birthday][day]',
            'fieldnameMonth': 'person[' + priceId + '][' + i + '][birthday][month]',
            'fieldnameYear': 'person[' + priceId + '][' + i + '][birthday][year]',
            'defaultDay': bdDay,
            'defaultMonth': bdMonth,
            'defaultYear': bdYear
        }));

        if (extensions != undefined && extensions.length > 0)
        {
            var exField = $('<select />')
                .attr('name', 'person[' + priceId + '][' + i + '][extension]')
                .attr('id', 'person[' + priceId + '][' + i + '][extension]');

            var exPrice = 0;

            $(exField).append($('<option />'));

            for (var ex_i = 0; ex_i < extensions.length; ex_i++)
            {
                exPrice += parseInt(extensions[ex_i].price);
                var value = exPrice + '|' + extensions[ex_i].enddate;
                var text = 'bis ' + extensions[ex_i].enddate + ' +' + exPrice + ' ' + currency;
                var option = $('<option />').attr('value', value).text(text);

                if (value == extension)
                {
                    $(option).attr('selected', 'selected');
                }

                $(exField).append($(option));
            }

            $(wrapper).append($(exField));

            $(exField).change(function() {
                calculatePrice();
            });
        }

        $(wrapper).append('<div class="et_clear" />');

        $(content).append($(wrapper));
    }

    return content;
}

jQuery(function() {

  if ($('.scrollable').length <= 0)
  {
      return false;
  }
    
  // Initialize the Scrollable control
  jQuery(".scrollable").scrollable();

  // Get the Scrollable control
  var scrollable = jQuery(".scrollable").data("scrollable");

  // Set to the number of visible items
  var scroller_width = scrollable.getRoot().width();
  var scroller_item_width = scrollable.getRoot().find('.items').children(':first').outerWidth(true);

  var size_calc = Math.round(scroller_width / scroller_item_width);

  var size = scrollable.getConf().size != undefined ? scrollable.getConf().size : size_calc;

  // Handle the Scrollable control's onSeek event
  scrollable.onSeek(function(event, index) {

    // Check to see if we're at the end
    if (this.getIndex() >= this.getSize() - size) {

      // Disable the Next link
      jQuery("a.next").addClass("disabled");

    }

  });

  // Handle the Scrollable control's onBeforeSeek event
  scrollable.onBeforeSeek(function(event, index) {

    // Check to see if we're at the end
    if (this.getIndex() >= this.getSize() - size) {

      // Check to see if we're trying to move forward
      if (index > this.getIndex()) {

        // Cancel navigation
        return false;

      }

    }

  });

});


// Für Abwärtskompatiblität des Templates wichtig
function changeDate(val) {}


function updateTypes(select_field, update_field, update_all_type)
{
	var type_id = $(select_field).val();
	var base_url = document.URL.split('?')[0];

    var url = base_url + '?eID=easytourist_getRelatedTypes';

	var default_value = $(select_field).find('option')[0].text;

	if (type_id == '')
	{
		type_id = 'all';
	}

    $.ajax({
        url: url,
        type: 'post',
        data: {
            type_id: type_id,
            related_type: update_all_type
        },
        success: function(data, status) {
            var selected = $(update_field).val();
            var width_type1 = $('#type1').outerWidth();
            var width_type2 = $('#type2').outerWidth();

            $(update_field).find('option').remove();

            $(update_field).append($('<option />').val('').text(default_value));

            if (data != false)
            {
                data = $.parseJSON(data);

                $(data).each(function(item) {
                    var option = $('<option>')
                        .val(data[item].id)
                        .text(data[item].title);

                    if (data[item].id == selected)
                    {
                        $(option).attr('selected', 'selected');
                    }

                    $(update_field).append($(option));
                });
            }

            $('#type1').width(width_type1);
            $('#type2').width(width_type2);
        }
    })
}

function addToNoticelist(date_id, container)
{
    var url = $('base').attr('href') + '?eID=easytourist_addToNoticelist';

    $.ajax({
        url: url,
        type: 'post',
        data: {
            date_id: date_id
        },
        dataType: 'json',
        success: function(r) {
            infobox(container, r.message);

            if ($('.et_noticelist_info .et_price').length > 0)
            {
                $('.et_noticelist_info .et_price').html(r.count);
            }
        }
    });
}

function infobox(container, text)
{
    var box = $('<div />').addClass('et_infobox').html($('<span />').html(text)).hide();
    $(container).append(box);

    $(box).fadeIn('fast').delay(3000).fadeOut('fast', function() { $(this).remove(); });
}
