var PopupId;

/* pseudo-klasse fuer :focused elemente erstellen */
var focused = false;
jQuery.extend(jQuery.expr[':'], {
    focus: function(element) { 
        return element == document.activeElement; 
    }
});


function numberToEuro(zahl, nachkomma) {
	if(nachkomma === true) {
		var wert = zahl.toFixed(2);
	} else {
		var wert = zahl.toString();
	}
	wert = wert.replace(/\./,",");
	while(wert.match(/^(\d+)(\d{3}\b)/)) {
    	wert = wert.replace(/^(\d+)(\d{3}\b)/, RegExp.$1 + '.' + RegExp.$2);
	}
	
	return wert;
}

function showStatusMessage(data) {
	var myresponse = $.parseJSON(data);
	if(myresponse) {
		$('#statusmessage').html('<h3>'+myresponse.heading+'</h3><p>'+myresponse.message+'</p>').removeClass('error').removeClass('success').addClass(myresponse.rtype).effect( 'bounce', '', 750).delay(1000).fadeOut('fast');
	}
}

function nl2br (str, is_xhtml) {   
	var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';    
	return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}


function showSpinner(target) {
	$(target).html('<div style="text-align: center; padding: 10px;"><img src="/images/ajax-loader.gif" alt="lade..." /></div>');
}

function searchAutocomplete(type) {
	if(type == 'city') { var src = 'cityAutocomplete'; }
	else { var src = 'areaAutocomplete'; }
	var selected_from_list = 0;
	
	$( "#"+src ).autocomplete({
			source: function(request, response) {
				selected_from_list = 0;
				$('#'+type+'id').removeAttr('value');

				if(type == 'area') {
					var cityid = $('#cityid').val();
					var myrequest = 'term='+request.term+'&cityid='+cityid;
					var qurl = '/search/autoget_area/';
				}
				else if(type == 'city') {
					var myrequest = 'term='+request.term;
					var qurl = '/search/autocomplete/';
				}

				$.ajax({
					url: qurl,
					data: myrequest,
					dataType: 'json',
					success: function(data) {
						response($.map(data,function(item) {
							if(type == 'city') { return { name: item.city, value: item.city, id: item.id, state: item.state } }
							else if(type == 'area') { return { name: item.area, value: item.area, id: item.id } }
						}))
					}
				})
			},
			minLength: 2,
			select: function(event, ui) {
				this.close;
				var cityid = ui.item.id;
				$('#'+type+'id').val(cityid);
				if(type == 'city') { $('#areaAutocomplete').removeAttr('DISABLED'); }
				selected_from_list = 1;
			},
			open: function() {
				$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
			},
			change: function() {
				if(selected_from_list == 0) {
					$('#'+type+'id').removeAttr('value');
					$('#areaAutocomplete').find('.tooltip').addClass('tooltip_fail').html('Bitte wählen Sie einen Stadtteil aus der Liste')
				} else {
					$('#areaAutocomplete').find('.tooltip').removeClass('tooltip_fail').html('Geben Sie den gewünschten Stadtteil ein')
				}
			},
			close: function() {
				$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
			}
		});
}


function StatesAC() {
	// Autocomplete Bundeslaender
	var selected_from_list = 0;
	
	$( "#statesAC").autocomplete({
		source: function(request, response) {
			selected_from_list = 0;
		
			var myrequest = 'term='+request.term;
			var qurl = '/search/AutoGetStates/';
		
			$.ajax({
				url: qurl,
				data: myrequest,
				dataType: 'json',
				success: function(data) {
					response($.map(data,function(item) {
						return { name: item.state, value: item.state }
					}))
				}
			})
		},
		minLength: 2,
		select: function(event, ui) {
			this.close;
			selected_from_list = 1;
			$('#cityACwrapper').fadeIn();
		},
		open: function() {
			$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
		},
		change: function() {
			if(selected_from_list == 0) {
				$('#statesAC').find('.tooltip').addClass('tooltip_fail').html('Bitte geben Sie ein Bundesland ein')
			} else {
				$('#statesAC').find('.tooltip').removeClass('tooltip_fail').html('Geben Sie hier das Bundesland ein')
			}
		},
		close: function() {
			$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
		}
	});
}

