//************************************************************************//
//  MODAL                                                                 //
//  Versão: 1.1                                                           //
//************************************************************************//


// inclui a chamada do CSS na pagina caso o css nao tenha sido carregad
if(jQuery("link[href*='modal-1.1.css']").length == 0){
	document.write("<link href='/css/modal-1.1.css' rel='stylesheet' type='text/css' />");
	if(jQuery.browser.msie && jQuery.browser.version <= 7 ){
		document.write("<link href='/css/modal-1.1.ie6.css' rel='stylesheet' type='text/css' />");
	}
}

// monta um botao na modal
jQuery.fn.modal_botao = function(title, fn, className, data){
	if(!data) data={};
	var grp = jQuery(".m-botoes",this);
		data.modal = this;
	var btn = jQuery("<a/>").attr({href:"javascript:void(0)"})
							.html(title.substr(0,50))
							.addClass("botao "+className)
							.appendTo(grp)
							.montaBotao({prefix:"botao"})
							.bind("click", data, fn);
	return btn;
};
// cria uma modal a partir de um elemento
jQuery.fn.modal = function(P){
	P = jQuery.extend({
		source: jQuery(this).html(),
		tipo: jQuery(this).attr("tipo")||"custom"
	}, P);
	this.each(function(){
		P.local = this;
		jQuery(this).click(function(){
			jQuery.modal( P.source , P.tipo, P);
		});
	});
}

// fecha todas as modais do sistema
jQuery.fechaModalTodos = function(instantaneo){
	instantaneo = instantaneo?true:false;
	if(instantaneo){
		jQuery(".modal,.modal-trava").remove();
	}else{
		jQuery(".modal").trigger('fecha');
	}
};

// cria uma modal apartir do XML de tradução de mansagens
jQuery.modalCod = function(cod, dados, P){
	dados = !dados?false:dados;
	jQuery.textoIdioma(cod, function(data){
		var html = data.text();
		if(dados.length > 0){
			if(html.indexOf('@dado') > 0){
				jQuery.each(dados, function(i, val){
					reg = new RegExp(/\@dado/);
					html = html.replace(reg, val);
				});
			}else{
				html = jQuery("<div/>").html(html);
				var lista = jQuery("<ol/>").appendTo(html);
				jQuery.each(dados, function(i, val){
					var it = jQuery("<li/>").html(val).appendTo(lista);
				});
			}
		}
		jQuery.modal(html, data.attr('tipo'), P);
	});
}

