var last_mod_field = '';
var standard_agio = 3.5/100 + 1;
var agio_month = 4.5/100 + 1;
var agio_3month = 3.5/100 + 1;
var agio_year = 2.5/100 + 1;
var agio = 3.5/100 + 1;
var anlagestrategie = 'substrat_check';
var laufzeitstrategie = 'substanz';

start_max_reset = 0;

function getVal(id) {
    if (getField(id).value == '') return 0;
    return parseInt(getField(id).value);
}

function readVal(id) {
    v = getField(id).value.replace("/,/",".");
    vv = parseFloat(v);
    return vv;
}

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

function setField(id, newval) {
    getField(id).value = newval;
    return true;
}

function printField(id,n) {
    var m = String(Math.round(n * Math.pow(10, 2)) / Math.pow(10, 2)).replace(/\./, ",");
    if (m.indexOf(",") == -1) {
      m += ",";
    }
    while (m.replace(/^.*,/, '').length < 2) {
      m += "0";
    }
    return setField(id,m);
}

function roundbug(val) {
    return Math.round(val*100)/100;
}

// depr
function recalc() {
    return true;

    alert('recalc');return false;
  var agio = 3.5/100 + 1;
  getField('agio').value = f(agio);
  getField('month_rate_agio').value = f(g('month_rate') * agio);
  getField('rate_sum').value = f(g('month_rate') * g('runtime'));
  getField('rate_sum_agio').value = f(g('month_rate') * g('runtime') * agio);
  getField('start_final').value = f(g('start_base') + g('start_flex'));
  getField('start_final_agio').value = f((g('start_base') + g('start_flex')) * agio);

  //getField('final').value = f(g('result') / 4 - ((g('result') / 4) % 100));

  getField('final_agio').value = f(g('final') * agio);
  getField('result').value = f(g('rate_sum') + g('start_final') + g('final'));
  getField('result_agio').value = f(g('result') * agio);

  if (getField('result').value != '') {
    calc_laufzeit_substanz();
    calc_laufzeit_chance();
  }
  
  return val_result();
};

function f(v, dec) {
  if (!dec) {
    dec = 2;
  }
    
  var n = parseInt(v);

  if (isNaN(n)) {
    return '0,00';
  } else {
    var m = String(Math.round(n * Math.pow(10, dec)) / Math.pow(10, dec)).replace(/\./, ",");
    if (m.indexOf(",") == -1) {
      m += ",";
    }
    while (m.replace(/^.*,/, '').length < dec) {
      m += "0";
    }
    return m;
  }
};

function g(id) {
  var v = parseInt(getField(id).value);
  if (isNaN(v)) {
    v = String(v).replace(/\./, '').replace(/,/, '.');
    if (isNaN(v)) {
      return 0;
    }
  }
  return Number(v);
};

function val_month_rate() {
  var v = parseInt(g('month_rate'));
    if (isNaN(v)) {
        setField('month_rate','');
        return false;
    }
  if (v == "") {
    return true;
  } else if (v >= 50 && v%10 == 0 && (v <= 500 || (v > 500 && v % 100 == 0))) {
    
    agioval = Math.round(v * agio * 100)/100;
    printField('month_rate_agio',agioval); 
    return true;
  } else {
      alert("M\xf6gliche Ratenh\xf6he: mindestens EUR 50, h\xf6here monatliche Rate ganzzahlig durch 10 teilbar, \xfcber EUR 500 durch 100 teilbar.");
      setField('month_rate','');
      setField('month_rate_agio','');
      return false;
  }
};

function val_result() {
  v = getField('result').value;
  if (v == "" || v == 1000) return true;
  if (v < 10000 && getField('month_rate').value != "" && getField('runtime').value != "") {
    alert("Die Gesamteinlage betr\xe4gt mindestens EUR 10.000!");
    return false;
  } else if (v % 100 != 0) {
    alert("Die Gesamteinlage muss durch 100 teilbar sein!");
    return false;
  } else {  
    if (val_start_payment() == false) return false;
    return val_final_payment();
  }
  return true;
}


