// Display Exposee Javascript Funktionen

// Funktion aus search_objects.js
function getCookie() {
	var location = Cookie.get("location");
	var criteria = Cookie.get("criteria");
	var erwerb = Cookie.get("erwerb");
	var art = Cookie.get("art");

	var size_from = Cookie.get("size_from");
	var size_to = Cookie.get("size_to");
	var price_from = Cookie.get("price_from");
	var price_to = Cookie.get("price_to");

	if (size_from) {
		document.qsearch['headersearch[size][from]'].value = unescape(size_from);
	}
	if (size_to) {
		document.qsearch['headersearch[size][to]'].value = unescape(size_to);
	}
	if (price_from) {
		document.qsearch['headersearch[price][from]'].value = unescape(price_from);
	}
	if (price_to) {
		document.qsearch['headersearch[price][to]'].value = unescape(price_to);
	}
	if (location) {
		/*$('searchlocation').value = unescape(location);*/
		document.qsearch['search[location]'].value = unescape(location);
	}
	if (criteria) {
		/*$('searchcriteria').value = unescape(criteria);*/
	}
	if (erwerb) {
		var obj = $('erwerb');
		$each(obj.options, function(obj) {
			if (obj.value == erwerb) obj.selected = true;
		});
	}
	if (art) {
		var obj = $('art');

		$each(obj.options, function(obj) {
			if (obj.value == art) obj.selected = true;
		});
	}
}


// Questim-Marker Definition für Google Map API:

function QuestimMarker(location) {
	this.location_ = location;
	this.map_ = null;
}
QuestimMarker.prototype = new GOverlay();

QuestimMarker.prototype.initialize = function(map) {

	// Marker besteht aus Marker (pinDiv) und Schatten (pinDhadowDiv)

	var pinDiv=document.createElement("div");
	var pinShadowDiv=document.createElement("div");
	this.map_ = map;
	pinDiv.className = "mapPin";
	pinShadowDiv.className = "mapPinShadow";

	// Marker wird an die vers. Ebenen der Google-Map befestigt

	this.map_.getPane(G_MAP_MARKER_SHADOW_PANE).appendChild(pinShadowDiv);
	this.map_.getPane(G_MAP_MARKER_PANE).appendChild(pinDiv);
	this.pDiv_ = pinDiv;
	this.psDiv_ = pinShadowDiv;
}


// Setzt den Pin auf jeden Fall auf "Q", aus Kompatibilitätsgrunden

QuestimMarker.prototype.setMarkerChar = function(markerChar) {
	this.pDiv_.style.backgroundImage = "url(/img/pin_Q.png)";
	this.pDiv_.style.zIndex = 2;
}


// Entfernt pin von der Karte

QuestimMarker.prototype.remove = function() {
	this.pDiv_.parentNode.removeChild(this.pDiv_);
	this.psDiv_.parentNode.removeChild(this.psDiv_);
}


// Kopiert den Pin (Standardmethode Google-API)

QuestimMarker.prototype.copy = function() {
	return new QuestimMarker(this.location_, this.images_);
}


// Positioniert den Marker

QuestimMarker.prototype.redraw = function(force) {
	if (!force) return;
	var point = this.map_.fromLatLngToDivPixel(this.location_);
	this.pDiv_.style.left = (point.x-13)+"px";
	this.pDiv_.style.top = (point.y-35)+"px";
	this.psDiv_.style.left = (point.x-13)+"px";
	this.psDiv_.style.top = (point.y-35)+"px";
}



// Exposee-Klasse

// Konstruktor

function Exposee() {
	this.object = null;
	this.map = null;
	this.active = false;
	this.imageDescHeight = 0;
}


// Lädt Foto-Definitionen und initialisiert mootools-Elemente

Exposee.prototype.init = function() {
	this.getPhotos();
	this.display();
}


// Lädt die Photos aus dem globalen Array exposeePhotos (wird im Template geschrieben)
// und schreibt sie ins interne images-Array (ehemals per Ajax)

Exposee.prototype.getPhotos = function() {
	var that=this;
	this.images = [];
	exposeePhotos.each(function(img){
		that.images.push({
			'full':'/object_img/'+subfolders+internal_id+'/'+img.f+'/'+img.i,		// Großansicht
			'thumb':'/object_thumb/'+subfolders+internal_id+'/'+img.f+'/'+img.i,	// Thumbnail
			'text':img.d															// Beschreibung
		});
	});
}


// Initialisiert alle mootols-Elemente, etc. übernimmt Position in der Objekt-Liste aus Cookies

