(function($) {
	$.tfeRealEstateAjax = function() {
		$('.filter-submit').remove();
		$('#form-sort select.onchange').change(function() {
			$.tfeRealEstateAjax.loadContent($('#form-sort'));
		});
		$('#form-list-filters input.onchange, #form-list-filters select.onchange').change(function() {
			$.tfeRealEstateAjax.loadContent($('#form-list-filters'));
		});
		$('.pageBrowser a, a.clear-filter').bind('click', function(evt) {
			evt.preventDefault();
			$.tfeRealEstateAjax.loadContent($(this));
		});
	}
	
	$.tfeRealEstateAjax.loadContent = function(element) {
		if (!$.tfeRealEstateAjax.loadContent.isLoading) {
			$.tfeRealEstateAjax.loadContent.isLoading = true;

			var link = '';
			var postData = '';

			if ($(element)[0].tagName == 'FORM') {
				var append = element.attr('action').match(/\?/) ? '&' : '?';
				link = element.attr('action') + append + 'type=20002';
				postData = element.serialize();
			} else if ($(element)[0].tagName == 'A') {
				var append = element.attr('href').match(/\?/) ? '&' : '?';
				link = element.attr('href') + append + 'type=20002';
			}
			
			$.tfeRealEstateAjax.renderLoading();
			$.post(
				link,
				postData,
				function(data) {
					$.tfeRealEstateAjax.loadContent.isLoading = false;
					$('#content').html(data);
					$.tfeRealEstateAjax();
					if (typeof(setFieldSetHeight) != "undefined")
					{
						setFieldSetHeight();
					}
				}
			);
		}
	}
	$.tfeRealEstateAjax.loadContent.isLoading = false;
	
	$.tfeRealEstateAjax.disableFormElements = function() {
		$('#form-list-filters select, #form-list-filters input, #form-sort select').attr('disabled', 'disabled');
	};
	
	$.tfeRealEstateAjax.renderLoading = function() {
		$.tfeRealEstateAjax.disableFormElements();
		
		var maskHeight = $('.objects').height();
		var maskWidth = $('.objects').width();

		var mask = $('<div>')
			.css({'width':maskWidth, 'height':maskHeight})
			.addClass('objects-mask')
			.appendTo('.objects');
		
		$.tfeRealEstateAjax.addLoadingIcon ($('.objects'), 'objects-loading');
	}
	$.tfeRealEstateAjax.addLoadingIcon = function(containter, className) {
		var maskHeight = containter.height();
		var maskWidth = containter.width();
		
		var imgWidth = 32;
		var imgHeight = 32;
		var loading = $('<img>')
			.attr('src', '/typo3conf/ext/tfe_real_estate/res/icon/loading.gif')
			.css({'left':((maskWidth - imgWidth) / 2), 'top':((maskHeight - imgHeight) / 2)})
			.addClass(className)
			.appendTo(containter);
	}
	$(function() {
		$.tfeRealEstateAjax();
		
		// TFE Real Estate Detail
		$detailMedia = $('.tx-tferealestate-controller .detail .media');
		if ($detailMedia.length > 0) {
			$('.thumbs a', $detailMedia).bind('click', function(evt) {
				evt.preventDefault();
				var $mediaUid = parseInt($(this).attr('rel').split('-')[1]);
				if ($('.detail img.media-object', $detailMedia).attr('id') != 'media_' + $mediaUid) {
					$.tfeRealEstateAjax.addLoadingIcon($('.tx-tferealestate-controller .detail .media .detail'), 'media-loading');
					
					$.getJSON('/?eID=tfe_real_estate_json&action=media&uid=' + $mediaUid, function(data) {
						$('.detail img.media-object', $detailMedia).replaceWith(data.image);
						$('.detail span', $detailMedia).html(data.title);
						$('.thumbs li', $detailMedia).removeClass('active');
						$('.thumbs a[rel^=media-' + $mediaUid + ']', $detailMedia).parent().addClass('active');
						if ($.browser.msie && parseInt($.browser.version) <= 6) {
							$('.thumbs li', $detailMedia).css('backgroundPosition', 'center top');
						}
						$('.tx-tferealestate-controller .detail .media .detail .media-loading').remove();
					});
				}
			});
		}
		// Crop description
		$detailDescription = $('.tx-tferealestate-controller .detail .description .description-text');
		$detailDescriptionParagraphs = $('p', $detailDescription);

		$hiddenContainer = $('<div>')
			.css('display', 'none');;
		$detailDescriptionParagraphs.each(function(counter) {

			if(counter > 0) {
				$detailDescription.remove($(this));
				$(this).appendTo($hiddenContainer);
			}
		});
		
		$hiddenContainer.appendTo($detailDescription);
		if($hiddenContainer.html() != '') {
			$readMore = $('<a>')
				.attr('href', '#')
				.html('Lees meer')
				.addClass('description-more');
			$readMore.appendTo($('.tx-tferealestate-controller .detail .description'))
			$readMore.toggle(
				function() {
					$hiddenContainer.slideDown();
					$(this).html('Lees minder');
					$(this).removeClass('opened')
				},
				function() {
					$hiddenContainer.slideUp();
					$(this).html('Lees meer');
					$(this).addClass('opened')
				}
			);
		}
		$featuresExtended = $('.tx-tferealestate-controller .detail .features-extended');
		if ($featuresExtended.length > 0) {
			$('.tx-tferealestate-controller a.toggle-extended-features').bind('click', function(evt) {
				evt.preventDefault();
				$(this).toggleClass('opened');
				$featuresExtended.slideToggle();
				$(this).text($(this).hasClass('opened') ? 'Minder kenmerken' : 'Meer kenmerken');
			});
		}
	});
})(jQuery);
