var lastBookingError = -1;
var currentYear;
var currentYearAvailabilities = "";
var isCurrentYear = false;
var priceSliderValues = [0, 100];
var criteria = '';
var site = '';
var umkreisMapActive = false;
var expandCountries = false;
var expandAreas = false;
var expandCities = false;
var tabs = new Array('description', 'map', 'rating', 'prices', 'availability', 'booking');

var availabilities = {
    'B' : 'Frei, Anreisetag',
    'F' : 'Reserviert vom Besitzer (nach Anfrage) Anreisetag',
    'A' : 'Frei',
    'C' : 'Frei, ungeteilt (z.B. Weihnachts-Zeitraum)',
    'H' : 'Reserviert vom Besitzer (nach Anfrage)',
    'N' : 'Gebucht, Anreisetag',
    'O' : 'Gebucht',
    'T' : 'Belegt vom Besitzer, Anreisetag',
    'V' : 'Belegt vom Besitzer',
    'default' : 'unbekannt'
};

var colors = {
    'B' : '#67ff44',
    'F' : '#67ff44',
    'A' : '#aaf398',
    'C' : '#aaf398',
    'H' : '#aaf398',
    'N' : '#ff704f',
    'O' : '#ff704f',
    'T' : '#ff704f',
    'V' : '#ff704f',
    'default' : '#888888'
};

function switchTab(index)
{
    // alle Tabs auf font-weight normal und Rubriken verstecken
    for (var i=0; i<tabs.length; i++)
    {
        //$("#objectview_" + tabs[i] + "_navi").css('font-weight','normal');
        $("#objectview_" + tabs[i]).hide();
    }
    
    // aktiven Tab bold und Rubrik zeigen
    //$("#objectview_" + tabs[index] + "_navi").css('font-weight','bold');
    $("#objectview_" + tabs[index]).show();
    
    // Main immer zeigen
    $("#objectview_main").show();
    
    // wenn wir im Tab "Verfügbarkeiten" oder "Zur Buchnung" sind
    if ((index == 4) && currentYearAvailabilities == "")
    {
        loadDatePicker(12);
    }
    
    // wenn der "Zur Buchung"-Tab aufgerufen wurde
    if (index == 5)
    {
        // Main jetzt nicht zeigen
        $("#objectview_main").hide();
        checkInput();
    }
    
    if (index == 4)
    {
        checkInput();
    }
}


//////////////////////////////////////////////////////////////////
// 			 Bilder-Slider
//////////////////////////////////////////////////////////////////

function loadScaledImage(url, obj, maxWidth, maxHeight)
{
    var newImage = new Image();
    newImage.src = url;
    
    var onImgReady = function() {
        obj.attr('src', url);
        
        var factor = Math.min(maxWidth / newImage.width, maxHeight / newImage.height);
        
        obj.attr('width', (newImage.width * factor));
        obj.attr('height', (newImage.height * factor));
        
        obj.fadeIn(200);
    }
    
    if (newImage.complete)
        onImgReady();
    else
        newImage.onload = onImgReady;
}

function showImgFrame()
{
    var index = $('#currentPic').val();
    var url = $('#sliderImg_'+index).attr('src');
    var descr = $('#sliderImgTitle_'+index).val();
    
    $('#fullscreenDiv').fadeTo(300, 0.7, function() { 
        var newImage = new Image();
        newImage.src = url;
        
        var onImgReady = function() {
            $('#lowerDivClose').html("Schließen");
            
            $('#imgFrameImg').attr('src', newImage.src);
            $('#imgFrameImg').width(newImage.width);
            $('#imgFrameImg').height(newImage.height);
            $('#imgFrameImg').show();
            $('#fullscreenDivBox .leftButton').show();
            $('#fullscreenDivBox .rightButton').show();
            $('#imgFrameText').html(descr);
            
            $('select').css('visibility', 'hidden');
            
            $('#fullscreenDivBox').css('margin-top', -((newImage.height / 2) + 40) + 'px');
            $('#fullscreenDivBox').css('margin-left', -(newImage.width / 2) + 'px');
            $('#fullscreenDivBox').fadeIn(300);
        }
        
        if (newImage.complete)
            onImgReady();
        else
            newImage.onload = onImgReady;
    });
}

function imgFrameLeftRightHandler(right)
{
    var index = $('#currentPic').val();
    var numPics = $('#numPics').val();
    
    if (!right && index == 0)
        return false;
    
    if (right && index == numPics-1)
        return false;
    
    if (right)
        index++;
    else
        index--;
    
    $('#currentPic').val(index);
    var url = $('#sliderImg_'+index).attr('src');
    var descr = $('#sliderImgTitle_'+index).val();
    
    $('#imgFrameText').fadeTo(300, 0.1);
    
    $('#imgFrameImg').fadeTo(300, 0.1, function() {
        $('#imgFrameImg').attr('src', 'images/wait.gif');
        
        var newImage = new Image();
        newImage.src = url;
        
        var onImgReady = function() {
            $('#fullscreenDivBox').animate({
                marginTop: -((newImage.height / 2) + 40) + 'px',
                marginLeft: -(newImage.width / 2) + 'px'
            }, 300, 'swing');
            
            $('#imgFrameImg').animate(
                {width: newImage.width, height: newImage.height}, 
                300, 
                'swing', 
                function(){
                    $('#imgFrameImg').attr('src', url);
                    $('#imgFrameText').html(descr);
                    $('#imgFrameImg').fadeTo(300, 1);
                    $('#imgFrameText').fadeTo(300, 1);
                }
            );
        }
        
        if (newImage.complete)
            onImgReady();
        else
            newImage.onload = onImgReady;
    });
}