// monta a base do modal
jQuery.modal_base = function(P){
	/*
	* Fernanda - 30/06/09
	* Colocada uma condição para a abertura do modal no IE 6.
	* Ao abrir o modal, ele pega todos os selects visíveis da página, esconde eles com
	* a propriedade visibility do CSS (que só deixa o elemento invisível, mantendo o valor e as dimensões dele)
	* e adiciona a classe 'selectEscondidoModal' (...)
	*/
	if (jQuery.browser.msie && jQuery.browser.version == '6.0') { jQuery('select:visible').css('visibility','hidden').addClass("selectEscondidoModal"); };
	var padding = jQuery(".modal").length*10;
	local = jQuery(P.local);
	var modal = jQuery(html_modal).appendTo(local).css({paddingTop:padding,paddingLeft:padding})
		.bind("fecha", function(e){
			if(!modal.attr("fechando")){
				modal.attr({fechando:"1"});	
				modal.fadeOut('fast', function(){
					/*
					* Fernanda - 30/06/09
					* Seleciona os selects de classe 'selectEscondidoModal' e
					* devolve a visibilidade normal, além de tirar a classe 'selectEscondidoModal'
					*/
					if (jQuery.browser.msie && jQuery.browser.version == '6.0') { jQuery('select.selectEscondidoModal').css('visibility','visible').removeClass("selectEscondidoModal"); }; 
					modal.remove();
				})
			}
			if(P.trava){
				jQuery(".modal-trava").fadeOut('fast',function(){ jQuery(this).remove(); });
			}
		}).attr({id:'modalId_'+P.id}).width(P.width).bind("remover", function(){
			modal.remove();
		}).center();
	if(P.unico)
		modal.addClass("modal-unico");
	if(P.trava){
		jQuery.ajustaModalTrava(P);
	}
	if(jQuery.browser.msie && jQuery.browser.version <= 6){
		if(!P.trava)
			var iframe = jQuery("<iframe/>").width( modal.width()+20 ).height( modal.height()+20 ).appendTo(modal);
	}
	return modal;
};
jQuery.ajustaModalTrava = function(P){
	if(P){
		trava = jQuery(P.trava);
		local = P.local;
	}else if(jQuery(".modal-trava").length){
		var P = {};
			P.trava = jQuery(".modal-trava").attr("trava");
		var trava = jQuery(P.trava);
		var local = jQuery(".modal-trava").attr("local");
	}
	if(trava){
		jQuery(".modal-trava").remove();
		var pos = {top:0,left:0};
		trava.each(function(i,e){
			if(P.trava!='body'){
				pos = jQuery(this).position();
			}
			var travaed = jQuery("<div/>").addClass("modal-trava")
				.attr({trava:P.trava,local:local})
				.css({top:pos.top,left:pos.left,opacity:.6})
				.width(jQuery(this).outerWidth())
				.height(jQuery(this).outerHeight())
				.appendTo(local);
			var iframe = jQuery("<iframe/>").width( trava.outerWidth() ).height( trava.outerHeight() ).appendTo(travaed);
		});
	}
}
jQuery(window).resize(function(){ jQuery.ajustaModalTrava(); });

var html_modal = '';
// cartrrega o html base da modal
jQuery.ajax({url: "/templates/base_modal.tpl",success: function(html){html_modal = html;}});

jQuery.modal = function(source, type, P){
	if(!html_modal){
		jQuery.ajax({url: "/templates/base_modal.tpl",
			success: function(html){
				html_modal = html;
				jQuery.montaModal(source, type, P);
			}
		});
	}else{
		jQuery.montaModal(source, type, P);
	}
};

jQuery.montaModal = function(source, type, P){
	P = jQuery.extend({
		botoes: [],
		id: 'default'+Math.ceil(Math.random()*10000),
		local: "body",
		unico: false,
		trava: false,
		data: false,
		width: 400
	}, P);
	if(jQuery('#modalId_'+P.id+':visible').length || jQuery('.modal-unico:visible').length){ jQuery.fechaModalTodos(true); }
	if(P.unico){ jQuery.fechaModalTodos(true); }
	
	var base = jQuery.modal_base(P);
	var conteudo = jQuery(".m-conteudo",base).html(source);
	var icone = jQuery(".m-icone",base);
	var className = type;
	var actFechar = function(){ base.trigger('fecha'); };
	
	switch(type){
		case 'ok':
			base.modal_botao('OK', function(e){ base.trigger('fecha'); });
		break;
		case 'important':
			base.modal_botao('OK', function(e){ base.trigger('fecha'); });
			className = 'alert';
		break;
		case 'confirm':
			base.click(function(){ base.trigger('fecha'); });
			setTimeout(actFechar, 2500);
		break;
		case 'alert':
			base.click(function(){ base.trigger('fecha'); });
			setTimeout(actFechar, 2500);
		break;
		case 'erro':
			base.modal_botao('OK', function(e){ base.trigger('fecha'); });
		break;
		case 'custom':
			className = P.type;
			jQuery.each(P.botoes, function(i, val){
				var botao = base.modal_botao(val[0], val[1], val[2], P.data);
				if(val[3]){ botao.focus(); }
			});
		break;
		case 'whait':
			base.addClass("whait");
			// carrega enquanto
		break;
		default:
			base.trigger('fecha');
		break;
	}
	icone.addClass('icone_'+className);
	jQuery(".m-botoes",base).append("<div class='clear'/>").centralizaBotao();
};