//=============================================================================
// www.erlenwiese.de         (c) Martin Schmidt, Alsfeld
//-----------------------------------------------------------------------------
//
// $Id: $
//=============================================================================

//-----------------------------------------------------------------------------
$(document).ready(function()
//-----------------------------------------------------------------------------
{
  // Caching verhindern wenn getJSON verwendet wird
  $.ajaxSetup({ cache: false });
  
  // Alle Ergebniszahlen färben
  $("b").css("color", "#0d0");

  // Eventhandler zuweisen

  // Slider
  $("#SliderBrennweite").slider({
     range: "min",
     min: 0,
     max: 800, 
     slide: function(event, ui) { $("#Brennweite").val(ui.value); },
     change: function(event, ui) { $("select").val("0"); $("#Datenblatt").fadeOut(); Berechnen(); }
  });  
  $("#SliderNahgrenze").slider({
     range: "min",
     min: 0,
     max: 6000, 
     step: 10,
     slide: function(event, ui) { $("#Nahgrenze").val(ui.value); },
     change: function(event, ui) { $("select").val("0"); $("#Datenblatt").fadeOut(); Berechnen(); }
  });  
  $("#SliderMassstab").slider({
     range: "min",
     min: 0,
     max: 1, 
     step: 0.01,
     slide: function(event, ui) { $("#Massstab").val(Math.round(ui.value * 100) / 100); },
     change: function(event, ui) { $("select").val("0"); $("#Datenblatt").fadeOut(); Berechnen(); }
  });  
  $("#SliderZwischenringe").slider({
     range: "min",
     min: 0,
     max: 200, 
     slide: function(event, ui) { $("#Zwischenringe").val(ui.value); },
     change: function(event, ui) { Berechnen(); }
  });  
  $("#SliderVorsatzlinse").slider({
     range: "min",
     min: 0,
     max: 4000, 
     step: 10,
     slide: function(event, ui) { $("#Vorsatzlinse").val(ui.value); },
     change: function(event, ui) { Berechnen(); }
  });  

  // Ergebnis
  $("#SliderMinBrennweite").slider({
     range: true,
     min: 0,
     max: 800
  });  
  $("#SliderMinNahgrenze").slider({
     range: true,
     min: 0,
     max: 6, 
     step: 0.01
  });  
  $("#SliderMinMassstab").slider({
     range: true,
     min: 0,
     max: 2, 
     step: 0.01
  });  

  $("input").change( function() 
  {
    switch ($(this).attr("name")) 
    {
      case "Brennweite":
        $("select").val("0");
        $("#Datenblatt").fadeOut();
        $("#SliderBrennweite").slider('option', 'value', $("#Brennweite").val());
        break;
        
      case "Nahgrenze":
        $("select").val("0");
        $("#Datenblatt").fadeOut();
        $("#SliderNahgrenze").slider('option', 'value', $("#Nahgrenze").val());
        break;
      
      case "Massstab":
        $("select").val("0");
        $("#Datenblatt").fadeOut();
        $("#SliderMassstab").slider('option', 'value', $("#Massstab").val());
        break;
        
      case "Zwischenringe":
        $("#SliderZwischenringe").slider('option', 'value', $("#Zwischenringe").val());
        break;
        
      case "Vorsatzlinse":
        $("#SliderVorsatzlinse").slider('option', 'value', $("#Vorsatzlinse").val());
        break;
      
      default:
        break;
    }
    
    // Angabe muss eine Nummer sein
    if (isNaN($(this).val())) {
      $(this).val("0");
    }
    
    Berechnen();
  });
  
  // Objektiv Wechsel
  $("select").change( function() {
    if ($(this).val() !== "0") {
      ObjektivLesen();
    } else {
      $("#Datenblatt").fadeOut();
    }
  });
  
});

