/* Author: Karl Schwaier (DMC 01)
 *
 * configuration and specific code for this calculator
 * needs calc.core.js!
 */

/*********************
 * CONFIGURATION
 * webservice urls, states (tabs), sliders
 *********************/	
// STATES
var tmp_tab=0;
var states = new Array();
states[1] = {
	target: "Monatsrate",
	hiddenFields: ["monatsrate"]
};
states[2] = {
	target: "Laufzeit",
	hiddenFields: ["laufzeit"]
};
states[3] = {
	target: "Finanzierungsbedarf",
	hiddenFields: ["finanzierungsbedarf"]
};

// PARAMS
var kst = 0;
var bg = 0;
// slider
var sliderConfig = new Array();
var J = jQuery.noConflict();

/*********************
 * FUNCTIONS
 * calculator specific for param checking and displaying of result
 *********************/
// INITIALIZE SLIDERS - needs to be called before calc.init()
function sliderInit(dcr_finanzierungsbedarf_min, dcr_finanzierungsbedarf_max, dcr_finanzierungsbedarf_startwert, dcr_laufzeit_min, dcr_laufzeit_max, dcr_laufzeit_startwert, dcr_zinssatzprojahr_min, dcr_zinssatzprojahr_max, dcr_zinssatzprojahr_startwert, dcr_monatsrate_min, dcr_monatsrate_max, dcr_monatsrate_startwert){
  sliderConfig["finanzierungsbedarf"] = {
  	min: dcr_finanzierungsbedarf_min,
  	max: dcr_finanzierungsbedarf_max,
  	step: 1000,
  	value: dcr_finanzierungsbedarf_startwert,
  	format: "money"
  };
  sliderConfig["monatsrate"] = {
  	min: dcr_monatsrate_min,
  	max: dcr_monatsrate_max,
  	step: 100,
  	value: dcr_monatsrate_startwert,
  	format: "money"
  };
  sliderConfig["laufzeit"] = {
  	min: dcr_laufzeit_min,
  	max: dcr_laufzeit_max,
  	step: 1,
  	value: dcr_laufzeit_startwert,
  	format: "rate"
  };
  sliderConfig["zinssatz"] = {		
  	min: dcr_zinssatzprojahr_min,
  	max: dcr_zinssatzprojahr_max,
  	step: 0.125,
  	value: dcr_zinssatzprojahr_startwert,
  	format: "rate"
  };
}

function setKSTandBG(dcr_kst, dcr_bg) {
  kst = dcr_kst/100;
  bg = dcr_bg/100;
}

function checkParams(params, p) {
	var error = false;		
	var errorClass = "calcSliderError";	
	  //die ganzen Variablen werden hier zur Fehlerueberpruefung benoetigt
    var zinssatz = params["zinssatz"];
    var bedarf = params["finanzierungsbedarf"];
    rate = params["monatsrate"];
    var rp = 1;
	  var vp = 12;
    var v = 1-zinssatz/100;
    var r = 1 / v;
    var rhoch = Math.pow(r, rp/vp);
    var z1 = bedarf * (1.0 + kst + bg) * (1.0 - rhoch) + rate;
    var zahl = bedarf * (1.0 + kst + bg) * (1.0 - rhoch) * -1.0;
    var zaehler = Math.log(z1 / rate);
    var nenner = rp / vp * Math.log(v);
    var laufzeit = zaehler / nenner;
	  //ende Variablen fuer berechnung
	  
	if (params["monatsrate"] > params["finanzierungsbedarf"]) {
		calc.printError("Die <strong>Monatsrate</strong> darf nicht höher sein als der <strong>Finanzierungsbedarf</strong>!")
		//die naechsten zwei zeilen, zeichnen den roten rand im fehlerfall
		J("#calcParam-finanzierungsbedarf .calcSlider", p).addClass(errorClass);
		J("#calcParam-monatsrate .calcSlider", p).addClass(errorClass);
	
		error = true;
	}
	if(J(".calcTab1").attr("class").indexOf("calcActive") != -1){
    tmp_tab = 1;
  }else{
    if(J(".calcTab2").attr("class").indexOf("calcActive") != -1){
      tmp_tab = 2;
    }else{
      tmp_tab = 3;
    }
  }
  if((tmp_tab==2) && (isNaN(laufzeit) || (!isNaN(laufzeit) && laufzeit > 360))){
    calc.printError("Die Laufzeit beträgt mehr als 30 Jahre, bitte passen Sie Ihre Eingaben an.");
    error=true;
  }
	return error;
}