function smallImageMouseOverHandler(index)
{
    $('#currentPic').val(index);
    var url = $('#sliderImg_'+index).attr('src');
    
    $('#imgLarge').fadeOut(200, function() {
        var newImage = new Image();
        newImage.src = url;
        
        var onImgReady = function() {
            $('#imgLarge').attr('src', url);
            
            var factor = Math.min(421 / newImage.width, 276 / newImage.height);
            $('#imgLarge').attr('width', (newImage.width * factor));
            $('#imgLarge').attr('height', (newImage.height * factor));
            $('#imgLarge').fadeTo(200, 1);
        }
        
        if (newImage.complete)
            onImgReady();
        else
            newImage.onload = onImgReady;
    });
}

function imagesScrollLeftClickHandler(slider_width, pages)
{
    if (parseFloat($('#slider_images').css('margin-left')) >= 0)
    {
        $('#slider_images').animate(
            { "margin-left": "-="+(pages*375)+"px" }, {"duration":"slow","easing":"swing"});
    }
    else
    {
        $('#slider_images').animate(
            { "margin-left": "+=375px" }, {"duration":"slow","easing":"swing"});
    }    
}

function imagesScrollRightClickHandler(slider_width, pages) 
{
    if (parseFloat($('#slider_images').css('margin-left')) - 375 < -slider_width)
    {
        
        $('#slider_images').animate(
            { "margin-left": "+="+(pages*375)+"px" }, {"duration":"slow","easing":"swing"});
    }
    else
    {
        $('#slider_images').animate(
            { "margin-left": "-=375px" }, {"duration":"slow","easing":"swing"});
    }
}

//////////////////////////////////////////////////////////////////
// 			 Datepicker
//////////////////////////////////////////////////////////////////

