

/*
 * Befüllt den #content-Container und ruft 
 * die dazu benötigten Funktion auf.
 */
function content() {
    displayAds();
	
	// Damit wir wissen, welche Adressen schon angezeigt wurden...
	var nAddress = aFirstAddressOfPage[nCurrentPage];
	for(var i=0; i<nColumns; i++) {
		var address = 1;
		var oColumne = document.createElement("div");
		oColumne.className = "columne";
		document.getElementById("content").appendChild(oColumne);
		nAddress = fillColumne(oColumne, i, nAddress);
	}
	
	// Speichern, welches die erste Adresse auf der nächsten Seite ist
	aFirstAddressOfPage[nCurrentPage+1] = nAddress;
	// Seitenzahl anzeigen
	searchstate.pageNr.innerHTML = nCurrentPage+1;
	
	// Blätern-Button ändern, falls nötig
	var oButton = document.getElementById("button_turnThePage");
	if(nCurrentPage == 0) {
	    if(nAddress >= oData.maxValue || isSearchEmpty(true)) {
	        oButton.src = "/images/turnThePage_button_inactive.jpg";
	    } else {
	        oButton.src = "/images/turnThePage_button_forward.jpg";
	    }
	} else {
	    if(nAddress >= oData.maxValue) {
	        oButton.src = "/images/turnThePage_button_back.jpg";
	    } else {
	        oButton.src = "/images/turnThePage_button_both.jpg";
	    }
	}

}

function updateDataSimple(evt){

    //Do not process the Enter key
    if(evt && evt.keyCode == 13) { 
        return;
    }
    nCurrentPage = 0;
    searchstate.offset = 0;
	
    setState();
    updateDataCounter ++;
    setTimeout('updateData('+updateDataCounter+')',500);
    updateCallback();
    
    new_search_buttonClass();
}


function updateContent() {
    update();
}

function getHtml(aText) {
    //var aText = sText.split("|");
    var sResult = '<p><strong>'+aText[1]    // <a href="#" onClick="task(\'Detail\',\''+aText[0]+'\');return false;">
    if(aText[2]) {
        sResult += ' <nobr>'+aText[2]+'</nobr>';
    }
    
    sResult += '</strong><br />';
    var adr = aText[4];
    if(aText[3]) {
        adr+= ","+aText[3];
        sResult += aText[3]+'<br />';
    }
    sResult += aText[4]+'<br />';
    adr = escape(adr);
    if(aText[6]) {
        var star = '';
        if(aText[5]) {
            star = "<img src=\"/images/star.gif\" class=\"star\" alt=\"*\" /> ";
        }
        sResult += '<span class="phone_nr">'+star+aText[6]+'</span>Tel. ';
    }
    sResult += '</p>';
    sResult += "<ul class=\"horizontal_links\"><li><a href=\"#\" onClick=\"task('Detail','"+aText[0]+"'); return false;\">"+searchstate.trans.karteEtc+"</a></li></ul>";
    
    return sResult;
}

/**
 * Befüllt eine Spalte
 */
function fillColumne(oColumne, nColumneNr, nAddress) {
    
    // Fensterhöhe minus Abstand von Oben. Dann in em umrechnen und noch 1em abziehen für den unteren Rand:
    var	nColumnHeightInEm = (nWindowHeight - getPosition(oColumne).y)/nPxPerEm - 1;
    
	var nAddressStart = nAddress;
	
	// Abchecken, ob in dieser Spalte Werbung ist.
	if(aColumnsWithAds[nColumneNr]) {
		var nBannerStart = aColumnsWithAds[nColumneNr].offsetTop / nPxPerEm;
		nBannerStart += 0.0001; // Darf nicht null sein!
		var nBannerHeight = aColumnsWithAds[nColumneNr].offsetHeight / nPxPerEm;
	}
	
	// Adressen in die Spalte füllen
	var nActHeight = 1;  // Die 1 kommt vom Padding des div#content
	var pos = 0;
	if(oData.data) {
	    while (nActHeight < nColumnHeightInEm+1 && nAddress < oData.maxValue ) {
	        if(nAddress == oData.maxData) {
	            break;
	        }
	        
		    // Nächste Adresse holen und in ein div einpacken:
		    oAddress = document.createElement("div");
		    oAddress.className = "address";
		    oAddress.onmouseover = hoverAnAddress_nonArgs;
		    oAddress.onmouseout = mouseLeavesAddress_nonArgs;
		    oAddress.onclick = clickOnAddress;
		    
		    // Adresse in das div füllen, sowie die ID für die Detailansicht speichern
		    //oAddress.innerHTML = getHtml(oData.getValue(nAddress));
		    var aText = oData.getValue(nAddress).split("|");
		    oAddress.detailID = aText[0];
		    oAddress.innerHTML = getHtml(aText);
    		
		    // Um die Grösse des Divs heraus zu finden, muss es zuerst gezeichnet werden!
		    oColumne.appendChild(oAddress);
		    nAddress++;
		    oAddress.heightInEm = oAddress.offsetHeight / nPxPerEm;
    		
		    // Ist die Werbung "überschritten"?
		    if(nBannerStart && nBannerStart < nActHeight+oAddress.heightInEm) {
			    // Adresse nochmals weg nehmen
			    var oSpacer = document.createElement("div");
			    oSpacer.style.width = "8em";
			    oSpacer.style.height = (nBannerStart - nActHeight + nBannerHeight + 0.0625)+ "em";
			    oColumne.insertBefore(oSpacer, oAddress);
			    nActHeight = nBannerStart+nBannerHeight;
			    // Der Banner-Start ist vorbei, also weg damit!
			    nBannerStart = 0;
			    delete nBannerStart; // funktioniert nicht!? darum vorher 0 Setzen... das geht...
		    }
    		
		    nActHeight += oAddress.heightInEm;	
		    // Oder ist das Seitenende erreicht?
		    if(nActHeight > nColumnHeightInEm+1) {
			    //Falls die Spalte nun zu Lange, wird das letzte Element wieder entfernt. lastChild
			    oColumne.removeChild(oAddress);
			    nAddress--;
		    }
		}
	}
	// Die Spalte hat maximale länge, damit die Trennlinien gleich lang sind
	oColumne.style.height = nColumnHeightInEm + "em";
	return nAddress;
}


