// JavaScript Document
  var 
    LomoWallVersion="LomoWall by Marc II (markus.petz@kfunigraz.ac.at) v2.1 20010823";
    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!";

    //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=LomoWallVersion;

    if ((CountImgAtOnce*MaxCountSingleImg)<(TableWidth*TableHeight)) MaxCountSingleImg=Math.ceil((TableWidth*TableHeight)/CountImgAtOnce);
    if (Math.ceil(CountBeforeDouble/CountImgAtOnce)*CountImgAtOnce > CountTotalImg) CountBeforeDouble=Math.floor(CountTotalImg/CountImgAtOnce)*CountImgAtOnce;

    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;
		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*/
  
/* random lomo ganked from yimay */
function randLomo(){
	var number, string;
	number = Math.floor(Math.random()*(img.length));
	string = "<img height='330' width='220' src='images/"+ img[number] + ".jpg' name='BigLomo'>";
	document.write (string);
}