/* Bsp-Init:
// ButtonanfangsString
ButtonStr = "but"
// Aktiviert "FullRollOver"
FullRollOver = false;
// Init
var aktNames = new Array(7);
var deaktNames = new Array(7);
aktNames[0]="kl_1ak-over.jpg";
aktNames[1]="kl_2ak-over.jpg";
aktNames[2]="kl_3ak-over.jpg";
aktNames[3]="kl_4ak-over.jpg";
aktNames[4]="kl_5ak-over.jpg";
aktNames[5]="kl_6ak-over.jpg";
aktNames[6]="bu_fertigak.jpg";
deaktNames[0]="kl_1ak.jpg";
deaktNames[1]="kl_2ak.jpg";
deaktNames[2]="kl_3ak.jpg";
deaktNames[3]="kl_4ak.jpg";
deaktNames[4]="kl_5ak.jpg";
deaktNames[5]="kl_6ak.jpg";
deaktNames[6]="bu_fertig.jpg";
initRollOver(1, 7, aktNames, deaktNames, klick);

function klick(colNumber) {
}

Bsp Einbau:
<a href="javascript:klickButton(0,0);" onMouseOver="window.status=''; mouseMove(0, AktMoveOver, 0); return true" onMouseOut="window.status=''; mouseMove(0, AktMoveOut, 0); return true"><img src="bu_a.jpg" border=0 alt="" width=31 height=31 name="but00"></a>
*/

// "Konstanten" für die mouseMove-Funktion
var AktMoveOver = 1;
var AktMoveOut = 2;
// "Konstante" für den Buttonanfangsnamen
var ButtonStr = ""
// "Konstante" für buttonHolded
var HoldedNothing = -1;
// Anzahl der Zeilen
var Rows = 0;
//
var FullRollOver = false;
// Sollen Buttons wieder deaktivierbar sein?
var onOffButtons = false;
// Das muss noch alles initialisiert werden!
//var buttonHolded = new Array(0);
//var buttonAkt = new Array(0);
//var buttonDeakt = new Array(0);
//var klickFunction = null; // Form: function ....(rowLines, colLines)...
//var everyKlick = false;

function initRollOver(rowLines, cols, buttonAktNames, buttonDeaktNames, functionTemp, allKlicks, onOffButtonParam) {
// Verschiedene Reihen, verschiedene Buttons, aktive Buttons, deaktive Buttons, die Klick-Function, bei jedem Klick Function aufrufen?, Sollen Buttons deaktivierbar sein?
 Rows = rowLines;
 buttonHolded = new Array(Rows);
 // Noch keine Antwort gewählt
 for (i=0;i<Rows;i++)
 {buttonHolded[i] = HoldedNothing;}

 // Buttonsteil
 buttonAkt = new Array(cols);
 buttonDeakt = new Array(cols);
 
 //Function, die aufgerufen werden soll, wenn ein Button geklickt wird!
 klickFunction = functionTemp;

 // Soll Klick-Function bei jedem Klick aufgerufen werden (=true), oder nur wenn ein neues Button angeklick wird (=false)
 if (allKlicks==true) {
  everyKlick = true;
 } else {
  everyKlick = false;
 }
 for (i=0;i<cols;i++) {
  buttonAkt[i] = new Image();
  buttonAkt[i].src = buttonAktNames[i];
  buttonDeakt[i] = new Image();
  buttonDeakt[i].src = buttonDeaktNames[i];
 }
 
 // Definiert, ob Buttons wieder deaktivierbar sein sollen
 onOffButtons = onOffButtonParam;
}

function mouseMove(colNumber, action, rowNumber) {
 // Sicheres rowNumber. (Falls keine Zeile angegeben wurde enthält es die Zahl 0!) Für buttonHold gedacht
 var tempRow = rowNumber;
 // Wenn keine Zeile angegeben wurde, dann durch einen Null-String ersetzten und tempRow gleich 0 setzen
 if (rowNumber == null) {
  rowNumber = "";
  tempRow = 0;
 }
 // Wenn das das gerade gehaltene Button ist, abbrechen
 if (colNumber == buttonHolded[tempRow]) {
  return;
 }

 if (action == AktMoveOver) {
  if ((buttonHolded[tempRow] != HoldedNothing) && (FullRollOver)) { // Deaktiviert vorübergehend den gehaltenen Button
   document[ButtonStr + rowNumber + buttonHolded[tempRow]].src = buttonDeakt[buttonHolded[tempRow]].src;
  }
  document[ButtonStr + rowNumber + colNumber].src = buttonAkt[colNumber].src;
 } else if (action == AktMoveOut) {
  if ((buttonHolded[tempRow] != HoldedNothing) && (FullRollOver))  { // Aktiviert den gehaltenen Button wieder
   document[ButtonStr + rowNumber + buttonHolded[tempRow]].src = buttonAkt[buttonHolded[tempRow]].src;
  }
  document[ButtonStr + rowNumber + colNumber].src = buttonDeakt[colNumber].src;
 }
}

function klickButton(rowNumber, colNumber) {
 var runKlickFunction = false;
 if (buttonHolded[rowNumber] != colNumber) { // Einen neue Antwort gewählt
  if (buttonHolded[rowNumber] != HoldedNothing) { // Alten Antwort-Button deaktiviern, aber nur wenn schon eine Antwort gewählt wurde
   document[ButtonStr + rowNumber + buttonHolded[rowNumber]].src = buttonDeakt[buttonHolded[rowNumber]].src;
  }
  document[ButtonStr + rowNumber + colNumber].src = buttonAkt[colNumber].src; // Neues Antwort-Button aktivieren
  buttonHolded[rowNumber] = colNumber; // merken
  runKlickFunction = true;
 } else {
  if (onOffButtons) { // Wenn Buttons deaktivierbar sind:
   document[ButtonStr + rowNumber + colNumber].src = buttonDeakt[colNumber].src // Angeklickter Button deaktiviern
   buttonHolded[rowNumber] = HoldedNothing; // Gemerktes löschen
   runKlickFunction = true;
  } else {
   runKlickFunction = everyKlick; // Wenn bei jedem Klick die "Klick"-Function ausgeführt werden soll
  }
 }
 if (runKlickFunction && (klickFunction != null))
  klickFunction(colNumber, rowNumber);
}
