document.observe("dom:loaded", function(){
	// Create blackout structure
	if ($("blackout_dialog") == null) {
		$(document.body).insert({
			top: new Element("div", {
				id: "blackout_dialog",
				style: "display: none;"
			})
		}).down().update("Der Dialog wird geladen&hellip;");
	}
	if ($("blackout") == null) { 
		$(document.body).insert({
			top: new Element("div", {
				id: "blackout",
				style: "display: none;"
			})
		});
	}
});

function toggleBlackoutBackground() {
	if ( $('blackout').visible() ) {
		new Effect.Fade("blackout", {to: 0.0, duration: 0.2});
	} else {
		new Effect.Appear("blackout", {to: 0.8, duration: 1.5});
	}
}

function immformerTopObjekte(jsonArray){
	var htmlCode = ""
	for(var i=0; i<jsonArray.length; i++) {
		var item = jsonArray[i];
		var itemUrl = "immobilien.php?oid="+item.onr+"#ws_content";
		htmlCode += '<div class="item"><a href="'+itemUrl+'"><img src="'+item.bild+'" title="'+item.bezeichnung+'" alt="'+item.bezeichnung+'"/></a><div><a href="'+itemUrl+'">'+item.bezeichnung+'</a></div></div>';
	}
	$("itemlist").update(htmlCode);
	new Effect.Appear($("itemlist"), { duration: 0.2 });
}
function initTopObjekte(topobjekteUrl) {
		  var script = document.createElement("script");
		  script.type = "text/javascript";
		  script.src = topobjekteUrl;
		  document.body.appendChild(script);
}

function openMoreImagesSlider(oid, headlineText, titleLargeUrl, titleTitleText, thumbSmallArray, thumbLargeArray, thumbTitleArray) {
	if ( headlineText != "" ) {
		$("previewHeadline_"+oid).down('h1').update(headlineText);
		Effect.Queues.get("previewHeadline_"+oid).invoke('cancel');
		new Effect.Appear("previewHeadline_"+oid, {to: 1.0, duration: 0.2, queue: {position: 'end', scope: "previewHeadline_"+oid}});
	}
	if ( titleLargeUrl != "" ) {
		setImageInPreview(oid, titleLargeUrl, titleTitleText);
		Effect.Queues.get("preview_"+oid).invoke('cancel');
		new Effect.Appear("preview_"+oid, {to: 1.0, duration: 0.2, queue: {position: 'end', scope: "preview_"+oid}});
		//$("preview_"+oid).show();
	}

	var sliderHtmlCode = "";
	if ( thumbSmallArray.length > 0 ) {
		if ( $("slider_"+oid).innerHTML == "" ) {
			// only init if not already done
			for(var i=0 ; i<thumbSmallArray.length; i++) {
				sliderHtmlCode += '<div><img src="'+thumbSmallArray[i]+'" title="'+thumbTitleArray[i]+'" onmouseover=\'setImageInPreview("'+oid+'", "'+thumbLargeArray[i]+'", "'+thumbTitleArray[i]+'");\'/></div>';
			}
			$("slider_"+oid).update(sliderHtmlCode);
		}
	} else {
		$("slider_"+oid).update("Keine weiteren Medien.");
	}
	Effect.Queues.get("slider_"+oid).invoke('cancel');
	new Effect.Appear("slider_"+oid, {to: 1.0, duration: 0.2, queue: {position: 'end', scope: "slider_"+oid}});
	//$("slider_"+oid).show();
}
function closeMoreImagesSlider(oid) {
	Effect.Queues.get("previewHeadline_"+oid).invoke('cancel');
	new Effect.Fade("previewHeadline_"+oid, {to: 0.0, duration: 0.2, queue: {position: 'end', scope: "previewHeadline_"+oid}});
	Effect.Queues.get("slider_"+oid).invoke('cancel');
	new Effect.Fade("slider_"+oid, {to: 0.0, duration: 0.2, queue: {position: 'end', scope: "slider_"+oid}});
	//$("slider_"+oid).hide();
	Effect.Queues.get("preview_"+oid).invoke('cancel');
	new Effect.Fade("preview_"+oid, {to: 0.0, duration: 0.2, queue: {position: 'end', scope: "preview_"+oid}});
	//$("preview_"+oid).hide();
}
function setImageInPreview(oid, url, title) {
	var img;
	if (  $("preview_"+oid).innerHTML == "" ) {
		$("preview_"+oid).update("<div class='imgDiv'><img id='preview_"+oid+"_image' src='"+url+"' title='"+title+"'/ style='display:none;'></div><div id='preview_"+oid+"_title' class='title'>"+title+"</div>");
		img = $("preview_"+oid+"_image");
		img.onload = function () {new Effect.Appear(img, {to: 1.0, duration: 0.2});};
	} else {
		var img = $("preview_"+oid+"_image");
		img.hide();
		img.src = url;
		img.title = title;
		$("preview_"+oid+"_title").update(title);
	}
}

