// nur zum Debuggen !!!
function print_r(obj, key, pre)
{
 	var ret = '';
 	
 	if (typeof(pre) == 'undefined')
 		pre = '';
 	
 	if (typeof(obj) == 'undefined')
 		obj = 'undefined';
 	
 	var name = obj;
 	
 	if (obj instanceof Array)
 		name = 'Array';
 	else if (obj instanceof Object && typeof(obj) != 'function')
 		name = 'Object';
 	else if (obj instanceof Object && typeof(obj) == 'function')
 		name = obj.toString().split('{')[0];
 	else if (typeof(obj) == 'string')
 		name = '\'' + name + '\'';
 	
 	if (typeof(key) == 'undefined')
	 	ret += pre + name;
	else
		ret += pre + '[' + key + '] => ' + name;
 	
 	ret += '\n';
 	
 	if (typeof(obj) == 'object' && obj != null)
 	{
 	 	pre += '    ';
		ret += pre + '(' + '\n';
		pre += '    ';
 	 	
 	 	for (var key2 in obj)
 	 	{
			try
			{
				ret += print_r(obj[key2], key2, pre);
			}
			catch (e)
			{
			
			}
 	 	}
 	 	
 	 	pre = pre.substr(0, pre.length - 4);
 	 	ret += pre + ')' + '\n';
 	 	pre = pre.substr(0, pre.length - 4);
 	}
 	
 	return ret;
}

// auch nur zum Debuggen !
String.prototype.wrap = function(number, sep)
{
    if (!sep)
    {
        sep = '\n';
    }
    
    var wrap = '';
    var count = 0;
    
    do
    {
        count += number;
        wrap += this.substr(count-number, number) + sep;
    } while (count < this.length)

    return wrap;
}

// Ersatz für str_replace aus PHP
function str_replace(search, replace, subject)
{
    return subject.split(search).join(replace);
}

function isValidEmail(str)
{
    var filter = /^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    
    if (filter.test(str))
    {
        return true;
    }

    return false;
}

function checkContactForm()
{
    var name_field = document.getElementById('kontakt_name');
    var email_field = document.getElementById('kontakt_email');
    var text_field = document.getElementById('kontakt_text');
    
    if (name_field.value == "")
    {
        alert("Bitte geben Sie Ihren Namen ein.");
        return false;
    }
    
    if (email_field.value == "")
    {
        alert("Bitte geben Sie Ihre eMail-Adresse ein.");
        return false;
    }
    else if (!isValidEmail(email_field.value))
    {
        alert("Bitte geben Sie eine gültige eMail-Adresse ein.");
        return false;
    }
    
    if (text_field.value == "")
    {
        alert("Bitte geben Sie Ihr Anliegen ein.");
        return false;
    }
    
    return true;
}

function reset_box(box)
{
	// Anzahl aller Nodes
	var num_nodes = box.childNodes.length;

	// Optgroups entfernen
	for (var i=0; i<num_nodes; i++)
	{
		if (box.childNodes[i])
		{
			// wenn es sich um eine Optgroup handelt
			if (box.childNodes[i].nodeName == "OPTGROUP")
			{
				// entfernen und Index der Schleife korrigieren
				box.removeChild(box.childNodes[i]);
				i--;
			}
		}
	}
	
	// Anzahl der Options in der unteren Box
	var num_options = box.options.length;
		
	// alle Options bis auf die Erste löschen
	for (var i=0; i<num_options - 1; i++)
	{
		// Option zum löschen markieren (Options werden erst beim nächsten Ansprechen automatisch entfernt)
		box.options[1] = null;
	}
}

function add_option(obj_id, number, value, text, secondbox_id)
{
	// neues Option-Element anlegen und mit Value und Text füllen
    var new_option = '<option value="' + value + '" label="' + text + ' (' + number + ')' + '" ';
	
	// Class definieren
	if (secondbox_id == "sucheArea")
    {
        new_option += 'class="opt_region"';
    }
	else
    {
        new_option += 'class="opt_city"';
    }
    
    new_option += '>' + text + ' (' + number + ')' + '</option>';
	
	// dem parent-Element hinzufügen
    $("#"+obj_id).append(new_option);
}

function selectElement(box, value)
{
    for (var i=0; i<box.options.length; i++)
    {
        if (box.options[i].value == value)
        {
            box.selectedIndex = i;
            break;
        }
    }
}

