if (typeof Manodo == 'undefined' || !Manodo)
	Manodo = {};
	
if (typeof Manodo.Server == 'undefined' || !Manodo.Server)
	Manodo.Server = {};
	
if (typeof Manodo.Server.Portal == 'undefined' || !Manodo.Server.Portal)
	Manodo.Server.Portal = {};
	
if (typeof Manodo.Server.Portal.Login == 'undefined' || !Manodo.Server.Portal.Login)
	Manodo.Server.Portal.Login = {};
	
Manodo.Server.Portal.Login.MessageBox = function(lblHeaderId, pnlMessageId) {
	var _me = this;
	var _lblHeaderId = lblHeaderId;
	var _pnlMessageId = pnlMessageId;
	var _pnlMessageBox;
	var _headerKey;
	var _messageKey;
	var _header;
	var _message;
	var _messageParams;
	var _dialogResult = 'NONE';
	
	this.messageBoxClosedEvent = new YAHOO.util.CustomEvent('messageBoxClosedEvent');
	
	this.init = function() {
		_pnlMessageBox = new YAHOO.widget.Panel("divMessageBox", {
			width:"500px",
			fixedcenter: true,
			constraintoviewport: true,
			underlay:"shadow",
			close:false,
			visible:false,
			draggable:true,
			modal:true } );

		document.getElementById('divMessageBox').style.display = 'block';
		_pnlMessageBox.render();
		
		_pnlMessageBox.showEvent.subscribe(_me.onShow, _me, true);
		_pnlMessageBox.hideEvent.subscribe(_me.onHide, _me, true);
	};
	
	this.onShow = function() {
		document.getElementById('divMessageBox').focus();
	};
	
	this.onHide = function() {
		_me.messageBoxClosedEvent.fire(_dialogResult);
	};
	
	this.show = function(headerKey, messageKey, header, message, messageParams) {
		if (headerKey)
			_headerKey = headerKey;
		else
			_headerKey = '';
		
		if (messageKey)
			_messageKey = messageKey;
		else
			_messageKey = '';
		
		_header = header;
		_message = message;
		_messageParams = messageParams;
			
		_me.setMessage('&nbsp;', '<img src="Images/loading.gif" />');
		_pnlMessageBox.show();
		
		if (_headerKey != '' || _messageKey != '')
		{
			Manodo.Server.Portal.Login.ScriptService.LoginService.GetTranslatedStrings(
				'Manodo.Server.Portal.Login',
				[ _headerKey, _messageKey ],
				_me.onGetTranslatedStringsComplete,
				_me.onGetTranslatedStringsError);
		}
		else
			_me.setMessage(_header, _message, _messageParams);
	};
	
	this.onGetTranslatedStringsComplete = function(arg) {
		if (arg[_headerKey]) {
			if (_header && _header != '')
				_header = arg[_headerKey] + _header;
			else
				_header = arg[_headerKey];
		}
		
		if (arg[_messageKey]) {	
			if (_message && _message != '')
				_message = arg[_messageKey] + _message;
			else
				_message = arg[_messageKey];
		}
		
		_me.setMessage(_header, _message, _messageParams);
	};
	
	this.onGetTranslatedStringsError = function(error) {
		var stackTrace = error.get_stackTrace();
		var message = error.get_message();
		var statusCode = error.get_statusCode();
		var exceptionType = error.get_exceptionType();
		var timedout = error.get_timedOut();
	   
		var msg =
			'<div>Stack Trace:</div><div>' +  stackTrace + '</div>' +
			'<div>Service Error:</div><div>' + message + '</div>' +
			'<div>Status Code:</div><div>' + statusCode + '</div>' +
			'<div>Exception Type:</div><div>' + exceptionType + '</div>' +
			'<div>Timedout:</div><div>' + timedout + '</div>';

		_me.setMessage('[Error]', msg);
	};
	
	this.setMessage = function(header, message, messageParams) {
		var lblHeader = document.getElementById(_lblHeaderId);
		var pnlMessage = document.getElementById(_pnlMessageId);
		
		if (lblHeader) {
			if (header)
				lblHeader.innerHTML = header;
			else
				lblHeader.innerHTML = '';
		}
		
		if (pnlMessage) {
			if (message) {
				if (messageParams) {
					for (var i = 0; i < messageParams.length; i++)
						message = message.replace('{' + i + '}', messageParams[i]);
				}
				pnlMessage.innerHTML = message;
			}
			else
				pnlMessage.innerHTML = '';
		}
			
		_pnlMessageBox.center();
	};
	
	this.close = function() {
		_pnlMessageBox.hide();
	};
	
	this.onKeyDown = function(e) {
		if (e.keyCode == 13 || e.keyCode == 27) { // enter or escape
			_me.close();
			return false;
		}
		return true;
	};
};
