function AffiliandoTrack(prid, eventalias, pid, bannerid, rechnerid) {
	var external=document.createElement('script');
	external.src="https://klick.network.affiliando.com/jshandler.js?prid="+prid+"&eventalias="+eventalias+"&pid="+pid+"&bannerid="+bannerid+"&rechnerid="+rechnerid+"&handler=clickhandler_1&redirect=noredirect";
	document.body.appendChild(external);	
}

document.onclick=function() { hideCurrentInfoBox(); }; //Infobox schließen wenn außerhalb geklickt wird

var visibleInfoBox				= false; //Name der aktuell sichtbaren Infobox
var visibleInfoLayer			= false; //Name des aktuell sichtbaren Infolayer
var buttonClicked				= false; //true, falls user auf einen Button klickt
var dropdownButtonUpImageSrc	= 'images/button_up.gif'; //URL für Button "Schließen"
var dropdownButtonDownImageSrc	= 'images/button_dropdown.gif'; //URL für Button "öffnen"
var infoButtonUpImageSrc		= 'images/button_x.gif'; //URL für Button "Schließen"
var infoButtonDownImageSrc		= 'images/button_info.gif'; //URL für Button "öffnen"
var accordionEnabled			= true; //Akkordeon-Funktion oder unabhängiges Ein-/Ausblenden?
var mooAccordionEnabled			= true; //Akkordeon von MooTools aktivieren?
var fxEnabled					= true; //Effekte an?
var infolayerElement			= 'div.infolayer'; //Element, das den Infolayer umgibt
var expertenFramePrevHeight     = 0;  // Letzte bekannte Hoehe des Expertenrechner-iframes
var expertenFrameCallback       = null;  // Callback-iframe fuer Iframe-Hoehe
var infoBoxHeightAdjusting      = false; // Aendert sich die Höhe der Infobox gerade?

////////
//Hinweis:
//Info-Box: Als Infobox wird eine ganze Info-Box mit Inhalt bezeichnet
//Info-Layer: Als Info-Layer wird ein Inhaltsbestandteil einer Info-Box bezeichnet


////////////////////////////////////////////////////////////////////////////////
//////////////////////////// ALLGEMEINE FUNKTIONEN ////////////////////////////
//////////////////////////////////////////////////////////////////////////////

//////
//Eine Ebene/Element einblenden
//object: HTML-Object
function showLayer(object) {
	if (object && $(object)) { //Objekt angegeben?
		ysize = 501;
		xsize= 480;
		var body = document.documentElement;
        
	    var half_doc_width = (body.clientWidth / 2) + body.scrollLeft;
	    var half_doc_height = (body.clientHeight / 2) + body.scrollTop;
        
	    var lay_pos_x = half_doc_width - xsize/2;
        
	    var lay_pos_y = half_doc_height - ysize/2;
        lay_pos_y = (lay_pos_y < 0) ? 0 : lay_pos_y;
        
		$(object).setStyle('top', lay_pos_y+'px'); //Layer sichtbar machen
		
		$(object).setStyle('display', 'block'); //Layer sichtbar machen
	}
}

//////
//Eine Ebene/Element ausblenden
//object: HTML-Object
function hideLayer(object) {
	if (object && $(object)) { //Objekt angegeben?
		$(object).setStyle('display', 'none'); //Layer unsichtbar machen
	}
}

//////
//Pr�ft, ob das Object aktuell angezeigt wird
//object: HTML-Object
function isVisible(object) {
	if (object) { //Objekt angegeben?
		if ($(object).getStyle('display')=='block' || $(object).hasClass('visible')) return true; //sichtbar
		return false;
	}
	return false;
}


////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// FUNKTIONEN FÜR DIE INFOBOX SELBST ////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

//////
//Eine Infobox einblenden
//target: Objektreferenz auf die Infobox
function showInfoBox(target) {

	if (visibleInfoBox && visibleInfoBox!=target) { //Eine andere Infobox ist noch sichtbar?
		hideInfoBox(visibleInfoBox); //aktuell sichtbare Box verbergen
	}
	showLayer(target); //DIV mit Infobox einblenden
	visibleInfoBox		= target; //aktuell sichtbare Box merken
	dropDownButtonImage	= $(target).getNext('a').getFirst('img.info_button'); //Referenz zum zugeh�rigen Button
	switchInfoButtonImage(dropDownButtonImage, target);
}

