  var snowsrc="http://www.steinmeister.de/bilder/snow.gif"
  var no = 20;
  var ns4up = (document.layers) ? 1 : 0; 
  var ie4up = (document.all) ? 1 : 0;
  var ns6up = (document.getElementById&&!document.all) ? 1 : 0;
  var dx, xp, yp;
  var am, stx, sty;  
  var i, n, newx, doc_width = 800, doc_height = 600, offsetX, picsize = 8, factor = 25, stickanywhere = 0.9985;
  
  function get_width_height() {
    if (ns4up||ns6up) {
      doc_width = self.innerWidth;
      doc_height = self.innerHeight;
    } else if (ie4up) {
      doc_width = document.body.clientWidth;
      doc_height = document.body.clientHeight;
    }
    offsetX = Math.max((doc_width-760)/2,0);	
  }

  get_width_height();

  dx = new Array();
  xp = new Array();
  yp = new Array();
  am = new Array();
  stx = new Array();
  sty = new Array();
  
  function fixIE(x,y) {
    n = i+no*Math.round(1+Math.random()*(factor-2));  
    get_width_height();	
    yp[n] = Math.min(y,doc_height+document.body.scrollTop-picsize-1);
    xp[n] = Math.min(x,doc_width-picsize-20);
  }
  
  function fixNS(x,y) {
    n = i+no*Math.round(1+Math.random()*(factor-2));  
    get_width_height();	
    yp[n] = Math.min(y,doc_height+window.pageYOffset-picsize-1);
    xp[n] = Math.min(x,doc_width-picsize-20);
  }  
  
  function calcIE() {
    yp[i] = Math.min(yp[i]+sty[i],doc_height+document.body.scrollTop-picsize-1);
    dx[i] += stx[i];
    newx = Math.min(xp[i]+am[i]*Math.sin(dx[i]),doc_width-picsize-20);
  }  
  
  function calcNS() {
    yp[i] = Math.min(yp[i]+sty[i],doc_height+window.pageYOffset-picsize-1);
    dx[i] += stx[i];
    newx = Math.min(xp[i]+am[i]*Math.sin(dx[i]),doc_width-picsize-20);
  }  
  
  function newXY() {
    xp[i] = Math.random()*(doc_width-48)+20;  
    yp[i] = Math.random()*Math.min(50,doc_height-12);
  }
  
  function rnd() {
    dx[i] = 0;                             
    xp[i] = Math.random()*Math.max(doc_width-48,1)+20;
    yp[i] = Math.random()*Math.max(doc_height-20,1);
    am[i] = Math.random()*18+6;
    stx[i] = 0.2+Math.random()/5;      
    sty[i] = 5+Math.random()*4;       
  }

  function newFlake() {
    if (ns4up) {                      
      if (i < no) {
        rnd();
        document.write("<layer name=\"dot"+i+"\" left=\"15\" top=\"15\" visibility=\"show\">");
      } else {
        document.write("<layer name=\"dot"+i+"\" left=\"15\" top=\"15\" visibility=\"hide\">");
      }
      document.write("<img src='"+snowsrc+"' border=\"0\"></layer>");	  
    } else if (ie4up||ns6up) {
      if (i < no) {
        rnd();
        document.write("<div id=\"dot"+i+"\" style=\"POSITION: absolute; Z-INDEX: "+i+"; VISIBILITY: visible; TOP: 15px; LEFT: 15px;\">");
      } else {
        document.write("<div id=\"dot"+i+"\" style=\"POSITION: absolute; Z-INDEX: "+i+"; VISIBILITY: hidden; TOP: 15px; LEFT: 15px;\">");
      }
      document.write("<img src='"+snowsrc+"' border=\"0\"></div>");	  
    } 
  } 
  
  function snowNS() {  
    for (i = 0; i < no; ++ i) {  
      calcNS();
      document.layers["dot"+i].top = yp[i];
      document.layers["dot"+i].left = newx;
      if ((yp[i]>=doc_height+window.pageYOffset-picsize-20*Math.random()-1) || (Math.random()>stickanywhere)) {
        fixNS(newx,yp[i]);
        document.layers["dot"+n].top = yp[n];
        document.layers["dot"+n].left = xp[n];
        document.layers["dot"+n].visibility = 'show';
        newXY();
	  }	  
    }
    setTimeout("snowNS()", 2);
  }

  function snowIE() {  
    for (i = 0; i < no; ++ i) {  
      calcIE();
      document.all["dot"+i].style.pixelTop = yp[i];
      document.all["dot"+i].style.pixelLeft = newx;
      if ((yp[i]>=doc_height+document.body.scrollTop-picsize-20*Math.random()-1) || (Math.random()>stickanywhere)) {
        fixIE(newx,yp[i]);
        document.all["dot"+n].style.pixelTop = yp[n];
        document.all["dot"+n].style.pixelLeft = xp[n];		
        document.all["dot"+n].style.visibility = 'visible';
      newXY();
	  }	  
    }  	
    setTimeout("snowIE()", 2);
  }
  
  function snowNS6() {  
    for (i = 0; i < no; ++ i) {  
      calcNS();
      document.getElementById("dot"+i).style.top = yp[i];
      document.getElementById("dot"+i).style.left = newx;
      if ((yp[i]>=doc_height+window.pageYOffset-picsize-20*Math.random()-1) || (Math.random()>stickanywhere)) {
        fixNS(newx,yp[i]);
        document.getElementById("dot"+n).style.top = yp[n];
        document.getElementById("dot"+n).style.left = xp[n];
        document.getElementById("dot"+n).style.visibility = 'visible';
        newXY();
	  }
    }  	
    setTimeout("snowNS6()", 40);
  }  

  function init() {
    for (i = 0; i < no*factor; ++ i) {  
      newFlake();
    }
  }
  
  function clear() {
    for (i = no; i < no*factor; ++ i) {  
      if (ns4up) {
	    document.layers["dot"+i].visibility = 'hide';
	  } else if (ie4up) {
	    document.all["dot"+i].style.visibility = 'hidden';
	  } else if (ns6up) {
	    document.getElementById("dot"+i).style.visibility = 'hidden';
	  }
    }
  }  


init();
if (ns4up) { snowNS(); }
if (ie4up) { snowIE(); }
if (ns6up) { snowNS6(); }