// wird aufgerufen, sobald sich der SelectedIndex ändert
function fillSelectBox(firstbox, secondbox, content)
{
	// obere Box hat nicht den ersten Eintrag ausgewählt ("bitte wählen")
	if (firstbox.selectedIndex != 0)
	{
		// untere Box auf "disabled" setzen
		secondbox.disabled = false;
	}
	else
	{
		// untere Box wieder freigeben
		secondbox.disabled = true;
	}
	
	// Optgroups und alle bis auf die erste Option entfernen
	reset_box(secondbox);
	
	// wenn die erste Box verändert wurde, dann zusätzlich die dritte Box leeren und deaktivieren
	if (secondbox.id == 'sucheArea')
	{
		// dritte Box holen und sperren
		var thirdbox = document.getElementById('sucheCity');
		thirdbox.disabled = true;
		
		// Optgroups und alle Options bis auf die erste entfernen
		reset_box(thirdbox);
	}
	
	// zweite Select-Box mit Options füllen
	if (secondbox.disabled == false)
	{
		// in content steht der Name des Landes oder der Region, der zweite Parameter gibt an, 
		// ob es sich um ein Land oder eine Region handelt
		
        $.ajax({
            type: "POST",
            url: "/ajax/sub_schnellsucheAjax",
            data: "field=" + content + "&is_land=" + (secondbox.id == "sucheArea" ? 1 : 0),
            dataType: 'json',
            success: function(result_array) 
            {
                // wir teilen ein in Top-Regionen / Top-Städte und andere Regionen / Städte
                if (result_array.length > 3)
                {
                    var optgr_id = secondbox.id + '_group_top';
                    var top_optgroup = '<optgroup id="' + optgr_id + '" ';
                    
                    if (secondbox.id == "sucheArea")
                    {
                        top_optgroup += 'label="Top-Regionen"';
                    }
                    else
                    {
                        top_optgroup += 'label="Top-Städte"';
                    }
                    
                    top_optgroup += '></optgroup>';
                    
                    // Top-Optgroup der Box hinzufügen
                    $("#"+secondbox.id).append(top_optgroup);
                    
                    // Top-Regionen / -Städte
                    for (var i=0; i<3; i++)
                    {
                        add_option(optgr_id, result_array[i].num, result_array[i].alias, result_array[i].name, secondbox.id);
                    }
                    
                    optgr_id = secondbox.id + '_group_other';
                    var other_optgroup = '<optgroup id="' + optgr_id + '" ';
                    
                    if (secondbox.id == "sucheArea")
                    {
                        other_optgroup += 'label="Andere Regionen"';
                    }
                    else
                    {
                        other_optgroup += 'label="Andere Städte"';
                    }
                    
                    other_optgroup += '></optgroup>';
                    
                    // Optgroup der Box hinzufügen
                    $("#"+secondbox.id).append(other_optgroup);
                    
                    // andere Regionen / Städte
                    for (var i=3;i<result_array.length; i++)
                    {
                        add_option(optgr_id, result_array[i].num, result_array[i].alias, result_array[i].name, secondbox.id);
                    }
                }
                // wir haben nur 3 oder weniger Ergebnisse, Optgroups lohnen sich hierbei nicht
                else
                {
                    for (var i=0;i<result_array.length; i++)
                    {				
                        add_option(secondbox.id, result_array[i].num, result_array[i].alias, result_array[i].name, secondbox.id);
                    }
                }
                    
                
			},
			error: function(obj, text) { alert("Fehler:\n\n" + print_r(obj)); }
		});
	}
}

var textFieldTimer = null;
var lastText = null;

function searchFormTextField(text)
{
    clearTimeout(textFieldTimer);
    
    if (typeof text != 'undefined' && text == $('#sucheText').val())
    {
        if (text != lastText)
        {
            lastText = $('#sucheText').val();
            searchFormAjaxRefresh();
        }
    }
    else
    {
        textFieldTimer = window.setTimeout(function(){ searchFormTextField($('#sucheText').val()) }, 500);
    }
}

