function ultimo_dia(mes,ano){
	if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) return 31;
	if(mes==4||mes==6||mes==9||mes==11) return 30;
	if(mes==2) if(ano%400==0) return 29;
	if(mes==2) if(ano%100==0) return 28;
	if(mes==2) if(ano%4==0) return 29;	else return 28;
}
var nomeMes = new Array("Janeiro","Fevereiro","Mar&ccedil;o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro");
var hoje = new Date();
var diaAtual = hoje.getDate();
var mesAtual = hoje.getMonth()+1;
var anoAtual = hoje.getFullYear();
var dataAtual = diaAtual+'/'+mesAtual+'/'+anoAtual;
var contCalendario = 0;

jQuery.fn.calendario = function(options){
	var settings = {
		target:'',
		targetDay:'',
		targetMonth:'',
		targetYear:'',
		minDate:'',
		maxDate:'',
		dateDefault: dataAtual,
		left:'0',
		top:'30',
		referencePosition: this,
		closeClick: true
	};

	options = jQuery.extend(settings, options);
	arrData = options.dateDefault.split('/');
	diaOriginal = parseInt(arrData[0]);
	mesOriginal = parseInt(arrData[1])-1;
	anoOriginal = parseInt(arrData[2]);

	// VERIFICANDO RANGE
	var diaMinimo = 0; var mesMinimo = 0;var anoMinimo = 0;
	if(options.minDate!=''){
		arrData = options.minDate.split('/');
		diaMinimo = parseInt(arrData[0]);
		mesMinimo = parseInt(arrData[1])-1;
		anoMinimo = parseInt(arrData[2]);
	}
	var diaMaximo = 9999; var mesMaximo = 9999;	var anoMaximo = 9999;
	if(options.maxDate!=''){
		arrData = options.maxDate.split('/');
		diaMaximo = parseInt(arrData[0]);
		mesMaximo = parseInt(arrData[1])-1;
		anoMaximo = parseInt(arrData[2]);
	}

	this.each(function(){
		// Verificando se o botao tem id, senão tem, vai atribuir um id pro botão, para evitar de gerar 2 calendarios
		if(jQuery(this).attr('id')==''){
			contCalendario++;
			jQuery(this).attr('id','chamada_cal_'+contCalendario)
		}
		idChamada = jQuery(this).attr('id');

		var mes = mesOriginal;
		var ano = anoOriginal;

		// determinando id pro calendário
		idCalendario = 'cal_'+idChamada;
		idCalendario = idCalendario.replace('_dia','').replace('_mes','').replace('_ano','');

		if($j('#'+idCalendario).size()>0) return false;

		//criando div
		jQuery('body').append('<div class="calendario" id="'+idCalendario+'"><a href="#" class="bt_controle_mes bt_voltar_mes"><img src="../imagens/seta_esq.jpg" class="seta_do_mes" width="6" height="11" align="absmiddle" border="0" /></a><p class="nome_mes texto_verde">mês ano</p><a href="#" class="bt_controle_mes bt_avancar_mes"><img src="../imagens/seta_dir.jpg" width="6" class="seta_do_mes" height="11" align="absmiddle" border="0" /></a><ul class="lista_dia"><li class="semana">D</li><li class="semana">S</li><li class="semana">T</li><li class="semana">Q</li><li class="semana">Q</li><li class="semana">S</li><li class="semana">S</li></ul></div>');
		$j('#'+idCalendario).append('<input type="hidden" name="calendarioMes" value="'+mes+'"/>');
		$j('#'+idCalendario).append('<input type="hidden" name="calendarioAno" value="'+ano+'"/>');

		function preencher_calendario(idCalendario){
			// colocando ou alterando título do calendário
			var titulo = nomeMes[mes]+" "+ano;
			$j('#'+idCalendario+' p.nome_mes').html(titulo);

			// Apagando dias do calendário (caso o usuario esteja avancando / voltando o mes)
			$j('#'+idCalendario+' ul.lista_dia li.dia_vazio').remove();
			$j('#'+idCalendario+' ul.lista_dia li.dia').remove();
			
			hoje = new Date();

			// Obtendo o dia da semana do primeiro dia do mês
			hoje.setFullYear( ano, mes, 1 );
			var inicioSemana = hoje.getDay();
			// Preenchendo dias vazios no calendário
			for(i=0;i<inicioSemana;i++){
				$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia_vazio'>&nbsp;<\/li>");
			}

			// preenchendo dias do mes
			var fimMes = ultimo_dia(mes+1,ano);
			for(i=1;i<=fimMes;i++){
				if( (ano == anoMinimo && mes == mesMinimo && i < diaMinimo ) || (ano == anoMaximo && mes == mesMaximo && i > diaMaximo )  ){
					$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'>"+i+"<\/li>");
				} else {
					if(options.target!='' || options.targetDay != '' || options.targetMonth != '' || options.targetYear != ''){
						$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'><a href='#'>"+i+"<\/a><\/li>");
					} else {
						$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'>"+i+"<\/li>");
					}
				}
			}

			$j('#'+idCalendario+' ul.lista_dia li a').click(function(){
				var dia = $j.trim($j(this).html());
				if(dia.length==1)dia = '0'+dia;
				var mes = (1 + parseInt($j.trim($j(this.parentNode.parentNode.parentNode).find('input[name="calendarioMes"]').val()))).toString();
				if(mes.length==1)mes = '0'+mes;
				var ano = parseInt($j.trim($j(this.parentNode.parentNode.parentNode).find('input[name="calendarioAno"]').val()));

				if(options.target!='' && $j(options.target).size()>0){
					var tag = $j(options.target).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.target).val(dia+'/'+mes+'/'+ano);
					} else {
						$j(options.target).html(dia+'/'+mes+'/'+ano);
					}
				}
				if(options.targetDay!='' && $j(options.targetDay).size()>0){
					var tag = $j(options.targetDay).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.targetDay).val(dia);
					} else {
						$j(options.targetDay).html(dia);
					}
				}
				if(options.targetMonth!='' && $j(options.targetMonth).size()>0){
					var tag = $j(options.targetMonth).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.targetMonth).val(mes);
					} else {
						$j(options.targetMonth).html(mes);
					}
				}
				if(options.targetYear!='' && $j(options.targetYear).size()>0){
					var tag = $j(options.targetYear).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.targetYear).val(ano);
					} else {
						$j(options.targetYear).html(ano);
					}
				}

				if(options.closeClick)$j('#'+idCalendario).remove();
				return false;
			});
			navegacaoCalendario(idCalendario);
			data = "mes="+mes+"&ano="+ano;

			requestAjax( '../agenda/conn.php','POST',data,'text','teste', idCalendario );
		}

		/**
		*	AJAX
		*
		*/

		function requestAjax( url, type, data, dataType, returnFunction, idCalendario ){
			try{
				$j.ajax({
					type : type,
					url  : url,
					data : data,
					dataType : dataType,
					success : function( response ){
						eval(returnFunction + "(\'" + response + "\',\'" +idCalendario+ "\');" );
					},
					error : function( error ){
					//	alert('Erro de requisição!');
					}
				});
			}catch(e){ alert('Erro no método requestAjax()'); return false; }
		}

		/**
		*	INICIO TESTE
		*
		*/
		function teste(response,idCalendario){
			var objJson = eval( '(' +response+ ')' );

			// colocando ou alterando título do calendário
			var titulo = nomeMes[mes]+" "+ano;

			$j('#'+idCalendario+' p.nome_mes').html(titulo);
			// Apagando dias do calendário (caso o usuario esteja avancando / voltando o mes)
			$j('#'+idCalendario+' ul.lista_dia li.dia_vazio').remove();
			$j('#'+idCalendario+' ul.lista_dia li.dia').remove();
			
			hoje1 = new Date();

			// Obtendo o dia da semana do primeiro dia do mês
			hoje1.setFullYear(ano,mes,1);
			var inicioSemana = hoje1.getDay();

			// Preenchendo dias vazios no calendário
			for(i=0;i<inicioSemana;i++){
				$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia_vazio'>&nbsp;<\/li>");
			}

			// preenchendo dias do mes
			var fimMes = ultimo_dia(mes+1,ano);
			for(i=1;i<=fimMes;i++){
				if( (ano == anoMinimo && mes == mesMinimo  ) || (ano == anoMaximo && mes == mesMaximo  )  ){
					$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'>"+i+"<\/li>");
				} else {
					if(options.target!='' || options.targetDay != '' || options.targetMonth != '' || options.targetYear != ''){
						$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'><span id='"+i+"'>"+i+"</span><\/li>");
					} else {
						$j('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'><span id='"+i+"'>"+i+"</span><\/li>");
					}
				}
			}
			if( objJson != null ) {
				for( var ix=0; ix < objJson.length; ix++ ){
					dataTeste = objJson[ix].dta_evento;
					diadb = dataTeste.substring(0,2);
					mesx = dataTeste.substring(4,5) - 1;
					anox = dataTeste.substring(6,10);
	
					diax = ( diadb < 10 ) ? diadb.substring(1,2) : diadb.substring(0,2);
	
					$j('#'+diax).html('');
					$j('#'+diax).append("<a href='#' class='tooltipHref' title='" +objJson[ix].nom_evento+ "'>"+diax+"</a>");
					switch(objJson[ix].tipo_evento){
						case '1':
							$j('#'+idCalendario+' ul.lista_dia li.dia_n'+diax).addClass('tipo1');
							break;
						case '2':
							$j('#'+idCalendario+' ul.lista_dia li.dia_n'+diax).addClass('tipo2');
							break;
						case '3':
							$j('#'+idCalendario+' ul.lista_dia li.dia_n'+diax).addClass('tipo3');
							break;
					}
				}
			}

			$j('#'+idCalendario+' ul.lista_dia li a').click(function(){
				var dia = $j.trim($j(this).html());
				if(dia.length==1)dia = '0'+dia;
				var mes = (1 + parseInt($j.trim($j(this.parentNode.parentNode.parentNode).find('input[name="calendarioMes"]').val()))).toString();
				if(mes.length==1)mes = '0'+mes;
				var ano = parseInt($j.trim($j(this.parentNode.parentNode.parentNode).find('input[name="calendarioAno"]').val()));

				if(options.target!='' && $j(options.target).size()>0){
					var tag = $j(options.target).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.target).val(dia+'/'+mes+'/'+ano);
					} else {
						$j(options.target).html(dia+'/'+mes+'/'+ano);
					}
				}
				if(options.targetDay!='' && $j(options.targetDay).size()>0){
					var tag = $j(options.targetDay).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.targetDay).val(dia);
					} else {
						$j(options.targetDay).html(dia);
					}
				}
				if(options.targetMonth!='' && $j(options.targetMonth).size()>0){
					var tag = $j(options.targetMonth).get(0).tagName.toLowerCase();

					if(tag=='input'){
						$j(options.targetMonth).val(mes);
					} else {
						$j(options.targetMonth).html(mes);
					}
				}
				if(options.targetYear!='' && $j(options.targetYear).size()>0){
					var tag = $j(options.targetYear).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$j(options.targetYear).val(ano);
					} else {
						$j(options.targetYear).html(ano);
					}
				}

				if(options.closeClick)$j('#'+idCalendario).remove();
				return false;
			});
			navegacaoCalendario(idCalendario);
			$j('.tooltipHref').tooltip({
				delay: 0,
				showBody: "::",
				track: true,
				showURL: false,
				fixPNG: true,
				fade: 250
			});
		}
		/**
		*	FIM TESTE
		*
		*/

		function navegacaoCalendario(idCalendar){
			$j('#'+idCalendar+' a.fechar').unbind();
			$j('#'+idCalendar+' a.fechar').click(function(){
				$j('#'+idCalendar).remove();
				return false;
			});

			if(ano == anoMinimo && mes == mesMinimo){
				$j('#'+idCalendar+' a.bt_voltar_mes').hide();
			} else {
				$j('#'+idCalendar+' a.bt_voltar_mes').show();
				$j('#'+idCalendar+' a.bt_voltar_mes').unbind();
				$j('#'+idCalendar+' a.bt_voltar_mes').click(function(){
					mes = parseInt($j('input[name="calendarioMes"]').val());
					ano = parseInt($j('input[name="calendarioAno"]').val());
					mes--;
					if(mes < 0){
						mes = 11;
						ano--;
					}
					$j('input[name="calendarioMes"]').val(mes);
					$j('input[name="calendarioAno"]').val(ano);
					preencher_calendario(idCalendar);
					return false;
				});
			}

			if(ano == anoMaximo && mes == mesMaximo){
				$j('#'+idCalendar+' a.bt_avancar_mes').hide();
			} else {
				$j('#'+idCalendar+' a.bt_avancar_mes').show();
				$j('#'+idCalendar+' a.bt_avancar_mes').unbind();
				$j('#'+idCalendar+' a.bt_avancar_mes').click(function(){
					mes = parseInt($j('input[name="calendarioMes"]').val());
					ano = parseInt($j('input[name="calendarioAno"]').val());
					mes++;
					if(mes == 12){
						mes = 0;
						ano++;
					}
					$j('input[name="calendarioMes"]').val(mes);
					$j('input[name="calendarioAno"]').val(ano);
					preencher_calendario(idCalendar);
					return false;
				});
			}
		}

		preencher_calendario(idCalendario);

		var posicoes = $j(options.referencePosition).offset();
		var leftPosition = posicoes.left + parseInt(options.left);
		var topPosition = posicoes.top + parseInt(options.top);

		$j('#'+idCalendario).css({
		'left':leftPosition,
		'top':topPosition
		});
		$j('#'+idCalendario).show();
	});
};
