var modal_data = {busy:true}; // tmr, active_id, args, return_value, active, dark_screen_opacity, close_on_outside_click, onclosed_handler, onopened_handler, busy
function modal_show(args){
	if(modal_data.tmr||modal_data.busy) return;
	modal_data.args = args;
	modal_data.active = true;
	modal_data.effect_speed = (modal_data.effect_speed||10);
	modal_data.dark_screen_opacity = (modal_data.dark_screen_opacity||50);
	modal_data.return_value = '';
	if($(args.modal_id)){
		var modal = $(args.modal_id);
		modal_data.active_id = modal.id;
		set_opacity('modal_dark_screen',(args.effect=='fade')?0:modal_data.dark_screen_opacity);
		modal.style.display = 'block';
		$('modal_container').style.display = 'block';
		$('modal_container').style.visibility = 'hidden';
		modal_reposition();
		$('modal_container').style.visibility = 'visible';
		if(args.effect=='fade'){
			modal_data.opacity = 0;
			modal_data.tmr = window.setInterval(modal_fade,1);
		}
		//set_modal_max_height(args.modal_id);
		if(!args.effect&&modal_data.onopened_handler) modal_data.onopened_handler(modal_data.active_id);
	}
}

function modal_hide(return_value){
	if(modal_data.tmr) return;
	modal_data.return_value = return_value;
	modal_data.active = false;
	if($(modal_data.active_id)){
		var modal = $(modal_data.active_id);
		modal.style.display = 'none';
		if(modal_data.args.effect=='fade'){
			modal_data.tmr = window.setInterval(modal_fade,1);
		}
		if(!modal_data.args.effect&&modal_data.onclosed_handler){
			$('modal_container').style.display = 'none';
			modal_data.onclosed_handler(modal_data.active_id,modal_data.return_value);
		}else{
			$('modal_container').style.display = 'none';
		}
	}
}

function modal_fade(){
	if(modal_data.active){
		modal_data.opacity += modal_data.effect_speed;
		modal_data.opacity = Math.min(modal_data.opacity,modal_data.dark_screen_opacity);
		if(modal_data.opacity==modal_data.dark_screen_opacity){
			window.clearInterval(modal_data.tmr);
			modal_data.tmr = 0;

			// SEND TB MASTHEAD NAV TO BACK
			if($('main')) $('main').style.zIndex = 0;
			if($('site')) $('site').style.zIndex = 0;

			if(modal_data.onopened_handler) modal_data.onopened_handler(modal_data.active_id);
		}
	}else{
		modal_data.opacity -= modal_data.effect_speed;
		modal_data.opacity = Math.max(modal_data.opacity,0);
		if(modal_data.opacity==0){
			window.clearInterval(modal_data.tmr);
			modal_data.tmr = 0;
			$('modal_container').style.display = 'none';
			if(modal_data.onclosed_handler) modal_data.onclosed_handler(modal_data.active_id,modal_data.return_value);
		}
	}
	set_opacity('modal_dark_screen',modal_data.opacity);
}

function modal_reposition(){
	var modal_active = $(modal_data.active_id);
	var modal_dark_screen = $('modal_dark_screen');
	if(modal_active&&modal_data.active&&!modal_data.busy){
		var margins = [];
		if(window.details.ieVersion()==-1){
			// OPERA, FF, SAFARI
			margins[0] = (modal_dark_screen.clientWidth - modal_active.clientWidth) / 2;
			margins[1] = (modal_dark_screen.clientHeight - modal_active.clientHeight) / 2;
		}else{
			// IE
			$('modal_dark_screen').style.width = window.details.innerWidth() + 'px';
			$('modal_dark_screen').style.height = document.body.scrollHeight + 'px';
			margins[0] = (modal_dark_screen.clientWidth - modal_active.clientWidth) / 2;
			margins[1] = ((window.details.innerHeight() - modal_active.clientHeight) / 2) + window.details.scrollTop();
		}
		modal_active.style.marginLeft = margins[0] + 'px';
		modal_active.style.marginTop = margins[1] + 'px';

		// FIXES RENDERING ISSUE WITH OPERA 9
		$('modal_container').style.display = 'block';
	}
}

function set_opacity(id,opacity){
	if(!$(id)) return;
	if(window.details.ieVersion()>-1){
		$(id).style.filter = 'alpha(opacity='+opacity+')';
		if(opacity==100){
			$(id).style.filter = '';
		}
	}else{
		$(id).style.opacity = opacity / 100;
	}
}

function modal_dark_screen_onclick(){
	if(modal_data.close_on_outside_click) modal_hide();
}

function modal_init(){
	if(!$('modal_container')) return;
	if(!$('modal_container').empty()){
		$('modal_container').style.display = 'block';
		// CREATE DARK SCREEN ELEMENT
		var dark_screen = document.createElement('div');
		dark_screen.id = 'modal_dark_screen';
		dark_screen.onclick = modal_dark_screen_onclick;
		$('modal_container').insertBefore(dark_screen,$('modal_container').childNodes[0]);

		// ADJUST FOR SCROLLING AND RESIZING
		Event.observe(window,'resize',modal_reposition);
		Event.observe(window,'scroll',modal_reposition);
	}
	// HIDE MODAL CONTAINER
	set_opacity('modal_container',100);
	$('modal_container').style.display = 'none';
}

// ADD SHORTHAND FUNCTION IF INEXISTENT
if(typeof $!='function') eval('function $(id){	return document.getElementById(id); }');

Event.observe(window,'load',function(){
	modal_init();

	// CUSTOM SETTINGS
	modal_data.close_on_outside_click = true;	// DEFAULTS TO false
	modal_data.effect_speed = 10;			// DEFAULTS TO 10
	modal_data.dark_screen_opacity = 65;		// DEFAULTS TO 50
	modal_data.busy = false;
});

function set_modal_max_height(id){
/*
	var iframe = $(id);
	var max_height = window.details.innerHeight() - 200;
	if(iframe&&iframe.clientHeight>max_height){
		iframe.style.height = max_height + 'px';
		alert(iframe.clientHeight);
	}
*/
}