// wuerfelsort: Reihen 123456123456, erlaubt: 1. vorne frei, 2. gleich Stack, +1 oder -1
// 3 oben einsortiert: Bonus 10,20,50 bei verschiedenen Farben, 2, 3 gleiche Farben
// 1.Würfel: 5, 2. 10,15,20 u.s.w. bis Nachschub geholt werden muss.
// bestimmter Vorrat für Nachschub, wenn weg, gameover
// Rundenbonus: Restvorrat*10
// -----------------------------------------------------------------------------------------------------------------
// 01.01.2006: Grafiken, 4 Levelmuster, Klick auf Würfel mit Validierung, Auswertung, Kontibonus, Triplet mit Bonus
//             Vorrat-Krams, levelup, gameover,erweitert auf 9 Augen

spritesize=get_winparam('size');
if (spritesize=='') 
{ if (screen.availWidth<800) spritesize=32; else if (screen.availWidth<1025) spritesize=48; else spritesize=72; }



xoff=spritesize/2; yoff=16; dx=spritesize; spriteh=4*spritesize/3; dy=spritesize; xmax=13; ymax=7; zmax=xmax*ymax;
numaugen=9; numfarben=6; numvorrat=24;

var i,j,k;

// Würfelzubehör - DOM-Objekte: -------------------------------------------------------------------------------

leer=new Image(); leer.src='leer.gif';

hwuerfel=new Array();
for (i=0; i<=numaugen; i++) { hwuerfel[i]=new Image(); hwuerfel[i].src='anz_'+i+'.gif'; }

ima=new Array();
for (i=0; i<numfarben; i++) 
{ ima[i]=new Array(); 
  for (j=0; j<=numaugen; j++) { ima[i][j]=new Image(); ima[i][j].src='w_'+i+''+j+'.gif'; }
}

numq=zmax;
var qbus=new Array();
for (i=0; i<=numq; i++) qbus[i]=new sprite(i);

function mach_layers() 
{ var t='';
  for (i=0; i<=numq; i++) with (qbus[i]) 
  { t=t+'<div id="l_'+i+'" style="position:absolute; width:'+spritesize+'px; height:'+spriteh+'px; ';
    t=t+'top:'+y+'px; left:'+x+'px; z-index:'+z+'">';
    t=t+'<a href="javascript:klick('+i+')">';
    t=t+'<img src="'+ima[farbe][augen].src+'" alt="" border=0; name="i'+i;
    t=t+'" width='+spritesize+' height='+spriteh+'>';
    t=t+'</a></div>';
  }
  return t;
}

// Objekt wuerfel: ------------------------------------------------------------------------------------------

function sprite(id)
{ this.id=id;
  this.farbe=id%numfarben;
  this.augen=0;
  this.x=0;
  this.y=0;
  this.z=id+1;
  this.lay='l_'+id;
  this.bild='i'+id;
  this.aktiv=true;
// aus Performancegründen die ganze Kacke getrennt:
  this.set_farbe=set_farbe;
  this.set_augen=set_augen;
  this.update_bild=update_bild; // private
  this.set_koo=set_koo;
  this.set_x=set_x;
  this.set_y=set_y;
  this.set_z=set_z;
  this.zeigen=zeigen;
  this.weg_damit=weg_damit;
}

function set_x(nr)     { this.x=nr; document.getElementById(this.lay).style.left=this.x; }
function set_y(nr)     { this.y=nr; document.getElementById(this.lay).style.top=this.y; }
function set_z(nr)     { this.z=nr; document.getElementById(this.lay).style.zIndex=this.z; }
function zeigen()      { this.aktiv=true; document.getElementById(this.lay).style.visibility='visible'; }
function weg_damit()   { document.getElementById(this.lay).style.visibility='hidden'; this.aktiv=false; }
function set_farbe(nr) { this.farbe=nr; this.update_bild(); }
function set_augen(nr) { this.augen=nr; this.update_bild(); }
function update_bild() { document.images[this.bild].src=ima[this.farbe][this.augen].src; } // private
function set_koo(x,y,z) 
{ this.x=x; this.y=y,this.z=z;
  document.getElementById(this.lay).style.left=this.x;
  document.getElementById(this.lay).style.top=this.y;
  document.getElementById(this.lay).style.zIndex=this.z;
}
// ====================================================================================================================
// noch mehr DOM:

// === Query String auswerten:
function get_winparam(my_key)
{ var i,parms,paare,wert='';
  if (location.search)
  { parms=location.search.split('\?'); parms=parms[1].split('\&');
    for (i=0; i<parms.length; i++) { paare=parms[i].split('\='); if (paare[0]==my_key) wert=paare[1]; }
  }
  return wert;
}

function mach_anzeige()
{ var i,t='<div id="anzeige" style="position:absolute; top:'+yoff+'px; left:0px; width:'+(xmax+1)*dx;
  t=t+'px; height:'+(spriteh+16)+'px; z-index:0; background-color:#000; background-image:url(bgr2.jpg)">';
  t=t+'<table align=center><tr>';
  for (i=0; i<3; i++) 
  { t=t+'<td style="padding:8px">';
    t=t+'<img src="leer.gif" width='+spritesize+' height='+spritesize+' alt=""name="a'+i+'">';
    t=t+'<\/td>'
  }
  t=t+'<\/tr><\/table><\/div>';
  return t;
}

function mach_vorrat()
{ var t='<div id="vorrat" style="position:absolute; top:'+((ymax+3)*dy+yoff)+'px; ';
  t=t+'left:0px; width:'+(xmax+1)*dx+'px; height:'+(spriteh+16)+'px; z-index:0; background-color:#000; ';
  t=t+'background-image:url(bgr2.jpg)">';
  t=t+'<table align=center><tr>';
  t=t+'<td style="padding:4px"><img src="w_01.gif" width='+spritesize;
  t=t+' height='+spriteh+' alt=""name="v0"><\/td>';
  t=t+'<td>nächster Würfel: <\/td>';
  t=t+'<td><img src="anz_1.gif" width='+3*spritesize/4+' height='+3*spritesize/4+' alt="" name="z0">';
  t=t+'<img src="anz_1.gif" width='+3*spritesize/4+' height='+3*spritesize/4+' alt="" name="z1">';
  t=t+'<img src="anz_1.gif" width='+3*spritesize/4+' height='+3*spritesize/4+' alt="" name="z2">';
  t=t+'<\/td>';
  t=t+'<td><img src="leer.gif" width=64 height=8 alt=""><\/td>';
  t=t+'<td>Vorrat: <\/td><td id="htext">21<\/td>';
  t=t+'<td style="padding:4px"><a href="javascript:klickv()"><img src="vorrat.gif" width='+spriteh;
  t=t+' height='+spriteh+' alt=""name="v1"><\/a><\/td>';
  t=t+'<\/tr><\/table><\/div>';
  return t;
}

function mach_seite()
{ var t='<div id="steuerung" style="position:absolute; top:'+yoff+'px; ';
  t=t+'left:'+((xmax+1)*dx+xoff)+'px; z-index:99"> ';
  return t;
}

// ========================================================================================================
var level=0,punkte=0,punkte0,lastw=0,bonus=0,vorrat=0;
var w=new Array(0,0,0);
var slots=new Array(0,0,0,0);

function hilfe()          { var win2=window.open('hilfe.htm','popup','width=592,height=376,scrollbars=yes'); }
function messi(t)         { document.getElementById('messi').firstChild.nodeValue=t; }
function updat_vorrat(nr) { document.getElementById('htext').firstChild.nodeValue=nr; }
function updat_punkte(nr) { document.form1.punkte.value=nr; }
function updat_level(nr)  { document.getElementById('level').firstChild.nodeValue=levelname[nr]; }
function updat_lastwue(nr) { with (qbus[nr]) { document.images['v0'].src=ima[farbe][augen].src; updat_hilfsw(augen); } }