Exposee.prototype.display = function() {

	// Lädt die Liste der Objekte im aktuellen Suchergebnis und die Position dieses Objektes aus dem Cookie:

	var cString = Cookie.get("objlist");
	if (cString) {
		var list = cString.split(",");
		this.position = Number(list.shift());
		this.objectList = list;
	} else {
		this.position = 0;
		this.objectList = [];
	}

	// Erzeugt die "zurück/vor" Navigation und befestigt sie am Mainframe-Div

	if (iframe) {
		var divENavi = $('exposeeNavi');
		divENavi.innerHTML = this.getNavi();
	} else {
		var divMainframe = $('mainframe');
		var divENavi = $('exposeeNavi');
		divENavi.innerHTML = this.getNavi();
		divMainframe.appendChild(divENavi);
	}
	// Ist ein Map-Div vorhanden (Also Adresse veröffentlichen), wird ein Google-Maps Kartenausschnitt
	// generiert, mit Marker, und in dieser Box angezeigt

	if ($('exposeeMap') != null) {
		this.map = new GMap2($('exposeeMap'));
		var center = new GLatLng(object_lat, object_lng);
		this.map.setCenter(center, 15);
		var marker = new QuestimMarker(center);
		this.map.addOverlay(marker);
	}

	// Sind Bilder vorhanden, wird der "ImageSlider" (dyn. Bildinformation bei mouseover) initialisiert

	if (this.images.length>0)	{
		this.addImageDescSlider();
	}

}


// Image-Description-Slider. Bei Mouseover erscheint eine Ebene über dem Bild mit der Bildbeschreibung.

Exposee.prototype.addImageDescSlider = function() {
	this.imagePos = 0;

	// Ist eine Beschreibung vorhanden, wird die Höhe des Beschreibungs-Div gespeichert

	if ($('imageDesc')) {
		this.imageDescHeight = $('imageDesc').getSize().size.y;
	}
	var that = this;

	// Mouseover-Event

	$('imageBig').addEvent('mouseenter',function() {

		// Nur wenn Bildbeschreibung vorhanden ist...

		if ($('imageDesc')) {

			// ...Bildbeschreibung sichtbar machen und über das Bild schieben

			$('imageDesc').setStyles({height:0, visibility:'visible'});
			if (that.imageSlideFx!=null) that.imageSlideFx.stop();
			that.imageSlideFx = new Fx.Style('imageDesc', 'height', {duration:300});
			that.imageSlideFx.start(that.imageDescHeight);
		}
	});

	// Mouseout (bzw. mouseleave, spezielles Event)

	$('imageBig').addEvent('mouseleave',function() {

		// Nur wenn Bildbeschreibung vorhanden ist...

		if ($('imageDesc')) {

			// ...Bildbeschreibung wieder verstecken

			if (that.imageSlideFx!=null) that.imageSlideFx.stop();
			that.imageSlideFx = new Fx.Style('imageDesc', 'height', {duration:300});
			that.imageSlideFx.start(0);
		}
	});

	// Klick auf das gesamte Bild: Nächstes Bild wird angezeigt.

	$('imageBig').addEvent('click',function() {
		that.imagePos++;
		if (that.imagePos >= that.images.length) {
			that.imagePos=0;
		}
		that.showImage(that.imagePos);
	});
}

/*
Exposee.prototype.checkEmail = function(email) {
	var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
	var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
	var regex = "^" +usr + "\@" + domain + "$";
	var rgx = new RegExp(regex);
	if (rgx.exec(email))
		return true;
	return false;
}
*/

// Kontaktformular

Exposee.prototype.showSentFormular = function() {
	var select = $E('select','kontaktformholder');					// Alle Select-Elemente innerhalb "kontaktformular"
	var inputs = $ES('input[type=text]','kontaktformholder');			// Alle input (type=text) Elemente innerhalb kontaktformular
	var textarea = $E('textarea','kontaktformholder');				// Alle textarea-Felder innerhalb k.f.
	var abschicken = $E('input[type=submit]','kontaktformholder');	// Alle input (type=submit) Elemente innerhalb k.f.

	// Der Abschicken-Button wird mit "Formular gesendet" ausgetauscht:

	abschicken.parentNode.innerHTML = getTxt('expose','kf_sent');

	// Aus den Form-Feldern werden Textfelder mit deren Inhalten (ohne HTML-Tags):

	select.parentNode.innerHTML = deHTML(select.options[select.selectedIndex].text);
	inputs.each(function(elm){
		elm.parentNode.innerHTML = deHTML(elm.value);
	});
	textarea.parentNode.innerHTML = deHTML(textarea.value);
}


// Überprüft Formularfelder und schickt das Formular ab oder zeigt Fehler an