// DISPLAYING RESULTS AFTER RECEIVING RESPONSE FROM WEBSERVICE
function onParamsSent(params, response, p) {
	var result = new Array();
	
	// first row
	result[0] = {
		th: params["target"]+":"
	}	
	if (params["target"] == "Laufzeit") {
		var m, j;		
		j = parseInt(response["dummyzeitraum"] / 12);
		m = response["dummyzeitraum"] % 12;
		if (j == 1)	{
			j = j + " Jahr";
		} else {
			j = j + " Jahre";
		}
		if (m == 1) {
			m = m + " Monat";
		} else {
			m = m + " Monate";
		}
		result[0] = {
			tdNonEur: m + " (" + j + ")"
		}
	} else {			
		result[0] = {
			td: calc.numberFormat(response["dummybetrag"], "money", true)
		}				
	}
	
	// second row
	result[1] = {		
		td: calc.numberFormat(response["dummybetrag"]*2, "money", true)
	};
	
	calc.writeResultTable(result);
}

// DISPLAYING RESULTS AND CHART AFTER CALCULATING RESULT
function onParamsChanged(params) {
  J("#ladescreen").hide();
	var result = new Array();
	var rp = 1;
	var vp = 12;
  var s = 0;
	var rate = 0;
	var summe = 0;
	var zinsfaktor = 0;
	
	// get the selected tab (index starting at 1)
  if(J(".calcTab1").attr("class").indexOf("calcActive") != -1){
    tmp_tab = 1;
  }else{
    if(J(".calcTab2").attr("class").indexOf("calcActive") != -1){
      tmp_tab = 2;
    }else{
      tmp_tab = 3;
    }
  }
  params["tab"]=tmp_tab; //for the mail servlet to know

  params["verwendungszweck"]=J("#verwendungszweck").val(); //for the mail servlet to know
  
  var verwendungszweck = J("#verwendungszweck").val();

  // MONATSRATE
  if(tmp_tab==1){
    var zinssatz = params["zinssatz"];
    var bedarf = params["finanzierungsbedarf"];
    var laufzeit = params["laufzeit"];
    var v = 1-zinssatz/100;
    var r = 1 / v;
    var vhoch = Math.pow(v, rp*laufzeit/vp);
    var rhoch = Math.pow(r, rp/vp);
    var spesen = s*(vhoch-1)/(1-r);
    var zaehler = bedarf * (1 + kst + bg) + spesen;
    var nenner = (vhoch - 1) / (1 - rhoch);
    var rate = zaehler / nenner;
    var summe = rate * (vhoch - 1) / (1 - rhoch) + s * (vhoch - 1) / (1 - r);
    var summe_rate = rate*laufzeit;
    params["monatsrate"] = rate;
    params["summe"] = summe_rate;

    // set the parameters for the chart, which will be appended to the img src
    // but only if the parameters changed, so the image must be loaded, otherwise left alone
    var tmpImgSRC = "";
    var tmpprintsrc = "";
    if( document.getElementById('doKredit').src.indexOf("&zinssatz") != -1){
      tmpImgSRC = document.getElementById('doKredit').src.split("&zinssatz")[0];
      tmpprintsrc = document.getElementById('drucklinkextseite').href.split("?zinssatz")[0];
    }else{
      tmpImgSRC = document.getElementById('doKredit').src;
      tmpprintsrc = document.getElementById('drucklinkextseite').href;
    }
    tmpImgSRC += "&zinssatz="+zinssatz+"&bedarf="+bedarf+"&laufzeit="+laufzeit+"&summe="+summe+"&summe_rate="+summe_rate;
    tmpprintsrc += "?zinssatz="+zinssatz+"&bedarf="+bedarf+"&laufzeit="+laufzeit+"&summe="+summe+"&summe_rate="+summe_rate+"&rate="+rate+"&tabauswahl="+tmp_tab+"&rate_ausgabe="+calc.numberFormat(calc.roundToInteger(rate), "money", true)+"&summe_rate_ausgabe="+calc.numberFormat(summe_rate, "money", true)+"&verwendungszweck="+verwendungszweck+"&printbanner="+document.getElementById("header2").style.backgroundImage;
    if(tmpImgSRC != document.getElementById('doKredit').src){
      document.getElementById('doKredit').src = tmpImgSRC;
      document.getElementById('drucklinkextseite').href = tmpprintsrc;
    }

    // first row
  	result[0] = {
  		th: params["target"]+":",
  		td: calc.numberFormat(calc.roundToInteger(rate), "money", true)
  	}
  	result[1] = {
  		td: calc.numberFormat(summe_rate, "money", true)
  	};
  }
  
  // LAUFZEIT
  if(tmp_tab==2){
    var zinssatz = params["zinssatz"];
    var bedarf = params["finanzierungsbedarf"];
    rate = params["monatsrate"];
    
    var v = 1-zinssatz/100;
    var r = 1 / v;
    var rhoch = Math.pow(r, rp/vp);
    var z1 = bedarf * (1.0 + kst + bg) * (1.0 - rhoch) + rate;
    var zahl = bedarf * (1.0 + kst + bg) * (1.0 - rhoch) * -1.0;
    var zaehler = Math.log(z1 / rate);
    var nenner = rp / vp * Math.log(v);
    var laufzeit = zaehler / nenner;
    var vhoch = Math.pow(v, (rp * laufzeit) / vp);
    var summe = rate * (vhoch - 1) / (1 - rhoch) + s * (vhoch - 1) / (1 - r);
    var summe_rate = rate*laufzeit;
    params["summe"] = summe_rate;
    params["laufzeit"] = laufzeit;
    var laufzeitausgabe = "";
   
    //write result into table
    var m, j;
		j = parseInt(laufzeit / 12);
		m = Math.ceil(laufzeit % 12);
		if(m==12){  //if m gets 12 (because of Math.ceil), then a whole year is added
      m = 0;
      j++;
    }
		if (j == 1)	{
			j = j + " Jahr";
		} else {
			j = j + " Jahre";
		}
		if(m != 0){  // don't display "... und 0 Monate"
  		if (m == 1) {
  			m = m + " Monat";
  		} else {
  			m = m + " Monate";
  		}
  		result[0] = {
  		  th: params["target"]+":",
  			tdNonEur: j + " und " + m
  		}
  		laufzeitausgabe=j + " und " + m;
    }else{
  		result[0] = {
  		  th: params["target"]+":",
			  tdNonEur: j
		  }
		  laufzeitausgabe=j;
    }
  	// second row
  	result[1] = {
  		td: calc.numberFormat(summe_rate, "money", true)
  	};
  	
  	
  	// set the parameters for the chart, which will be appended to the img src
    // but only if the parameters changed, so the image must be loaded, otherwise left alone
    var tmpImgSRC = "";
    var tmpprintsrc = "";
    if( document.getElementById('doKredit').src.indexOf("&zinssatz") != -1){
      tmpImgSRC = document.getElementById('doKredit').src.split("&zinssatz")[0];
      tmpprintsrc = document.getElementById('drucklinkextseite').href.split("?zinssatz")[0];
    }else{
      tmpImgSRC = document.getElementById('doKredit').src;
      tmpprintsrc = document.getElementById('drucklinkextseite').href;
    }
    tmpImgSRC += "&zinssatz="+zinssatz+"&bedarf="+bedarf+"&laufzeit="+laufzeit+"&summe="+summe+"&summe_rate="+summe_rate;
    tmpprintsrc += "?zinssatz="+zinssatz+"&bedarf="+bedarf+"&laufzeit="+laufzeit+"&summe="+summe+"&summe_rate="+summe_rate+"&rate="+rate+"&tabauswahl="+tmp_tab+"&summe_rate_ausgabe="+calc.numberFormat(summe_rate, "money", true)+"&laufzeitausgabe="+laufzeitausgabe+"&verwendungszweck="+verwendungszweck+"&printbanner="+document.getElementById("header2").style.backgroundImage;
    if(tmpImgSRC != document.getElementById('doKredit').src){
      document.getElementById('doKredit').src = tmpImgSRC;
      document.getElementById('drucklinkextseite').href = tmpprintsrc;
    }  
  	
  	
  }
  
  // MONATSRATE
  if(tmp_tab==3){
    var zinssatz = params["zinssatz"];
    var bedarf = 0;
    var laufzeit = params["laufzeit"];
    var monatsrate = params["monatsrate"];

    var v = 1 - (zinssatz / 100);
    var r = 1 / v;
    var vhoch = Math.pow(v, (rp * laufzeit) / vp);
    var rhoch = Math.pow(r, rp / vp);
    var spesen = s * (vhoch - 1) / (1 - r);
    var summe = monatsrate * (vhoch - 1) / (1 - rhoch) + s * (vhoch - 1) / (1 - r);
    var summe_rate = monatsrate*laufzeit;

    bedarf = summe * (1-bg);
    bedarf = bedarf * (1-kst);
    params["finanzierungsbedarf"] = bedarf;
    params["summe"] = summe_rate;

    // set the parameters for the chart, which will be appended to the img src
    // but only if the parameters changed, so the image must be loaded, otherwise left alone
    var tmpImgSRC = "";
    var tmpprintsrc = "";
    if( document.getElementById('doKredit').src.indexOf("&zinssatz") != -1){
      tmpImgSRC = document.getElementById('doKredit').src.split("&zinssatz")[0];
      tmpprintsrc = document.getElementById('drucklinkextseite').href.split("?zinssatz")[0];
    }else{
      tmpImgSRC = document.getElementById('doKredit').src;
      tmpprintsrc = document.getElementById('drucklinkextseite').href;
    }
    tmpImgSRC += "&zinssatz="+zinssatz+"&bedarf="+bedarf+"&laufzeit="+laufzeit+"&summe="+summe+"&summe_rate="+summe_rate;
    tmpprintsrc += "?zinssatz="+zinssatz+"&bedarf="+bedarf+"&laufzeit="+laufzeit+"&summe="+summe+"&summe_rate="+summe_rate+"&rate="+monatsrate+"&tabauswahl="+tmp_tab+"&summe_rate_ausgabe="+calc.numberFormat(summe_rate, "money", true)+"&bedarf_ausgabe="+calc.numberFormat(bedarf, "money", true)+"&verwendungszweck="+verwendungszweck+"&printbanner="+document.getElementById("header2").style.backgroundImage;
    if(tmpImgSRC != document.getElementById('doKredit').src){
      document.getElementById('doKredit').src = tmpImgSRC;
      document.getElementById('drucklinkextseite').href = tmpprintsrc;
    }    

    // first row
  	result[0] = {
  		th: params["target"]+":",
  		td: calc.numberFormat(bedarf, "money", true)
  	}
  	// second row
  	result[1] = {
  		td: calc.numberFormat(summe_rate, "money", true)
  	};
  }
	
	calc.writeResultTable(result);
}