function CitiesAC() {
	// Autocomplete Bundeslaender
	var selected_from_list = 0;
	
	$( "#citiesAC").autocomplete({
		source: function(request, response) {
			selected_from_list = 0;
		
			var state = $('#statesAC').val();
			
			var myrequest = 'term='+request.term+'&state='+state;
			var qurl = '/search/AutoGetCities/';
		
			$.ajax({
				url: qurl,
				data: myrequest,
				dataType: 'json',
				success: function(data) {
					response($.map(data,function(item) {
						return { name: item.city, value: item.city+' ('+item.state+')', id: item.id }
					}))
				}
			})
		},
		minLength: 2,
		select: function(event, ui) {
			this.close;
			$('#cityid').val(ui.item.id);
			selected_from_list = 1;
			getAreas(ui.item.id);
		},
		open: function() {
			$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
		},
		change: function() {
			
			if(selected_from_list == 0) {
				$('#citiesAC').find('.tooltip').addClass('tooltip_fail').html('Bitte geben Sie den Ort ein')
			} else {
				$('#citiesAC').find('.tooltip').removeClass('tooltip_fail').html('Geben Sie den gewünschten Ort ein')
			}
		},
		close: function() {
			$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
		}
	});
}



function AutocompleteCity() {

	$( "#AutocompleteCity").autocomplete({
		source: function(request, response) {
			var state = $('#AutocompleteCity').val();
			var myrequest = 'term='+request.term+'&state='+state;
			var qurl = '/search/AutoGetCities/';
		
			$.ajax({
				url: qurl,
				data: myrequest,
				dataType: 'json',
				success: function(data) {
					response($.map(data,function(item) {
						return { name: item.city, value: item.city+' ('+item.state+')', id: item.id }
					}))
				}
			})
		},
		minLength: 2,
		select: function(event, ui) {
			this.close;
			$('#cityid').val(ui.item.id);
			selected_from_list = 1;
			getAreas(ui.item.id);
		},
		change: function() {
			var tmp = $(this).val();
			var city = tmp.split(' (');
			$(this).val(city[0]);
		}
	});
}

function AutocompleteArea() {

	$( "#AutocompleteArea").autocomplete({
		source: function(request, response) {
			var cityid = $('#cityid').val();
			var myrequest = 'term='+request.term+'&cityid='+cityid;
			var qurl = '/search/autoget_area/';
		
			$.ajax({
				url: qurl,
				data: myrequest,
				dataType: 'json',
				success: function(data) {
					response($.map(data,function(item) {
						return { name: item.area, value: item.area, id: item.id }
					}))
				}
			})
		},
		minLength: 2,
		select: function(event, ui) {
			this.close;
			$('#areaid').val(ui.item.id);
			selected_from_list = 1;
		}
	});
}




function getAreas(cityid) {

	var qurl = '/search/UpdateAreas/?cityid='+cityid;
	items = new Array();
	$('#arealist').html('<div style="text-align: center"><img src="/images/ajax-downloader.gif" alt="Moment bitte" /></div>');
	
	$.ajax({
		url: qurl,
		dataType: 'json',
		success: function(data) {
			items.push('<div class="selectall"><label for="selall">Alle auswählen</label></div>');
			items.push('<ul>');
			$.each(data,function(i,item) {
				items.push('<li><label for="area[' + item.id + ']"><input value="1" type="checkbox" id="area[' + item.id + ']"  name="area[' + item.id + ']">' + item.area + '</label></li>');
			});
			items.push('</ul>');
			$('#arealist').html(items.join(''));
		}
	});

}
/*
function getAreas(cityid) {
//	$('#areas');
	$('#ajaxload').show();
	var qurl = '/search/UpdateAreas/?cityid='+cityid;
	items = new Array();

	$.ajax({
		url: qurl,
		dataType: 'json',
		success: function(data) {
			$('#arealist').html(' ');
			$.each(data,function(i,item) {
				items.push('<span style="width: 200px; display: inline-block"><input type="checkbox" id="area[' + item.id + ']"  name="area[' + item.id + ']"><label for="area[' + item.id + ']">' + item.area + '</label></span>');
			});
			$(items.join('')).appendTo('#arealist');
			$('#ajaxload').hide();
			$('#areaACwrapper').fadeIn();

		}
	});

}*/



// TOOLTIPS