function anfrageToggleBox(anfrageUrl) {
	if ( anfrageUrl ) {
		updateBlackoutDialog(anfrageUrl, anfrageInitAnfragenCheckboxes);
	}

	toggleBlackoutBackground();
	$('blackout_dialog').toggle();
}

function anfrageInitAnfragenCheckboxes() {
	$$('#anfrageImmoListBox input.anfr_anfragen').each(function (elem) {
		elem.observe("click", function(event) {anfrageInitAnfragenCheckboxClicked(event);});
	});
}

function anfrageInitAnfragenCheckboxClicked(event) {
	if ( event.target.checked ) {
		event.target.up('tr', 1).removeClassName('disabled');
	} else {
		event.target.up('tr', 1).addClassName('disabled');
	}
}

function updateBlackoutDialog(anfrageUrl, successCallback) {
	$('blackout_dialog').update("Der Dialog wird geladen ...");
	anfrageUrl = anfrageUrl.replace("#ws_content", "");	// IE would add this to the last parameter and we do not need it on ajax-requests
	var ajaxUpdaterAttributes = {method: 'post',encoding : 'UTF-8'};
	if ( successCallback ) ajaxUpdaterAttributes.onSuccess=function (transport) {setTimeout(function () {initImmolistRowHighlighter();successCallback(transport);}, 100);};
	else ajaxUpdaterAttributes.onSuccess=function () {setTimeout(initImmolistRowHighlighter, 10);};
	new Ajax.Updater('blackout_dialog', anfrageUrl, ajaxUpdaterAttributes);	// timeout so browser can update stuff
}

function merklisteInitCheckboxes(merklisteUrl) {
	merklisteInitCheckboxesClickAction(merklisteUrl);
	merklisteInitCheckboxTooltips();
}

function merklisteInitCheckboxesClickAction(merklisteUrl) {
	$$('.merklisteCheckbox').each(function (elem) {
		elem.observe("click", function(event) {merklisteCheckboxClicked(merklisteUrl, event.target.name, event.target.checked, true);});
	});
}

function merklisteInitCheckboxTooltips() {
	$$('input.merklisteCheckbox').each(function (elem) {
		elem.insert({before: "<div class='merklisteCheckboxTooltipOuter'><div id='"+elem.id+"_tooltip' class='merklisteCheckboxTooltip' style='display:none;'></div></div>"});
	});
}

function merklisteAnfrageClicked(item, url) {
	if( !item.hasClassName('disabled') ) updateBlackoutDialog(url, anfrageInitAnfragenCheckboxes); 
	else alert('Es befinden sich keine Objekte in der Merkliste!');
}