function val_start_payment() {

   if (auto_filler) return true;

   capital = g('result');

   start_payment = g('start_final');
   if (capital < 4*start_payment && getField('runtime').value != "") {

       if (start_max_reset == 0) {
           alert("Die Startkapitalzahlung darf 25% der Gesamteinlage nicht \xfcbersteigen! ");
           start_max_reset = 1;
       }

       a1 = (g('rate_sum') + g('final')) / 3;
       a2 = a1%100;
       getField('start_flex').value = a1 - a2 - 1000;
       calculate_start_sums();
       //  calculate_result_values();

       return false;
   }

   return true;
}

//depr
function val_final_payment_old() {
    alert('val_final');return false;
   if (auto_filler) return true;
   capital = getField('result').value;
   final_payment = getField('final').value;
   if (capital < 5*final_payment) {
    
    if (start_max_reset == 0) {
        alert("Die Schlusszahlung darf 20% der Gesamteinlage nicht \xfcbersteigen!");
        start_max_reset = 1;    
    }
    return false;
   }
   
   return true;
}

//depr
function uncheck_box() {
    alert('uncheck_box');return false;  
  getField('einzug1').value == false;
  getField('einzug15').value == false;
  return true;

}

/* Seite 2 Startkapitalzahlung maximal */
//depr
function calc_substanz_strategie () {
    alert('calc_subst_strat');return false;
  if (get_current_strategy() != 'substrat_check') {
    return false;
  } else {  
    //getField('subchancestrat_check').value = 'Off';  
    print_help('substrat_help');
        
    /* values available? */
    
    rate_sum = getField('rate_sum').value;
    if (rate_sum == '') {
      alert("Bitte zuerst die ratierlichen Angaben eintragen!");
      return false;
    }
    
    /* Berechnung max. ErhÃ¶hungsbetrag: 
      Ratierliche Einlageverpflichtung / 75 * 25 -1.000

      Berechnung max. Startkapitalzahlung insgesamt
      Ratierliche Einlageverpflichtung / 75 * 25
    */

    newval = (rate_sum / 3 - 1000) - ((rate_sum / 3 - 1000) % 100);
    set_max_start_payment(newval);
    //newfinal = f((g('rate_sum')+1000)/4 - (((g('rate_sum')+1000)/4)%100));
    //getField('substratmaxstart').value = (rate_sum / 3) - ((rate_sum / 3) % 100);
    return true;

  }
}

  //depr
function calc_substanz_chance_strategie () {
    alert('calc_chance_strtat');return false;
  if (get_current_strategy() != 'subchancestrat_check') {
    return false;
  } else {

    //getField('substrat_check').value = 'Off';
    print_help('subchancestrat_help');

      
    /* values available? */
    
    rate_sum = getField('rate_sum').value;
    if (rate_sum == '') {
      alert("Bitte zuerst die ratierlichen Angaben eintragen!");
      return false;
    }
    
    /* Berechnung max. ErhÃ¶hungsbetrag: 
      Ratierliche Einlageverpflichtung / 55 * 25 -1.000

      Berechnung max. Startkapitalzahlung insgesamt
      Ratierliche Einlageverpflichtung / 55 * 25
    */

    newval = (rate_sum * 25 / 55 - 1000) - ((rate_sum * 25 / 55 - 1000) % 100);
    set_max_start_payment_chance(newval);
    //getField('subchancestratmaxstart').value = (rate_sum * 25 / 55) - ((rate_sum * 25 / 55) % 100);  
    return true;

  }
}