function loadDatePicker(amount, month, year) 
{
	var date = new Date();
	month = (month == null) ? date.getMonth() : month;
	day = (month == date.getMonth()) ? date.getDate() : 1;
	year = (year == null) ? date.getFullYear() : year;
    isCurrentYear = (year == date.getFullYear()) ? true : false;
	
    date.setDate(day);
	date.setMonth(month);
	date.setFullYear(year);
	currentYear = year;
	
	$('#kalender').hide();
	$('.loading').show();
    
    // Kalender-Clears entfernen
    $('div.kalenderclear').remove();
    
    
    /*
    $('#kalender').append('<div class="date1 kalender dateWithHeight" />');
    
    $('.kalender').datepicker({
        onSelect: function(dateText, inst) { checkAndApplyDate(dateText, false, true); },
        numberOfMonths: 3,
        dateFormat: 'dd.mm.yy',
        dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
        firstDay: 1,
        nextText: 'Monat vor',
        prevText: 'Monat zurück'
    });
    
    $('.date1').datepicker('setDate', date);
    
    //$('.date1 > * > * > * > * > * > a').addClass("verfuegbarkeitsDatum");
    //$('.date1 > * > * > * > * > * > a').addClass('kalender');
    //$('.date1 > * > * > * > * > * > span').addClass('kalender');
    
    $('.date1 td').bind('mouseenter mouseleave', function() { datepicker_mouseenterleave($(this)); });
    $('.date1 td.ui-datepicker-unselectable').unbind();
    */
    
	for (var i=0; i<amount; i++)
    {
        // alte Datepicker zerstören
		$('.date'+(i+1)+'.kalender').datepicker('destroy');
		$('.date'+(i+1)+'.kalender').remove();
        
        //$('#kalender').append('<div class="date'+(i+1)+' kalender dateWithHeight year' + date.getFullYear() + '" />');
        $('#kalender').append('<div class="date'+(i+1)+' kalender dateWithHeight" />');
        
        if (((i+1) % 3 == 0) && i < amount-1)
        {
            // alle 3 Monate in die nächste Zeile
            $('#kalender').append('<div class="kalenderclear">');
        }
        
        $('.date'+(i+1)+'.kalender').datepicker({
            onSelect: function(dateText, inst) { checkAndApplyDate(dateText, false, true); },
            dateFormat: 'dd.mm.yy',
            dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
            monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
            firstDay: 1,
            nextText: 'Monat vor',
            prevText: 'Monat zurück'
        });
        
        if (i == 0) 
        {
            if (isCurrentYear)
            {
                $('.date'+(i+1)+'.kalender').datepicker('option', 'minDate', date);
            }
            else 
            {
                $('.date'+(i+1)+'.kalender').datepicker('setDate', date);
            }
            
            date.setDate(1);
        } 
        else 
        {
            date.setMonth(date.getMonth()+1);
            $('.date'+(i+1)+'.kalender').datepicker('setDate', date);
        }
        
        $('.date'+(i+1)+'.kalender > * > * > * > * > * > a').addClass("verfuegbarkeitsDatum");
        $('.date'+(i+1)+'.kalender > * > * > * > * > * > a').addClass('kalender');
        
        $('.date'+(i+1)+'.kalender > * > * > * > * > * > span').addClass('kalender');
        
        $('.date'+(i+1)+'.kalender > * > * > * > * > td').bind('mouseenter mouseleave', function() { datepicker_mouseenterleave($(this)); });
	}
    
    $('.ui-datepicker .ui-datepicker-prev').hide();
    $('.ui-datepicker .ui-datepicker-next').hide();
    
        
	// Verfügbarkeiten aus der Db holen
	$.ajax({
		type: "POST",
		url: "/ajax/sub_verfuegbarkeiten",
		data: "id="+$('#objectID').html()+"&year="+new Date().getFullYear(),
		success: function(msg) 
        {
            
            var tmp = msg.split(';');
            var maxYear = tmp[0];
            currentYearAvailabilities = tmp[1];
            
			// Der erhaltene String fängt immer am 1.1. des Jahres an, 
			// also müssen zunächst die bis zum aktuellen Monat vergangenen Tage 
			// berechnet werden => Index des Strings auf diesen Wert setzen. 	
            
			date1 = new Date();
			date1.setDate(1);
			date1.setMonth(month);
			date1.setFullYear(year);
			var i = getPassedDaysOfTheYear(date1);
			/* Ende der Berechnung des Indizes */
            
            // Datepicker zerstören, die nicht gebraucht werden
            //$('.year'+(maxYear+1)).datepicker('destroy');
            //$('.year'+(maxYear+1)).remove();
            
			$(".ui-state-default.kalender").each(function() 
            {
				if ($(this).hasClass('ui-state-active'))
                {
                    $(this).removeClass('ui-state-active');
                }
                
                var letter = currentYearAvailabilities.charAt(i);
                
				switch (letter) 
                {
                    case 'A':   
                    case 'C':   
					case 'H':	$(this).css('background',colors[letter]);
                                $(this).css('cursor','no-drop');
								$(this).attr('title',availabilities[letter]);
								$(this).attr('onclick','checkAndApplyDate("", true)');
								break;
                    case 'B':   
					case 'F':	$(this).css('background',colors[letter]);
								$(this).attr('title',availabilities[letter]);
								break;
                    case 'N':   
                    case 'O':   
                    case 'T':   
					case 'V':	$(this).css('background',colors[letter]);
                                $(this).css('cursor','no-drop');
								$(this).attr('title',availabilities[letter]);
								$(this).attr('onclick','checkAndApplyDate("", true)');
								break;
					default:	$(this).css('background',colors['default']);
                                $(this).css('cursor','no-drop');
								$(this).attr('title',availabilities['default']);
								$(this).attr('onclick','checkAndApplyDate("", true)');
								break;
				}
                
                $(this.parentNode).addClass('__' + i);
                
				i++;
			});
            
			loadingHandler();
		},
        error: function(error) { alert("Fehler:\n\n" + print_r(error)); }
	});
}

function datepicker_mouseenterleave(obj)
{
    var numDays = parseFloat($('#avail_duration').val());
    var startDay = parseFloat(obj.attr('class').split('__')[1]);
    
    for (var i=0; i<numDays; i++)
    {
        $('#kalender td.__' + (startDay+i)).toggleClass('datepicker_day_entered');   // css-class 'datepicker_day_entered' wird gesetzt
    }
}

function datepicker_mark_days()
{
    var numDays = parseFloat($('#avail_duration').val());
    var startDay = $('#avail_startDate').val();
    var date = getDateFromString(startDay);
    var passedDays = parseFloat(getPassedDaysOfTheYear(date));
    
    //alert('markiere jetzt Datepicker: ' + startDay + ' + ' + numDays + ' Tage');
    
    $('#kalender td').removeClass('datepicker_day_selected');
    
    for (var i=0; i<numDays; i++)
    {
        $('#kalender td.__' + (passedDays+i)).addClass('datepicker_day_selected');
    }
}

function loadingHandler() 
{
	$('.loading').hide();
	$('#kalender').show();
    $('.ui-datepicker').show();
    $('#ui-datepicker-div').hide();
    
    // Anreisetag und Reisedauer markieren
    datepicker_mark_days();
}

function kalenderScrollLeftClickHandler() 
{
	if (!isCurrentYear) 
    {
        scroll(0, 0);
		loadDatePicker(12, null, currentYear-1);
	}
}

function kalenderScrollRightClickHandler() 
{
    scroll(0, 0);
	loadDatePicker(12, null, currentYear+1);
}

