(function($) {

	var enabled_banners = new Object();

	var init = function(obj, banners, timeout, group)
	{
		var _banners = new Object();
		var _all = 0;
		for ( var key in banners )
		{
			var pr = parseInt(banners[key]['priority']);
			_all += Math.abs( pr );
			_banners[ _all ] = banners[key];
			_banners[ _all ]['id'] = key;
		}
		var b = {
			'all':parseInt(_all),
			'banners':_banners,
			'timeout':parseInt(timeout),
			'group':group
		};
		if ( typeof(enabled_banners[group]) == 'undefined' )
			enabled_banners[group] = new Object();
		$(obj).data('bannerblock', b);
	}

	var is_banner_shown = function(cur_banner_id, new_banner_id, group)
	{
		//alert(cur_banner_id+' '+new_banner_id);
		if ( new_banner_id == cur_banner_id ) return false;
		if (typeof(enabled_banners[group][new_banner_id]) == 'undefined' || enabled_banners[group][new_banner_id] === false)
			return false;
		return true;
	}

	var rand = function(obj) {
		var data = $(obj).data('bannerblock');

		var cur_banner_id = $(obj).attr('banner-id');

		do {
			var b = data.all*Math.random();

			var last = 0;
			var banner = null;
			for (var key in data.banners)
			{
				if ( b >= last && b < key )
				{
					banner = data.banners[key];
					break;
				}
				last = key;
			}
			if (banner == null) return;
		} while( is_banner_shown(cur_banner_id, banner.id, data.group) && cur_banner_id != undefined );

		if (cur_banner_id != banner.id )
		{
			enabled_banners[data.group][ cur_banner_id ] = false;
			enabled_banners[data.group][banner.id] = true;

			if ( typeof(banner.left) != 'undefined' && typeof(banner.right) != 'undefined' )
			{
				$(obj).fadeOut(function(){

					$(obj).attr('href', banner.href)
					.attr('banner-id', banner.id)
					.find('.left')
					.attr('src', banner.left)
					.attr('title', banner.alt)
					.attr('alt', banner.alt);

					$(obj)
					.find('.right')
					.attr('src', banner.right)
					.attr('title', banner.alt)
					.attr('alt', banner.alt);
					if(typeof(banner.bgcolor) != 'undefined'){
						$(obj).css('background-color',banner.bgcolor);
					}else $(obj).css('background-color','');

					$(obj).fadeIn(function(){
						setTimeout(function(){rand(obj);}, data.timeout);
					});
				});
			}
			else
			{
				$(obj).fadeOut(function(){
					$(obj).attr('href', banner.href)
					.css('background-image', 'url('+banner.img+')')
					.attr('title', banner.alt)
					.attr('alt', banner.alt)
					.attr('banner-id', banner.id)
					.fadeIn(function(){
						setTimeout(function(){rand(obj);}, data.timeout);
					});
				});
			}
		}
		else
			setTimeout(function(){rand(obj);}, data.timeout);
	};

	$.fn.bannerblock = function( params ) {

		init(this, params['banners'], params['timeout'], params['group']);
		rand(this);

		return this;
	};
})(jQuery);