/* Seite 4 Schlusszahlung maximal */
//depr
function calc_schlusszahlung_max_ohne () {
    alert('schlussz_max_ohne');return false;
  if (getField('month_rate').value == '' || getField('runtime').value == '') return false;

  if (!getField('schluss_max_ohne_check').isBoxChecked(0)) {

    getField('schluss_max_ratierliche').value = '';
    getField('schluss_max_80percent').value = '';
    getField('schluss_max_100percent').value = '';
    getField('schluss_max_20percent').value = '';  

    return false;
    
  } else {

    //getField('schluss_max_mit_check').value = 'Off'; 
    getField('schluss_max_ratierliche_mit').value = '';
    getField('schluss_max_80percent_mit').value = '';
    getField('schluss_max_100percent_mit').value = '';
    getField('schluss_max_20percent_mit').value = '';
    getField('schluss_max_100percent_mit_gesamt').value = '';
    print_help('schluss_max_block1_help');
    
    /* values available? */
    
    rate_sum = getField('rate_sum').value;
    if (rate_sum == '') {
      alert("Bitte zuerst Seite 1 ausf\xfcllen!");
      return false;
    }
    
    getField('schluss_max_ratierliche').value = rate_sum;
    getField('schluss_max_80percent').value = f(g('rate_sum')+1000);
    getField('schluss_max_100percent').value = f((g('rate_sum')+1000)/4*5 - (((g('rate_sum')+1000)/4*5)%100));
    getField('schluss_max_20percent').value = f((g('rate_sum')+1000)/4 - (((g('rate_sum')+1000)/4)%100));
  
  }
  
  return true;
}

//depr
function calc_schlusszahlung_max_mit () {
    alert('schlussz_max_mit');return false;
  if (getField('month_rate').value == '' || getField('runtime').value == '') return false;

  if (!getField('schluss_max_mit_check').isBoxChecked(0)) {
    
    getField('schluss_max_ratierliche_mit').value = '';
    getField('schluss_max_80percent_mit').value = '';
    getField('schluss_max_100percent_mit').value = '';
    getField('schluss_max_20percent_mit').value = '';
    getField('schluss_max_100percent_mit_gesamt').value = '';
    return false;
    
  } else {
  
    //getField('schluss_max_ohne_check').value = 'Off'; 
    getField('schluss_max_ratierliche').value = '';
    getField('schluss_max_80percent').value = '';
    getField('schluss_max_100percent').value = '';
    getField('schluss_max_20percent').value = '';  
    print_help('schluss_max_block2_help');
    
    /* values available? */
    
    rate_sum = getField('rate_sum').value;
    if (rate_sum == '') {
      alert("Bitte zuerst Seite 1 ausf\xfcllen!");
      return false;
    }
    
    getField('schluss_max_ratierliche_mit').value = rate_sum;
    getField('schluss_max_80percent_mit').value = f(g('rate_sum') * 25 / 55 - 1000 - ((g('rate_sum') * 25 / 55 - 1000) % 100));
    getField('schluss_max_100percent_mit').value = f(g('rate_sum') * 25 / 55 - ((g('rate_sum') * 25 / 55) % 100));
    getField('schluss_max_20percent_mit').value = f(g('rate_sum') * 20 / 55 - ((g('rate_sum') * 20 / 55) % 100));
    buff = f(g('schluss_max_100percent_mit') + g('schluss_max_ratierliche_mit') + g('schluss_max_20percent_mit'));
    if (buff == '0') getField('schluss_max_100percent_mit_gesamt').value = '';
     else getField('schluss_max_100percent_mit_gesamt').value = buff;
    
    return true;

  }
  
}


/* Seite 5 effektive Laufzeit  */

function calc_laufzeit_substanz () {

  if (getField('month_rate').value == '' || getField('runtime').value == '') return false;


  if (get_current_runtime_strategy() != 'substanz') {
    getField('runtime_strat_p5').value = '';
    getField('runtime_strat_bonus').value = '';
    getField('runtime_strat_dividende').value = '';
    getField('runtime_strat_bestscenario').value = '';
    return false;
  } else {
  
    //getField('stratchance_runtime_check').value = 'Off'; 
    //getField('substrat_check').value = 'On'; 
    //getField('subchancestrat_check').value = 'Off'; 
    getField('runtime_stratchance_p5').value = '';
    getField('runtime_stratchance_bonus').value = '';
    getField('runtime_stratchance_dividende').value = '';
    getField('runtime_stratchance_bestscenario').value = '';
    print_help('effective_runtime_bonus_help');
    
    /* values available? */
    
    runtime = getField('runtime').value;
    if (runtime == '') {
      alert("Bitte zuerst Seite 1 ausf\xfcllen!");
      return false;
    }
    
    getField('runtime_strat_p5').value = runtime;
    getField('runtime_strat_bonus').value = Math.floor(g('start_flex')/g('month_rate'));
    getField('runtime_strat_dividende').value = Math.floor((g('result') / 5)/g('month_rate'));
    getField('runtime_strat_bestscenario').value = g('runtime') - g('runtime_strat_bonus') - g('runtime_strat_dividende');
   
plot_laufzeit() ;

    return true;

  }
}