function checkAndApplyDate(strDate, onlyError, updateDatepicker)
{
    if (onlyError)
    {
        $('#kalenderMessage').css({color: 'red'});
        $('#kalenderMessage').html("Bitte wählen Sie einen Anreisetag.");
        $('#lowerDivClose').html("Schließen");
    }
    else
    {
        $('#avail_startDate').val(strDate);
        var date = getDateFromString(strDate);
        
        if (checkAvailability(date, $('#avail_duration').val()))
        {
            $('#kalenderMessage').css({color: 'blue'});
            $('#kalenderMessage').html("Das Sommerhaus ist für den gewählten Zeitraum frei.");
            $('#lowerDivClose').html("&nbsp;OK&nbsp;");
        }
        else
        {
            $('#kalenderMessage').css({color: 'red'});
            $('#kalenderMessage').html("Bitte wählen Sie einen anderen Tag oder reduzieren Sie die Reisedauer.");
            $('#lowerDivClose').html("Ignorieren");
        }
        
        var startDate = $('#avail_startDate').val();
        var duration = parseFloat($('#avail_duration').val());
        var numPersons = $('#avail_numPersons').val();
        
        // Anreisetag, Reisedauer und Anzahl Personen in SESSION speichern
        $.ajax({
            type: "POST",
            url: "/ajax/sub_buchen_session",
            data: "startDate="+startDate+"&duration="+duration+"&numPersons="+numPersons,
            success: function(msg) {  },
            error: function(error) { alert("Fehler:\n\n" + print_r(error)); }
        });
        
        if (updateDatepicker)
        {
            datepicker_mark_days();
        }
        
        checkInput();
        OpenFeedbackDialog();
    }
}

function checkAvailability(from, days) 
{
	var available = true;
	var passedDays = parseFloat(getPassedDaysOfTheYear(from));
	var lastDay = passedDays + parseFloat(days);
    var firstDay = currentYearAvailabilities.charAt(passedDays);
    
    // kein Anreisetag
    if (firstDay != 'B' && firstDay != 'F')
    {
        return false;
    }
    
	for (var i=passedDays; i<lastDay; i++) 
    {
        var today = currentYearAvailabilities.charAt(i);
        
        // belegt
		if (today == 'N' || today == 'O' || today == 'T' || today == 'V') 
        {
			available = false;
			break;
		}
	}
    
	return available;
}

function getDateFromString(strDate) 
{
    return new Date(parseFloat(strDate.substr(6, 4)), parseFloat(strDate.substr(3, 2)) -1, strDate.substr(0, 2), 17, 22, 02);
}

function getPassedDaysOfTheYear(date1)
{
    // 1. Januar von diesem Jahr
	var date2 = new Date();
	date2.setDate(1);
	date2.setMonth(0);
    
	return deltaDays(date1, date2);
}

/* Berechnet die Tage zwischen zwei gegeben Daten */
function deltaDays(date1, date2) 
{
    if (!date1 || !date2) 
        return null;
    
    var time1 = date1.getTime();
    var time2 = date2.getTime();
    
    // Differenz beider Timestamps (in ms) in Tage umrechnen
    return Math.round(Math.abs(time1 - time2) / (1000 * 60 * 60 * 24));

}

function toggle_all_groups(obj)
{
    if (obj.innerHTML == 'alle ausklappen')
    {
        obj.innerHTML = 'alle einklappen';

        $('.featuresTableDiv').each(function() {
            $(this).slideDown("slow");
            $('#'+$(this).attr('id')+'img').attr('src', 'images/minus.png');
        });
    }
    else
    {
        obj.innerHTML = 'alle ausklappen';
        
        $('.featuresTableDiv').each(function() {
            $(this).slideUp("slow");
            $('#'+$(this).attr('id')+'img').attr('src', 'images/plus.png');
        });
    }
}

function toggle_group(id)
{
    if ($('#'+id).is(":hidden"))
    {
        $('#'+id).slideDown("slow");
        $('#'+id+'img').attr('src', 'images/minus.png');
    } 
    else 
    {
        $('#'+id).slideUp("slow");
        $('#'+id+'img').attr('src', 'images/plus.png');
    }
}

