//VERSAO DO IMPROMPTU <= 2.7
(function($) {
	var fGerarCookie = function(strCookie, strValor, lngDias){
		var dtmData = new Date();
		if(lngDias){
			dtmData.setTime(dtmData.getTime() + (lngDias * 24 * 60 * 60 * 1000));
			var strExpires = "; expires=" + dtmData.toGMTString();
		}else{
			var strExpires = "";
		}
		document.cookie = strCookie + "=" + strValor + strExpires + "; path=/";
	};
	
	var fLerCookie = function(strCookie){
		var strNomeIgual = strCookie + "=";
		var arrCookies = document.cookie.split(';');
		for(var i = 0; i < arrCookies.length; i++){
			var strValorCookie = arrCookies[i];
			while(strValorCookie.charAt(0) == ' '){
				strValorCookie = strValorCookie.substring(1, strValorCookie.length);
			}
			if(strValorCookie.indexOf(strNomeIgual) == 0){
				return strValorCookie.substring(strNomeIgual.length, strValorCookie.length);
			}
		}
		return null;
	};
	
	var fExcluirCookie = function(strCookie){
		fGerarCookie(strCookie, '', -1);
	};	  
		  
	$.jAlert = function(message, tipo_mensagem, titulo, options, mensagem_sql, hearderPagina){
		if(mensagem_sql == '' || mensagem_sql == 1 || mensagem_sql == undefined){
			mensagem_sql = null;
		}else{
		  mensagem_sql = unescape(mensagem_sql);
		}
		
		titulo = (titulo == '' ? titulo = null : titulo);
		if(tipo_mensagem != null){
			tipo_mensagem = $.trim(tipo_mensagem.toLowerCase());
		}
		tipo_mensagem = (tipo_mensagem == 'sucesso' ? tipo_mensagem = 'certo' : tipo_mensagem);
		if(tipo_mensagem == 'auto'){
			messages = message.split('|}]');
			for(p=0; p<messages.length-1; p++){
				dados = $.trim(messages[p]).split('[{|');
				message = dados[0];
				tipo_mensagem = dados[1];
				$.jAlert(message, tipo_mensagem, titulo);
			}
		}else{
			if(titulo == null && tipo_mensagem == 'erro'){
				titulo = 'Erro';
			}else
			if(titulo == null && tipo_mensagem == 'atencao'){
				titulo = 'Aten&ccedil;&atilde;o';
			}else
			if(titulo == null && tipo_mensagem == 'info'){
				titulo = 'Informa&ccedil;&atilde;o';
			}else
			if(titulo == null && tipo_mensagem == 'certo'){
				titulo = 'Sucesso';
			}
			if(titulo == null){
				titulo = document.URL.split('/')[2];
			}
			options = $.extend({},$.jAlert.defaults,options);
			if(options.buttons == false){
				options.buttons = true;
			}
			$.jAlert.currentPrefix = options.prefix;
	
			var ie6		= ($.browser.msie && $.browser.version < 7);
			var $body	= $(document.body);
			var $window	= $(window);
	
			//build the box and fade
			var msgbox = '<div class="'+ options.prefix +'box" id="'+ options.prefix +'box">';
			if(options.useiframe && (($('object, applet').length > 0) || ie6)) {
				msgbox += '<iframe src="javascript:false;" style="display:block;position:absolute;z-index:-1;" class="'+ options.prefix +'fade" id="'+ options.prefix +'fade"></iframe>';
			} else {
				if(ie6) {
					$('select').css('visibility','hidden');
				}
				msgbox +='<div class="'+ options.prefix +'fade" id="'+ options.prefix +'fade"></div>';
			}
			
			var newDate = new Date;
			uniqid = newDate.getTime();
			
			msgbox += '<div rel="impromptu" class="'+ options.prefix +' jqi_'+tipo_mensagem+'" id="'+ options.prefix + '_' + uniqid + '"><div class="'+ options.prefix +'container">';
			msgbox += '<div class="'+ options.prefix +'barratitulo" id="'+ options.prefix +'barratitulo"><h4 class="'+ options.prefix +'titulo">'+titulo+'</h4>';
			if(fLerCookie('mensagem_sql') == 'true' && mensagem_sql != null){
				msgbox += '<a class="'+options.prefix +'close_message_sql" title="Mensagem SQL"></a>';
			}
			msgbox += '<a class="'+options.prefix +'maximizar" id="maximizar_minimizar" title="Maximizar esta Janela"></a>';
			msgbox += '<a class="'+options.prefix +'close" title="Fechar esta janela"></a></div><div id="'+ options.prefix +'states"></div>';
			msgbox += '</div></div></div>';
	
			var $jqib	= $(msgbox).appendTo($body);
			var $jqi	= $jqib.children('#'+ options.prefix+'_'+uniqid);
			var $jqif	= $jqib.children('#'+ options.prefix +'fade');
	
			//if a string was passed, convert to a single state
			if(message.constructor == String){
				message = {
					state0: {
						html: message,
						buttons: options.buttons,
						focus: options.focus,
						submit: options.submit
					}
				};
			}
	
			//build the states
			var states = "";
	
			$.each(message,function(statename,stateobj){
				stateobj = $.extend({},$.jAlert.defaults.state,stateobj);
				message[statename] = stateobj;
	
				states += '<div id="'+ options.prefix +'_state_'+ statename +'" class="'+ options.prefix + '_state" style="display:none;"><div class="'+ options.prefix +'message">' + stateobj.html +'</div>';
				if(fLerCookie('mensagem_sql') == 'true' && mensagem_sql != null){
					states += '<div class="'+ options.prefix +'message_sql">'+mensagem_sql+'</div>';
				}
				states += '<div class="'+ options.prefix +'buttons">';
				$.each(stateobj.buttons, function(k, v){
					states += '<button name="' + options.prefix + '_' + statename + '_button' + k + '" id="' + options.prefix +	'_' + statename + '_button' + k + '" value="' + v + '">' + k + '</button>';
				});
				states += '</div></div>';
			});
	
			//insert the states...
			$jqi.find('#'+ options.prefix +'states').html(states).children('.'+ options.prefix +'_state:first').css('display','block');
			$jqi.find('.'+ options.prefix +'buttons:empty').css('display','none');
			
			//Events
			$.each(message,function(statename,stateobj){
				var $state = $jqi.find('#'+ options.prefix +'_state_'+ statename);
	
				$state.children('.'+ options.prefix +'buttons').children('button').click(function(){
					var msg = $state.children('.'+ options.prefix +'message');
					var clicked = stateobj.buttons[$(this).text()];
					var forminputs = {};
	
					//collect all form element values from all states
					$.each($jqi.find('#'+ options.prefix +'states :input').serializeArray(),function(i,obj){
						if (forminputs[obj.name] === undefined) {
							forminputs[obj.name] = obj.value;
						} else if (typeof forminputs[obj.name] == Array) {
							forminputs[obj.name].push(obj.value);
						} else {
							forminputs[obj.name] = [forminputs[obj.name],obj.value];	
						} 
					});
	
					var close = stateobj.submit(clicked,msg,forminputs);
					if(close === undefined || close) {
						removePrompt(true,clicked,msg,forminputs);
					}
				});
				$state.find('.'+ options.prefix +'buttons button:eq('+ stateobj.focus +')').addClass(options.prefix +'defaultbutton');
			});
			
			var TAMbarratitulo = $jqi.find('.'+ options.prefix +'barratitulo').outerHeight();
			var TAMbuttons = $jqi.find('.'+ options.prefix +'buttons').outerHeight();
			
			var resizeMessage = function(){
				if(options.buttons){
					var tamanho = $jqi.outerHeight() - TAMbarratitulo - TAMbuttons - 30;
					$('div.jqimessage', $jqi).height(tamanho+'px');	
				}
			}
			
			var ie6scroll = function(){
				$jqib.css({ top: $window.scrollTop() });
			};
	
			var fadeClicked = function(){
				if(options.persistent){
					var i = 0;
					$jqib.addClass(options.prefix +'warning');
					var intervalid = setInterval(function(){
						$jqib.toggleClass(options.prefix +'warning');
						if(i++ > 1){
							clearInterval(intervalid);
							$jqib.removeClass(options.prefix +'warning');
						}
					}, 100);
				}
				else {
					removePrompt();
				}
			};
			
			var keyPressEventHandler = function(e){
				var key = (window.event) ? event.keyCode : e.keyCode; // MSIE or Firefox?
				
				//escape key closes
				if(key==27) {
					removePrompt();	
				}
				
				//constrain tabs
				if (key == 9){
					var $inputels = $(':input:enabled:visible',$jqib);
					var fwd = !e.shiftKey && e.target == $inputels[$inputels.length-1];
					var back = e.shiftKey && e.target == $inputels[0];
					if (fwd || back) {
					setTimeout(function(){ 
						if (!$inputels)
							return;
						var el = $inputels[back===true ? $inputels.length-1 : 0];
	
						if (el)
							el.focus();						
					},10);
					return false;
					}
				}
			};
			
			var positionPrompt = function(){
				$jqib.css({
					position: (ie6) ? "absolute" : "fixed",
					height: $window.height(),
					width: "100%",
					top: (ie6)? $window.scrollTop() : 0,
					left: 0,
					right: 0,
					bottom: 0
				});
				$jqif.css({
					position: "absolute",
					height: $window.height(),
					width: "100%",
					top: 0,
					left: 0,
					right: 0,
					bottom: 0
				});
				
				$jqi.css({
					'position' : 'absolute', 
					'top' : ($window.height() - $jqi.outerHeight()) / 2 + 'px', 
					'left' : ($window.width() - $jqi.outerWidth()) / 2 + 'px'
				});
				resizeMessage();
			};
			
			var MinimizeMaximize = function(){
				var botao = $('div[rel=impromptu] a#maximizar_minimizar');
				if(botao.attr('class') == options.prefix +'maximizar'){
					fGerarCookie(options.prefix+'-boxjAlert-resize', $jqi.width()+'px|'+$jqi.height()+'px|'+$jqi.css('top')+'|'+$jqi.css('left'));
					$jqi.css({
						width: '99%',
						height: '98%'
					});
					botao.attr('title', 'Restaurar o tamanho desta Janela').removeClass(options.prefix +'maximizar').addClass(options.prefix +'minimizar');
					positionPrompt();
				}else{
					var dados = fLerCookie(options.prefix+'-boxjAlert-resize').split('|');
					//alert(dados[0]+'|'+dados[1]+' | '+dados[2]+'|'+dados[3]);
					$jqi.css({
						width: dados[0],
						height: dados[1],
						top: dados[2],
						left: dados[3]
					});
					botao.attr('title', 'Maximizar esta Janela').removeClass(options.prefix +'minimizar').addClass(options.prefix +'maximizar');
				}
				resizeMessage();
			};
			
			var stylePrompt = function(){
				$jqif.css({
					zIndex: options.zIndex,
					display: "none",
					opacity: options.opacity
				});
				$jqi.css({
					zIndex: options.zIndex+1,
					display: "none"
				});
				$jqib.css({
					zIndex: options.zIndex
				});
			};
			
			var removePrompt = function(callCallback, clicked, msg, formvals){
				$jqi.remove();
				//ie6, remove the scroll event
				if(ie6) {
					$body.unbind('scroll',ie6scroll);
				}
				$window.unbind('resize',positionPrompt);
				$jqif.fadeOut(options.overlayspeed,function(){
					$jqif.unbind('click',fadeClicked);
					$jqif.remove();
					if(callCallback) {
						options.callback(clicked,msg,formvals);
					}
					if(hearderPagina){
						location.href= hearderPagina;
					}
					$jqib.unbind('keypress',keyPressEventHandler);
					$jqib.remove();
					if(ie6 && !options.useiframe) {
						$('select').css('visibility','visible');
					}
				});
			};
			
			//ie6, add a scroll event to fix position:fixed
			if(ie6) {
				$window.scroll(ie6scroll);
			}
		
			//ATUALIZA TAMANHO DA jAlert
			$jqi.width(options.width);
			if(options.height != 'auto'){
				$jqi.height(options.height);
			}
			$('div[rel=impromptu] div.jqimessage').css('max-height', $window.height()-88);
						
			
			$jqif.click(fadeClicked);
			$window.resize(function(){ 
				positionPrompt(); 
			});
			$jqib.bind("keydown keypress",keyPressEventHandler);
			$jqi.find('.'+ options.prefix +'close').click(removePrompt);
			$jqi.find('a#maximizar_minimizar').click(MinimizeMaximize);
			$jqi.find('.'+ options.prefix +'close_message_sql').click(function(){
			$jqi.find('.'+ options.prefix +'message_sql').slideToggle();
			});
			
			positionPrompt();
			stylePrompt();
			
			//Show it
			$jqif.fadeIn(options.overlayspeed);
			$jqi[options.show](options.promptspeed,options.loaded);
			$jqi.find('#'+ options.prefix +'states .'+ options.prefix +'_state:first .'+ options.prefix +'defaultbutton').focus();
						
			if(options.draggable){
				try {
					$jqi.draggable({ opacity: 0.7, handle: 'div#jqibarratitulo' });
					$("div[rel=impromptu] div#jqibarratitulo").css({ cursor: 'move' });	
				} catch(e) { /* requires jQuery UI draggables */ }
			}
			

			if(options.resizable){
				try {
					$jqi.resizable({
						minHeight: (($jqi.outerHeight()*50)/100 > 100 ? ($jqi.outerHeight()*50)/100 : 100),
						minWidth: (($jqi.outerWidth()*70)/100 > 300 ? ($jqi.outerWidth()*70)/100 : 300),
						resize: resizeMessage,
						handles: 'n,e,s,w,se,sw,ne,nw'
					});
				} catch(e) { /* requires jQuery UI rezizable */ }
			}
			
			
			if(options.timeout > 0)
				setTimeout($.jAlert.close,options.timeout);
			
			return $jqib;
		}
	};
	
	$.jAlert.defaults = {
		prefix:'jqi',
		buttons: {
			Ok: false
		},
	 	loaded: function(){
	 	},
	  	submit: function(){
	  		return true;
		},
	 	callback: function(){
			
	 	},
		opacity: 0.7,
	 	zIndex: 999,
	  	overlayspeed: 'slow',
	   	promptspeed: 'fast',
   		show: 'fadeIn',
	   	focus: 0,
	   	useiframe: false,
	 	top: "0",
		height: 'auto',
		width: '500px',
		persistent: true,
	  	timeout: 0,
		draggable: true,
		resizable: true,
	  	state: {
			html: '',
		 	buttons: {
		 		Ok: true
		 	},
		  	focus: 0,
		   	submit: function(){
		   		return true;
		   }
	  	}
	};
	
	$.jAlert.currentPrefix = $.jAlert.defaults.prefix;

	$.jAlert.setDefaults = function(o) {
		$.jAlert.defaults = $.extend({}, $.jAlert.defaults, o);
	};
	
	$.jAlert.setStateDefaults = function(o) {
		$.jAlert.defaults.state = $.extend({}, $.jAlert.defaults.state, o);
	};
	
	$.jAlert.getStateContent = function(state) {
		return $('#'+ $.jAlert.currentPrefix +'_state_'+ state);
	};
	
	$.jAlert.getCurrentState = function() {
		return $('.'+ $.jAlert.currentPrefix +'_state:visible');
	};
	
	$.jAlert.getCurrentStateName = function() {
		var stateid = $.jAlert.getCurrentState().attr('id');
		
		return stateid.replace($.jAlert.currentPrefix +'_state_','');
	};
	
	$.jAlert.goToState = function(state) {
		$('.'+ $.jAlert.currentPrefix +'_state').slideUp('slow');
		$('#'+ $.jAlert.currentPrefix +'_state_'+ state).slideDown('slow',function(){
			$(this).find('.'+ $.jAlert.currentPrefix +'defaultbutton').focus();
		});
	};
	
	$.jAlert.nextState = function() {
		var $next = $('.'+ $.jAlert.currentPrefix +'_state:visible').next();

		$('.'+ $.jAlert.currentPrefix +'_state').slideUp('slow');
		
		$next.slideDown('slow',function(){
			$next.find('.'+ $.jAlert.currentPrefix +'defaultbutton').focus();
		});
	};
	
	$.jAlert.prevState = function() {
		var $next = $('.'+ $.jAlert.currentPrefix +'_state:visible').prev();

		$('.'+ $.jAlert.currentPrefix +'_state').slideUp('slow');
		
		$next.slideDown('slow',function(){
			$next.find('.'+ $.jAlert.currentPrefix +'defaultbutton').focus();
		});
	};
	
	$.jAlert.close = function() {
		$('#'+ $.jAlert.currentPrefix +'box').fadeOut('fast',function(){
        		$(this).remove();
		});
	};
	
	//ALIAS PARA AS FUNCOES CURTAS
	jAlert = function(message, tipo_mensagem, titulo, options, mensagem_sql, hearderPagina){
		$.jAlert(message, tipo_mensagem, titulo, options, mensagem_sql, hearderPagina);
	}	
})(jQuery);