function calc_laufzeit_chance() {

  if (getField('month_rate').value == '' || getField('runtime').value == '') return false;


  var strat = get_current_runtime_strategy();

  if (get_current_runtime_strategy() != 'chance') {
    getField('runtime_stratchance_p5').value = '';
    getField('runtime_stratchance_bonus').value = '';
    getField('runtime_stratchance_dividende').value = '';
    getField('runtime_stratchance_bestscenario').value = ''; 
    return false;
  } else {
  
    //getField('strat_runtime_check').value = 'Off'; 
    //getField('substrat_check').value = 'Off'; 
    //getField('subchancestrat_check').value = 'On'; 
    getField('runtime_strat_p5').value = '';
    getField('runtime_strat_bonus').value = '';
    getField('runtime_strat_dividende').value = '';
    getField('runtime_strat_bestscenario').value = '';
    print_help('effective_runtime_bonus_help');
    
    /* values available? */
    
    runtime = getField('runtime').value;
    if (runtime == '') {
      alert("Bitte zuerst Seite 1 ausf\xfcllen!");
      return false;
    }
    
    final = getField('final').value;
    if (final == '' || final == 0) {
      getField('runtime_stratchance_p5').value = 0;
      getField('runtime_stratchance_bonus').value = 0;
      getField('runtime_stratchance_dividende').value = 0;
      getField('runtime_stratchance_bestscenario').value = 0;
    } else {
      getField('runtime_stratchance_p5').value = runtime;
      getField('runtime_stratchance_bonus').value = Math.floor(g('start_flex')/g('month_rate'));
      var dividende = Math.floor((g('result') / 5 - g('final'))/g('month_rate'));
      if (dividende < 0) dividende = 0;
      getField('runtime_stratchance_dividende').value = dividende; 
      getField('runtime_stratchance_bestscenario').value = g('runtime') - g('runtime_stratchance_bonus') - dividende;
    }

plot_laufzeit() ;
    
return true;

  }
}













var base_start_invest = 1000;
var max_total_invest = 0;

function straight_calculation(from_event,init) {

    if (!check_calculation_requirements(from_event)) return false;
    
    calculate_max_total_invest();
    if (init) init_with_max_values();

    if (from_event == 'start_flex') {
        maximize_final_value();
    } else if (from_event == 'final') {
        maximize_startflex_value();
    }

    val_result(from_event);

    if (get_current_strategy() == 'subchancestrat_check') calc_laufzeit_chance(); 
    else calc_laufzeit_substanz(); 

    calculate_result_values();

    return true;
}


function set(field_name, value) {
    if (value == 0) value = '';
    getField(field_name).value = value;
    return true;
}


function val_runtime() {
    var r = g('runtime');
    if (isNaN(r)) setField('runtime','');
    else if (r > 240) {
        alert('Die maximale Laufzeit ist 240 Monate.');
        setField('runtime','240');
    }

    return true;
            
}


function val_final_payment() {

    if (get_current_strategy() == 'substrat_check') {
	alert("Im Rahmen der Substanz-Strategie ist keine Schlusszahlung vorgesehen. Bitte wechseln Sie bei Bedarf zur Substanz+Chance-Strategie!");
    printField('final','');
    printField('final_agio','');
	return false;
    }

    final_payment = getVal('final');
    if (max_total_invest < 5*final_payment) {
        alert("Die Schlusszahlung darf 20% der Gesamteinlage nicht \xfcbersteigen!");
        maximize_final_value();
    }
   
    return true;

}

function check_calculation_requirements(from_event) {
    
    if (from_event == 'month_rate' && g('runtime') == '') return false;
    if (from_event == 'runtime' && g('month_rate') == '') return false;

    if (g('month_rate') == '' || g('runtime') == '') {
        alert("Bitte zuerst die ratierlichen Angaben eintragen!");
        return false;
    }

    calculate_rate_sum();
    
    return true;
}

