var triggerupdate=false;
var globalstatus="";
var oACDS;
var oAutoComp;
var ajaxqueue=new Array();
var request;
var abspath;

function setMietspiegelTabelle(liste){
    var miete_kauf_array=new Array('m','k');
    for(var k=0;k<miete_kauf_array.length;k++){
        for(var i=0;i<=4;i++){
            getESetInner(miete_kauf_array[k]+'_gut_button_'+(i+1),"<input type=\"button\" value=\"berechnen\" onclick=\"javascript:alert('Kein Wert zur Berechnung vorhanden !')\"></input>");
            //getESetInner(miete_kauf_array[k]+'_gut_qmeter_'+(i+1), "");
            //getESetInner(miete_kauf_array[k]+'_gut_rechner_'+(i+1), "");
            getESetInner(miete_kauf_array[k]+'_gut_anzeigen_'+(i+1),"<input id=\""+miete_kauf_array[k]+"_gut_anzeigenBtn_"+(i+1)+"\" type=\"button\" value=\"anzeigen\" onclick=\"getChart(document.getElementById('"+miete_kauf_array[k]+"_gut_jahr_"+(i+1)+"').value,"+k+",'gut',"+(i+1)+")\"></input>");
            getESetInner(miete_kauf_array[k]+'_mittel_button_'+(i+1),"<input type=\"button\" value=\"berechnen\" onclick=\"javascript:alert('Kein Wert zur Berechnung vorhanden !')\"></input>");
            //getESetInner(miete_kauf_array[k]+'_mittel_qmeter_'+(i+1), "");
            //getESetInner(miete_kauf_array[k]+'_mittel_rechner_'+(i+1), "");
            getESetInner(miete_kauf_array[k]+'_mittel_anzeigen_'+(i+1),"<input id=\""+miete_kauf_array[k]+"_mittel_anzeigenBtn_"+(i+1)+"\" type=\"button\" value=\"anzeigen\" onclick=\"getChart(document.getElementById('"+miete_kauf_array[k]+"_mittel_jahr_"+(i+1)+"').value,"+k+",'mittel',"+(i+1)+")\"></input>");
            getESetInner(miete_kauf_array[k]+'_schlecht_button_'+(i+1),"<input type=\"button\" value=\"berechnen\" onclick=\"javascript:alert('Kein Wert zur Berechnung vorhanden !')\"></input>");
            //getESetInner(miete_kauf_array[k]+'_mittel_qmeter_'+(i+1), "");
            //getESetInner(miete_kauf_array[k]+'_schlecht_rechner_'+(i+1), "");
            getESetInner(miete_kauf_array[k]+'_schlecht_anzeigen_'+(i+1),"<input id=\""+miete_kauf_array[k]+"_schlecht_anzeigenBtn_"+(i+1)+"\" type=\"button\" value=\"anzeigen\" onclick=\"getChart(document.getElementById('"+miete_kauf_array[k]+"_schlecht_jahr_"+(i+1)+"').value,"+k+",'schlecht',"+(i+1)+")\"></input>");
        }
    }
		for(var i=0;i<liste.length;i++) {
			var lage = liste[i].lage;
			if (lage=="nicht gesetzt") {
				continue;
			}
			var miete_kauf = miete_kauf_array[liste[i].miete_kauf];
			var zimmer = liste[i].zimmer;
			//var mietspiegel = liste[i].spiegel;
			getESetInner(miete_kauf+'_'+lage+'_spiegel_'+zimmer,"<div style=\"text-align:right\">"+(liste[i].spiegel*1.0).toFixed(2)+"</div>");
			getESetInner(miete_kauf+'_'+lage+'_max_'+zimmer,"<div style=\"text-align:right\">"+(liste[i].max*1.0).toFixed(2)+"</div>");
			getESetInner(miete_kauf+'_'+lage+'_min_'+zimmer,"<div style=\"text-align:right\">"+(liste[i].min*1.0).toFixed(2)+"</div>");
			getESetInner(miete_kauf+'_'+lage+'_avg_'+zimmer,"<div style=\"text-align:right\">"+(liste[i].avg*1.0).toFixed(2)+"</div>");
			getESetInner(miete_kauf+'_'+lage+'_num_'+zimmer,"<div style=\"text-align:right\">"+liste[i].num+"</div>");
			if (liste[i].num >=0 && liste[i].num < 10) {
				getESetInner(miete_kauf+'_'+lage+'_info_'+zimmer,"Wenig Datensätze - Preis nicht aussagekr&auml;ftig !");
			}
			getESetInner(miete_kauf+'_'+lage+'_button_'+zimmer,"<input type=\"button\" value=\"berechnen\" onclick=\"calcPrice('"+liste[i].spiegel+"','"+miete_kauf+"','"+lage+"','"+zimmer+"')\"></input>");
		}
}

