var JVAnimation = new Class({
	options: {
		images: [],
		snow_effect: true,
		running_img1: '',
		running_img2: '',
		direct_img2: '',
		running_img3: '',
		direct_img3: '',
		snowman_img: '',
		bg_pos_l: 0,
		bg_pos_r: 0,
		speed: 100,
		snow_img: '',
		num_snow: 10,
		snowflakes: [],
		x:[],
		y:[],
		fall:[],
		wind:[],
		rad:[],
		t1: null
	},
	initialize: function (wrapper,snow_area,options) {
		var mX = 0;
		var mY = 0;
		this.options = $merge(this.options,options);
		this.setup(wrapper,snow_area);
		if(this.options.snow_effect) this.setup_snow(wrapper,snow_area);
		if(this.options.direct_img2 != 'none') {
			var _background = $E('.jv_running2',wrapper);
			var _direction = this.options.direct_img2;
		}
		if(this.options.direct_img3 != 'none') {
			var _background = $E('.jv_running3',wrapper);
			var _direction = this.options.direct_img3;
		}
		this.snowman(wrapper);
		this.options.t1 = setInterval(function() {
			this.run_background(_background,_direction);
			this.dropsnow(wrapper,snow_area);
		}.bind(this),this.options.speed);
	},
	setup: function(wrapper,snow_area) {
		$E('.jv_running1',wrapper).setStyle('background','url(' + this.options.running_img1 + ') no-repeat center top');
		$E('.jv_running2',wrapper).setStyle('background','url(' + this.options.running_img2 + ') repeat-x bottom left');
		$E('.jv_running3',wrapper).setStyle('background','url(' + this.options.running_img3 + ') repeat-x bottom left');
	},
	setup_snow: function(wrapper,snow_area) {
		//-- setting up snow --
		var _img = new Array();
		if (this.options.num_snow > 0) {
			for (var j=0;j< this.options.num_snow-1;j++) {
				_img[j] = new Element('span', {
					'class' : 'jv_snow'
				}).injectInside(snow_area);
				var _top = $random(-20, snow_area.offsetHeight);
				var _left = $random(0, wrapper.offsetWidth);
				var _size = $random(8,25);
				_img[j].innerHTML = this.options.snow_img;
				_img[j].setStyle('top',_top);
				_img[j].setStyle('left',_left);
				_img[j].setStyle('font-size',_size + "px");
				this.options.x[j] = Math.random()*(snow_area.offsetWidth-50);
				this.options.y[j] = Math.random()*(snow_area.offsetHeight-50);
				this.options.fall[j] = 1+Math.random()*2;
				this.options.wind[j] = Math.random()*Math.PI-Math.PI;
				this.options.rad[j] = 0;
			}
		}
		this.options.snowflakes = _img;
	},
	dropsnow: function(wrapper,snow_area) {
		var out = 0;
		var ie = (document.all)?1:0;
		var ns = (document.getElementById && !document.all)?1:0;	
		for (i = 0; i < this.options.snowflakes.length; i++) {
			this.options.y[i] += this.options.fall[i];
			if (this.options.snowflakes[i].offsetLeft + this.options.snowflakes[i].offsetWidth >= snow_area.offsetWidth-3 || this.options.snowflakes[i].offsetTop + this.options.snowflakes[i].offsetHeight >= snow_area.offsetHeight-3)
			{out = 1} else {out = 0}; // out of browser window checking

			if (out) { // if snowflake moved out of a browser window area then generating new one
				var _size = $random(1,5);
				this.options.snowflakes[i].setStyle('width',_size);
				this.options.x[i] = Math.random()*(snow_area.offsetWidth-50);
				this.options.y[i] = 0;
				this.options.fall[i] = 1+Math.random()*2;
				this.options.wind[i] = Math.random()*Math.PI-Math.PI;
				this.options.rad[i] = 0;
				width = ns ? window.innerWidth : document.body.clientWidth;
				height = ns ? window.innerHeight : document.body.clientHeight;
			}

			// for converting number in radians
			this.options.rad[i] += (this.options.wind[i]/180)*Math.PI;

			// changing snowflakes x and y position
			this.options.snowflakes[i].setStyle('left',this.options.x[i] + Math.cos(this.options.rad[i])*20);
			this.options.snowflakes[i].setStyle('top',this.options.y[i]);
		}
	},
	run_background: function(obj,direct) {
		if(direct=='left') {
			this.options.bg_pos_l = this.options.bg_pos_l - 1;
			obj.setStyle('background-position', this.options.bg_pos_l + 'px 100%');
		} else {
			this.options.bg_pos_r = this.options.bg_pos_r + 1;
			obj.setStyle('background-position', this.options.bg_pos_r + 'px 100%');
		}
	},
	running: function(selector,direct,wrapper) {
		var _background = $E(selector,wrapper);
		var t2 = setInterval(function() { this.run_background(_background,direct)}.bind(this),this.options.speed);
	},
	snowman: function(wrapper) {
		$E('.jv_ani_wrap1',wrapper).setStyle('background','url(' + this.options.snowman_img + ') no-repeat bottom left');
	}
});
JVAnimation.implement(Options);