function calculate_max_total_invest() {

    
    if (get_current_strategy() == 'subchancestrat_check') factor = 100/55;
    else factor = 100/75;

    max_total_invest = to_hundreds(g('runtime') * g('month_rate') * factor);
    return true;

}

function init_with_max_values() {
    set('start_flex',calculate_max_start_flex());
    calculate_start_sums();
    calculate_result_values();
    set('final',calculate_max_final_flex());

}

function calculate_max_start_flex() {
    return (max_total_invest / 4) - base_start_invest;
}

function calculate_max_final_flex() {
    if (get_current_strategy() != 'subchancestrat_check') return 0;
    else return max_total_invest / 5;
}

function synchronize_checkboxes(from_event) {

    switch(from_event) {
        case 'stratchance_runtime_check':
            getField('strategie_substanz').checked=false;
            getField('anlage_substanz').checked = false;
            getField('anlage_chance').checked = true;
            anlagestrategie = 'subchancestrat_check';
            laufzeitstrategie = 'chance';
            break;
        case 'subchancestrat_check':
            getField('strategie_substanz').checked=false;
            getField('anlage_substanz').checked = false;
            getField('strategie_chance').checked = true;
            anlagestrategie = 'subchancestrat_check';
            laufzeitstrategie = 'chance';
            break;
        case 'substrat_check':
            getField('strategie_substanz').checked=true;
            getField('anlage_chance').checked = false;
            getField('strategie_chance').checked = false;
            anlagestrategie = 'substrat_check';
            laufzeitstrategie = 'substanz';
            break;
        case 'strat_runtime_check':
            getField('anlage_substanz').checked = true;
            getField('anlage_chance').checked = false;
            getField('strategie_chance').checked = false;
            anlagestrategie = 'substrat_check';
            laufzeitstrategie = 'substanz';
            break;
    }    

    return true;
}

function to_hundreds(val) {
    return val - val%100;
}

function validate_start_flex() {

    s = getVal('start_flex');
    if (s != '' && s != '0' && s < 500) {
        alert("Der Erhöhungsbetrag muss mindestens 500 EUR betragen!");
        setField('start_flex', 500);
        return false;
    }

    start_payment = getVal('start_flex') + base_start_invest;
    if (max_total_invest < 4*start_payment && g('rate_sum') != '') {

	if (start_max_reset == 0) {
	    alert("Die Startkapitalzahlung darf 25% der Gesamteinlage nicht \xfcbersteigen! ");
	}
    
	set('start_flex', max_total_invest / 4 - base_start_invest);
	
    }

    calculate_start_sums();
    calculate_result_values();
    
    return true;
}


function val_result(from_event) {

    var v = g('result');
    if (v == "" || v == 1000) return true;

    if (v < 10000 && g('month_rate') != "" && g('runtime') != "") {
	alert("Die Gesamteinlage betr\xe4gt mindestens EUR 10.000!");
	return false;
    } else if (v % 100 != 0) {
	alert("Die Gesamteinlage muss durch 100 teilbar sein! Anpassung erfolgt.");
	
	var rest = v % 100;

	if (from_event != "final" && get_current_strategy() == 'subchancestrat_check') {

	    if (g('final') >= rest) {
		set('final', g('final') - rest);
		return true;
	    } else if (g('final') > 0) {
		rest = rest - g('final');
		set('final', 0);
	    }
	}

	if (g('start_flex') >= rest) {
	    set('start_flex',g('start_flex') - rest);
	    return true;
	} 
	    
	event.rc=false;
	return false;

    }

    return true;

}

function maximize_final_value() {

    if (get_current_strategy() == 'substrat_check') return true;
    h = Math.floor((g('start_flex') + base_start_invest + g('rate_sum')) / 4);
    set('final',h);
    printField('final_agio',roundbug(h*standard_agio));
     return true;

}

function maximize_startflex_value() {

    if (get_current_strategy() == 'substrat_check') return true;
    h = Math.floor((g('final') + g('rate_sum')) / 3);
    if (h - base_start_invest < g('start_flex')) set('start_flex',h - base_start_invest);
    printField('start_final',h);
    printField('start_final_agio',roundbug(h*standard_agio));
    

    return true;

}











