if  ( (document.getElementById) && window.addEventListener || window.attachEvent ) 
{

// Конфигурация скрипта
	var num = 30;   				// Количество снежинок
	var timer = 40; 				// Скорость падения (точнее, интревал таймера)
	var enableinNS6 = 1; 			// Включить поддержку скрипта в браузерах NS/Mozilla (1=да, 0=нет)
	var	snowIsPoints = 0;			// 1 - в виде точек (хлопьев); 0 - в виде растров
	var snowImage = "snow.gif"		// изображение снежинки !!! При изменении картинки задать правильные новые размеры!!! (строка 113)

// Инициализация массивов данных
	var y = [];
	var x = [];
	var fall = [];
	var theFlakes = [];
	var sfs = [];
	var step = [];
	var currStep = [];
	var h,w,r;
	var idx = document.getElementsByTagName('div').length;



	function winsize() 						// Функция, определяющая максимальные размеры экрана, для того, что бы снежинки не вылетали за его пределы
	{
		var oh,sy,ow,sx,rh,rw;
		if ( typeof window.innerWidth == "number" ) 
		{
			if ( document.documentElement && document.defaultView && typeof document.defaultView.scrollMaxY == "number" ) 
			{
 				oh = document.documentElement.offsetHeight;
 				sy = document.defaultView.scrollMaxY;
 				ow = document.documentElement.offsetWidth;
 				sx = document.defaultView.scrollMaxX;
 				rh = oh-sy;
  				rw = ow-sx;
			}
 			else 
 			{
  				rh = r.innerHeight;
  				rw = r.innerWidth;
 			}
			h = rh - 20;  
			w = rw - 20; 
		} 
		else
		{ 
			h = r.clientHeight - 20; 
			w = r.clientWidth - 20; 
		}
	}


	function scrl(yx)
	{
		var y,x;
		if ( typeof window.pageYOffset == "number" ) 
		{
			y = r.pageYOffset;
			x = r.pageXOffset; 
		}
		else 
		{ 
			y = r.scrollTop;
			x = r.scrollLeft;
		}
		return (yx == 0)?y:x;
	}


	function snow() 							// Самая главная функция. Определяет координаты перемещения снежинок на экране и изменяет их.
	{
		var dy,dx;
		for ( i=0; i<num; i++ ) 
		{
			dy = fall[i];
 			dx = fall[i] * Math.cos(currStep[i]);
 			y[i]+=dy;
			x[i]+=dx;
 			if ( x[i] >= w || y[i] >= h )
 			{
				y[i] = -10;
  				x[i] = Math.round( Math.random() * w );
  				fall[i] = ( sfs[i] == 1 )?Math.round( 2 + Math.random() * 2 ): Math.round( 3 + Math.random() * 2 ); 
  				step[i] = ( sfs[i] == 1 )?0.05 + Math.random() * 0.1 : 0.05 + Math.random() * 0.05 ;
			}
			theFlakes[i].top = y[i] + scrl(0) + "px";
			theFlakes[i].left = x[i] + scrl(1) + "px";
			currStep[i]+=step[i];
		}
		setTimeout( snow, timer );
	}


	function init() 							// Инициализация снежинок. Сохраняет данные снежинок (стиль) в массив theFlakes. 
	{
		winsize();
		for (i = 0; i < num; i++) 
		{
			theFlakes[i] = document.getElementById("flake"+(idx+i)).style;
 			y[i] = Math.round( Math.random()*h );
 			x[i] = Math.round( Math.random()*w ); 
		}
		snow();
	}


	for ( i=0; i<num; i++ )					// Формирование и вывод снежинок. Каждая снежинка отображается в виде div размером один-два пикселя.
	{
		sfs[i] = Math.round( 2 + Math.random() * 2 );		// размер хлопьев
		
		if ( snowIsPoints )		document.write('<div id="flake'+(idx+i)+'" style="position:absolute; top:0px; left:0px; width:'+sfs[i]+'px; height:'+sfs[i]+'px; background-color:#eeeeff; font-size:'+sfs[i]+'px"></div>');
		else					document.write('<div id="flake'+(idx+i)+'" style="position:absolute; top:0px; left:0px; width:13px; height:13px"><img src="snow.gif" border="0"></div>');
			
		currStep[i] = 0;
		fall[i] = (sfs[i] == 1)?Math.round(2 + Math.random() * 2): Math.round(3 + Math.random() * 2);
		step[i] = (sfs[i] == 1)?0.05 + Math.random() * 0.1 : 0.05 + Math.random() * 0.05; 
	}
		
	if ( typeof window.innerWidth == "number" ) r = window;
	else 
 	{ 
  		if (document.documentElement && typeof document.documentElement.clientWidth == "number" && document.documentElement.clientWidth != 0) r = document.documentElement;
		else 
   		{ 
    		if (document.body && typeof document.body.clientWidth == "number")  r = document.body;
  		}
 	}


	if ( window.addEventListener ) 												// Перехватывает события resize и load для Mozilla
	{
		window.addEventListener( "resize", winsize, false );
		window.addEventListener( "load", init, false );
	} 
	else
	{																			// Перехватывает события resize и load для Internet Explorer
		if ( window.attachEvent ) 
		{
			window.attachEvent( "onresize", winsize );
 			window.attachEvent( "onload", init );
		}
	}
}

