function cs (Knoten) {
  var Node = Knoten.firstChild;

  while (Node!=null) {
    if (Node.style) {
      if (Node.className != "PTK") { /* do not PTK */
        Node.style.backgroundColor = DisplayColors['MouseOverBackgroundColor'];
      }
      Node.style.color		 = DisplayColors['MouseOverColor'];
    }
    if (Node.hasChildNodes()) cs (Node);
    Node = Node.nextSibling;
  }
}

function cr (Knoten) {
  var Node = Knoten.firstChild;

  while (Node!=null) {
    if (Node.style) {
      Node.style.backgroundColor = '';
      Node.style.color		 = '';
    }
    if (Node.hasChildNodes()) cr (Node);
    Node = Node.nextSibling;
  }
}

/*-------------*/

var ZAreas		= new Array;
var ZShowBreit		= new Array;
var ZTxt		= new Array;
var EPerLine		= new Array;
var ZPr			= new Array;
var ZSpecial		= new Array;
var ZTyp		= new Array;
var Special		= new Array;
var ShopValues 		= new Array;
var DisplayColors	= new Array;
var DisplayFlag		= new Array;
var PAGE, AddClickOnColumn;

function CheckNextCol(i,N) {
  var Value = (i % Math.floor((N+2)/3) == 0 && i < N ? 1 : 0);
  return Value;
}

var ShowDetailsRegister_i, ShowDetailsRegister_m;