//-----------------------------------------------------------------------------
function ObjektivLesen()
//-----------------------------------------------------------------------------
{
  $.getJSON("/php/req-makro.php?ID=" +  $("select[name='ObjektivID']").val(), function(Objektiv) 
  {
    $("#SliderBrennweite").slider('option', 'value', Objektiv['Brennweite']);
    $("#Brennweite").val(Objektiv['Brennweite']);
    $("#SliderNahgrenze").slider('option', 'value', Objektiv['MinDistanz']);
    $("#Nahgrenze").val(Objektiv['MinDistanz']);
    $("#SliderMassstab").slider('option', 'value', Objektiv['Massstab']);
    $("#Massstab").val(Objektiv['Massstab']);
    
    $("#Datenblatt span:eq(0)").text(Objektiv['EF12Fern']);
    $("#Datenblatt span:eq(1)").text(Objektiv['EF12Nah']);
    $("#Datenblatt span:eq(2)").text(Objektiv['EF25Fern']);
    $("#Datenblatt span:eq(3)").text(Objektiv['EF25Nah']);
    
    $("#Datenblatt").fadeIn();
    
    Berechnen();
  });
}

//-----------------------------------------------------------------------------
function Berechnen()
//-----------------------------------------------------------------------------
{
  var f  = parseInt($("#Brennweite").val(), 10),
      d  = parseInt($("#Nahgrenze").val(), 10),
      m  = parseFloat($("#Massstab").val()),
      z  = parseInt($("#Zwischenringe").val(), 10),
      fv = parseInt($("#Vorsatzlinse").val(), 10),
      fm, b, 
      fmin, fmax,   // Brennweite bei min/max Entfernungseinstellung
      bmin, bmax,   
      mmin, mmax,   // Abbildungsmaßstab bei min/max Entfernungseinstellung
      dmin, dmax;   // Objektdistanz bei min/max Entfernungseinstellung
  
   fm = d / (m + (1 / m) + 2);
   b = fm * (m + 1);

   if (fv === 0)
     { fmin = fm; }
   else
     { fmin = 1 / ((1 / fm) + (1 / fv)); }
   bmin = b + z;

   mmin = (bmin - fmin) / fmin;
   dmin = bmin / mmin + bmin;

   if (fv === 0)
     { fmax = f; }
   else
     { fmax = 1 / ((1 / f) + (1 / fv)); }
   bmax = f + z;

   mmax = (bmax - fmax) / fmax;
   dmax = bmax / mmax + bmax;
   
   fmin = Math.round(fmin);
   fmax = Math.round(fmax);
   dmin = Math.round(dmin / 10) / 100;
   dmax = Math.round(dmax / 10) / 100;
   mmin = Math.round(mmin * 100) / 100;
   mmax = Math.round(mmax * 100) / 100;
   
   $("b:eq(0)").text(isNaN(fmin) ? "-" : fmin);
   $("b:eq(1)").text(isNaN(fmax) ? "-" : fmax);
   $("b:eq(2)").text((dmin == Infinity) ? "unendlich" : (isNaN(dmin) ? "-" : dmin));
   $("b:eq(3)").text((dmax == Infinity) ? "unendlich" : (isNaN(dmax) ? "-" : dmax));
   $("b:eq(4)").text((mmax == Infinity) ? "unendlich" : (isNaN(mmax) ? "-" : mmax));
   $("b:eq(5)").text((mmin == Infinity) ? "unendlich" : (isNaN(mmin) ? "-" : mmin));

   // Bei unsinnigen Angaben kann es unsinnige Ergebnisse geben 
   if (fmin > fmax) { b = fmin; fmin = fmax; fmax = b; }
   if (dmin > dmax) { b = dmin; dmin = dmax; dmax = b; }
   if (mmin < mmax) { b = mmin; mmin = mmax; mmax = b; }
   
   $("#SliderMinBrennweite").slider('option', 'max', $("#Brennweite").val());
   
   $("#SliderMinBrennweite").slider('values', 0, (isNaN(fmin) ? 0 : fmin));
   $("#SliderMinBrennweite").slider('values', 1, (isNaN(fmax) ? Infinity : fmax));  
   $("#SliderMinNahgrenze").slider('values', 0, (isNaN(dmin) ? 0 : dmin));
   $("#SliderMinNahgrenze").slider('values', 1, (isNaN(dmax) ? Infinity : dmax));  
   $("#SliderMinMassstab").slider('values', 0, (isNaN(mmax) ? 0 : mmax));
   $("#SliderMinMassstab").slider('values', 1, (isNaN(mmin) ? Infinity : mmin));  
   
}