function checkCaptcha() {
    if (getE('captchaValue')==null) return;
	var thecode = getE('captchaValue').value;
	auslesen("get_admin.php?action=checkCaptcha&code=" + escape(thecode));
}

function checkCaptchaCallback(text) {
	if(text == 1) {
		document.getElementById('searchform').submit();
	} else {
		alert("Bitte Zeichenfolge korrekt eingeben !");
		document.getElementById('captchapic').src=document.getElementById('captchapic').src;
	}
}

function calcPrice(spiegel,miete_kauf,lage,zimmer) {
	var target = document.getElementById(miete_kauf+"_"+lage+"_rechner_"+zimmer);
    if (target==null) return;
	var qmeter = document.getElementById(miete_kauf+"_"+lage+"_qmeter_"+zimmer).value.replace(',','.')*1.0;
	var result = (spiegel*qmeter).toFixed(2).replace('.',',');
	
	var splitted = result.split(",");
	var n = new String(splitted[0]);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join('.');
	
	result=n+","+splitted[1];
	target.value=result +" \u20AC";
}

function getMietspiegel(){
    if (getE('stadt')==null) {
     //alert("No town");
     return;
    }
    var stadt=getE('stadt').value;
    auslesen('get_admin.php?action=isCalculationNeeded&stadt='+escape(stadt));
}

function getChart(jahr,miete_kauf,lage,zimmer){
    var stadt=document.getElementById('stadt').value;
    var m_k='m';
    if(escape(data.miete_kauf)==1){
        m_k='k';
    }
    getE(m_k+'_'+lage+'_chart_possible_'+zimmer).innerHTML="";
    auslesen('get_admin.php?action=isChartCalculationNeeded&stadt='+escape(stadt)+'&jahr='+jahr+'&lage='+lage+'&miete_kauf='+miete_kauf+'&zimmer='+zimmer);
}

function getChartCallBack(data){
    var buttonId=data.chartfield.replace('_chart_','_anzeigenBtn_');
    var selectId=data.chartfield.replace('_chart_','_jahr_');
    if(getE(buttonId) != null && getE(buttonId).value=='anzeigen'){
        getE(data.chartfield).src=abspath+'chart.inc.php?stadt='+escape(data.stadt)+'&jahr='+escape(data.jahr)+'&lage='+escape(data.lage)+'&miete_kauf='+escape(data.miete_kauf)+'&zimmer='+escape(data.zimmer);
        getE(data.chartfield).style.display='inline';
        getE(buttonId).value='verstecken';
        getE(selectId).style.display='none';
    }
    else{
        getE(data.chartfield).style.display='none';
        getE(buttonId).value='anzeigen';
        getE(selectId).style.display='inline';
    }
}

function getInserateStadtteile() {
	var stadt=document.getElementById('stadt').value;
	auslesen('get_admin.php?action=getInserateStadtteile&stadt='+escape(stadt));
}

function getInserateStadtteileCallback(liste) {
	var option = document.getElementById('stadtteil');
	var stadtteile_helper = document.getElementById('stadtteile_helper').value;
	
	option.length=0;
	for(var i=0;i<liste.length;i++) {
		option[i]=new Option(liste[i].stadtteil,liste[i].stadtteil);
		if (stadtteile_helper.indexOf(','+liste[i].stadtteil+',')>-1) {
			option[i].selected=true;
		}
	}
}

