forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
10 KiB
215 lines
10 KiB
2 years ago
|
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ç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], 10);
|
||
|
mesOriginal = parseInt(arrData[1], 10) - 1;
|
||
|
anoOriginal = parseInt(arrData[2], 10);
|
||
|
// VERIFICANDO RANGE
|
||
|
var diaMinimo = 0; var mesMinimo = 0; var anoMinimo = 0;
|
||
|
if (options.minDate != ''){
|
||
|
arrData = options.minDate.split('/');
|
||
|
diaMinimo = parseInt(arrData[0], 10);
|
||
|
mesMinimo = parseInt(arrData[1], 10) - 1;
|
||
|
anoMinimo = parseInt(arrData[2], 10);
|
||
|
}
|
||
|
var diaMaximo = 9999; var mesMaximo = 9999; var anoMaximo = 9999;
|
||
|
if (options.maxDate != ''){
|
||
|
arrData = options.maxDate.split('/');
|
||
|
diaMaximo = parseInt(arrData[0], 10);
|
||
|
mesMaximo = parseInt(arrData[1], 10) - 1;
|
||
|
anoMaximo = parseInt(arrData[2], 10);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
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 ($('#' + idCalendario).size() > 0) return false;
|
||
|
//criando div
|
||
|
jQuery('body').append('<div class="calendario" id="' + idCalendario + '"><a href="#" class="fechar" title="Fechar">X</a><a href="#" class="bt_controle_mes bt_voltar_mes">«</a><p class="nome_mes">mês ano</p><a href="#" class="bt_controle_mes bt_avancar_mes">»</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>');
|
||
|
$('#' + idCalendario).append('<input type="hidden" name="calendarioMes" value="' + mes + '"/>');
|
||
|
$('#' + 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;
|
||
|
$('#' + idCalendario + ' p.nome_mes').html(titulo);
|
||
|
// Apagando dias do calendário (caso o usuario esteja avancando / voltando o mes)
|
||
|
$('#' + idCalendario + ' ul.lista_dia li.dia_vazio').remove();
|
||
|
$('#' + idCalendario + ' ul.lista_dia li.dia').remove();
|
||
|
// Obtendo o dia da semana do primeiro dia do mês
|
||
|
var primeiro = new Date();
|
||
|
primeiro.setFullYear(ano, mes, 1);
|
||
|
var inicioSemana = primeiro.getDay();
|
||
|
// Preenchendo dias vazios no calendário
|
||
|
for (i = 0; i < inicioSemana; i++){
|
||
|
$('#' + idCalendario + ' ul.lista_dia').append("<li class='dia_vazio'> <\/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)){
|
||
|
$('#' + idCalendario + ' ul.lista_dia').append("<li class='dia dia_n" + i + "'>" + i + "<\/li>");
|
||
|
} else {
|
||
|
if (options.target != '' || options.targetDay != '' || options.targetMonth != '' || options.targetYear != ''){
|
||
|
$('#' + idCalendario + ' ul.lista_dia').append("<li class='dia dia_n" + i + "'><a href='#'>" + i + "<\/a><\/li>");
|
||
|
} else {
|
||
|
$('#' + idCalendario + ' ul.lista_dia').append("<li class='dia dia_n" + i + "'>" + i + "<\/li>");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// verificando se a data preenchida é hoje
|
||
|
if (mes == mesOriginal && ano == anoOriginal){
|
||
|
$('#' + idCalendario + ' ul.lista_dia li.dia_n' + diaOriginal).addClass('default');
|
||
|
}
|
||
|
|
||
|
$('#' + idCalendario + ' ul.lista_dia li a').click(function(){
|
||
|
var dia = $.trim($(this).html());
|
||
|
if (dia.length == 1)dia = '0' + dia;
|
||
|
var mes = (1 + parseInt($.trim($(this.parentNode.parentNode.parentNode).find('input[name="calendarioMes"]').val()), 10)).toString();
|
||
|
if (mes.length == 1)mes = '0' + mes;
|
||
|
var ano = parseInt($.trim($(this.parentNode.parentNode.parentNode).find('input[name="calendarioAno"]').val()), 10);
|
||
|
if (options.target != '' && $(options.target).size() > 0){
|
||
|
var tag = $(options.target).get(0).tagName.toLowerCase();
|
||
|
if (tag == 'input'){
|
||
|
$(options.target).val(dia + '/' + mes + '/' + ano);
|
||
|
} else {
|
||
|
$(options.target).html(dia + '/' + mes + '/' + ano);
|
||
|
}
|
||
|
}
|
||
|
if (options.targetDay != '' && $(options.targetDay).size() > 0){
|
||
|
var tag = $(options.targetDay).get(0).tagName.toLowerCase();
|
||
|
if (tag == 'input'){
|
||
|
$(options.targetDay).val(dia);
|
||
|
} else {
|
||
|
$(options.targetDay).html(dia);
|
||
|
}
|
||
|
}
|
||
|
if (options.targetMonth != '' && $(options.targetMonth).size() > 0){
|
||
|
var tag = $(options.targetMonth).get(0).tagName.toLowerCase();
|
||
|
if (tag == 'input'){
|
||
|
$(options.targetMonth).val(mes);
|
||
|
} else {
|
||
|
$(options.targetMonth).html(mes);
|
||
|
}
|
||
|
}
|
||
|
if (options.targetYear != '' && $(options.targetYear).size() > 0){
|
||
|
var tag = $(options.targetYear).get(0).tagName.toLowerCase();
|
||
|
if (tag == 'input'){
|
||
|
$(options.targetYear).val(ano);
|
||
|
} else {
|
||
|
$(options.targetYear).html(ano);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (options.closeClick)$('#' + idCalendario).remove();
|
||
|
return false;
|
||
|
});
|
||
|
navegacaoCalendario(idCalendario);
|
||
|
}
|
||
|
|
||
|
function navegacaoCalendario(idCalendario){
|
||
|
|
||
|
$('#' + idCalendario + ' a.fechar').unbind();
|
||
|
$('#' + idCalendario + ' a.fechar').click(function(){
|
||
|
$('#' + idCalendario).remove();
|
||
|
return false;
|
||
|
});
|
||
|
//alert('ano = '+ano+' / mes = '+mes+'\nanoMinimo = '+anoMinimo+' e mesMinimo '+mesMinimo);
|
||
|
if (ano == anoMinimo && mes == mesMinimo){
|
||
|
$('#' + idCalendario + ' a.bt_voltar_mes').hide();
|
||
|
} else {
|
||
|
$('#' + idCalendario + ' a.bt_voltar_mes').show();
|
||
|
$('#' + idCalendario + ' a.bt_voltar_mes').unbind();
|
||
|
$('#' + idCalendario + ' a.bt_voltar_mes').click(function(){
|
||
|
mes = parseInt($('input[name="calendarioMes"]').val(), 10);
|
||
|
ano = parseInt($('input[name="calendarioAno"]').val(), 10);
|
||
|
mes--;
|
||
|
if (mes < 0){
|
||
|
mes = 11;
|
||
|
ano--;
|
||
|
}
|
||
|
$('input[name="calendarioMes"]').val(mes);
|
||
|
$('input[name="calendarioAno"]').val(ano);
|
||
|
preencher_calendario(idCalendario);
|
||
|
return false;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (ano == anoMaximo && mes == mesMaximo){
|
||
|
$('#' + idCalendario + ' a.bt_avancar_mes').hide();
|
||
|
} else {
|
||
|
$('#' + idCalendario + ' a.bt_avancar_mes').show();
|
||
|
$('#' + idCalendario + ' a.bt_avancar_mes').unbind();
|
||
|
$('#' + idCalendario + ' a.bt_avancar_mes').click(function(){
|
||
|
mes = parseInt($('input[name="calendarioMes"]').val(), 10);
|
||
|
ano = parseInt($('input[name="calendarioAno"]').val(), 10);
|
||
|
mes++;
|
||
|
if (mes == 12){
|
||
|
mes = 0;
|
||
|
ano++;
|
||
|
}
|
||
|
$('input[name="calendarioMes"]').val(mes);
|
||
|
$('input[name="calendarioAno"]').val(ano);
|
||
|
preencher_calendario(idCalendario);
|
||
|
return false;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
preencher_calendario(idCalendario);
|
||
|
var posicoes = $(options.referencePosition).offset();
|
||
|
var leftPosition = posicoes.left + parseInt(options.left, 10);
|
||
|
var topPosition = posicoes.top + parseInt(options.top, 10);
|
||
|
$('#' + idCalendario).css({
|
||
|
'left':leftPosition,
|
||
|
'top':topPosition
|
||
|
});
|
||
|
$('#' + idCalendario).show();
|
||
|
});
|
||
|
};
|
||
|
|