//////
//Eine Infobox ausblenden
//target: Objektreferenz auf die Infobox
function hideInfoBox(target) {
	hideLayer(target); //DIV mit Infobox ausblenden
	var infobox_container = $(target).getParent().getElement('div.infobox_container');
	visibleInfoBox		= false; //keine Infobox mehr sichtbar
	dropDownButtonImage	= $(target).getNext('a').getFirst('img.info_button'); //Referenz zum zugeh�rigen Button
	switchInfoButtonImage(dropDownButtonImage, target);
}

//////
//Eine Infobox ein- oder ausblenden (je nach aktueller Sichtbarkeit)
//object: Objektreferenz auf die Infobox
function showHideInfoBox(object) {
	buttonClicked=true; //Funktion wird nur vom User durch Klick aufgerufen
	var visibleInfoBoxOld=visibleInfoBox;
	//var target=$(object).getPrevious('div.infobox_container'); //Suche zugeh�rige DIV mit Infobox
	var target=$(object);
	
	if (isVisible(target)) { //Box sichtbar?
		hideInfoBox(target); //Box verbergen
	}
	else { //Box unsichtbar?
		showInfoBox(target); //Box anzeigen
		if (mooAccordionEnabled) { //Accordion erzeugen
			accordion = createAccordion(target);
		}
		//Effekt für "Einblenden"
		var targetML = $(target).getStyle('margin-left').toInt();
		$(target).setStyle('margin-left', targetML+30);
		var myFx = new Fx.Tween($(target),	{
			duration: 300,
			transition: Fx.Transitions.Expo.easeOut,
			onComplete: function() {
				accordion.display(0);
			}
		});
		if (fxEnabled && !visibleInfoBoxOld) { //Effekt anzeigen
			myFx.start('margin-left', targetML);
		}
		else {
			$(target).setStyle('margin-left', targetML+30);
			myFx.start('margin-left', targetML);
			//accordion.display(0);
			//$(target).setStyle('margin-left', targetML);
		}
		

		//Sichtbaren Info-Layer zurücksetzen
		if (visibleInfoLayer && accordionEnabled && !mooAccordionEnabled) {
			hideInfoLayer(visibleInfoLayer);
			visibleInfoLayer = false;
		}

		if (accordionEnabled && !mooAccordionEnabled) { //Zu Beginn alle InfoLayer verstecken
			var infoLayer=$(target).getElements(infolayerElement);
			for (var i=0; i<infoLayer.length; i++) {
				hideLayer(infoLayer[i]);
			}
			showInfoLayer($(target).getElement(infolayerElement)); //Den ersten Info-Layer der aktuellen Box anzeigen
		}
	}

	//Return für click-Action in a-TAG
	return false;
}

//////
//Die aktuell sichtbare Infobox ausblenden
//
function hideCurrentInfoBox() {
	if (!buttonClicked && visibleInfoBox) { //Nur ausblenden, wenn user nicht auf einen Button geklickt hat
		hideInfoBox(visibleInfoBox);
	}
	buttonClicked=false; //Variable zurücksetzen
}


/////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// FUNKTIONEN FÜR DIE INHALTE DER INFOBOX ////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

//////
//Einen bestimmten Inhaltsbereich ein- oder ausblenden (je nach aktueller Sichtbarkeit)
//object: Der Inhaltsbereich, auf den geklickt wurde (bzw. dessen Button)
function showHideInfoLayer(object) {
	buttonClicked=true; //Funktion wird nur vom User aufgerufen durch Klick
	var target = $(object).getNext(infolayerElement); //Suche Zielelement

	if (visibleInfoLayer && visibleInfoLayer!=target && accordionEnabled==true) { //Eine andere Infobox ist noch sichtbar?
		hideInfoLayer(visibleInfoLayer); //aktuell sichtbare Box verbergen
	}
	if (isVisible(target)) { //Den info ein- oder ausblenden (je nach aktueller Sichtbarkeit)
		hideInfoLayer(target); //ausblenden
	}
	else {
		showInfoLayer(target); //einblenden
	}
}