/**
 * Zeichnet die Werbung schon "im Voraus", da diese wegen des "document.write"
 * schon wärend dem Aufbau der Seite vorhanden sein muss. Wird aber noch auf
 * "display: none" gesetetzt. Später wird sie mit displayAds() positioniert
 * und auf "display: block" gesetzt.
 */
function prepareAds() {
	// Zeilenhöhe in em hier Konfigurieren:
	var nLineHeightInEm = 0.9375
	
	windowSize();
	
	var nRows = Math.floor( (nColumnHeight-2) / (nPxPerEm * nLineHeightInEm) );
	
	// Das richtige Template finden
	var sAdTemplateName
	for(var tmpl in adTemplates) {
		if(adTemplates[tmpl].minCols <= nColumns && adTemplates[tmpl].minRows <= nRows) {
			sAdTemplateName = tmpl;
			break;
		}		
	}
	adArray = adTemplates[sAdTemplateName].ads
}

/**
 * Positioniert die Werbueblöcke und setzt sie auf "display: block", resp "display: none",
 * wenn nicht mehr sichtbar (zoomen!)
 */
function displayAds() {

	var nLineHeightInEm = 0.9375; // Entspricht 15 Pixel

	// Speichere, in welcher Spalte (key) es welche Werbung (value) gibt.
	aColumnsWithAds = new Array();

	for(var i=0; i<adArray.length; i++){
		// Div holen
		var type = adArray[i].type;
		
		var oAdDiv = document.getElementById("ad_"+type);
		while(!oAdDiv){
			oAdDiv = document.getElementById("ad_"+type);
		}
	    if(adTypes[type].emptyList) {
    	    if(oData.maxData && oData.maxData>0)
    	    {
       			oAdDiv.style.display = "none";
    	        continue;
    	    }
	    }
		
		// Position von Links definieren
		var nStartColumn = 0;
		if(adArray[i].col > 0) {
			nStartColumn = adArray[i].col -1;
		} else {
			nStartColumn = nColumns + adArray[i].col;
		}
		// ist die Werbung überhaupt noch auf dem Bildschirm?
		if(nStartColumn < 0 || nColumns < nStartColumn + adTypes[ adArray[i].type ].cols ) {
			oAdDiv.style.display = "none";
			continue;
		}
		// Die linke Position der Ad in em festlegen
		oAdDiv.style.left = nStartColumn +"0.625em";

		// Position von Oben definieren
		var nTopPos = 1;
		var nColumnHeightInEm = (nColumnHeight-2) / nPxPerEm;
		if(adArray[i].row > 0) {
			nTopPos = (adArray[i].row - 1) * nLineHeightInEm;
		} else {
			nTopPos = nColumnHeightInEm + (adArray[i].row*nLineHeightInEm);
		}
		// ist die Werbung überhaupt noch auf dem Bildschirm?
		if(nTopPos < 0 || nColumnHeightInEm < nTopPos + (adTypes[adArray[i].type].rows*nLineHeightInEm) ) {
			oAdDiv.style.display = "none";
			continue;
		}
		// Die Position von oben festlegen
		oAdDiv.style.top = nTopPos +"em";
		
		// dann sichtbar machen
		oAdDiv.style.display = "block";

		// Auch die Werbungen sollen mitzoomen, oder?
		//makeAdZoomable(oAdDiv, i, nStartColumn);
		
		// Speichern, in welcher Spalte welche Add ist, um danach Platz aussparen zu können
		k=0;
		do {
			// Sicher stellen, dass sich keine zwei Werbeblöcke überlappen
			if(aColumnsWithAds[nStartColumn+k]) {
				aColumnsWithAds[nStartColumn+k].style.display = "none";
			}
			aColumnsWithAds[nStartColumn+k] = oAdDiv;
			k++;
		} while (k < adTypes[ adArray[i].type ].cols )
		
		aColumnsWithAds[nStartColumn] = oAdDiv;
	}
	aColumnsWithAds;
}


