/////////////////////////////////////////////////////////////////

OVERLAY_OPACITY_LEVEL = 0.7;

/////////////////////////////////////////////////////////////////
SystemElements = {
	get: function()
	{
		var elements = $$('select');
		elements = elements.concat($$('input[type=checkbox]'));
		elements = elements.concat($$('input[type=radio]'));
		elements = elements.concat($$('textarea'));
		elements = elements.concat($$('iframe'));

		if(!document.isWin && navigator.userAgent.match(/Firefox\/2/))
		{
			elements = elements.concat($$('object'));
			elements = elements.concat($$('embed'));
		}

		return elements;
	},
	hide: function()
	{
		var elements = this.get();
		elements.each(function(el){ el.setStyle({ visibility: 'hidden' }) });
	},
	show: function()
	{
		var elements = this.get();
		elements.each(function(el){ el.setStyle({ visibility: 'visible' }) });
		document.body.focus();
	}
};

/////////////////////////////////////////////////////////////////

Overlay = Class.create({
	initialize: function()
	{
		var overlay_div = new Element('div', {id: 'overlay'});
		overlay_div.setStyle({
			//opacity: 0.0,
			position: 'absolute',
			top: 0,
			left: 0,
			width: '100%',
			height: '100%',
			background: '#000',
			zIndex: 1000,
			display: 'none'
		});

		Event.observe(overlay_div,'click',function(){ overlay.destroy(); });
		this.overlay = overlay_div;
	},

	create: function()
	{
		$(document.body).insert({ top: this.overlay });

		$('overlay').setStyle({opacity: 0, display: 'block'});
		new Effect.Opacity('overlay',{
			from: 0.0,
			to: OVERLAY_OPACITY_LEVEL,
			duration: 0.5,
			beforeStart: function() {
				SystemElements.hide();
				overlay.run_before('create');
			},
			afterFinish: function() { overlay.run_after('create') }
		});
	},

	destroy: function()
	{
		new Effect.Opacity('overlay',{
			to: 0.0,
			duration: 0.5,
			beforeStart: function() { overlay.run_before('destroy') },
			afterFinish: function() {
				overlay.run_after('destroy');
				if($('overlay'))
					$('overlay').remove();

				SystemElements.show();
			 }
		});
	},

	run_after: function(run_where, function_to_run)
	{
		if(run_where == 'create')
		{
			if(function_to_run)
				this.run_after_show = function_to_run
			else if(this.run_after_show)
				this.run_after_show();
		}
		else if(run_where == 'destroy')
		{
			if(function_to_run)
				this.run_after_hide = function_to_run
			else if(this.run_after_hide)
				this.run_after_hide();
		}
	},

	run_before: function(run_where, function_to_run) {
		if(run_where == 'create')
		{
			if(function_to_run)
				this.run_before_show = function_to_run
			else if(this.run_before_show)
				this.run_before_show();
		}
		else if(run_where == 'destroy')
		{
			if(function_to_run)
				this.run_before_hide = function_to_run
			else if(this.run_before_hide)
				this.run_before_hide();
		}
	}
});

/////////////////////////////////////////////////////////////////

FlashPlayer = Class.create({
	initialize: function()
	{
		this.container = new Element('div',{ id: 'flash_container' });
		this.player = new Element('div', { id: 'flash_player' });

		this.container.setStyle({
			position: 'relative',
			margin: '0 auto',
			zIndex: 1001
		});

		this.player.setStyle({
			position: 'absolute',
			visibility: 'hidden',
			left: 0
		});
	},
	create: function()
	{
		var args = this.args;
		args.container = this.container;
		args.player = this.player;
		new Ajax.Request(args.url, {
			method: 'get',
			onSuccess: function(transport)
			{
				//args.container.setStyle({ 'width': args.width+'px' });
				args.container.insert({ top: args.player });

				$(document.body).insert({ top: args.container });
				$('flash_player').innerHTML = '';
				$('flash_player').insert(transport.responseText);

				flash_player.align();

				$$('#flash_player a.close_player').each(function(el){
					Event.observe(el,'click',function(e){
						overlay.destroy();
					});
				});

				$('flash_player').setStyle({visibility: 'visible'});
			}
		});
	},
	destroy: function() {
		this.player.remove();
		this.container.remove();
	},
	align: function()
	{
		if($('flash_container'))
		{
			var dim = document.viewport.getDimensions();
			var height = ((dim.height - this.player.getHeight())/2)/2;
			if(height<0)
				height = 0;

			this.container.setStyle({ width: this.player.getWidth()+'px' });
			this.player.setStyle({ top: height+'px' });
		}
	},
	args: {}
});

/////////////////////////////////////////////////////////////////

overlay = new Overlay();
flash_player = new FlashPlayer();

overlay.run_after('create',function() { flash_player.create() } );
overlay.run_before('destroy',function() { flash_player.destroy() } ); 

Event.observe(window,'resize',function(){
	flash_player.align();
});

/////////////////////////////////////////////////////////////////

function open_player(el)
{
	//alert(el);
	
	if(typeof el == 'string')
		var args = { url: el };
	else
		var args = { url: $(el).readAttribute('href') };

	flash_player.args = args;
	overlay.create();
}