function updat_hilfsw(nr)
{ w=Array(0,nr,0);
  if (nr>0)
  { w[0]=nr-1; if (w[0]<1) w[0]=numaugen;
    w[2]=nr+1; if (w[2]>numaugen) w[2]=1;
  }
  for (var i=0; i<3; i++) document.images['z'+i].src=hwuerfel[w[i]].src;
}

function updat_slots()
{ for (var i=1; i<=3; i++) if (i<=slots[0]) document.images['a'+(i-1)].src=ima[qbus[slots[i]].farbe][0].src;
  else document.images['a'+(i-1)].src=leer.src;
}

// ==============================================================================================================

function neu(flag)
{ if (flag) { level=0; punkte=0; }
  punkte0=punkte;
  bonus=0;
  slots[0]=0;
  mach_level(level);
  lastw=zmax; updat_lastwue(lastw);
  updat_punkte(punkte); updat_level(level); updat_slots();
  messi('Happy Klicking! ;)');
}

// =======================================================================================================

function klick(nr)
{ var i,j,k,ok;
  with (qbus[nr]) ok=((augen==w[0]) || (augen==w[1]) || (augen==w[2]));
  if (ok) ok=check_frei(nr);
  if (ok)
  { lastw=nr; updat_lastwue(lastw);
    bonus=bonus+5; punkte=punkte+bonus; updat_punkte(punkte);
    qbus[nr].weg_damit();
    slots[0]++; slots[slots[0]]=nr; updat_slots();
    if (slots[0]>=3) { slots_auswerten(); slots[0]=0; }
    if (levelende()) levelup();
  }
}

function check_frei(nr)
{ var ix=nr%xmax,iy=Math.floor(nr/xmax),k=iy%2,k1,k2,belegt=false;
  k1=nr+xmax+k; k2=k1-1;
  if (iy<(ymax-1)) { belegt=(qbus[k1].aktiv); if (!belegt) if ((ix>0) && (ix<(xmax-1))) belegt=(qbus[k2].aktiv); }
  return (!belegt);
}

function slots_auswerten()
{ var h=new Array();
  var i,bon,max=0;
  for (i=0; i<numfarben; i++) h[i]=0;
  for (i=1; i<=3; i++) h[qbus[slots[i]].farbe]++;
  for (i=0; i<numfarben; i++) if (h[i]>max) max=h[i];
  switch (max)
  { case 2: bon=20; break;
    case 3: bon=50; break;
    default: bon=10;
  }
  punkte=punkte+bon;
  updat_punkte(punkte);
  messi('Bonus: '+bon);
  setTimeout('cleanup()',800);
}

function cleanup() { updat_slots(); messi(' '); }

function klickv()
{ if (vorrat>0)
  { lastw=zmax;
    with(qbus[lastw])
    { set_farbe(Math.floor(numfarben*Math.random())%numfarben);
      set_augen(Math.floor(numaugen*Math.random())%numaugen+1);
    }
    vorrat--;
    updat_vorrat(vorrat);
    updat_lastwue(lastw);
    bonus=0;
  }
  else gameover();
}

function levelende()
{ var i,is_ende=true;
  for (i=0; i<zmax; i++) if (is_ende) if (qbus[i].aktiv) is_ende=false;
  return is_ende;
}

function levelup()
{ var bon=vorrat*10;
  messi(bon+' Punkte Vorratsbonus!');
  punkte=punkte+bon;
  updat_punkte(punkte);
  level++;
  setTimeout('neu(false)',1000);
}

function gameover() { messi('G a m e o v e r !'); eintrag('form1'); }


function laden() { punkte=0; level=0; get_cookie('wuerfelberg');  neu(false); }

function speichern() 
{ set_cookie('wuerfelberg',level,punkte0);
  if (document.cookie) alert("Spielstand gespeichert"); 
  else alert('konnte Spielstand nicht speichern!\nCookies zugelassen?');
}