function createXMLHttpRequest(){
    var req=null;
    try{
        req=new ActiveXObject("MSXML2.XMLHTTP");
    }
    catch(err_MSXML2){
        try{
            req=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(err_Microsoft){
            if(typeof XMLHttpRequest!="undefined")req=new XMLHttpRequest;
        }
    }
    req.onreadystatechange=function(){
        if(req.readyState==4){
            ausgeben(request.responseText);
            if(ajaxqueue.length>0){
                auslesen(ajaxqueue.shift());
            }
        }
    }
    ;
    return req;
}

function auslesen(URL){
    if(request==null){
        request=createXMLHttpRequest();
    }
    if(request.readyState==1||request.readyState==2||request.readyState==3){
        ajaxqueue.push(URL);
    }
    else{
        var myloc=window.location.href.split("/");
        myloc.pop();
        abspath=myloc.join("/")+'/components/com_immo/';
        URL=abspath+URL;
        request=createXMLHttpRequest();
        request.open('get',URL,true);
        request.setRequestHeader('Cookie',document.cookie);
        request.send(null);
    }
}

function ausgeben(response){
    if(response.length==0){
        return;
    }
    response='('+replaceAll(response,"\\\\","\\")+')';
    data=eval(response);
    if(data.action=='error'){
        alert(response);
        return;
    }
    if(data.action=="stadtteil_select"){
        setStadtteil(data);
    setStadtteilEdit(data)}
    else if(data.action=="searchstadtteil"){
        setSearchStadtteilCallback(data);
    }
    else if(data.action=="datensatz_add"){
        getE('status').innerHTML=data.status;
        setTimeout("clearStatus()",5000);
    }
    else if(data.action=='addStadtteil'){
        getE('status1').innerHTML=data.status;
        genStadtteil();
        setTimeout("clearStatus()",5000);
        var stadt=data.stadt;
    }
    else if(data.action=='updateStadtteil'){
        getE('status1').innerHTML=data.status;
        genStadtteil();
        setTimeout("clearStatus()",5000);
    }
    else if(data.action=='delStadtteil'){
        getE('status1').innerHTML=data.status;
        genStadtteil();
        setTimeout("clearStatus()",5000);
    }
    else if(data.action=='getDBUpdateInterval'){
        setDBUpdateInterval(data.interval);
        setTimeout("clearStatus()",5000);
    }
    else if(data.action=='saveDBUpdateInterval'){
        getE('status').innerHTML=data.status;
    }
    else if(data.action=='isCalculationNeeded'){
        if(data.status=="update"){
            globalstatus="<br>Bitte warten...";
            if (getE('status')!=null)
            getE('status').innerHTML=globalstatus;
            if(!triggerupdate){
                auslesen('get_admin.php?action=updateCache&stadt='+escape(data.stadt));
                triggerupdate=true;
            }
            setTimeout("auslesen('get_admin.php?action=isCalculationNeeded&stadt="+escape(data.stadt)+"')",1000);
        }
        else{
            triggerupdate=false;
            auslesen('get_admin.php?action=getMietspiegel&stadt='+escape(data.stadt));
        }
    }
    else if(data.action=='updateCache'){
        globalstatus+="<br>"+data.status;
        getE('status').innerHTML=globalstatus;
    }
    else if(data.action=='getMietspiegel'){
        setMietspiegelTabelle(data.mietspiegel);
        setLageStadtteile(data.stadtteile);
        getE('zeitraum').innerHTML='Berechnungszeitraum: '+data.zeitraum+' Tage';
        setTimeout("clearStatus()",5000);
    }
    else if(data.action=='listDelete'){
        getE('status').innerHTML=data.status;
        setTimeout("clearStatus()",5000);
        document.getElementById('filter').click();
    }
    else if(data.action=='listChange'){
        listChangeCallback(data);
    }
    else if(data.action=='isChartCalculationNeeded'){
        if(data.status=="update"){
            globalstatus="<br>Bitte warten...";
            getE('status').innerHTML=globalstatus;
            if(!triggerupdate){
                auslesen('get_admin.php?action=updateChart&stadt='+escape(data.stadt)+'&jahr='+escape(data.jahr)+'&lage='+escape(data.lage)+'&miete_kauf='+escape(data.miete_kauf));
                triggerupdate=true;
            }
            setTimeout("auslesen('get_admin.php?action=isChartCalculationNeeded&stadt="+escape(data.stadt)+"&jahr="+escape(data.jahr)+"&lage="+escape(data.lage)+"&miete_kauf="+escape(data.miete_kauf)+"')",1000);
        }
        else if(data.status=='notupdate'){
            triggerupdate=false;
            getChartCallBack(data);
            setTimeout("clearStatus()",5000);
        }
        else{
            var m_k='m';
            if(escape(data.miete_kauf)==1){
                m_k='k';
            }
            getE(m_k+'_'+escape(data.lage)+'_chart_possible_'+escape(data.zimmer)).innerHTML="Diagrammberechnung nicht möglich !";
        }
    }
    else if(data.action=='updateChart'){
        globalstatus+="<br>"+data.status;
        getE('status').innerHTML=globalstatus;
    }
    else if(data.action=='getAnbieter'){
        setAnbieterAutoComplete(data);
    }
    else if(data.action=='getBerechnungsZeitraum'){
        getE('zeitraum').innerHTML='Berechnungszeitraum: '+data.zeitraum+' Tage';
    }
    else if(data.action=='getLageStadtteile'){
        setLageStadtteile(data.liste);
        getE('zeitraum').innerHTML='Berechnungszeitraum: '+data.zeitraum+' Tage';
        setTimeout("clearStatus()",5000);
    }
    else if(data.action=='getConfigInserateStadtteile') {
    	setConfigInserateStadtteile(data.liste);
    }
    else if(data.action=='toggleConfigInserateStadtteile') {
    	getConfigInserateStadtteile(data.status);
    }
    else if(data.action=='getInserateStadtteile') {
    	getInserateStadtteileCallback(data.liste);
    }
    else if(data.action=='checkCaptcha') {
    	checkCaptchaCallback(data.status);
    }
}

/**
 * town   Stadtname
 * district Name des Stadtteils
 * category (gut, mittel, schlecht)
 * typ (m, k)
 */
function createHREFLink(town, district,category, typ) {
   var link='index.php?option=com_immo&mod=split&town=';
   return link+town+'&category='+typ+'_'+category+'&district='+district+'&Itemid=47'
}

/**
 * Preconditions
 *  Item with "preisart" has to be defined
 *  Item with "stadt" has to be defined
 * Postcondition
 *
 */
function setLageStadtteile(liste){
    if (getE('stadtteileuebersicht')==null) return;
    var htmlParts = new Object();
    htmlParts['gut'] = '';
    htmlParts['mittel'] = '';
    htmlParts['schlecht'] = '';

    for(var i=0;i<liste.length;i++){
       var atag='<a href="'+createHREFLink(getE('stadt').value,liste[i].stadtteil,liste[i].lage,getE('preisart').value)+'">';
       htmlParts[liste[i].lage]+='<li>'+atag+liste[i].stadtteil+'</a></li>';

       // Nun der Link in der Imagemap
	   var imgarea=getE('link_'+liste[i].stadtteil);
       if (imgarea!=null)
          getE('link_'+liste[i].stadtteil).href=createHREFLink(getE('stadt').value,liste[i].stadtteil,liste[i].lage,getE('preisart').value);
    }
    var uebersicht='<b>Lage Kategorie 1</b>: <ul>'+htmlParts['gut']+'</ul>';
    uebersicht=uebersicht+'<b>Lage Kategorie 2</b>: <ul>'+htmlParts['mittel']+'</ul>';
    uebersicht=uebersicht+'<b>Lage Kategorie 3</b>: <ul>'+htmlParts['schlecht']+'</ul>';
    getE('stadtteileuebersicht').innerHTML=uebersicht;
}

function getE(id){
    return document.getElementById(id);
}

function getESetInner(id,value){
    var elem = document.getElementById(id);
    if (elem!=null) 
     elem.innerHTML=value;
}

function clearStatus(){
    var status=getE('status');
    if(status!=null){
        status.innerHTML="&nbsp;";
    }
    var status1=getE('status1');
    if(status1!=null){
        status1.innerHTML="&nbsp;";
    }
}

function replaceAll(OldString,FindString,ReplaceString){
    var SearchIndex=0;
    var NewString="";
    while(OldString.indexOf(FindString,SearchIndex)!=-1){
        NewString+=OldString.substring(SearchIndex,OldString.indexOf(FindString,SearchIndex));
        NewString+=ReplaceString;
        SearchIndex=(OldString.indexOf(FindString,SearchIndex)+FindString.length);
    }
    NewString+=OldString.substring(SearchIndex,OldString.length);
    return NewString;
}