function PrintZutaten (FieldNr) {
  var RExpStr = /^([a-zA-Z]+)(\d+)_(\d+)/; RExpStr.exec(document.PForm.elements[FieldNr].name);
  var AreaName = RegExp.$1 + RegExp.$3;
  var RowName = RegExp.$1 + RegExp.$2 + "_" +  RegExp.$3 + '_Z';

  var HiddenRow = String(FieldNr+EPerLine[AreaName]*2+2);

  var RowID = 'R_' + HiddenRow;
  var IsContent;
  var New_ZValue=0;

  for (var i=0; i < EPerLine[AreaName]; i++) {
    var ID, ShortWork = "";
    var ZField = FieldNr+i*2+2;

    var DetailsWork = '';

    ZSplit = document.PForm.elements[ZField].value.split(',');

    for (var m=1; m <= document.PForm.elements[ZField-1].value; m++) {
      IsContent = 1;

      var RExist;
      var z=0, ShortAreaString = "", AreaCount = 65, WinHeigth = 0;

      for (var za=0; za<ZAreas[AreaName].length; za++) {
	var ZutatCounter = 0, FlagCounter = 0;
	var OhneString = "", ExtraString = "";

	var DetailRows = new Array;

	var ZAreachar = String.fromCharCode(AreaCount++);
	var ZAreaCode = AreaName+ZAreachar;

	if (ZTyp[ZAreaCode] == 'R') RExist = 1;

	if (ZTyp[ZAreaCode] == 'R' && i == AddClickOnColumn-1) {
	  ShowDetailsRegister_i = i; 
	  ShowDetailsRegister_m = document.PForm.elements[ZField-1].value;
	  AddClickOnColumn = 0;
	}

	var SpecialRules = new Array;
	var SpecialCheckPreis = new Array;
	if (ZSpecial[ZAreaCode]) {
	  SpecialRules = ZSpecial[ZAreaCode].split('|');
	  SpecialCheckPreis = SpecialRules[1].split('_');
	}

	for (var j=0; j<ZTxt[ZAreaCode].length; j++) {
	  ID = 'A_' + ZField + '_' + i + '_' + m + '_' + za + '_' + j;

	  var CSSClass = 'PZ';
	  var PrName = ZAreaCode + '_' + j;
	  var Flag = 0, Default = 0;
	  var ImgChar = 0;

	  if	  (ZSplit[m].charAt(z) == '1') { Flag = 1; }
	  else if (ZSplit[m].charAt(z) == '2') { Flag = 2; }
	  if	  (ZSplit[0].charAt(z) == '1') { Default = 1; }

	  var ZPreis = Number(ZPr[PrName][i]); if (ZPr[PrName][i] == 'X') ZPreis=0;
	  var ZPreisFaktor = 1;

	  var Add2Extra = "", Add2Ohne = "";

	  if (ZTyp[ZAreaCode] == 'R') {
	    if (Flag) {
	      ImgChar = 'R';
	      New_ZValue += ZPreis;
	      Add2Extra += "-&nbsp;" + ZTxt[ZAreaCode][j];
	    }
	  }
	  else {
	    if (Flag) {
	      ImgChar = Flag;	
	      var ZutatMatched = 1;
	      if (SpecialCheckPreis[0] && SpecialCheckPreis[0] != "*") {
		for (var ii=0; ii<SpecialCheckPreis.length; ii++) {
		  if (SpecialCheckPreis[ii] != Number(ZPr[PrName][ii])) ZutatMatched = 0;
		}
	      }
	      ZutatCounter++;
	      for (var zz=1; zz<=Flag-Default; zz++) {
		ZPreisFaktor = 1;
		if (ZutatMatched) {
		  FlagCounter++;
		  if (eval(SpecialRules[0])) {
		    ZPreisFaktor = SpecialRules[2]/100;
		  }
		}
		New_ZValue += ZPreis * ZPreisFaktor;
	      }
	    }

	    if	    (Flag-Default > 0) Add2Extra += (Flag-Default) + "x " + ZTxt[ZAreaCode][j];
	    else if (Flag-Default < 0) Add2Ohne  += "-&nbsp;" + ZTxt[ZAreaCode][j];

	    if (Default) { CSSClass += 'default'; }
	  }

	  if (Add2Extra) ExtraString +=	"<tr><td " + (DisplayFlag['DisplayZutatenPreise'] ? "" : "colspan=2 ") + "class='PZtd'>"+
					  "<div class='PZdiv'>" + Add2Extra + "</div>"+
					  "</td>"+
					  (DisplayFlag['DisplayZutatenPreise'] ? "<td class='PZtd'>" + (ZPreis > 0 ? Number(String(ZPreis * ZPreisFaktor)).toFixed(2) : "") + "</td>" : "")+
					"</tr>";
	  if (Add2Ohne)  OhneString  += "<tr><td " + (DisplayFlag['DisplayZutatenPreise'] ? "" : "colspan=2 ") + "class='PZtd'>"+
					  "<div class='PZdiv'>" + Add2Ohne + "</div>"+
					  "</td>"+
					  (DisplayFlag['DisplayZutatenPreise'] ? "<td class='PZtd'>&nbsp;</td>" : "")+
					"</tr>";

	  if (i == ShowDetailsRegister_i && m == ShowDetailsRegister_m) {
	    DetailRows[j] = "<tr id='" + ID + "' style='cursor:pointer' "+
					  "onClick='I2L(this);ISL(this);' "+
					  "onMouseMove='cs(this);I1L(this)' "+
					  "onMouseOut ='cr(this);I0L(this)' "+
					  "onMouseDown='I2L(this)' "+
			   ">"+
				"<td class='PZtd'><div class='PZdiv'>"+
				"<img id='" + ID + "' src='/C" + ImgChar + "_0.jpg' border=0 align=top height=12 width=12 vspace=1><span class='" + CSSClass + "'> " + ZTxt[ZAreaCode][j] + "</span></div></td>"+
				"<td class='PZtd'><span class='" + CSSClass + "'>" + (ZPreis > 0 ? Number(ZPreis).toFixed(2) : "") + "</span></td>"+
			   "</tr>";
	    if (ZPr[PrName][i] == 'X') {
	      DetailRows[j] = DetailRows[j].replace(/\/C0_0.jpg/g,'/icons/DummyTransparent.gif');
	      DetailRows[j] = DetailRows[j].replace(/onM|onC/g,'X');
	    }
	  }

	  z++;
	} /* Loop j */

	ShortAreaString +=
	    (ExtraString || OhneString
	      ? (ZAreas[AreaName][za].indexOf('Dummy') == 0
		  ? ""
		  : "<tr><td colspan=2 class='PZtd'>"+
		      "<div class='PZdiv'><b><i>"+ZAreas[AreaName][za]+"</i></b></div>"+
		    "</td></tr>"
		)+
		(ExtraString ? (ZTyp[ZAreaCode] == 'MC' ? "<tr><td colspan=2 class='PZtd'><i>Extra:</i></td></tr>": "") + ExtraString : "")+
		(OhneString ? "<tr><td colspan=2 class='PZtd'>" + (ExtraString ? "<div style='margin-top:2px'>" : "") + "<i>Ohne:</i>" + (ExtraString ? "</div>" : "") + "</td></tr>" + OhneString : "")+
		"<tr><td colspan=2 style='height:3px'></td></tr>"
	    : ""
	  );

	if (i == ShowDetailsRegister_i && m == ShowDetailsRegister_m) {
	  var StartInnerTable = "<table border=0 cellspacing=0 cellpadding=0 style='width:100%; table-layout:fixed'><colgroup><col width=*><col width=24></colgroup><tr><td class='PZtd'>";

	  DetailsWork += "<table border=0 cellspacing=0 cellpadding=0 style='width:100%; table-layout:fixed'>"+
			 "<colgroup><col width=33%>" + (ZShowBreit[AreaName] ? "<col width=33%><col width=33%>": "") + "</colgroup>" +
			(ZAreas[AreaName][za].indexOf('Dummy') == 0
			  ? ""
			  : "<tr><td class='PZtd' " + (ZShowBreit[AreaName] ? "colspan=3 " : "") + "style='border-bottom:1px solid black'>"+
				"<div class='PZdiv' style='font-size:120%;margin-bottom:1px'><b><i>"+ZAreas[AreaName][za]+"</i></b></div>"+
			    "</td></tr>"
			)+
			"<tr><td class='PZtd'>"+
			 StartInnerTable;
	  WinHeigth += 8+(ZAreas[AreaName][za].indexOf('Dummy') == 0 ? 0 : 17);

	  var Counter = 0, ZaLines = 0, AddZaLines= 1, OpticalLines = DetailRows.length;
	  for (var j=0; j < DetailRows.length; j++) {
	    if (DetailRows[j].indexOf('- ') >= 0) OpticalLines++;
	  }
	  for (var j=0; j < DetailRows.length; j++) {
	    DetailsWork += DetailRows[j];
	    if (AddZaLines) ZaLines++;

	    Counter++;
	    var NextCol = 0;
	    if (DetailRows[j].indexOf('- ') >= 0) {
	      NextCol = CheckNextCol(Counter,OpticalLines);
	      Counter++;
	    }
	    if (! NextCol) NextCol = CheckNextCol(Counter,OpticalLines);
	    if (NextCol) { 
	      if (ZShowBreit[AreaName] && OpticalLines > 6) {
		AddZaLines = 0;
		DetailsWork +=	"</td></tr></table>"+
		"</td><td class='PZtd' style='padding-left:2px'>" +
		StartInnerTable;
	      }
	    }
	  }

	  WinHeigth += ZaLines*14;

	  DetailsWork += "</td></tr></table>"+
			"</td></tr><tr><td style='height:"+
			(za == ZAreas[AreaName].length-1
			  ? "2"
			  : "8"
			)+
			"px'></td></tr></table>";
	}
      } /* Loop za */

      /*-------------*/

      var MOverID = 'MOver' + ZField + '_' + i + '_' + m;

      ShortWork += "<table id='" + MOverID + "' style='cursor:pointer' "+
		"onClick=\"HideInfoBox(document.getElementById('ZutatenTabelle')); ShowDetailsRegister_i=" + i + "; ShowDetailsRegister_m=" + m + "; PrintZutaten (" + FieldNr + ")\" "+
		"onMouseMove=	\"for (var i=0;i<this.childNodes[1].childNodes.length;i++) { "+
				"  Node = this.childNodes[1].childNodes[i].childNodes[0]; "+
				"  while (Node!=null) { "+
				"    Node.style.backgroundColor	= '" + DisplayColors['MouseOverBackgroundColor'] + "'; "+
				"    Node.style.color		= '" + DisplayColors['MouseOverColor'] + "'; "+
				"    Node = Node.nextSibling; "+
				"  } "+
				"} "+
				"\" "+
		"onMouseOut=	\"for (var i=0;i<this.childNodes[1].childNodes.length;i++) { "+
				"  Node = this.childNodes[1].childNodes[i].childNodes[0]; "+
				"  while (Node!=null) { "+
				"    Node.style.backgroundColor=''; "+
				"    Node.style.color=''; "+
				"    Node = Node.nextSibling; "+
				"  } "+
				"} "+
				"\" "+
		"width=100% border=0 cellspacing=0 cellpadding=0 style='table-layout:fixed'><colgroup><col width=*><col width=22></colgroup>";
      ShortWork +=	"<tr><td colspan=2 class='PZtd'>"+
			  (document.PForm.elements[ZField-1].value > 1 ? "<div style='font-size:115%;margin-top:2px;" + (m > 1 ? "margin-top:6px;" : "") + "margin-bottom:2px'><b><i><u>" + m + ". Gericht</u></i></b></div>" : "")+
			"</td></tr>"+
			"<tr><td colspan=2 class='PZtd'>"+
			  (RExist || ExtraString || OhneString ? "" : "<div style='margin-top:2px;margin-bottom:4px'><b>Zutatenauswahl</b></div>") +
			"</td></tr>"+
			  ShortAreaString
			"</table>";

      /*-------------*/

      if (i == ShowDetailsRegister_i && m == ShowDetailsRegister_m) {
	DetailsWork += "<table width=100% cellspacing=1 cellpadding=0><tr><td><input class='submit' style='font-size:100%; width:100%; border-width:1px; border-radius:4px; box-shadow:1px 1px 3px #000000' type=button value='OK' onClick=\"ShowDetailsRegister_m=''; HideInfoBox(document.getElementById('ZutatenTabelle'))\"></td></tr></table>";

	var Work = document.getElementById('ZutatenTabelle_InfoBox').style.width;
	var RExpStr = /(.*)px/; RExpStr.exec(Work);
	var ZutatenTabelleWidth = RegExp.$1;

	if (document.getElementById('ZutatenTabelle_InfoBox').style.visibility == "hidden") {
	  if	  (! ZShowBreit[AreaName] && ZutatenTabelleWidth >  250) { ZutatenTabelleWidth /= 3; }
	  else if (  ZShowBreit[AreaName] && ZutatenTabelleWidth <= 250) { ZutatenTabelleWidth *= 3; }

	  document.getElementById('ZutatenTabelle_InfoBox').style.width = ZutatenTabelleWidth+"px";
	  document.getElementById('ZutatenTabelle_InfoBox').style.minWidth = ZutatenTabelleWidth+"px";

	  WinHeigth += (! ZShowBreit[AreaName] && document.PForm.elements[ZField-1].value > 1 ? 14 : 0);

	  ShowInfoBox(document.getElementById('ZutatenTabelle'), 25, -ZutatenTabelleWidth/2-10, ZutatenTabelleWidth, WinHeigth+40, 1);
	}
	var Title = "Zutatenauswahl <span style='cursor:help' title='Hilfe' onClick='WindowOpen(\"/cgi-bin/Shop_ZutatenWindow.pl?SHOP="+ShopValues['SHOP']+"\", \"InfoWindow\", screen.availWidth/2-235-0, screen.availHeight/2-250, 470, 500, \"scrollbars=yes\"); return false;'><b><u>?</u></b></span>";

	document.getElementById('ZutatenTabelle_Title').innerHTML = Title + (document.PForm.elements[ZField-1].value > 1 ? ' &nbsp;(' + m + '.&nbsp;Gericht)' : '');
	document.getElementById('ZutatenTabelle_Cell').innerHTML = DetailsWork;
      }
    } /* Loop m */

    document.getElementById('D_' + HiddenRow + '_' + i).innerHTML = ShortWork || '&nbsp;';
  } /* Loop i */

  document.PForm.elements[RowName].value = New_ZValue;
  document.getElementById(RowID).style.display = (IsContent ? '' : 'none');
}