function tooltips() {

	$('#form .item').hover(function(e) {
		if(!focused) {
			$(e.target).find('.tooltip').addClass('tooltip_active');
		}
	}, function(e) {
		if(!focused) {
			$('.tooltip_active').removeClass('tooltip_active');
		}
	});

	$('input, select, textarea').focus(function(e) {
		$(e.target).parent().find('.tooltip').addClass('tooltip_active');
		focused = true;
	});
	$('input, select, textarea').blur(function(e) {
		$(this).parent().find('.tooltip').removeClass('tooltip_active');
		focused = false;
	});

}



// POPUPS

function showInlinePopup() {
	$('.pop').click(function() {
		PopupId = $(this).attr('rel');
		var popMargTop = ($('#' + PopupId).height() + 80) / 2;
		var popMargLeft = ($('#' + PopupId).width() + 80) / 2;
		$('#' + PopupId).css({
			'margin-top' : -popMargTop,
			'margin-left' : -popMargLeft
		});

		$('body').append('<div class="popup_trans"></div>');
		$('.popup_trans').css({'filter' : 'alpha(opacity=40)'}).fadeIn();
		$('#' + PopupId).fadeIn();
		return false;
	});
	$('.popup .close').click(function() {
		hideInlinePopup(0);
	});
}

function hideInlinePopup(delay) {
	setTimeout(function(e) {
		$('#' + PopupId).fadeOut();
		$('.popup_trans').fadeOut();
		$('.popup_trans').remove();
		}, delay);
		
		return false;
}





function saveSearchAgent() {
	var para = window.location.href;
	var urlparameter = para.split('?');
	urlparameter[1] = urlparameter[1].substr(0,urlparameter[1].length-2);
	urlparameter[1] += '&searchagent_name='+$('input[name=searchagent_name]').val();
	
	$.ajax({
		url: '/search/saveagent/',
		data: urlparameter[1],
		dataType: 'text',
		success: function(data) {
			$('#searchagent-dialog').dialog( "close" );
			showStatusMessage(data);
		}
	})
}

function closeSearchAgent() {
	$('#searchagent-dialog').dialog( "close" );
}

function deleteSearchAgent(el) {
	var id = $(el).attr('rel');
	
	$.ajax({
		url: '/search/deleteagent/?agent_id=' + id,
		dataType: 'text',
		success: function(data) {
			$('#searchagent-dialog').dialog( "close" );
			javascript:location.reload(true);
			showStatusMessage(data);
		}
	})
}


// preview

function preview() {
		var popMargTop = ($('#preview').height() + 80) / 2;
		var popMargLeft = ($('#preview').width()) / 2;
		$('#preview').css({
			'margin-top' : -popMargTop,
			'margin-left' : -popMargLeft-30
		});

		$('body').append('<div class="popup_trans"></div>');
		$('.popup_trans').css({'filter' : 'alpha(opacity=40)'}).fadeIn();
		$('#preview').fadeIn();
		
		
		$.ajax({
			url: '/housing/preview/0',
			success: function(data) {
				$('#preview').html(data);
			}
		})
		
		
		return false;
}

function preview_safe() {
	$('.submit').click();
}

function preview_edit() {
	$('#preview').fadeOut();
	$('.popup_trans').fadeOut();
	$('.popup_trans').remove();
	return false;
}

// Twitter
function scrollTwitter(durchlauf) {
	var newpos = (durchlauf * 40) * (-1);

	$('#twitterscroller ul').animate({
		'margin-top': newpos+'px'
	});
	if(durchlauf < 10) {
		durchlauf++;
	} else {
		durchlauf = 0;
	}
	setTimeout('scrollTwitter('+durchlauf+')',10000);
}

// Howto
function scrollHowto(durchlauf) {
	var newpos = (durchlauf * 150) * (-1);

	$('#howtoscroller ul').animate({
		'margin-top': newpos+'px'
	});
	if(durchlauf < 5) {
		durchlauf++;
	} else {
		durchlauf = 0;
	}
	setTimeout('scrollHowto('+durchlauf+')',5000);
}


// Google Maps

var map;
var geocoder;

function init_map(target) {
    var latlng = new google.maps.LatLng(53.564348,9.983826);
    var mapOptions = {
		zoom: 13,
		disableDefaultUI: true,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById(target), mapOptions);
	geocoder = new google.maps.Geocoder();
}

function codeAddress(address,id) {
	if (geocoder) {
		geocoder.geocode( { 'address': address}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				map.setCenter(results[0].geometry.location);
				
				var marker = new google.maps.Marker({
					map: map, 
					position: results[0].geometry.location
				});
			}
		});
	}
}


