(function($) {
$.alerts = {
verticalOffset: -75,
horizontalOffset: 0,
repositionOnResize: true,
overlayOpacity: .01,
overlayColor: '#FFF',
draggable: true,
okButton: '&nbsp;Continuar&nbsp;',
cancelButton: '&nbsp;Cancelar&nbsp;',
dialogClass: null,
alert: function(message, title, callback) {
	if( title == null ) title = 'Alert';
	$.alerts._show(title, message, null, 'alert', function(result) {
		if( callback ) callback(result);
	});
},
confirm: function(message, title, callback) {
	if( title == null ) title = 'Confirm';
	$.alerts._show(title, message, null, 'confirm', function(result) {
		if( callback ) callback(result);
	});
},
prompt: function(message, value, title, callback) {
	if( title == null ) title = 'Prompt';
	$.alerts._show(title, message, value, 'prompt', function(result) {
		if( callback ) callback(result);
	});
},
_show: function(title, msg, value, type, callback) {
	$.alerts._hide();
	$.alerts._overlay('show');
	$("BODY").append(
	  '<div id="popup_container">' +
		'<h1 id="popup_title"></h1>' +
		'<div id="popup_content">' +
		  '<div id="popup_message"></div>' +
		'</div>' +
	  '</div>');
	if( $.alerts.dialogClass ) $("#popup_container").addClass($.alerts.dialogClass);
	var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ) ? 'absolute' : 'fixed'; 
	$("#popup_container").css({
		position: pos,
		zIndex: 99999,
		padding: 0,
		margin: 0
	});
	$("#popup_title").text(title);
	$("#popup_content").addClass(type);
	$("#popup_message").text(msg);
	$("#popup_message").html( $("#popup_message").text().replace(/\n/g, '<br />') );
	$("#popup_container").css({
		minWidth: $("#popup_container").outerWidth(),
		maxWidth: $("#popup_container").outerWidth()
	});
	$.alerts._reposition();
	$.alerts._maintainPosition(true);
	switch( type ) {
		case 'alert':
			$("#popup_message").after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /></div>');
			$("#popup_ok").click( function() {
				$.alerts._hide();
				callback(true);
			});
			$("#popup_ok").focus().keypress( function(e) {
				if( e.keyCode == 13 || e.keyCode == 27 ) $("#popup_ok").trigger('click');
			});
		break;
		case 'confirm':
			$("#popup_message").after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + $.alerts.cancelButton + '" id="popup_cancel" /></div>');
			$("#popup_ok").click( function() {
				$.alerts._hide();
				if( callback ) callback(true);
			});
			$("#popup_cancel").click( function() {
				$.alerts._hide();
				if( callback ) callback(false);
			});
			$("#popup_ok").focus();
			$("#popup_ok, #popup_cancel").keypress( function(e) {
				if( e.keyCode == 13 ) $("#popup_ok").trigger('click');
				if( e.keyCode == 27 ) $("#popup_cancel").trigger('click');
			});
		break;
		case 'prompt':
			$("#popup_message").append('<br /><input type="text" size="30" id="popup_prompt" />').after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + $.alerts.cancelButton + '" id="popup_cancel" /></div>');
			$("#popup_prompt").width( $("#popup_message").width() );
			$("#popup_ok").click( function() {
				var val = $("#popup_prompt").val();
				$.alerts._hide();
				if( callback ) callback( val );
			});
			$("#popup_cancel").click( function() {
				$.alerts._hide();
				if( callback ) callback( null );
			});
			$("#popup_prompt, #popup_ok, #popup_cancel").keypress( function(e) {
				if( e.keyCode == 13 ) $("#popup_ok").trigger('click');
				if( e.keyCode == 27 ) $("#popup_cancel").trigger('click');
			});
			if( value ) $("#popup_prompt").val(value);
			$("#popup_prompt").focus().select();
		break;
	}
	if( $.alerts.draggable ) {
		try {
			$("#popup_container").draggable({ handle: $("#popup_title") });
			$("#popup_title").css({ cursor: 'move' });
		} catch(e) { /* requires jQuery UI draggables */ }
	}
},
_hide: function() {
	$("#popup_container").remove();
	$.alerts._overlay('hide');
	$.alerts._maintainPosition(false);
},
_overlay: function(status) {
	switch( status ) {
		case 'show':
			$.alerts._overlay('hide');
			$("BODY").append('<div id="popup_overlay"></div>');
			$("#popup_overlay").css({
				position: 'absolute',
				zIndex: 99998,
				top: '0px',
				left: '0px',
				width: '100%',
				height: $(document).height(),
				background: $.alerts.overlayColor,
				opacity: $.alerts.overlayOpacity
			});
		break;
		case 'hide':
			$("#popup_overlay").remove();
		break;
	}
},
_reposition: function() {
	var top = (($(window).height() / 2) - ($("#popup_container").outerHeight() / 2)) + $.alerts.verticalOffset;
	var left = (($(window).width() / 2) - ($("#popup_container").outerWidth() / 2)) + $.alerts.horizontalOffset;
	if( top < 0 ) top = 0;
	if( left < 0 ) left = 0;
	if( $.browser.msie && parseInt($.browser.version) <= 6 ) top = top + $(window).scrollTop();
	$("#popup_container").css({
		top: top + 'px',
		left: left + 'px'
	});
	$("#popup_overlay").height( $(document).height() );
},
_maintainPosition: function(status) {
	if( $.alerts.repositionOnResize ) {
		switch(status) {
			case true:
				$(window).bind('resize', $.alerts._reposition);
			break;
			case false:
				$(window).unbind('resize', $.alerts._reposition);
			break;
		} } } }
jAlert = function(message, title, callback) { $.alerts.alert(message, title, callback); }
jConfirm = function(message, title, callback) { $.alerts.confirm(message, title, callback); };
jPrompt = function(message, value, title, callback) { $.alerts.prompt(message, value, title, callback); };
})(jQuery);