function merklisteCheckboxClicked(url, merklisteCbName, state, showTooltip) {
	new Ajax.Request(url, {parameters: {'merklisteCbName': merklisteCbName, 'state': state}, method: 'get',encoding : 'UTF-8', onComplete: merklisteCheckboxClickedAjaxComplete});
	var tooltip = $(merklisteCbName+"_tooltip");
	if ( tooltip ) {
		if ( state ) {
			tooltip.update("Immobilie zur Merkliste hinzugef&uuml;gt.");
		} else {
			tooltip.update("Immobilie aus Merkliste entfernt.");
		}
		
		if ( showTooltip ) {
				
			Effect.Queues.get(tooltip.id).invoke('cancel');
			new Effect.Appear(tooltip, {to: 1.0, duration: 0.2, queue: {position: 'end', scope: tooltip.id}});
			if( tooltip.timer ) {
				clearTimeout(tooltip.timer);
				tooltip.timer=null;
			}
			tooltip.timer=setTimeout(function () {
				Effect.Queues.get(tooltip.id).invoke('cancel');
				new Effect.Fade(tooltip, {to: 0.0, duration: 0.2, queue: {position: 'end', scope: tooltip.id}});
				tooltip.timer=null;
			 }, 2000);
		}
	}
}

function merklisteCheckboxClickedAjaxComplete(transport) {
	if (200 == transport.status) {
		var merklisteItemCount = transport.responseText.evalJSON().count;
		$$('.merklisteCount').each(function (item) {item.update(merklisteItemCount)});
		if ( merklisteItemCount > 0 ) {
			$('actionbutton_anfrage').removeClassName('disabled');
			$('actionbutton_merkliste').removeClassName('disabled');
			if ( $('actionbutton_anfrage_merkliste') ) $('actionbutton_anfrage_merkliste').removeClassName('disabled');
			if ( $('actionbutton_empty_merkliste') ) $('actionbutton_empty_merkliste').removeClassName('disabled');
		} else {
			if( !$('detailpage') ) $('actionbutton_anfrage').addClassName('disabled'); // only disabled the anfrage-action if we are in immolist-mode
			$('actionbutton_merkliste').addClassName('disabled');
			if ( $('actionbutton_anfrage_merkliste') ) $('actionbutton_anfrage_merkliste').addClassName('disabled');
			if ( $('actionbutton_empty_merkliste') ) $('actionbutton_empty_merkliste').addClassName('disabled');
		}
	}	else {
		alert('Fehler bei der Aktualisierung der Merkliste!');
	}
}

function merklisteToggleBox(merklisteUrl) {
	if ( merklisteUrl ) {
		updateBlackoutDialog(merklisteUrl);
	}

	toggleBlackoutBackground();
	$('blackout_dialog').toggle();
}

function merklisteRemoveItemFromMerklisteTable(url, merklisteCbName, clickElem) {
	// update backend and count
	merklisteCheckboxClicked(url, merklisteCbName, 'false', false);
	// remove from immoList-table if we are on the very page showing the according merkliste-checkbox
	if ( $(merklisteCbName) ) $(merklisteCbName).checked = false;
	// display merklisteEmpty if no more tr in table
	var tableElem = clickElem.up('table');
	if ( tableElem.select('tr').length == 2 ) {
		// we are removing the last item in the list (header+lastItem)
		tableElem.remove();
		$('merklisteEmpty').show();
	} else {
		// remove tr
		clickElem.up('tr').remove();
	}
}