function setImageMap(){
  var chartservlet_name = "kreditrechner_chart";
  var imagemapservlet_name = "kreditrechner_imagemap";
  // substitute chartservlet_name with imagemapservlet_name
  var servlet_name = J("#doKredit").attr("src").split(chartservlet_name)[0] + imagemapservlet_name + J("#doKredit").attr("src").split(chartservlet_name)[1];
  // calls the servlet for the image map
  J.get(servlet_name,
    {}, // no parameters here, becaue parameters are added directly to 'servlet_name'
    function(data){
      J("#imagemap").remove();
      J(".calcDiagram").append(data);
  });
}

function sendMail(params){
  var mailservlet_name = "kreditrechner_mail";
  var servlet_name = J("#doCaptcha").attr("src").split("?")[0]+"?action="+mailservlet_name;
  J.get(servlet_name, params); // calls the servlet to send the mail
}

function formatCalcInputSlider(){
  // init formatting of the calcInputSlider fields
  J("#calcInputSlider-finanzierungsbedarf").val(calc.numberFormat(J("#calcInputSlider-finanzierungsbedarf").prev().val(),"money",true));
  J("#calcInputSlider-monatsrate").val(calc.numberFormat(J("#calcInputSlider-monatsrate").prev().val(),"money",true));
  J("#calcInputSlider-zinssatz").val(J("#calcInputSlider-zinssatz").val().replace(/\./g,","));
}

