//----------------------------------------------------------------------------
// Contants and Globals
//----------------------------------------------------------------------------

// How transparent the message is
var OPACITY = .9;

// The id and class of the message
var MSG = "humanized_msg"

// How far, in pixels, is the message from the top of the screen
var TOP_OFFSET = 100;

// The div of class round is for making slightly "rounded" corners.
//var FORMAT = "<div class='round'></div><p>%s</p><div class='round'></div>"
var FORMAT = "<p>%s</p>"

// A global used for holding the current animation
var _msgFadeEffect = null;

// A global used for storing the content of the current message
var _currMsgContent = "";

var hideEvents = ["mousedown", "keydown", "mousemove"];

var MESSAGE_FAILURE = 'message_failure';
var MESSAGE_SUCCESS = 'message_success';

//----------------------------------------------------------------------------
// Transparent Message Manipulation
//----------------------------------------------------------------------------

function getMessageOpacity(){
	// Returns the current message opacity.
	if (YAHOO.util.Dom.getStyle(MSG, "display") == "none") {
		return 0.0;
    }
    
    return YAHOO.util.Dom.getStyle(MSG, "opacity");
}

var called = false;

var hideMessage = function(e, o){
	// Hides the message via fade animation. It won't attempt to hide a  message if it is currently being hidden.
	if (((getMessageOpacity() >= OPACITY && e != null) || (messageid > 0 && o != null && o.id == messageid)) && !called) {	
		called = true;
		
		for(i in hideEvents) {
			YAHOO.util.Event.removeListener(document.body, hideEvents[i], hideMessage );
		}
		
		_msgFadeEffect.animate();
		//setTimeout("_msgFadeEffect.animate();", 200);
	}
}

var messageid = 0;

function _showMessage( message, type ){
	// A private method which shows the transparent message. Doesn't handle concurrency.
	if (YAHOO.util.Dom.get(MSG) == null) {
		return;
	}
	
	YAHOO.util.Dom.get(MSG).innerHTML = FORMAT.replace("%s", message);
	_currMsgContent = message;

	/*var msg_dim = YAHOO.util.Dom.getRegion( MSG );

	var win_dim = YAHOO.util.Dom.getClientRegion();
	
	var msg_pos = Array(win_dim.right-msg_dim.width, 0);
	
	YAHOO.util.Dom.setXY(MSG,msg_pos);*/
	
	YAHOO.util.Dom.setStyle(MSG, 'display', 'block');
	
	YAHOO.util.Dom.addClass(MSG, type);
	
	_msgFadeEffect.onComplete.subscribe(function(e, obj, o) {
		YAHOO.util.Dom.removeClass(o.msg, o.type);
		if (_msgFadeEffect == undefined)
			_msgFadeEffect.onComplete.unsubcribe();
	}, {msg:MSG,type:type});
	
	var dim_window = YAHOO.util.Dom.getClientRegion();
	var dim_message = YAHOO.util.Dom.getRegion(MSG);
	
	messageid++;
	
	YAHOO.util.Dom.setXY(MSG, [(dim_window.width - dim_message.width)/2,100]);
	YAHOO.util.Dom.setStyle(MSG, 'opacity', OPACITY);
	
	setTimeout("_addHideEvents();",500);
	
	
	setTimeout("hideMessage(null, {id:"+messageid+"});", 2000);
}

function _addHideEvents() {

	for(i in hideEvents) {
		YAHOO.util.Event.addListener(document.body, hideEvents[i], hideMessage );
	}

}

function showMessage( message, type ){
	// Shows the message: handles the cases where a second message is attempted to be displayed before the first is done.
	//_showMessage(message);
	message = message.replace(/\n/g, '').replace("'","\\\'");
	setTimeout("_showMessage('"+message+"','"+type+"')",50);
	/*if (_currMsgContent != message ){
		_msgFadeEffect.onComplete.subscribe(function(){ _showMessage(message) });
	}*/
	/*else{
		// This is needed for IE: otherwise after a click, a mousemove event would cause the message to fade away instantly.
		setTimeout("_showMessage('"+message+"')",50);
	}*/
}

/*function alert( message ){
  // An alias for showMessage
  showMessage( message );
}*/

//----------------------------------------------------------------------------
// Initialization
//----------------------------------------------------------------------------

function initTransparentMessage(){
	// Adds the message div to the page and sets up its event handlers.
	var msg = document.createElement('div');
	msg.className = MSG;
	msg.id = MSG;

	YAHOO.util.Dom.setStyle( msg, 'opacity', 0);
	YAHOO.util.Dom.setStyle( msg, 'display', 'none');
	
	document.body.appendChild( msg );
	
	_msgFadeEffect = new YAHOO.util.Anim(MSG, {opacity: { to: 0 } }, .75, YAHOO.util.Easing.easeIn);
	_msgFadeEffect.onComplete.subscribe(function() { called = false; YAHOO.util.Dom.setStyle( msg, 'display', 'none'); });
}

YAHOO.util.Event.onDOMReady(initTransparentMessage);