﻿/*
 * AnThermPreisCalculator
 * Immer mit AnThermPreisCalculator.htm abstimmen!
*/

AnThermPriceCalculator = {
	gogo:function (form) {
		  //alert('gogo!' + form.id) ;
		  updateValues(form);
	}
}

var oldDongleChecked = null;
var oldUSUBChecked = "checked";
var displayOptionPrices = true;
var displayIntermediateSums = false;
var defaultInputDisplayStyle = document.getElementById("DAMPFpreis").style.display;	//"inherit";
var defaultRowDisplayStyle = document.getElementById("rowBASISpreis").style.display;	//"inherit";

function updateVisibility(form)
{
	// option price visibility
	displayOptionPrices = form.DisplayOptionPrices.checked;
	var displayStyle = defaultInputDisplayStyle ;
	if (! displayOptionPrices) displayStyle = "none";
	/*
	form.DAMPFpreis.style.display = displayStyle ;
	form.HARMONICpreis.style.display = displayStyle ;
	form.MULTICOREpreis.style.display = displayStyle ;
	form.STEREO3DVIEWpreis.style.display = displayStyle ;
	form.DONGLEpreis.style.display = displayStyle ;
	*/
	// hiding the cell looks better!
	document.getElementById("cellDAMPFpreis").style.display = displayStyle ;
	document.getElementById("cellHARMONICpreis").style.display = displayStyle ;
	document.getElementById("cellTRANSIENTpreis").style.display = displayStyle ;
	document.getElementById("cellMULTICOREpreis").style.display = displayStyle ;
	document.getElementById("cellSTEREO3DVIEWpreis").style.display = displayStyle ;
	document.getElementById("cellDONGLEpreis").style.display = displayStyle ;

	// immediate sums visibility
	displayIntermediateSums = form.DisplayOptionPrices.checked;
	displayStyle = defaultRowDisplayStyle ;
	if (! displayIntermediateSums ) displayStyle = "none";
	document.getElementById("rowBASISpreis").style.display = displayStyle ;
	document.getElementById("rowBASISpDAMPFpHARMONICpreis").style.display = displayStyle ;
	document.getElementById("rowBASISpDAMPFpHARMONICpMULTICOREpSTEREO3DVIEWpreis").style.display = displayStyle ;

	// update calculator visibility
	//alert('defaultSpanDisplayStyle: ' + defaultSpanDisplayStyle) ;
	displayUpdateCalculator = form.DisplayUpdateCalculator.checked;
	displayStyle = defaultRowDisplayStyle ;
	if (! displayUpdateCalculator) displayStyle = "none";
	document.getElementById("rowUPDATElastUpdate").style.display = displayStyle ;
	document.getElementById("rowUPDATEinterval").style.display = displayStyle ;

	displayUpdateMoeglich = displayUpdateCalculator && form.UPDATEmoeglich.checked;
	displayStyle = defaultRowDisplayStyle ;
	if (! displayUpdateMoeglich ) displayStyle = "none";
	document.getElementById("rowUPDATEpreis").style.display = displayStyle ;
	
	displayUpdateNichtMoeglich = displayUpdateCalculator && !displayUpdateMoeglich;
	displayStyle = defaultRowDisplayStyle ;
	if (! displayUpdateNichtMoeglich) displayStyle = "none";
	document.getElementById("rowUPDATEnichtMoeglich").style.display = displayStyle ;

}