var ajaxStackQuery = function() {
	var singleton = this;
	var ajaxQueue = [];
	var ajaxQueueInProgress = false;
	var processAjaxQueue = function()
	{
		if (ajaxQueueInProgress) {
			return;
		}
		if (ajaxQueue.length > 0) {
			ajaxQueueInProgress = true;
			var ajaxConf = ajaxQueue.shift();
			var oncomplete = ajaxConf.get("oncomplete");
			singleton.execRequest("post", ajaxConf.get("url"), ajaxConf.get("params"), (function(oncomplete){
				ajaxQueueInProgress = false;
				processAjaxQueue();
				if (oncomplete) oncomplete();
			}).bind(singleton, oncomplete), false);
		}
	};
	this.queueAjaxRequest = function(url, params, oncomplete)
	{
		ajaxQueue.push(new Hash({
			"url": url,
			"params": params,
			"oncomplete": oncomplete
		}));
		processAjaxQueue();		
	};
	this.execRequest = function(method, url, params, _onComplete, _onCreate)
	{
		var cfg = {method : method};
		if (params) {
			cfg.parameters = params;
		}
		if (_onComplete) {
			cfg.onComplete = _onComplete;
		}
		if (_onCreate) {
			cfg.onCreate = _onCreate;
		}
		return new Ajax.Request(url, cfg);
	};
};

function merklisteRemoveAll(url, actionButton) {
	if( actionButton.hasClassName('disabled') ) {
		alert("Es befinden sich keine Objekte in der Merkliste.");
	} else {
		if ( confirm("Sind Sie sicher, dass Sie alle Objekte aus der Merkliste entfernen wollen ?") ) {
			new Ajax.Request(url + "&state=false&merklisteCbName=all", {
				onComplete: merklisteCheckboxClickedAjaxComplete
			});
			$("merklisteImmoList").down("table.immolist").remove();
			$$("input.merklisteCheckbox").each(function(elem){
				elem.checked = false;
			});
		}
	}
}

function sendAnfrageForm(submitButton) {
	if ( submitButton.hasClassName('disabled') ) {
		alert('Ihre Anfrage wird bearbeitet. Bitte haben Sie einen Moment Geduld.');
		return;
	}
		
	if ( $F('vorname') == "" ) {alert("Bitte geben Sie Ihren Vornamen ein");return;}
	if ( $F('nachname') == "" ) {alert("Bitte geben Sie Ihren Nachnamen ein");return;}
	if ( $F('telefon') == "" ) {alert("Bitte geben Sie Ihre Telefonnummer an");return;}
	if ( $F('email') == "" ) {alert("Bitte geben Sie Ihren EMail-Adresse ein");return;}

	submitButton.addClassName('disabled');
	var form = submitButton.form;
	var formParameters = $(form).serialize(true);
	new Ajax.Updater('blackout_dialog', form.action, {parameters: formParameters, method: 'post', encoding: 'UTF-8', evalJSON: true});
}

function initImmolistRowHighlighter() {
	$$('.immolist tr').each(function (elem) {
		if ( elem.rowHighlighterExtended || elem.hasClassName("noRowHighlighter") || elem.up('table').hasClassName("noRowHighlighter") ) return;
		elem.rowHighlighterExtended=true;
		elem.observe("mouseenter", function() {if(!elem.hasClassName('headline')) elem.addClassName('active');});
		elem.observe("mouseleave", function() {if(!elem.hasClassName('headline')) elem.removeClassName('active');});
	});
}

// MAPS
var sgmaps=null;
function getSGMaps(){
	if(sgmaps==null){
		sgmaps= new SGMaps('mapsContent');
	}
	return sgmaps;
}

function loadGoogleMapsAPIScript(googleMapsApiKey, initializeCallback) {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.google.com/maps/api/js?sensor=false&callback="+initializeCallback+"&key=" + googleMapsApiKey;
  document.body.appendChild(script);
}
// MAPS


//MOBILE
function mobile_next() {
new Effect.Move('mobile_mover', {
	  x: -400, mode: 'relative', duration: 0.2,
	  transition: Effect.Transitions.sinoidal, queue: {position: 'end', scope: 'mover'}
	});
}

function mobile_previous() {
new Effect.Move('mobile_mover', {
	  x: 400, mode: 'relative', duration: 0.2,
	  transition: Effect.Transitions.sinoidal, queue: {position: 'end', scope: 'mover'}
	});
}
//MOBILE