/* check variable to avoid alerts on automatical form updates */
var auto_filler = 0;

function set_max_start_payment(newval) {
    auto_filler = 1;
	getField('start_flex').value = newval;

	getField('final').value = '';
  //f((g('rate_sum')+1000)/4 - (((g('rate_sum')+1000)/4)%100));
  //getField('substrat_copy_to_calculator').value = 'Off'; 
  auto_filler = 0;
}

function set_max_start_payment_chance(newval) {
  auto_filler = 1;
	getField('start_flex').value = newval;

  //getField('final').value = f(g('result') / 4 - ((g('result') / 4) % 100));

	getField('final').value = f(g('rate_sum') * 20 / 55 - ((g('rate_sum') * 20 / 55) % 100));
  //getField('subchancestrat_copy_to_calculator').value = 'Off'; 
  auto_filler = 0;
}

function set_max_final_payment() {
  auto_filler = 1;
  getField('start_flex').value = '';
  getField('final').value = getField('schluss_max_20percent').value;
  getField('schlussmax_copy_to_calculator').value = 'Off'; 
  auto_filler = 0;
}

function set_max_final_payment_mit() {
  auto_filler = 1;
  getField('start_flex').value = g('schluss_max_80percent_mit');
  getField('final').value = getField('schluss_max_20percent_mit').value;
  getField('schlussmaxmit_copy_to_calculator').value = 'Off'; 
  auto_filler = 0;
}

function update_page_1_entries() {
  if (getField('month_rate').value == '' || getField('runtime').value == '') return true;
  if (get_current_strategy() == 'subchancestrat_check') calc_substanz_chance_strategie();
  else calc_substanz_strategie();
}


function check_final_payment_with_update() {

  if (g('rate_sum') != '') {
   
      max = (g('rate_sum') + g('start_flex') + 1000) / 4;
   
      if (g('final') > max) {
          getField('final').value = max - (max % 100);
      }

      if (get_current_strategy() == 'subchancestrat_check') {

	  var i = 0;
	  while (i < 3) {
	      buff = g('rate_sum') + g('start_flex') + 1000 + g('final');
	      if (buff != g('result'))  {
		  getField('result').value = buff;
		  val_start_payment();
	      }
	      if ((buff /4) < g('start_final')) {
		  getField('final').value = g('final') - 100;
		  //getField('start_flex').value = g('start_flex') - 50;
	      }
	      i++;
	  }

      }
  }
      
}

function display_strategy_substanz() {
    return true;
    getField('current_strategy_1').value = "\u2192";
    getField('current_strategy_2').value = "\u2191";    
}

function display_strategy_chance() {
    return true;
    getField('current_strategy_1').value = "\u2190";
    getField('current_strategy_2').value = "\u2193";    
}

function maximize_start_flex() {
    return;
    if (get_current_strategy() != 'subchancestrat_check') {flex_maximizer = 0;return;}

    flex_maximizer = 1;
    flex_start_memory = g('start_flex');  
    flex_final_memory = g('final');
    
    flex = g('start_final');

    max_flex = g('result') / 4;
    
    if (max_flex > flex) {
        getField('start_flex').value = max_flex - 1000;
        getField('final').value = g('final') + flex - max_flex;
    }
    getField('start_final').value = g('start_flex') + 1000;
    return true;
}


function revert_maximize_start_flex() {
    return;
  if (get_current_strategy() != 'subchancestrat_check')  {flex_maximizer = 0;return;}

  if (flex_maximizer == 1) {
    if (flex_start_memory != 0) { getField('start_flex').value = flex_start_memory; flex_start_memory = 0; }
    if (flex_final_memory != 0) { getField('final').value = flex_final_memory; flex_final_memory = 0; }
    flex_maximizer = 0
  }
  
  return true;
  
}

function reset_flex_maximizer_memory() {
    var flex_maximizer = 0;
    var flex_start_memory = 0;
    var flex_final_memory = 0;
    return true;
} 