function searchFormAjaxRefresh(clear)
{
    $('#searchFormHits').html('');
    
    if (clear || checkForm(1))
    {
        $('#submitSearch').addClass('started');
        $('#submitSearch').attr('disabled', true);
        
        var data = {};
        
        $('#searchForm input').each(function(){ 
            var type = $(this).attr('type');
            var name = $(this).attr('name');
            var value = $(this).val();
            
            if (type == 'checkbox')
            {
                if ($(this).attr('checked') == 'checked')
                {
                    data[name] = value;
                }
            }
            else if (type == 'text')
            {
                data[name] = value;
            }
        });
        
        $('#searchForm select').each(function(){ 
            var name = $(this).attr('name');
            var value = $(this).val();
            
            data[name] = value;
        });
        
        /*
        var data = 'country='+$('#sucheCountry').val();
        data += '&area='+$('#sucheArea').val();
        data += '&city='+$('#sucheCity').val();
        data += '&text='+$('#sucheText').val();
        data += '&propertyType='+$('#suchePropertyType').val();
        data += '&occupancy='+$('#sucheOccupancy').val();
        data += '&arrivalDate='+$('#sucheArrivalDate').val();
        data += '&considerArrivalDate='+($('#sucheConsiderArrivalDate').attr('checked') == 'checked' ? 1 : 0);
        data += '&duration='+$('#sucheDuration').val();
        data += '&flagTV='+($('#sucheFlagTV').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagPool='+($('#sucheFlagPool').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagBalcony='+($('#sucheFlagBalcony').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagChimney='+($('#sucheFlagChimney').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagSauna='+($('#sucheFlagSauna').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagAirConditioner='+($('#sucheFlagAirConditioner').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagGrill='+($('#sucheFlagGrill').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagWhirlPool='+($('#sucheFlagWhirlPool').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagDishWasher='+($('#sucheFlagDishWasher').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagWashingMachine='+($('#sucheFlagWashingMachine').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagInternet='+($('#sucheFlagInternet').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagPets='+($('#sucheFlagPets').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagBicyclesForHire='+($('#sucheFlagBicyclesForHire').attr('checked') == 'checked' ? 1 : 0);
        data += '&flagBoatsForHire='+($('#sucheFlagBoatsForHire').attr('checked') == 'checked' ? 1 : 0);
        */
        
        $.ajax({
            type: "POST",
            url: "/ajax/sub_schnellsucheResults",
            data: data,
            success: function(msg) {
                $('#submitSearch').removeClass('started');
                $('#submitSearch').attr('disabled', false);
                
                if (!clear)
                {
                    if (msg == 0)
                        $('#searchFormHits').html('(kein Ergebnis)');
                    else if (msg == 1)
                        $('#searchFormHits').html('('+msg+' Ergebnis)');
                    else
                        $('#searchFormHits').html('('+msg+' Ergebnisse)');
                }
            },
            error: function(error) { alert("Fehler:\n\n" + print_r(error)); }
        });
    }
}

// prüft, ob das übergebene Datum gültig ist
function checkDate(value)
{
	var error = '';
	
	// Syntax prüfen
	if (!value.match(/^\d{2}\.\d{2}\.\d{4}$/))
	{
		error = 'Bitte beachten Sie das angegebene Datumsformat!';
	}
	else 
	{
		try
		{
			var date_array = value.split(".");
			var date_now_tmp = new Date();
            var date_now = new Date(date_now_tmp.getFullYear(), date_now_tmp.getMonth(), date_now_tmp.getDate());
			var	date_given = new Date(date_array[2], date_array[1]-1, date_array[0]);
			
            // Datum existiert?
			if (date_given.getDate() != date_array[0] || date_given.getMonth() != date_array[1]-1 || date_given.getFullYear() != date_array[2])
			{
				error = 'Das eingegebene Datum existiert nicht!';
			}
			// Datum ist nach dem heutigen Tag?
			else if (date_given.getTime() < date_now.getTime())
			{
				error = 'Bitte ein Datum ab heute angeben!';
			}
		}
		catch (e)
		{
			error = "Ungültiges Datumsformat!";
		}
	}
    
    //document.getElementById("submitSearch").disabled = (error != "");
	
	return error;
}