//////
//Blendet den entsprechenden Info-Layer ein
//target: Referenz auf das HTML-Objekt des Info-Layers, der eingeblendet werden soll
function showInfoLayer(target) {
	if (!mooAccordionEnabled) showLayer(target); //Layer anzeigen
	visibleInfoLayer	= target; //Merke den aktuell sichtbaren Layer
	dropDownButtonImage	= $(target).getPrevious('a').getFirst('img.dropdown_button'); //Referenz zum zugeh�rigen Button
	switchDropdownButtonImage(dropDownButtonImage, target); //Aussehen des Buttons �ndern
}

//////
//Blendet den entsprechenden Info-Layer aus
//target: Referenz auf das HTML-Objekt des Info-Layers, der ausgeblendet werden soll
function hideInfoLayer(target) {
	if (!mooAccordionEnabled) hideLayer(target); //verstecke Layer
	visibleInfoLayer = false; //kein Layer mehr sichtbar
	dropDownButtonImage	= $(target).getPrevious('a').getFirst('img.dropdown_button'); //Referenz zum zugeh�rigen Button
	switchDropdownButtonImage(dropDownButtonImage, target); //Aussehen des Buttons �ndern
}

//////
//Bild des Dropdown-Buttons ändern (je nach Sichtbarkeit des zugehörigen Info-Layers)
//buttonImage: Referenz auf das Objekt des Buttons
//refObject: Referenz-Objekt anhand dessen Sichtbarkeit das Aussehen des Buttons ge�ndert wird
function switchDropdownButtonImage(buttonImage, refObject) {
	if (buttonImage && buttonImage.nodeName=='IMG' && $(buttonImage).hasClass('dropdown_button')) { //Button gefunden => Aussehen des Buttons �ndern
		if (isVisible(refObject)) { //Referenz-Objekt sichtbar?
			$(buttonImage).setProperty('src', dropdownButtonUpImageSrc); //Button "Schlie�en" anzeigen
		}
		else {
			$(buttonImage).setProperty('src', dropdownButtonDownImageSrc); //Button "Ausklappen" anzeigen
		}
	}
}

//////
//Bild des Info-Buttons �ndern (je nach Sichtbarkeit der zugeh�rigen Infobox)
//buttonImage: Referenz auf das Objekt des Buttons
//refObject: Referenz-Objekt anhand dessen Sichtbarkeit das Aussehen des Buttons ge�ndert wird
function switchInfoButtonImage(buttonImage, refObject) {
	if (buttonImage && buttonImage.nodeName=='IMG' && $(buttonImage).hasClass('info_button')) { //Button gefunden => Aussehen des Buttons �ndern
		if (isVisible(refObject)) { //Referenz-Objekt sichtbar?
			$(buttonImage).setProperty('src', infoButtonUpImageSrc); //Button "Schlie�en" anzeigen
		}
		else {
			$(buttonImage).setProperty('src', infoButtonDownImageSrc); //Button "Info" anzeigen
		}
	}
}

//////
//Erzeugt ein Mootools-Accordion für die angegebene InfoBox
//infoBox: Referenz auf die InfoBox
function createAccordion(infoBox) {
	var togglers	= $(infoBox).getElements('img.dropdown_button'); //Alle Toggler der aktuellen InfoBox
	var elements	= $(infoBox).getElements(infolayerElement); //Alle Elemente f�r das Accordion

	var myAccordion = new Accordion($('infobox'), togglers, elements, { //Erzeuge Accordion
		opacity: false,
		display:99,
		alwaysHide:false,
		duration:300,
		transition: Fx.Transitions.Expo.easeOut,
		onActive: function(toggler, element){
            infoBoxHeightAdjusting = true;
			toggler.setProperty('src', dropdownButtonUpImageSrc);
		},
		onBackground: function(toggler, element){
            infoBoxHeightAdjusting = true;
			toggler.setProperty('src', dropdownButtonDownImageSrc);
		},
		onComplete: function(toggler, element){
            infoBoxHeightAdjusting = false;
		}
	});
	
	return myAccordion;
}


//////
// Den Rechner aus- oder einklappen
function toggleRechner() {
	if (isVisible('rechner_toolbar')) {
		$('rechner_toolbar').setStyle('display', 'none');
		$('rechner_standard').setStyle('display', 'block');
	}
	else {
		$('rechner_toolbar').setStyle('display', 'block');
		$('rechner_standard').setStyle('display', 'none');
	}
}

