/***** Alle Rechte vorbehalten: Rainer Wagener, wagener [ed] rohschnitt.de *****/

/***** Globale Variablen *****/

var Op7 = (navigator.appName == "Opera") && (navigator.appVersion.substring(0,1) > 6.99);
var Saf = navigator.userAgent.indexOf("Safari") != -1;
var taste;
var nun;
var kenn = 0;
var pos1 = 0;
var yB = 0;
var a = 0;
var Beweg = false;
var zahlen = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
var hinten = new Array("F","F","F","F","F","F");
var vorne = new Array("0","0","0","0","0","0");
var position = new Array(12);
var faktor =  new Array(299,299,587,587,114,114);
var farbe = "#FFFFFF";
var schrift = "#000000";
var button;
var posunten;
var posoben;
var eingabe = "Eingabe";

/***** Eventbeobachtung, Ausgangswerte und Abstände festlegen *****/

window.onload = beginn;

function beginn()
{
   start();
   init();
}

 function init()
 {
    if(!document.getElementById || !document.body.nodeName)
       return;

    for (var i=0;i<document.forms.length;i++)
      for (var j=0;j<document.forms[i].elements.length;j++)
       if(document.forms[i].elements[j].className.indexOf("text") != -1)
       {
          document.forms[i].elements[j].onfocus = clean;
          document.forms[i].elements[j].onblur = test;
       }

    for (var i = 0;i< document.forms[0].elements.length;i++)
    {
       document.forms[0].elements[i].onmousedown = buttdown;
       document.forms[0].elements[i].onkeydown = buttkeydown;
       document.forms[0].elements[i].onkeyup = buttkeyup;
       if(window.opera)
          document.forms[0].elements[i].onkeypress = buttkeypress;
    }

    for (var i=0;i<document.getElementById("fo1").getElementsByTagName("button").length;i++)//für Safari
    {
       document.getElementById("fo1").getElementsByTagName("button")[i].onmousedown = buttdown;
       document.getElementById("fo1").getElementsByTagName("button")[i].onkeydown = buttkeydown;
       document.getElementById("fo1").getElementsByTagName("button")[i].onkeyup = buttkeyup;
    }

    for (var i = 0;i< document.getElementsByTagName("div").length;i++)
       if(document.getElementsByTagName("div")[i].className == "unten")
       {
          document.getElementsByTagName("div")[i].onclick = divclick;
          document.getElementsByTagName("div")[i].onmousedown = divdown;
          document.getElementsByTagName("div")[i].onmouseup = buttkeyup;
          document.getElementsByTagName("div")[i].onmouseout = buttkeyup;
       }

    document.onmouseup = buttup;
    document.onmousemove = buttmove;

    button = 22;//document.forms[0].elements[0].offsetHeight;
    posunten = 215;//document.forms[0].elements[0].offsetTop;
    posoben = 65;//posunten - (document.getElementById("d100").offsetHeight - button);

    if(Saf)
    {
       var pso = navigator.appVersion.substring(navigator.appVersion.lastIndexOf("/")+1);
       if(parseInt(pso) < 130)
       {
          document.getElementById("hinweis").style.top = "5.6em";
          document.getElementById("hinweis").style.marginBottom = "7.6em";
          document.getElementById("central").style.marginTop = "40px";
       }
    }

    for (var i = 0;i< 6;i++)
       position[i] = posunten;

    for (var i = 6;i< 12;i++)
       position[i] = posoben;

    ausrechnen(6);
 }

/***** Reaktion auf verschiedene Events *****/

 function buttdown(e)
 {
    Beweg = true;
    var ereignis = (window.Event) ? e : window.event;
    var quelle = (window.Event) ? ereignis.target : ereignis.srcElement;
    kenn = parseInt(quelle.id.slice(1));
    pos1 = (window.Event) ? ereignis.pageY : ereignis.clientY;
    yB = position[kenn];
 }

 function buttup(e)
 {
   Beweg = false;
 }

 function buttkeypress(e)
 {
    e.preventDefault();
 }

 function buttmove(e)
 {
   if(Beweg)
   {
      var ereignis = (window.Event) ? e : window.event;
      var corr = (window.Event) ? (ereignis.pageY - pos1) : (ereignis.clientY - pos1);
      pos1 = (window.Event) ? ereignis.pageY : ereignis.clientY;
      yB += corr;
      ausrechnen(kenn);
   }
 }

 function buttkeydown(e)
 {
    var ereignis = (window.Event) ? e : window.event;
    var quelle = (window.Event) ? ereignis.target : ereignis.srcElement;
    taste = (window.Event) ? ereignis.which : ereignis.keyCode;
    kenn = parseInt(quelle.id.slice(1));
    yB = position[kenn];

    taste = (taste==89 && ie_mac) ? 90 : taste;

    if(Op7)
    {
      window.clearInterval(nun);
      e.preventDefault();
      nun = window.setInterval("buttkeyopera()", 100);
    }

    else
    {
      if(taste == 82)
        yB -= 10;
      if(taste == 90)
        yB += 10;

      ausrechnen(kenn);
    }
 }

 function buttkeyopera()
 {
      if(taste == 82)
         yB -= 10;
      else if(taste == 90)
         yB += 10;
      else
        window.clearInterval(nun);

    ausrechnen(kenn);
 }

 function buttkeyup(e)
 {
   window.clearInterval(nun);
 }

 function divdown(e)
 {
    var ereignis = (window.event) ? window.event : e;
    var quelle = (window.event) ? ereignis.srcElement : eval(ereignis).target;
    pos1 = (window.event) ? ereignis.offsetY : ereignis.layerY;
    kenn = parseInt(quelle.id.slice(1))-100;
    yB = position[kenn];
    nun = window.setInterval("moveschalt()",200);
 }

 function moveschalt()
 {
    window.clearInterval(nun);
    nun = window.setInterval("divclick()",50);
 }

 function divclick()
 {
    if((pos1 + posoben) > (yB + button))
    {
       yB += 10;
       if((pos1 + posoben) < (yB + button))
         {
           yB = pos1 + posoben - button;
           window.clearInterval(nun);
         }
       if(yB > (posunten-6))
          yB = posunten;
    }
    else if((pos1 + posoben) < yB)
    {
       yB -= 10;
       if((pos1 + posoben) > yB)
         {
           yB = pos1 + posoben;
           window.clearInterval(nun);
         }
       if(yB < (posoben+6))
          yB = posoben;
    }

    ausrechnen(kenn);
 }