function checkInput()
{
    $('#book_price').html('');
    $('#book_availability').html('prüfe...');
    
    var objectID = $('#objectID').html();
    var startDate = $('#avail_startDate').val();
    
    // wir fangen ab dem Anreisetag an zu zählen und der Abreisetag wird als ein Reisetag mitgerechnet, bei 7 Tagen Reisedauer müssen wir 8 Tage dort sein
    var duration = parseFloat($('#avail_duration').val());
    
    var tmpDate = startDate.split('.');
    var numPersons = $('#avail_numPersons').val();
    var numPersonsDisplay = numPersons + ' Person';
    
    if (numPersons > 1)
    {
        numPersonsDisplay += 'en';
    }
    
    var startDateObj = new Date(tmpDate[2], tmpDate[1]-1, tmpDate[0]);
    var endDateDisplayObj = new Date(tmpDate[2], tmpDate[1]-1, parseFloat(tmpDate[0]) + duration);
    var endDateObj = new Date(tmpDate[2], tmpDate[1]-1, parseFloat(tmpDate[0]) + duration - 1);
    
    // Buchen-Seite
    $('#book_startDate').html(startDate);
    $('#book_duration').html($('#avail_duration :selected').text());
    $('#book_persons').html(numPersonsDisplay);
    $('#book_endDate').html(convertDate(endDateDisplayObj, false));
    
    // Verfügbarkeit-Seite
    $('#avail_startDate_display').html(startDate);
    $('#avail_duration_display').html($('#avail_duration  :selected').text());
    $('#avail_persons_display').html(numPersonsDisplay);
    $('#avail_endDate_display').html(convertDate(endDateDisplayObj, false));
    
    $.ajax({
		type: "POST",
		url: "/ajax/sub_buchen_check",
		data: "objectID="+objectID+"&startDate="+convertDate(startDateObj,true)+"&duration="+duration+"&endDate="+convertDate(endDateObj,true)+"&numPersons="+numPersons,
		success: function(msg)
        {
            try
            {
                var result = jQuery.parseJSON(msg);
                lastBookingError = result.errorCode;
                
                //alert(print_r(result));
                
                
                if (result.errorCode == 0)
                {
                    // alles in Ordnung
                    
                    var avail = 'frei';
                    
                    if ((result.availabilityLetters['F'] || result.availabilityLetters['H']) && result.availabilityLetters['C'])
                    {
                        avail = 'nach Anfrage frei (vom Besitzer reserviert, Zeitraum mit Besitzer abklären)';
                    }
                    else if (result.availabilityLetters['F'] || result.availabilityLetters['H'])
                    {
                        avail = 'nach Anfrage frei (vom Besitzer reserviert)';
                    }
                    else if (result.availabilityLetters['C'])
                    {
                        avail = 'nach Anfrage frei (Zeitraum mit Besitzer abklären)';
                    }
                    
                    $('#book_price').html(result.price + ' €');
                    $('#book_availability').html(avail);
                    $('#book_button').attr('src', 'images/button-booking.png');
                    $('#book_button_2').attr('src', 'images/button-booking.png');
                    $('#book_button_message').html('Unser Partner e-domizil übernimmt die Buchung...');
                }
                else
                {
                    // es trat ein Fehler auf
                    
                    var price = '-';
                    var avail = 'Prüfung nicht möglich';
                    
                    switch (result.errorCode)
                    {
                        case 1: avail = 'belegt';
                                $('#kalenderMessage').html("Belegt - bitte verändern Sie den Anreisetag oder die Reisedauer.");
                                break;
                        case 2: avail = 'zuviele Personen';
                                $('#kalenderMessage').css({color: 'red'});
                                $('#kalenderMessage').html("Zuviele Personen.");
                                $('#lowerDivClose').html("Ignorieren");
                                break;
                        case 3: avail = 'bitte Anreisetag neu wählen';
                                $('#kalenderMessage').html("Bitte wählen Sie einen gültigen Anreisetag.");
                                break;
                        case 4: price = 'Berechnung für diesen Zeitraum nicht möglich';
                                break;
                        case 5: price = 'Berechnung für diesen Zeitraum nicht möglich';
                                break;
                    }
                    
                    $('#book_price').html(price);
                    $('#book_availability').html(avail);
                    $('#book_button').attr('src', 'images/button-booking-grey.png');
                    $('#book_button_2').attr('src', 'images/button-booking-grey.png');
                    $('#book_button_message').html('Buchen nicht möglich, bitte Verfügbarkeit überprüfen');
                }
            }
            catch (e)
            {
                alert('Fehler:\n\n' + msg);
            }
        },
        error: function(error) { alert("Fehler:\n\n" + print_r(error)); }
    });
	
	$('#buchungs_pruefung').show();
	$('#wlv_iframe').hide();
}

function finalBooking(obj)
{
    var objectID = $('#objectID').html();
    var startDate = $('#avail_startDate').val();
    var duration = $('#avail_duration').val();
    var numPersons = $('#avail_numPersons').val();
    
    var url = 'http://www.ferienwohnung-be.de/index.cfm?fuseaction=objekt.showObject&reiter=3';
    url += '&onr=' + objectID;
    url += '&datvon=' + startDate;
    url += '&reisedauer=' + duration;
    url += '&personen=' + numPersons;
    url += '&partner=115686000000';
    
    if (lastBookingError == 0)
    {
		$('#buchungs_pruefung').hide();
		$('#wlv_iframe').attr('src', url);
		$('#wlv_iframe').show();
		$('#wlv_link').attr('href', url);
		
        return true;
    }
    else
    {
        return false;
    }
}

function convertDate(dateObj, toSQL)
{
    var year = dateObj.getFullYear();
    var month = (dateObj.getMonth() < 9 ? '0' : '') + (dateObj.getMonth() + 1);
    var day = (dateObj.getDate() < 10 ? '0' : '') + dateObj.getDate();
    
    if (toSQL)
    {
        return year + '-' + month + '-' + day;
    }
    else
    {
        return day + '.' + month + '.' + year;
    }
}

function switchDetailRating(hideDiv, showDiv)
{
    $('#detailrating_'+hideDiv).hide();
    $('#detailrating_'+showDiv).show();
}