function showInfoText(object, div) {
	for (var i=1; i<=10; i++) {
		o='info'+i;
		if ($(o)) {
			hideLayer(o);
		}
	}

	/*var rows=$$('div.row');
	rows.setStyle('border', '1px solid transparent');
	$(div).setStyle('border', '1px solid #ffffff');*/
	
	showLayer(object);
}

/////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////FUNKTIONEN FUER IFRAME-RESIZE //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/**
 * Monitor zur Ueberwachung der Iframe-Hoehe initialisieren
 */
function initExpertenFrameMonitor() {
	// Benoetigt fuer richtige Hoehenberechnung des body
	var clearDiv = document.createElement('div');
	clearDiv.setAttribute('style', 'clear: both;');
	document.body.appendChild(clearDiv);
	
	// Callback-Iframe erzeugen
	var ifrm = document.createElement('iframe');
	ifrm.setAttribute('id', 'expertenFrameCallback');
	ifrm.setAttribute('src', '');
	ifrm.setAttribute('height', '0');
	ifrm.setAttribute('width', '0');
	ifrm.setAttribute('frameborder', '0');
	document.body.appendChild(ifrm);
	
	// Hoehe periodisch pruefen 
	window.setInterval(monitorExpertenFrameHeight, 20);	
}

/**
 * Hoehe des Expertenrechner-Frames berechnen und bei Aenderungen senden 
 */
function monitorExpertenFrameHeight() {
	var bodyHeight = Math.min(document.body.scrollHeight, document.body.offsetHeight);

    // Höhe der InfoBox wird wegen Position absolute nicht in Hähe des body einbezogen
    var infoBoxHeight = 0;
    if (visibleInfoBox && !infoBoxHeightAdjusting) {
        // Detect "real content height" depending upon browser:
        // getStyle() does not work reliably on IE6, documentElement height is not available on WebKit
        if(Browser.Engine.trident && Browser.Engine.version<=4) {
            infoBoxHeight = Math.max(document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);
        } else {
            infoBoxHeight = parseInt(visibleInfoBox.getStyle('height')) + parseInt(visibleInfoBox.getStyle('top'));
        }
    }

    var height = Math.max(bodyHeight, infoBoxHeight);

    if (height != expertenFramePrevHeight) {
		var ifrm = document.getElementById('expertenFrameCallback');
		ifrm.setAttribute('src', expertenFrameCallbackUrl + '?height=' + height);
		expertenFramePrevHeight = height;
    }
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// DOKUMENT-HANDLER //////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

// Auf Load-Event umgestellt, Mootools "domready" feuert in iframes
// im Internet Exploder (6-8) schon beim parent
window.addEvent('load', function() {
	hideRechnerLayer();

	function hasClass(ele, cls) {
		return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
	}

	function addClass(ele, cls) {
		if (!hasClass(ele, cls))
			ele.className += " " + cls;
	}

	function removeClass(ele, cls) {
		if (hasClass(ele, cls)) {
			var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
			ele.className = ele.className.replace(reg, ' ');
		}
	}

	var st = new SortableTable(document.getElementById("ergebnisliste"), sortFields);

	// restore the class names
	st.onsort = function() {
		var rows = st.tBody.rows;
		var l = rows.length;
		var lastVisibleRowHasAlt = false;

		for ( var i = 0; i < l; i++) {
			removeClass(rows[i], "altRow");

			// omit hidden rows
			if (!hasClass(rows[i], "hidden")) {

				// add alt row if prev visible row was not alt
				if (!lastVisibleRowHasAlt) {
					addClass(rows[i], "altRow");
				}
				lastVisibleRowHasAlt = !lastVisibleRowHasAlt;
			}
		}
	};

	$$('a.linkshowall').addEvent('click', st.onsort);
	$$('a.linknotshowall').addEvent('click', st.onsort);
	
	st.onsort();
	
	// Monitor fuer iframe-Hoehe initialisieren
	if ((typeof (expertenFrameCallbackUrl) !== 'undefined')
			&& (expertenFrameCallbackUrl != null)
			&& (expertenFrameCallbackUrl != '')) {
		initExpertenFrameMonitor();
	}
});