Exposee.prototype.sendKontaktFormular = function(form) {

	var errors = [];

	// Titel (Ansprache) muss angegeben sein:

	if (form.title.selectedIndex>0) {
		$('kfTitle').removeClass('error');
	} else {
		$('kfTitle').addClass('error');
		errors.push(getTxt('expose','err_title'));
	}

	// Nachname muss angegeben sein:

	if (form.surname.value.trim() != "") {
		$('kfSurname').removeClass('error');
	} else {
		$('kfSurname').addClass('error');
		errors.push(getTxt('expose','err_surname'));
	}

	// Email ODER Telefonnummer müssen angegeben sein:

	$('kfEmail').removeClass('error');
	$('kfPhone').removeClass('error');
	var noPhone = (form.phone.value.trim() == "");
	var noEmail = !checkEmailAddress(form.email.value);

	if (noPhone && noEmail) {
		$('kfPhone').addClass('error');
		$('kfEmail').addClass('error');
		errors.push(getTxt('expose','err_contact'));
	}

	// Die Message muss vorhanden sein

	if (form.message.value.trim() != "") {
		$('kfMessage').removeClass('error');
	} else {
		$('kfMessage').addClass('error');
		errors.push(getTxt('expose','err_message'));
	}

	// Wenn es fehler gibt, wird ein Fehler-Fenster angezeigt
	// Ansonsten wird das Formular per AJAX abgeschickt und showSentFormular aufgerufen.

	if (errors.length>0) {
		alert(getTxt('expose','err_contactform')+"\n"+errors.join(",\n"));
	} else {
		var that=this;
		$('kontaktform').send({
			onComplete:function() {
				that.showSentFormular();
			}
		});
	}
	return false;
}


// Erzeugt Navigation, um von einem Objekt zum nächsten/vorherigen im Suchergebnis zu blättern:

Exposee.prototype.getNavi = function() {
	var that = this;
	var resultLink;

	if (!iframe) {

		var html =
		'<table width="973"><tr>'+
			'<td width="656"><a href="/">'+getText("expose","backtoresults")+'</a></td>'+
			'<td>';
		// Wenn man zurückblättern kann:

		if (this.position > 0) {
			html +=
				'<a href="javascript:exposee.stepBy(-1);">&lt; '+getText("expose","navi_prev")+'</a>';
		}
		html +=
				'</td><td align="right">';

		// Wenn man vor blättern kann:

		if (this.position < this.objectList.length-1) {
			html +=
				'<a href="javascript:exposee.stepBy(1);">'+getText("expose","navi_next")+' &gt;</a>';
		}

		html +=
			'</td>'+
			'</tr></table>';
	} else {

		// im IFRAME

		html = '<a href="javascript:history.back();">'+getText("expose","backtoresults")+'</a>';

	}

	return html;
}


// Diese Funktion wird von der Navigation aufgerufen, um das nächste/vorherige Objekt zu laden

Exposee.prototype.stepBy = function(inc) {

	// Position wird um inc verändert, dann die entspr. Questim-ID aus der Objektliste gelesen
	// Und das Cookie mit der neuen Position upgedatet, bevor die neue Seite geladen wird

	var that=this;
	var newPos = this.position+Number(inc);
	var nextObj = this.objectList[newPos];
	var cString = newPos+","+this.objectList.join(",");
	Cookie.set("objlist",cString);
	location.href="/"+nextObj;
}


// Wird aufgerufen, wenn ein Bild angezeigt wird

Exposee.prototype.showImage = function(imgNr) {
	var that = this;

	// Ist eine Ein/Ausblendung aktiv, wird diese gestoppt.

	if ($chk(this.blendFxIn)) {
		this.blendFxIn.stop();
	}
	if ($chk(this.blendFxOut)) {
		this.blendFxOut.stop();
	}

	// Altes Bild ausblenden...

	this.blendFxOut = new Fx.Style($('imageBig'),'opacity',{duration:100,
		onComplete:function() {

			// Wenn ausblenden erfolgt ist, neues Bild in den ausgeblendeten Bereich laden...

			var imgLoader = new Asset.image(that.images[imgNr].full, {
				onload: function() {

					// ...und das geladene Bild zusammen mit Bildbeschreibung (falls vorhanden)
					// in das "imageBig" Element schreiben

					var html = '<img src="'+that.images[imgNr].full+'" border="0" alt="" />';
					var imageText = that.images[imgNr].text;
					if (imageText=="") {
					} else {
						html += '<div id="imageDesc"><div class="inner">'+imageText+'</div></div><div class="descBtn"><img src="/img/Bt_ImageDesc.png"/></div>';
					}
					$('imageBig').innerHTML = html;

					// Dann das Bild wieder einblenden:

					if (imageText!="") that.imageDescHeight = $('imageDesc').getSize().size.y;
					that.blendFxIn = new Fx.Style($('imageBig'),'opacity',{duration:100});
					that.blendFxIn.start(1);
				}
			});
		}
	});
	this.blendFxOut.start(0);
}

Exposee.prototype.sendSearch = function() {
	return true;
}

var exposee = new Exposee();

// Exposee-Objekt wird erst dann Initialisiert, wenn das Dokument bereit ist:

window.addEvent('domready', function(){
	getCookie();
	exposee.init();
});

// Funktion für Questim-Such-Feld. Leitet Eingegebene Suche einfach weiter an das Such-Modul

function startSearch() {
	document.qsearch.submit();
}