/**
 * Macht die Ads zoombar: Nach dem Aurfur diers Funktion sind die Grössen der Werbung
 * in Prozent oder em gesetzt und das umgebende Div genau auf den Werbeblock angepasst.
 */
function makeAdZoomable(oAdDiv, i, nStartColumn) {

	var oAd, nAdWidth, nAdHeight;
	if( oAdDiv.getElementsByTagName("a").length > 0 ) {
		// Werbung ist ein Bild
	    oAd = oAdDiv.getElementsByTagName("a")[0].getElementsByTagName("img")[0];
	    nAdWidth = oAd.offsetWidth;
	    nAdHeight = oAd.offsetHeight;
	    // Breite in em umrechnen, damit es skaliert!
	    oAd.style.width = nAdWidth / 16 + "em";
	    oAd.style.height = nAdHeight / 16 + "em";
	}
	if( oAdDiv.getElementsByTagName("object").length > 0 ) {
		// Werbung ist ein (Flash?)-Objekt
	    oAd = oAdDiv.getElementsByTagName("object")[0];
	    nAdWidth = oAd.offsetWidth;
	    oAd.setAttribute("width", "100%", 0);
	    nAdHeight = oAd.offsetHeight;
	    oAd.setAttribute("height", "100%", 0);
	}
	if( oAdDiv.getElementsByTagName("embed").length > 0 ) {
		// Werbung ist ein (Flash?) Objekt
	    oAd = oAdDiv.getElementsByTagName("embed")[0];
	    nAdWidth = oAd.offsetWidth;
	    oAd.setAttribute("width", "100%", 0);
	    nAdHeight = oAd.offsetHeight;
	    oAd.setAttribute("height", "100%", 0);
	}
		
	if(typeof(oAd) != 'undefined' ) {
	    // Grösse der Werbe-Box anpassen
	    if(nAdWidth == 0){
	    	nAdWidth = adTypes[ adArray[i].type ].cols * 16 - 20 ;
	    }
	    if(nAdHeight == 0) {
	    	nAdHeight = adTypes[ adArray[i].type ].rows*15;
	    }
	    oAdDiv.style.width = nAdWidth / 16 + "em";
	    oAdDiv.style.height = nAdHeight / 16 + "em";
	    if( (nAdWidth+1) % 160 <= 2  && adArray[i].col + adTypes[ adArray[i].type ].cols != 0) {
	        oAdDiv.style.left = nStartColumn + "0.0625em";
	        oAdDiv.style.width = nAdWidth / 16 - 0.0625 + "em";
	    }
	}
}


/**
 * Wird aufgerufen wenn auf den "Blättern"-Knopf geklickt wird. 
 * Entscheidet, ob vorwärts oder rückwärts gewählt wurde und ruft
 * die entsprechende Funktion zum neuen Befüllen der Spalten auf.
 */
function turnThePage(oButton, event) {
    var oMouseOnButton = new Object();
    if(event.offsetX) {
        oMouseOnButton.x = event.offsetX;
        oMouseOnButton.y = event.offsetY;
    } else {
        var oButtonPosition = getPosition(oButton);
        var oMousePosition = getMousePosition(event);
        oMouseOnButton.x = oMousePosition.scrollLeft - oButtonPosition.x;
        oMouseOnButton.y = oMousePosition.scrollTop - oButtonPosition.y;
    }
	if(oMouseOnButton.x < oMouseOnButton.y) {
	    turnBackward();
	} else {
	    turnForward();
	}
}
            function turnForward() {
		        // Nächste Seite Zeigen
		        if(aFirstAddressOfPage[nCurrentPage+1] < oData.maxValue && !isSearchEmpty(true)) {
		            nCurrentPage++;
		            searchstate.offset = aFirstAddressOfPage[nCurrentPage];
                    updateData(++updateDataCounter);
                }
            }
            
            function turnBackward() {
		        // Letzte Seite Zeigen, falls vorhanen
		        if(nCurrentPage!=0) {
			        nCurrentPage--;
			        searchstate.offset = aFirstAddressOfPage[nCurrentPage];
                    updateData(++updateDataCounter);
		        }
            }


            function newSearch() {
                resetMap();
                resetAddress();
                resetInput();
                return false;
            }
