
/* Notrufnummern-Link */
function mouseOverEmergencyLink() {
    document.getElementById("emergency_bullet").src = "/images/emergency_rollover.gif";
}

function mouseLeavesEmergencyLink(){
    document.getElementById("emergency_bullet").src = "/images/emergency.gif";
}

/* Adress-Funktionen, die nicht auf dem Div selber aufgerufen werden (d.h. mit Arument) */
function hoverAnAddress(obj) {
    //obj.style.background = "#ffffff";
    obj.style.background = "url('/images/rollover_transp_60.png')";
}

function mouseLeavesAddress(obj) {
    obj.style.background = "none";
}


/* Adress-Funktionen, die auf dem Div selber aufgerufen werden (d.h. ohne Arument, dafür mit "this") */
function clickOnAddress() {
    task('Detail',this.detailID);
    return false;
}

function hoverAnAddress_nonArgs() {
    this.style.background = "#ffffff";
    this.style.background = "url('/images/rollover_transp_60.png')";
}

function mouseLeavesAddress_nonArgs() {
    this.style.background = "none";
}

/* Funktion, die das "Event-Weiter-Reichen" stoppen */
function clickOnSbbLink(e) {
    e=e || window.event;
    if(e && e.stopPropagation) {
        e.stopPropagation();
    } else if(typeof(e.cancelBubble)=="boolean") {
        e.cancelBubble=true;
    } else {
        // ev. Lösung für uralte browser suchen...
    }
}


/**
 * Initialisierung:
 * Zuerst wird main ausgeführt (Seite Zeichnen) und danach der window.resize-Event fest gesetzt.
 */
function initialize() {
	nCurrentPage = 0;
	aFirstAddressOfPage = new Array();
	aFirstAddressOfPage[0] = 0;
	windowSize();
	content();
	
	// FIXME: Ist ID immer ctl00_body?
	document.getElementById("ctl00_body").style.background = "url('/images/book_pages.gif') top left repeat";
	
	window.onresize = reset;
}

/**
 * Wird vom window.resize-Event aufgerufen.
 * Setzt alle Variablen zurück und Zeigt wieder die erste Seite an.
 */
 
//var lastReset = 0;
function reset() {
//    var date = new Date()
//    var ticks = date.getTime()
//    if(ticks - lastReset < 100)
//        return;
//    lastReset = ticks;

	nCurrentPage = 0;
	aFirstAddressOfPage = new Array();
	aFirstAddressOfPage[0] = 0;
	update();
	updateDataSimple();
}

function setNumResults(count){
    var count = ""+count;
    var target = "";
    while(count.length > 3) {
        target =  "'"+count.substring(count.length-3,count.length)+target;
        count = count.substring(0,count.length-3);
    }
    target = count + target;
	searchstate.hdnResultCount.value = target;
	var results = (count == 1)?searchstate.trans.resultsS:searchstate.trans.resultsM;
	if(isSearchEmpty(false))
        searchstate.countBoxSpan.innerHTML = "<strong>"+target+"</strong> "+searchstate.trans.entries;
    else if(searchstate.hdnLatMin.value == '' && searchstate.hdnSearchAddress.value == '')
        searchstate.countBoxSpan.innerHTML = "<strong>"+target+"</strong> "+results;
    else
        searchstate.countBoxSpan.innerHTML = "<strong>"+target+"</strong> "+results+" "+searchstate.trans.inMap;
    
    
}

function task(taskName, taskArg, dest)
{

switch (taskName)
{
    case "Link":
        if(taskArg.indexOf("#") >= 0)
            dest = taskArg.substring(0,taskArg.indexOf("#"))+".aspx"+taskArg.substring(taskArg.indexOf("#"));
        else    
            dest = taskArg+".aspx";
        break;
    case "Detail":
        dest = "Details.aspx?Id="+taskArg;
        searchstate.hdnEntryId.value = taskArg;
        break;
    case "Street":
        searchstate.hdnSearchAddress.value = taskArg;
        dest = "Default.aspx";
        break;
    case "Show":
        if(taskArg == "list")
            dest = "Default.aspx";
        else if(taskArg == "maplist")
            dest = "Results.aspx";
        else
            dest = "Map.aspx";
        break;    
    case "Back":
        {
            if(searchstate.hdnBack.value != "map")
                dest = "Default.aspx";
            else
                dest = "Map.aspx";
        }
        break;
}


    if(searchstate.whereTextBox) {
        searchstate.hdnSearchWhere.value = searchstate.whereTextBox.value;
        searchstate.hdnSearchWho.value = searchstate.whoTextBox.value;
        searchstate.hdnSearchWhat.value = searchstate.whatTextBox.value;
    }
    if(dest)
        {
        theForm.action=dest;
	    setTimeout('theForm.submit()',0);
        }
    else
        {
	    setTimeout('theForm.submit()',0);
        }
    return false;
}