function FieldNrBackWhileNot_Z (FieldNr) {
  while (document.PForm.elements[FieldNr].name.substring(document.PForm.elements[FieldNr].name.length-2) != '_Z') { FieldNr--; }
  return FieldNr;
}

function SearchBackPrintZutaten (FieldNr) {
  FieldNr = FieldNrBackWhileNot_Z (FieldNr);
  PrintZutaten(FieldNr);
}

function PushXField (i) {
  document.PForm.elements[i].value += ','+ZSplit[0];
}

function PopXField (i) {
  if (ZSplit.length > 1) { ZSplit.pop();
    document.PForm.elements[i].value = ZSplit.join(',');
  }
}

function MarkRowIfAuswahlVorhanden (FieldNr) {
  Field = document.PForm.elements[FieldNr];
  FieldNr = FieldNrBackWhileNot_Z (FieldNr);

  var RExpStr = /^([a-zA-Z]+)(\d+)_(\d+)/; RExpStr.exec(document.PForm.elements[FieldNr].name);
  var AreaName = RegExp.$1 + RegExp.$3;

  var IsAuswahl;
  var ZField = FieldNr;

  for (var i=0; i < EPerLine[AreaName]; i++) {
    ZField++;
    while (document.PForm.elements[ZField].name.substring(0, 2) == 'X_') { ZField++; }
    if (document.PForm.elements[ZField].value > 0) IsAuswahl = 1;
  }

  var Node = Field.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
  if (IsAuswahl && PAGE == 1)	cs(Node)
  else				cr(Node);
}