/***** Koordinaten für Schieberegler und entsprechende Farbwerte berechnen *****/

 function ausrechnen(b)
 {
     if(yB > posunten)
        yB = posunten;

     if(yB < posoben)
        yB = posoben;

     position[b] = yB;
     a = Math.round((posunten - yB)/10);

     if(b < 6)
     {
        schrift = "#";
        vorne[b] = zahlen[a];
        for (var i = 0;i < vorne.length;i++)
           schrift += vorne[i];
     }

     else
     {
        farbe = "#";
        hinten[b-6] = zahlen[a];
        for (var i = 0;i < hinten.length;i++)
           farbe += hinten[i];
     }

     document.getElementById("b" + b.toString()).style.top = yB.toString() + "px";
     document.forms[4].elements[1].value = farbe;
     document.forms[1].elements[1].value = schrift;
     document.getElementById("back").style.background = farbe;
     document.getElementById("back").style.color = schrift;
     hell();
 }

/***** Erfüllung der WAI-Kriterien berechnen *****/

 function hell()
 {
    var hellhint = 0;;
    var hellvorn = 0;;

    var hintstring = "";
    var vornstring = "";

    var kontrahint = 0;
    var kontravorn = 0;
    var kontraerg = 0;

    for(var i = 1;i<6; i+=2)
    {
       hintstring = farbe.substr(i,2);
       hellhint += (kontrahint = parseInt(hintstring,16))*faktor[i];
       vornstring = schrift.substr(i,2);
       hellvorn += (kontravorn = parseInt(vornstring,16))*faktor[i];
       kontraerg += Math.abs(kontrahint - kontravorn);
    }

    var diff = Math.round(Math.abs(hellhint - hellvorn)/1000);
    document.forms[2].elements[1].value = diff + "  (Soll > 125)";
    document.forms[3].elements[1].value = kontraerg + "  (Soll > 500)";
 }

/***** Uebernahme der Texteingabe regeln *****/

 function uebernehmen(b)
 {
    var subs;
    var ide = "f" + b.toString();
    var zaehler = (b > 203) ? 6 : 0;
    var pruef = zaehler;
    var string = document.getElementById(ide).value;

    for(var i = 0;i < string.length && (zaehler-pruef) < 6;i++)
       if(!isNaN(subs = parseInt(string.substr(i,1),16)))
       {
          yB = posunten - subs * 10;
          ausrechnen(zaehler);
          zaehler++;
       }
 }

 /***** Eingabefelder leeren *****/

 function clean(e)
 {
    e = (window.Event) ? e : window.event;
    quelle = (window.Event) ? e.target : e.srcElement;

    if(quelle.value == eingabe)
      quelle.value = "";
 }

 function test(e)
 {
    e = (window.Event) ? e : window.event;
    quelle = (window.Event) ? e.target : e.srcElement;

    if(quelle.value == "")
      quelle.value = eingabe;
 }

/***** Für Safari input durch button ersetzen *****/

 function safari()
 {
    if(!Saf)
       return;

    zaehler = 0;
    for(var i=0;i<document.forms[0].getElementsByTagName("input").length;)
       if(document.forms[0].getElementsByTagName("input")[i].className == "oben")
       {
          var butto = document.createElement("button");

          var tip = document.createAttribute("type");
          tip.nodeValue = "button";

          var val = document.createAttribute("value");
          val.nodeValue = "";

          var klass = document.createAttribute("class");
          klass.nodeValue = "oben";

          var ide = document.createAttribute("id");
          var ide2 = "b" + zaehler.toString();
          ide.nodeValue = ide2;

          butto.setAttributeNode(tip);
          butto.setAttributeNode(val);
          butto.setAttributeNode(klass);
          butto.setAttributeNode(ide);

          document.getElementById("fo1_cont").replaceChild(butto, document.getElementById(ide2));
          zaehler++;
       }
 }
