

var 
    LomoWallVersion="LomoWall by Marc II (markus.petz@kfunigraz.ac.at) v2.1 20000914";
    LomoWallText="Feel free to use and share this little script whenever you want (please contact me if you do so / want technical support / have suggestions for modifications). LOMO the world!";
    img = new Array("1","5","6","7","8","9","10","12","13","14","15","17","18","19","20","22","23","24","25","26","28","29","30","31","33","35","37","39","40","41","42","43","44","46","48","49","50","51","52","53","55","56","58","59","60","61","62","63","65","66","67","68","69","70","72","73","74","76","77","78","80","81","82","84","86","88","89","90","91","92","93","94","96","97","98","99","101","102","103","104","105","106","109","110","112","113","114","116","118","120","121","123","124","125","128","129","131","134","136","137","138","139","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194");
    ImgFolder = "lomos/";
    ImgExtension = ".jpg";

    PopUpLargeImg = "on"
    LargeImgSuffix = "b";
    PopUpWinWidth = 282;
    PopUpWinHeight = 192;

    LomoWallReload = "on";
    ReloadAfterSeconds = 10;
    PreLoad = "on";
    UseStyles = new Array("diffuse","lines1","lines2","spots","paths1","paths2"); /* valid values: "diffuse","lines1","lines2","spots","paths1","paths2" */
    LinesRepeat = 2;
    TableHeight = 6;
    TableWidth = 6;
    CountImgAtOnce = 5;
    MaxCountSingleImg = 8;
    CountBeforeDouble = 12;

    //DO NOT CHANGE the following values:
    CountTableImg = TableHeight*TableWidth;
    CountTotalImg = img.length;
    ImgsToDisplay = new Array(CountImgAtOnce);
    CountImgDisplayed = new Array(CountImgAtOnce);
    AlreadyChosen = new Array(CountTotalImg);
    DiagStart1x = new Array(TableHeight+TableWidth-1);
    DiagStart1y = new Array(TableHeight+TableWidth-1);
    DiagStart2x = new Array(TableHeight+TableWidth-1);
    DiagStart2y = new Array(TableHeight+TableWidth-1);
    CellsFilled = new Array(CountTableImg);
    CountLoaded = CountImgAtOnce;
    TempImg = new Array(CountImgAtOnce);
    TableStartImg = 0;
    CountReloads = 0;
    CountRetries = 0;
    BrowserName = navigator.appName;


  function SetDiffuse() {
    for (i1=0; i1<CountImgAtOnce; ++i1)
      CountImgDisplayed[i1]=0;

    for (i1=0; i1<CountTableImg; ++i1) {
      NextImg=Math.floor(Math.random()*CountImgAtOnce);
      while (CountImgDisplayed[NextImg] >= MaxCountSingleImg) {   
        NextImg=Math.floor(Math.random()*CountImgAtOnce);
      }
      CountImgDisplayed[NextImg]++;
      document.images[TableStartImg+i1].src=ImgFolder + img[ImgsToDisplay[NextImg]] + ImgExtension;
    }
  } /*SetDiffuse*/

  function SetDiagonal1() {
    i3=0;
    NextImg=0;
    for (i1=0; i1<DiagStart1x.length; ++i1) {
      x=DiagStart1x[i1];
      y=DiagStart1y[i1];
      while (x<TableWidth && y<TableHeight) {
        i2=TableStartImg+x+(y*TableWidth);
        document.images[i2].src=ImgFolder + img[ImgsToDisplay[NextImg]] + ImgExtension;
        x++;
        y++;
      }

      i3++;
      if (i3==LinesRepeat) {
        NextImg++;
        i3=0;
      }
      if (NextImg>=CountImgAtOnce) NextImg=0;
    }
  } /*setDiagonal1*/

  function SetDiagonal2() {
    i3=0;
    NextImg=0;
    for (i1=0; i1<DiagStart2x.length; ++i1) {
      x=DiagStart2x[i1];
      y=DiagStart2y[i1];
      while (x>=0 && y<TableHeight) {
        i2=TableStartImg+x+(y*TableWidth);
        document.images[i2].src=ImgFolder + img[ImgsToDisplay[NextImg]] + ImgExtension;
        x--;
        y++;
      }

      i3++;
      if (i3==LinesRepeat) {
        NextImg++;
        i3=0;
      }
      if (NextImg>=CountImgAtOnce) NextImg=0;
    }
  } /*setDiagonal2*/

  function SetSpot() {
    for (i1=0; i1<CountImgAtOnce; ++i1)
      CountImgDisplayed[i1]=0;
    for (i1=0; i1<CountTableImg; ++i1)
      CellsFilled[i1]=0;
    i2=0;
    i3=0;

    while (i3<CountTableImg) {
      x0=Math.floor(Math.random()*TableWidth);
      y0=Math.floor(Math.random()*TableHeight);
      for (i1=CountImgDisplayed[i2]; i1<MaxCountSingleImg; ++i1) {
        r=Math.random()*2;
        p=Math.random()*2*Math.PI;
        x=x0+Math.floor(Math.cos(p)*r);
        y=y0+Math.floor(Math.sin(p)*r);
        if (x>=0 && x<TableWidth && y>=0 && y<TableHeight && CellsFilled[x+y*TableWidth]==0) {
          document.images[TableStartImg+x+y*TableWidth].src=ImgFolder + img[ImgsToDisplay[i2]] + ImgExtension;
          CellsFilled[x+y*TableWidth]=1;
          CountImgDisplayed[i2]++;
          i3++;
        }
      }
      i2++;
      if (i2==CountImgAtOnce) i2=0;
    }
  } /*SetSpot*/

  function SetPath1() {
    for (i1=0; i1<CountImgAtOnce; ++i1)
      CountImgDisplayed[i1]=0;
    for (i1=0; i1<CountTableImg; ++i1)
      CellsFilled[i1]=0;
    i2=0;
    i3=0;

    while (i3<CountTableImg) {
      x=Math.floor(Math.random()*TableWidth);
      y=Math.floor(Math.random()*TableHeight);
      for (i1=0; i1<MaxCountSingleImg; ++i1) {
        x1=x;
        y1=y;
        if (Math.random()<0.5) {
          if (Math.random()<0.5) x++;
          else x--;
        }
        else {
          if (Math.random()<0.5) y++;
          else y--;
        }
        if (x>=0 && x<TableWidth && y>=0 && y<TableHeight && CellsFilled[x+y*TableWidth]==0) {
          document.images[TableStartImg+x+y*TableWidth].src=ImgFolder + img[ImgsToDisplay[i2]] + ImgExtension;
          CellsFilled[x+y*TableWidth]=1;
          CountImgDisplayed[i2]++;
          i3++;
        }
        else {
          x=x1;
          y=y1;
        }
      }
      i2++;
      if (i2==CountImgAtOnce) i2=0;
    }
  } /*SetPath1*/

  function SetPath2() {
    for (i1=0; i1<CountImgAtOnce; ++i1)
      CountImgDisplayed[i1]=0;
    for (i1=0; i1<CountTableImg; ++i1)
      CellsFilled[i1]=0;
    i2=0;
    i3=0;
    i4=0; 
    dx=1;
    dy=0;
    dz=1;

    while (i3<CountTableImg) {
      x=Math.floor(Math.random()*TableWidth);
      y=Math.floor(Math.random()*TableHeight);
      if (Math.random()<0.5) dz=-1;
      else dz=1;
      for (i1=CountImgDisplayed[i2]; i1<MaxCountSingleImg; ++i1) {
        if (Math.random()<.5) {
          if (Math.random()<0.5) {
            dx=1;
            dy=0;
          } 
          else {
            dx=0;
            dy=1;
          }
        }
        x=x+dz*dx;
        y=y+dz*dy;

        if (x>=0 && x<TableWidth && y>=0 && y<TableHeight && CellsFilled[x+y*TableWidth]==0) {
          document.images[TableStartImg+x+y*TableWidth].src=ImgFolder + img[ImgsToDisplay[i2]] + ImgExtension;
          CellsFilled[x+y*TableWidth]=1;
          CountImgDisplayed[i2]++;
          i3++;      
          i4=0;
        }
        else {
          i4++;
          if (i4<4) i1--;
          x=x-dz*dx;
          y=y-dz*dx;
        }
      }
      i2++;
      if (i2==CountImgAtOnce) i2=0;
    }
  } /*SetPath2*/


  function ChooseNextImages() {
    for (i1=0; i1<CountImgAtOnce; ++i1) {
      ImgsToDisplay[i1]=Math.floor(Math.random()*CountTotalImg);
      while (AlreadyChosen[ImgsToDisplay[i1]]>0) {
        ImgsToDisplay[i1]=Math.floor(Math.random()*CountTotalImg);
      }
      AlreadyChosen[ImgsToDisplay[i1]]=CountBeforeDouble;
      if (PreLoad=="on") TempImg[i1].src=ImgFolder + img[ImgsToDisplay[i1]] + ImgExtension;
    }
    for (i1=0; i1<CountTotalImg; ++i1) AlreadyChosen[i1]-=CountImgAtOnce;
  } /*ChooseNextImages*/


  function RandomizeImages(SetTimer) {
    if (PreLoad=="on" && SetTimer>0 && CountReloads>0 && BrowserName=="Microsoft Internet Explorer" && navigator.appVersion.substring(0,1)>="4") {
      CountLoaded=0;
      for (i1=0; i1<CountImgAtOnce; ++i1) {
        if (TempImg[i1].complete==true) CountLoaded++;
      }
    }
    if (CountRetries>15 && CountLoaded==0) CountLoaded=CountImgAtOnce;

    if (CountLoaded==CountImgAtOnce) {
      CountRetries=0;
      ++CountReloads;
      i1=Math.floor(Math.random()*UseStyles.length);
      if (UseStyles[i1]=="diffuse") SetDiffuse();
      if (UseStyles[i1]=="lines1") SetDiagonal1();
      if (UseStyles[i1]=="lines2") SetDiagonal2();
      if (UseStyles[i1]=="spots") SetSpot();
      if (UseStyles[i1]=="paths1") SetPath1();
      if (UseStyles[i1]=="paths2") SetPath2();
      ChooseNextImages();
      if (LomoWallReload=="on" && SetTimer>0)
        ReloadTimer1=window.setTimeout("RandomizeImages(1)",ReloadAfterSeconds*1000);
    }
    else {
      ++CountRetries;
      ReloadTimer1=window.setTimeout("RandomizeImages(1)",2000);
    }
  } /*RandomizeImages*/


  function InitLomoWall() {
    while (document.images[TableStartImg].name!="tablestart") TableStartImg++;
    window.defaultStatus="amo lomo";

    if ((CountImgAtOnce*MaxCountSingleImg)<(TableWidth*TableHeight)) MaxCountSingleImg=math.ceil((TableWidth*TableHeight)/CountImgAtOnce);
    if (CountBeforeDouble>=CountTotalImg-CountImgAtOnce) CountBeforeDouble=CountTotalImg-CountImgAtOnce-1;

    for (i1=0; i1<CountTotalImg; ++i1)
      AlreadyChosen[i1]=0;

    for (i1=0; i1<TableHeight; ++i1) {
      DiagStart1x[i1]=0;
      DiagStart1y[i1]=TableHeight-i1-1;
    }
    for (i1=1; i1<TableWidth; ++i1) {
      DiagStart1x[i1+TableHeight-1]=i1;
      DiagStart1y[i1+TableHeight-1]=0;
    }

    for (i1=0; i1<TableWidth; ++i1) {
      DiagStart2x[i1]=i1;
      DiagStart2y[i1]=0;
    }
    for (i1=1; i1<TableHeight; ++i1) {
      DiagStart2x[i1+TableWidth-1]=TableWidth-1;
      DiagStart2y[i1+TableWidth-1]=i1;
    }

    for (i1=0; i1<CountImgAtOnce; ++i1) {
      TempImg[i1]=new Image()
    }

    ChooseNextImages(); 
    RandomizeImages(1);
  } /*InitLomoWall*/


  function ClickOnTableImg(num) {
    if (PopUpLargeImg=="on") {
      i1=document.images[num+TableStartImg-1].src.lastIndexOf(ImgExtension);
      LImgSrc=document.images[num+TableStartImg-1].src.substring(0,i1)+LargeImgSuffix+ImgExtension;
		document.BigLomo.src=LImgSrc;
    }
    else RandomizeImages(0);
  } /*ClickOnTableImg*/


  function CreateTable(imgw,imgh) {
    i1=1;
    for (row=1; row<=TableHeight; ++row) {
      document.write("<tr>");
      for (col=1; col<=TableWidth; ++col) {
        txt="<td><a href='javascript:ClickOnTableImg("+i1+")'><img width="+imgw+" height="+imgh+" border=0></a></td>";
        if (i1==1) txt="<td><a href='javascript:ClickOnTableImg("+i1+")'><img width="+imgw+" height="+imgh+" border=0 name='tablestart'></a></td>";
        document.write(txt);
        ++i1;
      }
      document.write("</tr>");
    }
  } /*CreateTable*/