// wird aufgerufen, wenn das Formular abgeschickt wird
function checkForm(ajax)
{
    //console.log('form submitted');
    
    $('#sucheText').css('border', '1px solid #A5ACB2');
    $('#sucheCountry').css('border', '1px solid #A5ACB2');
    $('#sucheArrivalDate').css('border', '1px solid #A5ACB2');
    $('#errorMessage').html('');
    
    if ($('#sucheText').val() == '')
    {
        var land_error = ($('#sucheCountry').val() == '');
        var date_error = (checkDate($('#sucheArrivalDate').val()) != "");
        var error = '';
        
        if (land_error || date_error)
        {
            if (ajax && land_error)
            {
                // do nothing
            }
            else
            {
                $('#sucheText').css('border', '2px solid #000000');
                
                if (land_error && date_error)
                {
                    $('#sucheCountry').css('border', '2px solid #000000');
                    $('#sucheArrivalDate').css('border', '2px solid #000000');
                    error = 'Bitte geben Sie einen Suchtext ein oder wählen Sie<br\/> ihr gewünschtes Land und einen Anreisetag ab heute aus.';
                }
                else if (land_error && !date_error)
                {
                    $('#sucheCountry').css('border', '2px solid #000000');
                    error = 'Bitte geben Sie einen Suchtext ein oder wählen Sie<br/> ihr gewünschtes Land aus.';
                }
                else
                {
                    $('#sucheArrivalDate').css('border', '2px solid #000000');
                    error = 'Bitte geben Sie einen Suchtext ein oder wählen Sie<br/> einen Anreisetag ab heute aus.';
                }
                
                $('#errorMessage').html(error + '<br/><br/>');
            }
            
            return false;
        }
    }
    
    var criteria = '';
    
    if ($('#sucheCountry').val() == '')
        criteria = 'weltweit';
    else
        criteria = $('#sucheCountry').val();
    
    if ($('#sucheArea').val() != '')
        criteria += '/'+$('#sucheArea').val();
    
    if ($('#sucheCity').val() != '')
        criteria += '/'+$('#sucheCity').val();
    
    if (ajax)
    {
        return true;
    }
    else
    {
        $('#searchForm form').attr('action', '/suche/'+criteria+'/0-0');
        $('#submitSearch').addClass('started');
        $('#submitSearch').attr('disabled', true);
        return true;
    }
    
    return false;
}

function focusDatepicker()
{
    $('#sucheArrivalDate').focus();
    return false;
}

function submitPageLinksForm(page)
{
    $('#opt_page').val(page);
    $('#pageLinksForm').submit();
    return false;
}

function submitSortForm(sort_value)
{
    $('#opt_sort').val(sort_value);
    $('#opt_page').val(0);
    $('#pageLinksForm').submit();
}

function modifySearch(path)
{
    $('#pageLinksForm').attr('action', path);
    $('#pageLinksForm').submit();
}

function showFlags()
{
    $('#searchFormFlags').show();
    $('#showFlagsLink').hide();
    
    return false;
}

function resetForm()
{
    $('#searchFormFlags').hide();
    $('#showFlagsLink').show();
    $('#errorMessage').html('');
    $('#searchFormHits').html('');
    $('#sucheCountry').css('border', "1px solid #A5ACB2");
    $('#sucheArrivalDate').css('border', "1px solid #A5ACB2");
    
    $('#sucheText').val('');
    $('#sucheCountry').val('');
    $('#sucheArea').val('');
    $('#sucheArea').attr('disabled', true);
    $('#sucheCity').val('');
    $('#sucheCity').attr('disabled', true);
    
    $('#suchePropertyType').val('');
    $('#sucheOccupancy').val('');
    
    var date = new Date();
    var dateStr = (date.getDate()<10 ? '0' : '') + date.getDate() + '.' + (date.getMonth()<9 ? '0' : '') + (date.getMonth()+1) + '.' + date.getFullYear();
    $('#sucheArrivalDate').val(dateStr);
    
    $('#sucheConsiderArrivalDate').attr('checked', false);
    $('#sucheDuration').val('');
    
    $('#sucheFlagTV').attr('checked', false);
    $('#sucheFlagPool').attr('checked', false);
    $('#sucheFlagBalcony').attr('checked', false);
    $('#sucheFlagChimney').attr('checked', false);
    $('#sucheFlagSauna').attr('checked', false);
    $('#sucheFlagAirConditioner').attr('checked', false);
    $('#sucheFlagGrill').attr('checked', false);
    $('#sucheFlagWhirlPool').attr('checked', false);
    $('#sucheFlagDishWasher').attr('checked', false);
    $('#sucheFlagWashingMachine').attr('checked', false);
    $('#sucheFlagInternet').attr('checked', false);
    $('#sucheFlagPets').attr('checked', false);
    $('#sucheFlagBicyclesForHire').attr('checked', false);
    $('#sucheFlagBoatsForHire').attr('checked', false);
    
    searchFormAjaxRefresh(true);
}

function submitFormToDetailPage(path, detailPage)
{
    $('#pageLinksForm').attr('action', path);
    $('#opt_detailPage').val(detailPage);
    $('#pageLinksForm').submit();
    return false;
}