function updateValues(form)
{
  //alert('updateValues!'+form.id) 
  //updateVisibility(form);
  
  var PreislisteDatum = new Date(2012, 0, 1);		// Achtung: Monate als Zahlen sind 0..11 !!!
  form.PreislisteDatum.value = PreislisteDatum.toLocaleDateString();

  var BerechnungDatum = new Date();
  form.BerechnungDatum.value = BerechnungDatum.toLocaleString();
    
  var preis = 0.0;
  var licName = "";
  
  var PS_BASIS_licTitle= new Object();
  var PS_BASIS_preis= new Object();
  	PS_BASIS_licTitle["2D/10k"] 	= "2D/10k";		PS_BASIS_preis["2D/10k"] 	= 514;	  	
  	PS_BASIS_licTitle["2D/50k"] 	= "2D/50k";		PS_BASIS_preis["2D/50k"] 	= 981;	  	
  	PS_BASIS_licTitle["2D/300k"] 	= "2D/300k";	PS_BASIS_preis["2D/300k"] 	= 1258;	  	
  	PS_BASIS_licTitle["2D/1Mio"] 	= "2D/1Mio";	PS_BASIS_preis["2D/1Mio"] 	= 1567;	  	
  	PS_BASIS_licTitle["2D/NoLimit"] = "2D/NoLimit";	PS_BASIS_preis["2D/NoLimit"]= 2342;	  	
  	PS_BASIS_licTitle["3D/50k"] 	= "3D/50k";		PS_BASIS_preis["3D/50k"]	= 1595;	  	
  	PS_BASIS_licTitle["3D/300k"] 	= "3D/300k";	PS_BASIS_preis["3D/300k"]	= 2576;	  	
  	PS_BASIS_licTitle["3D/1Mio"] 	= "3D/1Mio";	PS_BASIS_preis["3D/1Mio"]	= 3527;	  	
  	PS_BASIS_licTitle["3D/NoLimit"] = "3D/NoLimit";	PS_BASIS_preis["3D/NoLimit"]= 3985;	  	

  var selectorBasis = "3D/300k"	
  for (i=0; i<form.AnThermZellenzahl.length; i++)
  	if (form.AnThermZellenzahl[i].checked) {
	  //preis = eval(form.AnThermZellenzahl[i].value);
	  //licName += " " + form.AnThermZellenzahl[i].title;
	  selectorBasis = form.AnThermZellenzahl[i].title;
	  break;
  	}
  titleBasis = PS_BASIS_licTitle[selectorBasis];
  licName += " " + titleBasis;
  // in the case the "selectorBasis" is invalid, then "preis" will be NaN which is perfect!
  preis = PS_BASIS_preis[selectorBasis];

  var preisBASIS = preis;
  form.BASIS.value = "€ " + Math.round(preis*100)/100 ;
 
  form.DAMPFpreis.value = "";
  if (form.DAMPF.checked) {
    var PS_DAMPF_licTitle	= "VAPOUR";
    var PS_DAMPF_factor 	= 0.3;
    var PS_DAMPF_minValue 	= 980;
    
	licName += "/" + PS_DAMPF_licTitle;								//form.DAMPF.title;

  	var preisOpt = preisBASIS * PS_DAMPF_factor;					//eval(form.DAMPFfactor.value);
  	if (preisOpt < PS_DAMPF_minValue) preisOpt = PS_DAMPF_minValue;	//if (preisOpt < eval(form.DAMPFmin.value)) preisOpt = eval(form.DAMPFmin.value);
  	preis += preisOpt ;
 	form.DAMPFpreis.value = "+ € " + Math.round(preisOpt*100)/100;
  }

  form.HARMONICpreis.value = "";
  if (form.HARMONIC.checked || form.TRANSIENT.checked) {
    var PS_HARMONIC_licTitle	= "HARMONIC";
    var PS_HARMONIC_factor 		= 0.2;
    var PS_HARMONIC_minValue 	= 290;

	licName += "/" + PS_HARMONIC_licTitle;									//form.HARMONIC.title;

	if (! form.TRANSIENT.checked) {
		var preisOpt = preisBASIS * PS_HARMONIC_factor;							//eval(form.HARMONICfactor.value);
  		if (preisOpt < PS_HARMONIC_minValue) preisOpt = PS_HARMONIC_minValue;	//if (preisOpt < eval(form.HARMONICmin.value)) preisOpt = eval(form.HARMONICmin.value);
  		preis += preisOpt ;
 		form.HARMONICpreis.value = "+ € " + Math.round(preisOpt*100)/100;
 	}
  }

  form.TRANSIENTpreis.value = "";
  if (form.TRANSIENT.checked) {
    var PS_TRANSIENT_licTitle	= "TRANSIENT";
    var PS_TRANSIENT_factor 		= 0.4;
    var PS_TRANSIENT_minValue 	= 981;

	licName += "/" + PS_TRANSIENT_licTitle;									//form.TRANSIENT.title;

  	var preisOpt = preisBASIS * PS_TRANSIENT_factor;							//eval(form.TRANSIENTfactor.value);
  	if (preisOpt < PS_TRANSIENT_minValue) preisOpt = PS_TRANSIENT_minValue;	//if (preisOpt < eval(form.TRANSIENTmin.value)) preisOpt = eval(form.TRANSIENTmin.value);
  	preis += preisOpt ;
 	form.TRANSIENTpreis.value = "+ € " + Math.round(preisOpt*100)/100;
  }
 
 
  var preisBpDpH = preis;
  form.BASISpDAMPFpHARMONIC.value = "€ " + Math.round(preis*100)/100;
  
  form.MULTICOREpreis.value = "";
  if (form.MULTICORE.checked) {
    var PS_MULTICORE_licTitle	= "MCORE";
    var PS_MULTICORE_factor 	= 0.1;
    var PS_MULTICORE_minValue 	= 290;

	licName += "/" + PS_MULTICORE_licTitle;									//form.MULTICORE.title;

  	var preisOpt = preisBpDpH * PS_MULTICORE_factor;						//eval(form.MULTICOREfactor.value);
  	if (preisOpt < PS_MULTICORE_minValue) preisOpt = PS_MULTICORE_minValue;	//if (preisOpt < eval(form.MULTICOREmin.value)) preisOpt = eval(form.MULTICOREmin.value);
  	preis += preisOpt ;
 	form.MULTICOREpreis.value = "+ € " + Math.round(preisOpt*100)/100;
  } 
 
  form.STEREO3DVIEWpreis.value = "";
  if (form.STEREO3DVIEW.checked) {
    var PS_STEREO3D_licTitle	= "STEREO3D";
    var PS_STEREO3D_factor		= 0.0;
    var PS_STEREO3D_minValue 	= 150;

	licName += "/" + PS_STEREO3D_licTitle;									//form.STEREO3DVIEW.title;

  	var preisOpt = preisBpDpH * PS_STEREO3D_factor;							//eval(form.STEREO3DVIEWfactor.value);
  	if (preisOpt < PS_STEREO3D_minValue) preisOpt = PS_STEREO3D_minValue;	//if (preisOpt < eval(form.STEREO3DVIEWmin.value)) preisOpt = eval(form.STEREO3DVIEWmin.value);
  	preis += preisOpt ;
 	form.STEREO3DVIEWpreis.value = "+ € " + Math.round(preisOpt*100)/100;
  }
 
  var preisBpDpHpMpS = preis;
  form.BASISpDAMPFpHARMONICpMULTICOREpSTEREO3DVIEW.value = "€ " + Math.round(preis*100)/100;
  
  var PS_DAUER_licTitle= new Object();
  var PS_DAUER_factor = new Object();
  	PS_DAUER_licTitle["31d"] 		= "31d";		PS_DAUER_factor["31d"] 			= 0.11;	  	
  	PS_DAUER_licTitle["92d"] 		= "92d";		PS_DAUER_factor["92d"] 			= 0.28;	  	
  	PS_DAUER_licTitle["1YR"] 		= "1YR";		PS_DAUER_factor["1YR"] 			= 0.64;	  	
  	PS_DAUER_licTitle["1YRUP"] 		= "1YRUP";		PS_DAUER_factor["1YRUP"] 		= 0.72;	//PS_DAUER_factor["1YR"] + (3*0.075)*0.9;	  	
  	PS_DAUER_licTitle["Perpetual"] 	= "Perpetual";	PS_DAUER_factor["Perpetual"]	= 1;	  	
  
  var selectorDauer = "Perpetual"	
  for (i=0; i<form.AnThermLizenzdauer.length; i++)
  	if (form.AnThermLizenzdauer[i].checked) {
  	  selectorDauer = form.AnThermLizenzdauer[i].title;		
	  break;
    }
  var titleDauer = PS_DAUER_licTitle[selectorDauer];
  licName = titleDauer + " " + licName;
  // in the case the "selectorDauer" is invalid, then factorDauer will be NaN which is perfect!
  var factorDauer = PS_DAUER_factor[selectorDauer];
  preis *= factorDauer;		//<============================= Zeitlizenzpreis							

  var PS_HANDLING_FeeValue 	= 42;
  if (factorDauer < 1) 
    preis += PS_HANDLING_FeeValue;	//42;	// Bearbeitungsgebühr für Zeitlizenz
  
  // Spezialfall 1Monat - DONGLE nicht möglich 
  if (form.Month.checked) {	//if (form.AnThermLizenzdauer[0].checked) {
    if (! form.DONGLE.disabled)
	  oldDongleChecked = form.DONGLE.checked;	// remember old value before disabled
  	form.DONGLE.checked = null;
  	form.DONGLE.disabled = "disabled";
  } else {
    if (form.DONGLE.disabled)
      form.DONGLE.checked = oldDongleChecked;	// restire old value before reenabled
  	form.DONGLE.disabled = null;
  }

  form.DONGLEpreis.value = "";
  if (form.DONGLE.checked) {
    var PS_DONGLE_licTitle	= "DNGL";
    var PS_DONGLE_factor 	= 0.1;
    var PS_DONGLE_minValue 	= 60;

	licName += "/" + PS_DONGLE_licTitle;	//form.DONGLE.title;

  	var preisOpt = preis * PS_DONGLE_factor;							//eval(form.DONGLEfactor.value);
  	if (preisOpt < PS_DONGLE_minValue) preisOpt = PS_DONGLE_minValue;	//if (preisOpt < eval(form.DONGLEmin.value)) preisOpt = eval(form.DONGLEmin.value);
  	preis += preisOpt ;
 	form.DONGLEpreis.value = "+ € " + Math.round(preisOpt*100)/100;
  }
 
  // Spezialfall nicht Permanent - USUB nicht möglich 
  if (! form.Perpetual.checked) {	//if (! form.AnThermLizenzdauer[4].checked) {
    if (! form.USUB.disabled)
	  oldUSUBChecked = form.USUB.checked;	// remember old value before disabled
  	form.USUB.checked = null;
  	form.USUB.disabled = "disabled";
  } else {
    if (form.USUB.disabled)
      form.USUB.checked = oldUSUBChecked;	// restire old value before reenabled
  	form.USUB.disabled = null;
  }

  var PS_USUB_licTitle	= "USUB";
  var PS_USUB_factor	= 0.075;
  var PS_USUB_minValue	= 0;
  var preisUSUB = preis * PS_USUB_factor;			//eval(form.USUBfactor.value);
  if (preisUSUB < PS_USUB_minValue) preisUSUB = PS_USUB_minValue;
  form.AnThermUSUB.value = "";
  if (form.USUB.checked) {
	licName += "/" + PS_USUB_licTitle;				//form.USUB.title;
  	form.AnThermUSUB.value = "€ " + Math.round(preisUSUB*100)/100;
  }

  // finalwerte
  form.AnThermLiceneName.value 	= licName ;
  form.AnThermLiceneTotal.value = "€ " + Math.round(preis*100)/100;
  
  // update calculator
  // Spezialfall nicht Permanent oder USUB - Update nicht möglich 
  if ( (! form.Perpetual.checked) || (form.USUB.checked) ) {	
    if (! form.DisplayUpdateCalculator.disabled)
	  oldDisplayUpdateCalculatorChecked = form.DisplayUpdateCalculator.checked;	// remember old value before disabled
  	form.DisplayUpdateCalculator.checked = null;
  	form.DisplayUpdateCalculator.disabled = "disabled";
  } else {
    if (form.DisplayUpdateCalculator.disabled)
      form.DisplayUpdateCalculator.checked = oldDisplayUpdateCalculatorChecked ;	// restore old value before reenabled
  	form.DisplayUpdateCalculator.disabled = null;
  }

  var jahrLastUpdate = eval(form.JAHRlastUpdate.options[form.JAHRlastUpdate.options.selectedIndex].value);		// must spec value= in HTML!
  var monatLastUpdate = eval(form.MONATlastUpdate.options[form.MONATlastUpdate.options.selectedIndex].value);
  monatLastUpdate--;		// monate sind 0 based!
  var tagLastUpdate = eval(form.TAGlastUpdate.options[form.TAGlastUpdate.options.selectedIndex].value);
  //form.DATUMlastUpdate.value = "" + jahrLastUpdate + "." + monatLastUpdate + "." + tagLastUpdate ;
  var DatumLastUpdate = new Date(jahrLastUpdate, monatLastUpdate, tagLastUpdate);
  while (DatumLastUpdate.getMonth() > monatLastUpdate) {	// day number too high
  	tagLastUpdate--;
  	form.TAGlastUpdate.options.selectedIndex--;
  	DatumLastUpdate = new Date(jahrLastUpdate, monatLastUpdate, tagLastUpdate);
  }
  form.DATUMlastUpdate.value = DatumLastUpdate.toLocaleDateString();
  
  var DatumJetzt = new Date();
  var IntervalSinceLastUpdate = DatumJetzt - DatumLastUpdate;	// millis
  var DaysSinceLastUpdate = IntervalSinceLastUpdate/24.0/60.0/60.0/1000.0;
  DaysSinceLastUpdate--;	// get rid of today
  if (DaysSinceLastUpdate < 0) DaysSinceLastUpdate = 0;
  var MonthsSinceLastUpdate = DaysSinceLastUpdate * 48 / (366+365+365+365);	// ok, no 100/1000 years, but...
  var QuartersSinceLastUpdate = Math.round(MonthsSinceLastUpdate / 3);
  MonthsSinceLastUpdate = Math.round(MonthsSinceLastUpdate);
  form.QuartersSinceLastUpdate.value = QuartersSinceLastUpdate;
  form.MonthsSinceLastUpdate.value = MonthsSinceLastUpdate;

  var preisUPDATE = QuartersSinceLastUpdate * preisUSUB;
  if (QuartersSinceLastUpdate > 2)	//  if (MonthsSinceLastUpdate > 8)
	preisUPDATE *= 0.9;
  if (preisUPDATE > preis)
	preisUPDATE = preis;

  if (MonthsSinceLastUpdate > 2) {	// does not make sense if less then 3 months
  	form.preisUPDATE.value = "€ " + Math.round(preisUPDATE*100)/100;
    form.UPDATEmoeglich.checked = true;
  } else {
  	form.preisUPDATE.value = "";
  	form.UPDATEmoeglich.checked = false;
  }
  
  updateVisibility(form);	// sanity

}