function calculate_rate_sum() {

    r = getVal('runtime');
    if (isNaN(r)) {
        alert('Ungültige Laufzeit');
        setField('runtime','');
        return false;
    }

    m = getVal('month_rate');
    if (isNaN(m)) {
        alert('Ungültige Monatsrate');
        setField('month_rate','');
        return false;
    }


    rs = r*m;
    rsagio = r*m*agio;

    printField('rate_sum',rs);
    printField('rate_sum_agio',roundbug(rsagio));
       

    calculate_result_values();

    return rs;

}

function calculate_start_sums() {

    start_flex = getVal('start_flex');
    start_base = getVal('start_base');

    s = start_flex + start_base;
    sagio = roundbug(s*standard_agio);

    printField('start_final',s);
    printField('start_final_agio',sagio);
    calculate_result_values() ;

    return true;

}

function calculate_result_values() {

    r = readVal('rate_sum');
    s = readVal('start_final');
    f = getVal('final');

    total = r + s + f;
    total_100 = total % 100;
    total_100_diff = 100 - total_100;

    if (total_100 != 0) {
        
        alert('Gesamtanlagebetrag muss durch 100 teilbar sein. Die Werte werden angepasst!');
        start_base = getVal('start_base');
        
        if (get_current_strategy() == 'substrat_check') {
            total = total - total_100;
            s = total - r;
            start_flex = s - start_base;

        } else {

            total = total + total_100_diff;
            
            if (last_mod_field != 'start_flex') {
                s = total / 4;
            }
            start_flex = s - start_base;
            f = total - r - s;
            printField('final',f);
        }

        printField('start_final',s);
        sagio = roundbug(s*standard_agio);
        printField('start_flex',start_flex);
        printField('start_final_agio',sagio);


    }


    fagio = roundbug(f*standard_agio);
    printField('final_agio',fagio);

    ra = readVal('rate_sum_agio');
    sa = readVal('start_final_agio');
    fa = readVal('final_agio');

    total_agio = ra + sa + fa;

    printField('result',total);
    printField('result_agio',total_agio);

    printField('final',f);

    last_mod_field = '';

    return true;

}

function get_current_strategy() {
    if (!anlagestrategie) return 'substrat_check';
    return anlagestrategie;
}
function get_current_runtime_strategy() {
    if (!laufzeitstrategie) return 'substanz';
    return laufzeitstrategie;
}


function plot_laufzeit() {

  $(function () {

      var start_final = getVal('start_final');
      var final = readVal('final');
        if (final == '') final = 0;
      var payments = new Array(); 
      var money = new Array();
      var months = getVal('runtime');
      var month_rate = getVal('month_rate');

    if (get_current_runtime_strategy() == "chance") pay_months = getVal('runtime_stratchance_bestscenario');
    else pay_months = getVal('runtime_strat_bestscenario');

      var m = 1;

        var datasets = {
            "anlagewert": {
                label: "Anlagewert",
                data: [] 
            },
            "einzahlungen": {
                label: "Einzahlung (Kapitalanteil)",
                data: []
            },
        };

        datasets['anlagewert'].data.push([0,start_final]);
        datasets['einzahlungen'].data.push([0,start_final]);
      while (m<=pay_months) {
          datasets['einzahlungen'].data.push([m,month_rate * m + start_final]);
          m++;
      }
      while (m<months) {
          datasets['einzahlungen'].data.push([m,month_rate * pay_months + start_final]);
          m++;
      }
     
     var m2 = 1;
      while (m2<months) {
          datasets['anlagewert'].data.push([m2,month_rate * m2+ start_final]);
          m2++;
      }
 
        datasets['einzahlungen'].data.push([m,month_rate*pay_months + start_final + final]);
        datasets['anlagewert'].data.push([m2,month_rate*m2 + start_final + final]);


    // hard-code color indices to prevent them from shifting as
    var i = 0;
    $.each(datasets, function(key, val) {
        val.color = i;
        ++i;
    });
    
    
    function plotAccordingToChoices(data) {
        if (data.length > 0)
            $.plot($("#verlaufsdiagramm"), data, {
                yaxis: { min: 0 , position:"right" },
                xaxis: { tickDecimals: 0 },
                legend: {
                    show: true,
                    position: "nw",
                    margin: 10,
                    backgroundOpacity: .5 ,
                },
            });
    }

    var data = [];
    //datasets['einzahlungen'].data = [[0,10],[1,20],[2,15],[3,29]];
    data.push(datasets['einzahlungen']);
    data.push(datasets['anlagewert']);

    plotAccordingToChoices(data);

}); 

}