function link(target)
{
    task("Link",target);
}

/**
 * Löscht den bestehenden Inhalt und lässt ihn neu zeichnen.
 * Ist dafür zuständig, dass nicht bereits wärend dem Zeichnen neu gezeichnet wird. Sonst stürzt der IE ab. 
 */
function update() {
	// Wird schon gezeichnet?
	if(window.bDisableResize == true) {
		// Dann nicht nochmals neu Zeichnen
		return;
	} else {
		// Zuerst "locken"...
		window.bDisableResize = true;
		// dann alte Spalten löschen...
		var nDivsInContent = document.getElementById("content").childNodes.length;
		for(var i = nDivsInContent-1; i >= 0; i--) {
			var oDiv = document.getElementById("content").childNodes[i];	
			if(oDiv.className && oDiv.className == "columne" ) {
			    document.getElementById("content").removeChild( oDiv );
			}
		}
		// Und grösse von einem em neu bestimmen!
		windowSize();
		// und neu zeichnen.
		content();
		// zuletzt wieder "unlocken"
		window.bDisableResize = false;
	}
}

var nMinHeight=37;

/*
 * Liest die Grösse des Fensters aus und setzt die grössen für die
 * divs #page, #search_navigation und #content.
 * Ruft die Funktion auf, die den #content befüllt.
 */