/*********************
 * DOCUMENT READY
 *********************/
J(function(){
	// init
	calc.init();
	
  var lz = J("#calcParam-laufzeit");
	// display current value also in years
	y = calc.round(sliderConfig["laufzeit"].value / 12, 2);
	J(".calcExtInfo span", lz).text(calc.stringFormat(y, "years"));
	J(".calcSlider .calcTrack", lz).bind("slide", function(event, ui){
		y = calc.round(ui.value / 12, 2);
		J(".calcExtInfo span", lz).text(calc.stringFormat(y, "years"));
	});

  var minY;
	minY = calc.round(sliderConfig["laufzeit"].min / 12, 2);
	minY = calc.stringFormat(minY, "years");
	J("#calcHeader .calcTabs a").click(function(){
		J(".calcExtInfo span", lz).text(minY);
		J(".calcSliderError").removeClass();
    J(".calcError").remove();
	});
	
	// also update the 'entspr.: xx Jahre' field
  // when inserting the value directly into laufzeit
  J('#calcInputSlider-laufzeit').change(function(){
  	y = calc.round(J(this).val() / 12, 2);
  	J("#calcParam-laufzeit .calcExtInfo span").text(calc.stringFormat(y, "years"));
  });
  
  // select the value in the field, when clicking into the field
  // except for calcFormatMoney, these fields already have this behaviour
  J('.calcInputSlider').focus(function(){
    if(!J(this).hasClass("calcFormatMoney")){
      J(this).select();
    }
  });
  
  formatCalcInputSlider();
  
  // jump to next input field when hitting return
  // (note: IE doesn't like the keypress event)
	J("#calcPageCalculate input[type=text]").keydown(function (e) {
	  var allFields, nextField;
	  var key = 0;
	  if(typeof window.event != "undefined"){ // IE
	    key = window.event.keyCode;
    }else{ // FF & others
      key = e.keyCode;
    }
		if (key == 13 || key == 9) {
			allFields = J("#calcPageCalculate input[type=text]:visible");
			nextField = allFields[allFields.index(this) + 1];
			if (typeof nextField != "undefined") {
				nextField.focus();
				nextField.select();
			}else{ // jump to first input field
			  nextField = allFields[allFields.index(this) - 2];
        if (typeof nextField != "undefined") {
  				nextField.focus();
  				nextField.select();
        }
      }
      J("#calcPageCalculate .calcBtnRefresh").click();
			return false; // prevents submitting the form
		}
	});

	// Fire the event, so the chart is drawn when loading the page the first time
	J("#calcPageCalculate .calcBtnRefresh").click();

});
