/*
gbSnow v1.0 mit MooTools v1.2

von gb media (www.gb-media.biz) 2009
Vielen Dank an die MooTools Entwickler
*/

var gbSnow = new Class({
	Implements: Options,
	
	options: {
		noObj			: 10,
		objSpeed		: 0.5,
		imageAr			: ['img/stern1.png', 'img/stern2.png', 'img/stern3.png', 'img/stern4.png', 'img/stern5.png']
	},
	
	initialize: function(options){
		this.setOptions(options);
		this.options.winHeight = window.getScrollSize().y;
		this.options.winWidth = window.getScrollSize().x;
		this.options.outH = 0;
		this.options.outV = 0;
		if (this.options.imageAr.length > 0){
			this.preloadFile();
		}
	},
	
	genEl: function (){
		for (var i = 0; i < this.options.noObj; i++) {
			newEl = new Element('div', {
				'id': 'gbSnow'+i,
				'class': 'gbSnow',
				'styles': {
					'position': 'absolute',
					'z-index': i
				}
			}).injectInside(document.body);
			newEl.setting =  this.ranSetting();
			this.setElStyle(newEl);
			this.moveEl(newEl);
		}
	},
	
	setElStyle: function (el){
		el.setStyles({
			'top': el.setting.posY+'px',
			'left': el.setting.posX+'px',
			'opacity': el.setting.opaC
		});
		if($('img_'+el.id)){
			$('img_'+el.id).dispose();
		}
		newImg = new Element('img', {
			'src': this.ranImg(),
			'alt': 'gbSnow',
			'id' : 'img_'+el.id,
			'class': 'img_gbSnow',
		}).injectInside(el);
	},
	
	ranSetting: function (posY){
		if (typeof posY == 'undefined'){
			posY = Math.random()*(this.options.winHeight-this.options.outV)
		}
		setting = {
			posY: posY,
			posX: Math.random()*(this.options.winWidth-this.options.outH),
			spdX: 0.05+Math.random()/10,
			spdY: this.options.objSpeed+Math.random(),
			dimX: 0,
			ampX: Math.random()*20,
			opaC: Math.random()
		}
		return setting
	},
	
	ranImg: function (){
		imgAr = this.options.imageAr;
		var tmp, rand;
		for(var i = 0; i < imgAr.length; i++){
			rand = Math.floor(Math.random() * imgAr.length);
			tmp = imgAr[i]; 
			imgAr[i] = imgAr[rand]; 
			imgAr[rand] = tmp;
		}
		return imgAr[0];
	},
	
	moveEl: function (el){
		el.setting.posY += el.setting.spdY;
		if (el.setting.posY > this.options.winHeight-this.options.outV) {
			el.setting = this.ranSetting(0);
			this.setElStyle(el);
		}
		el.setting.dimX += el.setting.spdX;
		ani = new Fx.Morph(el, {duration: 5, transition: Fx.Transitions.Elastic.easeIn});
		ani.start({
			'top': el.setting.posY+'px',
			'left': (el.setting.posX+el.setting.ampX*Math.sin(el.setting.dimX))+'px'
		}).chain(function() {
			this.moveEl(el);
		}.bind(this));
	},
	
	preloadFile: function () {
		myImage = new Asset.images(this.options.imageAr, {
			onProgress: function(i) {
				loadedImage = this;
			},
			onComplete: function(){
				if (loadedImage.width > this.options.outH){
					this.options.outH = loadedImage.width+50;
				}
				if (loadedImage.height > this.options.outV){
					this.options.outV = loadedImage.height+50;
				}
				this.genEl();
			}.bind(this)
	    });
	},
});

gbSnow.implement(new Options);

window.addEvent('domready', function(){
	if (typeof gbSnowOpt == 'undefined'){
		gbSnowOpt = {}; 
	}
	
	gbSnow = new gbSnow(gbSnowOpt);
});