function windowSize() {
	nWindowWidth = 0;
	nWindowHeight = 0;

	// Wie gross ist ein em in Pixeln? Hängt von der Schriftgrösse ab, die beim User eingestellt ist.
	nPxPerEm = document.getElementById("hundred_em_as_reference").clientWidth / 100.0;
	if(bIsPrint) {
		nWindowWidth = 595;
		nWindowHeight = 842;
	} else if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		nWindowWidth = window.innerWidth;
		nWindowHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		nWindowWidth = document.documentElement.clientWidth+21;
		nWindowHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		nWindowWidth = document.body.clientWidth;
		nWindowHeight = document.body.clientHeight;
	}
	if(nWindowWidth < 60*nPxPerEm) {
		nWindowWidth = 60 * nPxPerEm; // Mit dieser Mindestbreite haben sicher 4 Spalten Platz
		
	}
	if(nWindowHeight <= nMinHeight*nPxPerEm) {
		nWindowHeight = nMinHeight*nPxPerEm;
	}
	
	// Setzten der Div-Grössen
	// Höhen:
	var nPageHeightInEm = nWindowHeight / nPxPerEm - 2 * 0.0625;// was abgezogen wird, ist zweimal der Rand, damit es keine Scrollbars gibt!
	nColumnHeight = nWindowHeight - 4.1875*nPxPerEm; 	        // Höhe der Spalten (4.1875em von oben und unten weg)

    if(bIsPrint) {
	    var nPageHeightInEm = nWindowHeight / nPxPerEm - 2 * 0.0625;
	    nColumnHeight = nWindowHeight ; 	        
    }

	//Breiten
	var nColumnSpace = nWindowWidth - 20*nPxPerEm;              // Andersweitig benötigter Platz: Toolbox+Rand+Buchseiten 17.125 + 1.875 + 1 = 20em
	nColumns = Math.floor(nColumnSpace / (10*nPxPerEm));        // Eine Spalte ist 10em breit.
	document.nColumns = nColumns;
	nColumnSpace = nColumns * 10 * nPxPerEm;
	searchstate.numData = Math.ceil(nColumns * (nColumnHeight / 75));
	document.getElementById("page").style.height = nPageHeightInEm + "em";
	document.getElementById("page").style.width = 17.125 + 0.625 + nColumns*10 + "em";
	document.getElementById("search_navigation").style.width = 0.625 + nColumns*10 + "em";
	document.getElementById("content").style.width = 0.625 + nColumns*10 + "em";
}



        function printPage(arg) {
            if(arg)
            {
                var newWindow = window.open(arg,'Print','width=800,height=1000,toolbar=0,location=0,directories=0, status=0,menuBar=0,scrollBars=0,resizable=1');
                newWindow.focus();
            }
            else
            {
            printPageParam("");
            }
        }
        
        function ltrim(text) {
          return text.replace (/^\s+/, '');
        }
        
        function updateCallback() {
            searchstate.lastWho = searchstate.whoTextBox.value;
            searchstate.lastWhat = searchstate.whatTextBox.value;
            if(searchstate.lastWhere != searchstate.whereTextBox.value) {
                searchstate.lastWhere = searchstate.whereTextBox.value;
                searchstate.hdnLatMin.value = "";
                searchstate.hdnLatMax.value = "";
                searchstate.hdnLngMin.value = "";
                searchstate.hdnLngMax.value = "";
                searchstate.liMap.className="visually_hidden";
            }
        }
        
		var searchstate = new Object();

		function updateDataSimple(evt){
			//Do not process the Enter key
			if(evt && evt.keyCode == 13)
			{ 
			    return;
			}
			
			setState();
    		updateDataCounter ++;
			setTimeout('updateData('+updateDataCounter+')',500);
			updateCallback();
			
			new_search_buttonClass();
		}
		
		function resetInput(button)
		{
		    searchstate.whoTextBox.value='';
		    searchstate.whatTextBox.value='';
		    searchstate.whereTextBox.value='';
		    searchstate.whoTextBox.disabled=false;
		    searchstate.whatTextBox.disabled=false;
		    searchstate.whoTextBox.focus();
		    updateDataSimple()
	    }


        function setState()
        {
			new_search_buttonClass();
		    if(ltrim(searchstate.whoTextBox.value)) {
		        if(!searchstate.whatTextBox.disabled) {
			        searchstate.whatTextBox.disabled = true;
			    }
		    } else {
		        if(searchstate.whatTextBox.disabled) {
  			        searchstate.whatTextBox.disabled = false;

			    }
		    }
		    if(ltrim(searchstate.whatTextBox.value)) {
		        if(!searchstate.whoTextBox.disabled) {
			        searchstate.whoTextBox.disabled = true;
			    }
		    } else {
		        if(searchstate.whoTextBox.disabled) {
			        searchstate.whoTextBox.disabled = false;
			    }
		    }
        }
        
        function isSearchEmpty(checkTemplate) {
        	return !(searchstate.whoTextBox.value != '' || searchstate.whatTextBox.value != '' || searchstate.whereTextBox.value != '' || searchstate.hdnLatMin.value != '' || searchstate.hdnSearchAddress.value != '' || (searchstate.template != "/default.aspx" && checkTemplate));
        }
        
        function new_search_buttonClass() {
            if(!isSearchEmpty(true)) {
                document.getElementById("new_search_button").setAttribute("class", "active");       // Die korrekte Variante
                document.getElementById("new_search_button").setAttribute("className", "active");   // Die IE-Variante...
                searchstate.textSearch.innerHTML = searchstate.trans.newsearch;
                var oPTag = document.getElementById("new_search_button");
                oPTag.getElementsByTagName("img")[0].src = "/images/new_search_button_background.gif";
                oPTag.getElementsByTagName("a")[0].style.cursor = "pointer";
            } else {
                document.getElementById("new_search_button").removeAttribute("class", "active");      // Die korrekte Variante
                document.getElementById("new_search_button").removeAttribute("className", "active");  // Die IE-Variante...
                searchstate.textSearch.innerHTML = searchstate.trans.search;
                var oPTag = document.getElementById("new_search_button");
                oPTag.getElementsByTagName("img")[0].src = "/images/new_search_button_start.gif";
                oPTag.getElementsByTagName("a")[0].style.cursor = "default";
            }
        }

        function mouseOverButton(oButton) {
            var oPTag = oButton;
            if( 0 > oPTag.getElementsByTagName("img")[0].src.search(/start/) )  {
                oPTag.getElementsByTagName("img")[0].src = "/images/new_search_button_background_rollover.gif";
            }
        }
        
        function mouseLeavesButton(oButton) {
            var oPTag = oButton;
            if( 0 > oPTag.getElementsByTagName("img")[0].src.search(/start/) )  {
                oPTag.getElementsByTagName("img")[0].src = "/images/new_search_button_background.gif";
            }
        }

	    var updateDataCounter = 0;
	    function updateData(count)
	    {
	        if(updateDataCounter != count)
	            return;
			Frontend.SearchService.GetListEntries(ltrim(searchstate.hdnSearchAddress.value+" "+searchstate.whereTextBox.value), ltrim(searchstate.whoTextBox.value), ltrim(searchstate.whatTextBox.value),searchstate.hdnLatMin.value,searchstate.hdnLatMax.value,searchstate.hdnLngMin.value,searchstate.hdnLngMax.value,searchstate.offset,searchstate.numData,count, onUpdateDataSuccess);
	    }		
	    
		function onUpdateDataSuccess(result, context, methodname){
	        if(result[0] != updateDataCounter)  // only update for last event
	            return;


			setNumResults(result[1]);
			
			var offset = +result[2];
			if(offset == 0)
			{
			    oData.data = result;
			    oData.count = +result[1];
			}
			else
			{
			    for(var i = 3 ; i < result.length; i++)
			    {
			        oData.data[offset+i] = result[i];
			    }
			}
			
			oData.maxData = oData.data.length-3;
			oData.maxValue = oData.count;
			if(oData.maxValue > 1000)
			    oData.maxValue = 1000;
			
			oData.getValue = function(pos) {
			    return this.data[pos+3];
			}
			
			updateContent();
		}

					
		function emptyString(value){
			if(value != null){
				return value;
			} else {
				return "";
			}
		}
		
		//Function for result paging
		function page(resultStart){
			searchstate.hdnSearchResultStart.value = resultStart;
			updateSelection(null, true);
		}
		
		
		//Prepare the context key
		function autocompletePopulatingWho(source, cancel){
		    var data = new Object();

		    data.languageCode = searchstate.languageCode;	    
		    data.whereTextBoxValue = ltrim(searchstate.whereTextBox.value);
            data.latMin = searchstate.hdnLatMin.value;
            data.latMax = searchstate.hdnLatMax.value;
            data.lngMin = searchstate.hdnLngMin.value;
            data.lngMax = searchstate.hdnLngMax.value;

			source.set_contextKey(data);
		}
		
		
		function autocompletePopulatingWhat(source, cancel){
		    var data = new Object();

		    data.languageCode = searchstate.languageCode;	    
		    data.whereTextBoxValue = ltrim(searchstate.whereTextBox.value);
		    data.latMin = searchstate.hdnLatMin.value;
            data.latMax = searchstate.hdnLatMax.value;
            data.lngMin = searchstate.hdnLngMin.value;
            data.lngMax = searchstate.hdnLngMax.value;

			source.set_contextKey(data);
		}


        function checkUpdate() {
            if(searchstate.lastWho != searchstate.whoTextBox.value)
                updateDataSimple();
            if(searchstate.lastWhat != searchstate.whatTextBox.value)
                updateDataSimple();
            if(searchstate.lastWhere != searchstate.whereTextBox.value)
                updateDataSimple();
	        setTimeout('checkUpdate()',100);
        }

		function autocompletePopulatingWhere(source, cancel){
            var data = new Object();
            
		    data.languageCode = searchstate.languageCode;	    
            data.whoTextBoxValue = ltrim(searchstate.whoTextBox.value);
            data.whatTextBoxValue = ltrim(searchstate.whatTextBox.value);
            data.latMin = searchstate.hdnLatMin.value;
            data.latMax = searchstate.hdnLatMax.value;
            data.lngMin = searchstate.hdnLngMin.value;
            data.lngMax = searchstate.hdnLngMax.value;
			source.set_contextKey(data);
		}
		
		function resetMap() {
            searchstate.hdnLatMin.value = "";
            searchstate.hdnLatMax.value = "";
            searchstate.hdnLngMin.value = "";
            searchstate.hdnLngMax.value = "";
            searchstate.liMap.className="visually_hidden";
            focusCursor();
            updateDataSimple();
        }

		function resetAddress() {
            searchstate.hdnSearchAddress.value = "";
            searchstate.liAddress.className="visually_hidden";
            focusCursor();
            updateDataSimple();
        }
        
        function updateContent() {
        }
        
        function focusCursor() {
			if(searchstate.whatTextBox && searchstate.whatTextBox.value) {
			    searchstate.whatTextBox.focus();
			}else if(searchstate.whoTextBox) {
			    searchstate.whoTextBox.focus();
			}
        }
        
        function newSearch() {
            return true;
        }
        