function AddSubWork (Flag, FieldNr, Column) {
  ShowDetailsRegister_m=''; HideInfoBox(document.getElementById('ZutatenTabelle'));

  ZSplit = document.PForm.elements[FieldNr+1].value.split(',');
  Field = document.PForm.elements[FieldNr];

  switch (Flag) {
	case  1	:	Field.value = Math.min(99, ++Field.value);
			break;
	case -1	:	Field.value = Math.max(0, --Field.value);
			break;
  }

  if (document.PForm.elements[FieldNr+1].name.substring(0, 2) == 'X_') {
    switch (Flag) {
	case  1	:	PushXField (FieldNr+1);
			AddClickOnColumn = Column;
			break;
	case -1	:	PopXField (FieldNr+1);
			break;
	case 0	:	var LengthValue=ZSplit.length-1;
			for (j=ZSplit.length-1; j<document.PForm.elements[FieldNr].value; j++) {
			  PushXField (FieldNr+1);
			}
			for (j=ZSplit.length-1; j>document.PForm.elements[FieldNr].value; j--) {
			  PopXField (FieldNr+1);
			}
			if (Field.value == 1) { AddClickOnColumn = Column; }
			break;
    }
    SearchBackPrintZutaten (FieldNr);
  }

  BerechneFormular (Field);

  MarkRowIfAuswahlVorhanden (FieldNr);
}