function handlePageScroll()
{
    var scrollX = 0, scrollY = 0;
    
    if (typeof( window.pageYOffset ) == 'number' ) 
    {
        //Netscape compliant
        scrollY = window.pageYOffset;
        scrollX = window.pageXOffset;
    } 
    else if (document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
    {
        //DOM compliant
        scrollY = document.body.scrollTop;
        scrollX = document.body.scrollLeft;
    } 
    else if (document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
    {
        //IE6 standards compliant mode
        scrollY = document.documentElement.scrollTop;
        scrollX = document.documentElement.scrollLeft;
    }
    
    $('#fullscreenDiv').css({top: scrollY + 'px'});
}

/*
function freeElements()
{
    //var selecttags = document.getElementsByTagName('select');
    //for (var i=0; i<selecttags.length; i++)
    //{
    //    selecttags[i].style.visibility = 'visible';
    //}
    
    //$('select.hidden').css({visibility: "visible"});
    $('img').css({border: "5px solid black"});
}

window.onload = new function() {
	freeElements();
};
*/

function OpenFeedbackDialog()
{
    $('#fullscreenDiv').show();
    $('#middleDiv').hide();
    $('#middleDiv2').show();
    $('#imgFrameImg').hide();
    $('#fullscreenDivBox .leftButton').hide();
    $('#fullscreenDivBox .rightButton').hide();
    $('#imgFrameText').html("Verfügbarkeit");
    
    // alle selects verstecken, nur die beiden in der Box anzeigen
    $('select').css('visibility', 'hidden');
    $('#avail_duration').css('visibility', 'visible');
    $('#avail_numPersons').css('visibility', 'visible');
    
    $('#fullscreenDivBox').css('margin-top', '-200px');
    $('#fullscreenDivBox').css('margin-left', '-250px');
    $('#fullscreenDivBox').show();
}

function OpenRecommendDialog(path, id)
{
    $('#fullscreenDiv').show();
    $('#middleDiv').show();
    $('#middleDiv2').hide();
    $('#imgFrameImg').hide();
    $('#fullscreenDivBox .leftButton').hide();
    $('#fullscreenDivBox .rightButton').hide();
    $('#imgFrameText').html("Weitersagen");
    $('#lowerDivClose').html("Schließen");
    
    $('select').css('visibility', 'hidden');
    
    $('#fullscreenDivBox').css('margin-top', '-200px');
    $('#fullscreenDivBox').css('margin-left', '-250px');
    $('#fullscreenDivBox').show();
    $('#recommend_msg').html("");
    $('#recommend_button').removeAttr('disabled');
    $('#new_capcha_link').html('Capcha erneuern');
    
    getCapchaImg();
}

function getCapchaImg()
{
    $('#recommend_img').attr('src', 'images/wait.gif');
    
    $.ajax({
		type: "POST",
		url: "/ajax/sub_get_capcha",
		data: "",
		success: function(url) { $('#recommend_img').attr('src', url); },
        error: function(error) { alert("Fehler:\n\n" + print_r(error)); }
    });
}

function sendRecommendation()
{
    var friend_name = $('#friend_name').val();
    var friend_email = $('#friend_email').val();
    var recomm_name = $('#recomm_name').val();
    var recomm_email = $('#recomm_email').val();
    var friend_text = $('#friend_text').val();
    var capcha = $('#recommend_capcha').val();
    var objectID = parseFloat($('#objectID').html());
    
    if (!isValidEmail(friend_email))
    {
        $('#recommend_msg').html("<b>E-Mail-Adresse des Empfängers fehlt oder ist ungültig.</b><br/><br/>");
    }
    else if (!isValidEmail(recomm_email))
    {
        $('#recommend_msg').html("<b>Ihre E-Mail-Adresse fehlt oder ist ungültig.</b><br/><br/>");
    }
    else if (friend_name == '')
    {
        $('#recommend_msg').html("<b>Name des Empfängers fehlt.</b><br/><br/>");
    }
    else if (recomm_name == '')
    {
        $('#recommend_msg').html("<b>Ihr Name fehlt.</b><br/><br/>");
    }
    else if (capcha == '')
    {
        $('#recommend_msg').html("<b>Bitte Capcha-Zahlen eingeben.</b><br/><br/>");
    }
    else
    {
        $('#recommend_msg').html("<b>überprüfe...</b><br/><br/>");
        $('#recommend_button').attr('disabled', 'disabled');
        $('#new_capcha_link').html('');
    
        $.ajax({
            type: "POST",
            url: "/ajax/sub_send_recommendation",
            data: "recomm_name="+recomm_name+"&recomm_email="+recomm_email+"&friend_name="+friend_name+"&friend_email="+friend_email+"&friend_text="+friend_text+"&capcha="+capcha+"&objectID="+objectID,
            success: function(error) { 
                if (error == "")
                {
                    $('#recommend_msg').html("<b>Nachricht wurde erfolgreich versendet.</b><br/><br/>");
                    $('#friend_name').val("");
                    $('#friend_email').val("");
                    $('#recomm_name').val("");
                    $('#recomm_email').val("");
                    $('#friend_text').val("");
                    $('#recommend_capcha').val("");
                }
                else
                {
                    $('#recommend_msg').html("<b>" + error + "</b><br/><br/>");
                    $('#recommend_capcha').val("");
                    $('#recommend_button').removeAttr('disabled');
                    $('#new_capcha_link').html('Capcha erneuern');
                    getCapchaImg();
                }
            },
            error: function(error) { alert("Fehler:\n\n" + print_r(error)); }
        });
    }
}

function hideImgFrame()
{
    $('select').css('visibility', 'visible');
    
    $('#fullscreenDivBox').fadeOut(150, function() {  
        $('#middleDiv').hide();
        $('#middleDiv2').hide();
        $('#imgFrameImg').hide();
        $('#fullscreenDivBox .leftButton').hide();
        $('#fullscreenDivBox .rightButton').hide();
        $('#friend_name').val("");
        $('#friend_email').val("");
        $('#recomm_name').val("");
        $('#recomm_email').val("");
        $('#friend_text').val("");
        $('#recommend_capcha').val("");
        $('#recommend_msg').html("");

        $('#fullscreenDiv').fadeOut(150);
    });
}


function handleLastMinuteAction(country, area, city)
{
    if (country && area && city)
    {
        location.href = '/lastminute/' + country + '/' + area + '/' + city + '/0-0';
    }
    else if (country && area)
    {
        location.href = '/lastminute/' + country + '/' + area + '/0-0';
    }
    else if (country)
    {
        location.href = '/lastminute/' + country + '/0-0';
    }
    else
    {
        location.href = '/lastminute/weltweit/0-0';
    }
}


function onlyNumeric(obj) 
{
    while (obj.value.substr(0, 1) == ' ') 
    {
        obj.value = obj.value.substr(1, obj.value.length);
    }
    
    while (obj.value.substr(obj.value.length - 1, 1) == ' ') 
    {
        obj.value = obj.value.substr(0, obj.value.length - 1);
    }
    
    while (obj.value.substr(0, 1) == 0 && obj.value.length > 1)
    {
        obj.value = obj.value.substr(1, obj.value.length);
    }
    
    while (obj.value != parseInt(obj.value) && obj.value.length > 0)
    {
        obj.value = obj.value.substr(0, obj.value.length - 1);
    }
}

function slideFilter(id, hint_id)
{
    // close
    if ($('#'+id).is(':visible'))
    {
        $('#'+id).slideUp();
        $('#hint'+hint_id).button("option", "icons", { primary: 'ui-icon-carat-1-n' } );
    }
    // open
    else
    {
        $('#'+id+' li.hidden').removeClass('overwrite');
        $('#'+id+' li.more').show();
        $('.categoryBox ul').slideUp();
        $('.categoryBox .hint').button("option", "icons", { primary: 'ui-icon-carat-1-n' } );
        $('#'+id).slideDown();
        $('#hint'+hint_id).button("option", "icons", { primary: 'ui-icon-carat-1-s' } );
    }
}

function filterShowAll(id)
{
    $('#'+id+' li.more').hide();
    $('#'+id+' li.hidden').addClass('overwrite');
}


var markerImageUrl = 'http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,FFB325,000000&ext=.png';
var markerImage = null;
var marker = null;
var map = null;
var geocoder = null;
var defaultLat = 54.780395;
var defaultLng = 9.435707;

function getCenterByLocation(loc)
{
    geocoder = new google.maps.Geocoder;
    geocoder.geocode({address: loc}, function(result, status) {
        if (status == "OK") {
            if (result[0].geometry.location != '')
            {
                var center = new google.maps.LatLng(result[0].geometry.location.lat(), result[0].geometry.location.lng());
                markerImage = new google.maps.MarkerImage(markerImageUrl, new google.maps.Size(24, 32));
                
                map.setCenter(center);
                marker = new google.maps.Marker({
                    position: center,
                    map: map,
                    draggable: false,
                    icon: markerImage,
                    title: houseTitle,
                    clickable: false
                });
                
                var infoWindow = new google.maps.InfoWindow({content: '<br\/><b>'+houseTitle+'<\/b><br\/><br\/>'+result[0].formatted_address+'<br\/><br\/>', position: center});
                infoWindow.open(map);                
                
                //$('#map_errorMessage').html('<br\/><b>'+result[0].formatted_address+'<\/b>');
            }
            else
            {
                $('#map_errorMessage').html('folgende Adresse konnte nicht gefunden werden:<br\/>"' + loc + '"<br\/><br\/><br\/>');
                $('#map_canvas').hide();
            }
        }
        else
        {
            $('#map_errorMessage').html('folgende Adresse konnte nicht gefunden werden:<br\/>"' + loc + '"<br\/><br\/><br\/>');
            $('#map_canvas').hide();
        }
    });
}

function detailGoogleMapsInitialize()
{
    map = new google.maps.Map(document.getElementById('map_canvas'), {
        zoom: 12,
        center: new google.maps.LatLng(defaultLat, defaultLng),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: true,
        mapTypeControlOptions: {style:google.maps.MapTypeControlStyle.DROPDOWN_MENU},
        navigationControl: true,
        navigationControlOptions: {style:google.maps.NavigationControlStyle.DEFAULT},
        scrollwheel: true,
        draggable: true,
        disableDoubleClickZoom: false,
        scaleControl: true,
        scaleControlOptions: {position:google.maps.ControlPosition.TOP}
    });
    
    getCenterByLocation(address);
}

// in: 0..100, out: 0..50000
function getPriceRangeValue(value)
{
    if (value < 20 && value >= 0)
        return (value * 5);
    else if (value < 40 && value >= 20)
        return (value * 5);
    else if (value < 60 && value >= 40)
        return ((value * 15) - 400);
    else if (value < 80 && value >= 60)
        return ((value * 25) - 1000);
    else
        return ((value * 2450) - 195000);
}

// in: 0..50000, out: 0..100
function getPriceRangeValueReverse(value)
{
    if (value < 100 && value >= 0)
        return (value / 5);
    else if (value < 200 && value >= 100)
        return (value / 5);
    else if (value < 500 && value >= 200)
        return ((value + 400) / 15);
    else if (value < 1000 && value >= 500)
        return ((value + 1000) / 25);
    else
        return ((value + 195000) / 2450);
}

function getFilterFeatures()
{
    var features = [];
    
    $('#filter-features label.ui-state-active').each(function(){
        features.push($(this).prev('input').val());
    });
    
    return features.join(';');
}

function applyFilter()
{
    var url = '/' + site;
    
    if (site == 'umkreis' && umkreisMapActive)
        url += '';
    else if (site == 'umkreis')
        url += '/auswahl';
    else
        url += '/' + criteria;
    
    if (!umkreisMapActive)
        url += '/0-0';

    var price = getPriceRangeValue($('#filter-price').slider("values", 0)) + ';' + getPriceRangeValue($('#filter-price').slider("values", 1));
    var property = $('#filter-propertyType').val();
    var persons = $('#filter-occupancy').val();
    var features = getFilterFeatures();
    
    location.href = url+'!price='+price+'&property='+property+'&persons='+persons+'&features='+features;
}

function clearFilter()
{
    var url = '/' + site;
    
    if (site == 'umkreis' && umkreisMapActive)
        url += '';
    else if (site == 'umkreis')
        url += '/auswahl';
    else
        url += '/' + criteria;
    
    if (!umkreisMapActive)
        url += '/0-0';
    
    location.href = url + '!filter_reset';
}

// JQUERY-TOOLTIP
function stdTT(obj, className) {
	obj.tooltip({
		delay: 0, 
		track: true,
		showURL: false,
		extraClass: className,
		fade: 250
	});
}

$(document).ready(function() {
	$(".smallPreviewImg").tooltip({
		delay: 0, 
		track: true,
		showURL: false, 
		fade: 250,
		extraClass: "smallPreviewImgTooltip",
		bodyHandler: function() { 
            var url = $(this).next('img').attr('src');
            return $("<img/>").attr('src', url).css('max-width', '280px');
		}
	});
	
	stdTT($(".questionmark"), "tooltipBox");
	stdTT($(".jQueryToolTip a"), "tooltip");
	stdTT($(".jQueryToolTip div"), "tooltip");
	stdTT($(".jQueryToolTip img"), "tooltip");
	stdTT($(".jQueryToolTip input"), "tooltip");
	//stdTT($(".lastMinutePrice a"), "tooltip");
	stdTT($(".help"), "tooltip");
	stdTT($(".searchResultIcons div"), "tooltip");
    
    // Tabs für die Startseite
    $("#tabs").tabs();
    
    $('#filter-price').slider({
        range: true,
        min: 0,
        max: 100,
        values: [priceSliderValues[0], priceSliderValues[1]],
        slide: function (event, ui){
            $("#price-text").html(getPriceRangeValue(ui.values[0]) + ',-€ bis ' + getPriceRangeValue(ui.values[1]) + ',-€');
        }
    });
    
    $("#price-text").html(getPriceRangeValue(priceSliderValues[0]) + ',-€ bis ' + getPriceRangeValue(priceSliderValues[1]) + ',-€');
    
    $('#overlayFilter').dialog({
        width: 420,
        title: 'Filteroptionen',
        autoOpen: false,
        buttons: { 
            "Anwenden": function() { applyFilter() }
        },
        dialogClass: 'overlayFilter',
        modal: true,
        resizable: false
    });
    
    // Buttons für die Flags
    for (var i=1; i<=14; i++)
    {
        $('#flag'+i).button({ icons: { primary: 'ui-icon-flag'+i }, text: false });
    }
    
    $('.categoryBox .hint').button({ icons: { primary: 'ui-icon-carat-1-n' }, text: false });
    
    if (expandCountries)
        slideFilter('countryList', 1);
    
    if (expandAreas)
        slideFilter('areaList', 2);
    
    if (expandCities)
        slideFilter('cityList', 3);
    
    // Datepicker
	$("#sucheArrivalDate").datepicker({ 
        minDate: new Date(),
        dateFormat: 'dd.mm.yy',
        dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
        firstDay: 1,
        nextText: 'Monat vor',
        prevText: 'Monat zurück'
    });
    
    // Autocomplete vom Suchtext-Feld ausschalten
    $('#searchForm form').attr('autocomplete', 'off');
    $('#sucheText').attr('autocomplete', 'off');
});