function change_agio_fields(newval,color) {

    agiofields = new Array('agio_rate_total_container');
    for (i in agiofields) {
        id = agiofields[i];
        getField(id).innerHTML = newval;
        getField(id).style.color = color;
    }

}


function recalculate_agios() {

    rate = getVal('month_rate');
    rate_sum = readVal('rate_sum');

    var rate_agioval = Math.round(rate * agio * 100)/100;
    printField('month_rate_agio',rate_agioval); 

    if (!isNaN(rate_sum)) {
        var rate_sum_agioval = Math.round(rate_sum * agio * 100)/100;
        printField('rate_sum_agio',rate_sum_agioval); 
    }

    ra = readVal('rate_sum_agio');
    sa = readVal('start_final_agio');
    fa = readVal('final_agio');

    total_agio = ra + sa + fa;

    printField('result_agio',total_agio);



}

function recalc_on_enter(obj,event) {
  if (event && event.keyCode == 13) {
      obj.blur();
  }
  return true;
}
 
function switch_rate_tab(current) {

    rate_tabs = new Array('eingabe_rate_monatlich','eingabe_rate_3monatlich','eingabe_rate_jaehrlich');
    for (t in rate_tabs) {    
        if (current == rate_tabs[t]) {
            getField(rate_tabs[t]).style.display = '';
        } else {
            getField(rate_tabs[t]).style.display = 'none';
            getField(rate_tabs[t]).style.display = 'none';
        }
    }

}

function val_runtime_3month() {
    var r = g('runtime_3month');
    if (isNaN(r)) setField('runtime_3month','');
    else if (r > 60) {
        alert('Die maximale Laufzeit ist 80 Vierteljahre.');
        setField('runtime_3month','80');
        r = 80;
    }
    setField('runtime',r*3);
    setField('runtime_year',r/4);
    return true;
            
}

function val_runtime_year() {
    var r = g('runtime_year');
    if (isNaN(r)) setField('runtime_year','');
    else if (r > 20) {
        alert('Die maximale Laufzeit ist 20 Jahre.');
        setField('runtime_year','20');
        r = 20;
    }

    setField('runtime',r*12);
    setField('runtime_3month',r*4);

    return true;
            
}

function val_year_rate() {
  var v = parseInt(g('year_rate'));
    if (isNaN(v)) {
        setField('year_rate','');
        return false;
    }
  if (v == "") {
    return true;
  } else if (v >= 50*12 && v%10 == 0 && (v <= 500*12 || (v > 500*12 && v % 100 == 0))) {
    
    agioval = Math.round(v * agio * 100)/100;
    printField('year_rate_agio',agioval); 

    printField('month_rate',v/12);
    printField('three_month_rate',v/4);
    printField('month_rate_agio',v/12*agio_month);
    printField('three_month_rate_agio',v/4*agio_3month);

    return true;
  } else {
      alert("M\xf6gliche Ratenh\xf6he: mindestens EUR 600, h\xf6here monatliche Rate ganzzahlig durch 10 teilbar, \xfcber EUR 6000 durch 100 teilbar.");
      setField('year_rate','');
      setField('year_rate_agio','');
      return false;
  }
};

function val_3month_rate() {
  var v = parseInt(g('three_month_rate'));
    if (isNaN(v)) {
        setField('three_month_rate','');
        return false;
    }
  if (v == "") {
    return true;
  } else if (v >= 50*3 && v%10 == 0 && (v <= 500*3 || (v > 500*3 && v % 100 == 0))) {
    
    agioval = Math.round(v * agio * 100)/100;
    printField('three_month_rate_agio',agioval); 
    return true;
  } else {
      alert("M\xf6gliche Ratenh\xf6he: mindestens EUR 150, h\xf6here monatliche Rate ganzzahlig durch 10 teilbar, \xfcber EUR 1500 durch 100 teilbar.");
      setField('month_rate','');
      setField('month_rate_agio','');
      return false;
  }
};

1