function Add (FieldNr, Column) {
  AddSubWork (1, FieldNr, Column);
}

function Sub (FieldNr, Column) {
  AddSubWork (-1, FieldNr, Column);
}

function Set (FieldNr, Column) {
  AddSubWork (0, FieldNr, Column);
}

function ISL (LinkObject) {
  var RExpStr = /^A_(\d+)_(\d+)_(\d+)_(\d+)_(\d+)/; RExpStr.exec(LinkObject.id);
  var ZField = RegExp.$1;
  var m = RegExp.$3;
  var kza = RegExp.$4;
  var kj = RegExp.$5;
  ZSplit = document.PForm.elements[ZField].value.split(',');

  var RExpStr = /^([a-zA-Z]+)(\d+)_(\d+)/; RExpStr.exec(document.PForm.elements[ZField-1].name);
  var AreaName = RegExp.$1 + RegExp.$3;

  var z=0;
  var AreaCount = 65;
  var NewValue = '';

  for (var za=0; za<ZAreas[AreaName].length; za++) {
    var ZAreachar = String.fromCharCode(AreaCount++);
    var ZAreaCode = AreaName+ZAreachar;

    for (var j=0; j<ZTxt[ZAreaCode].length; j++) {
      if (kza == za) {
	if (ZTyp[ZAreaCode] == 'R') {
	  NewValue += (j == kj ? '1' : '0');
	  z++;
	}
	else {
	  var NewWert = Number(ZSplit[m].charAt(z)) + 1;
	  if (NewWert == 3) { NewWert = 0; }

	  NewValue += (j == kj ? String(NewWert) : ZSplit[m].charAt(z));
	  z++;
	}
      }
      else {
	NewValue += ZSplit[m].charAt(z);
	z++;
      }
    }
  }

  ZSplit[m] = NewValue;

  NewValue = ZSplit.join(',');
  document.PForm.elements[ZField].value = NewValue;

  SearchBackPrintZutaten (ZField-2);
  BerechneFormular (document.PForm.elements[ZField-1]);
}

