/* * Calendar for * JQuery * Manuel Garcia (thekeeper) * http://www.mgarcia.info * Version 0.2 * * Copyright (c) 2007 Manuel Garcia * http://www.opensource.org/licenses/mit-license.php */ var fechaHoy; jQuery.calendarE = function (el,open,Config) {jQuery.calendarE.initialize(el);} Element = function (el) {return jQuery("<"+el+">");} jQuery.extend(jQuery.calendarE, { initialize: function(el,open,Config) { this.input = $(el); fechaHoy = this.input.attr('value'); var lng = new Object(); // Firefox? IE ? try { var nav = navigator.language.substr(0,2); } catch (e) { var nav = navigator.userLanguage;} lng['en'] = { month : ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], day : ['L','M','M','J','V','S','D'], first: 1 // First day of week => Monday }; lng['es'] = { month : ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], day : ['L','M','M','J','V','S','D'], first: 1 // First day of week => Monday }; lng = (!lng[nav])? lng['en'] : lng = lng[nav] ; /* configuration */ if (!Config) this.config = { Lng: lng, imgNext: 'img/next.gif', imgPrev: 'img/prev.gif' }; this.month_name = this.config.Lng.month; this.day_name = this.config.Lng.day; this.create_calendar(); }, findPos: function (obj) { var curleft = curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } return [curleft,curtop]; }, create_calendar: function() { var position = this.input; if ($('#ncalendar')) $('#ncalendar').remove(); // content div // this.div = new Element('div') .css({ 'left':position.left}) .attr('id', 'ncalendar'); this.nav(); this.setdate(this.input.attr('value')); } , nav: function (today) { // nav this.calendardiv = new Element('div').appendTo(this.div); this.title = new Element('div') .css({'display':'inline','font-weight':'bold'}) .appendTo(this.calendardiv); // next month this.next = new Element('img').attr('src', this.config.imgNext).insertAfter(this.title) .css({'margin-left':'15px'}); // before month this.before = new Element('img').attr('src', this.config.imgPrev).insertBefore(this.title) .css({'margin-right':'15px'}); // table this.table = new Element('table').appendTo(this.calendardiv); var thead = new Element('thead').appendTo(this.table); var tr = new Element('tr').appendTo(thead); jQuery.each(this.day_name, function(day,el) { var td = new Element('th').html(el).appendTo(tr); }); var localThis = this; this.seeAll = new Element('p') .attr('id', 'seeAll') .text('ver todos') .appendTo(this.calendardiv); this.seeAll.click(function(e){ localThis.tbody.remove(); localThis.setdate(fechaHoy); }) }, setdate : function(date) { // reset event nav this.next.unbind( "click" ); this.before.unbind( "click" ); if (!this.validate_date(date)) { this.today = new Date(); this.today.setDate(1); } else { var dateinp = date.split('/'); this.today = new Date(dateinp[2],dateinp[1]-1,dateinp[0],0,0,0); } this.next_m = this.today.getMonth(); this.next_m++; this.title.html(this.month_name[this.today.getMonth()]+' ' + this.today.getFullYear()); var localThis = this; // event next this.next.click(function(e) { var date = localThis.today; date.setMonth(localThis.next_m+1,1); localThis.tbody.remove(); localThis.setdate(date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear()); var month = date.getMonth() + ""; if (month.length<2) month = "0" + month; var day = "01" + "/" + month + "/" + parseInt(date.getFullYear(),10); if (month == "00") month = "12"; eventsDate.loadEventsMonth($(localThis.input),parseInt(month,10)); }); var dateinp = fechaHoy.split('/'); this.todayy = new Date(dateinp[2],dateinp[1]-1,1,0,0); this.todayyy = new Date(this.today.getFullYear(),this.today.getMonth(),1,0,0); //if (this.todayyy > this.todayy) { this.before.click(function(e){ var date = localThis.today; date.setMonth(localThis.next_m - 1, 1); localThis.tbody.remove(); localThis.setdate(date.getDate() + '/' + date.getMonth() + '/' + date.getFullYear()); var month = date.getMonth() + ""; if (month.length<2) month = "0" + month; var day = "01" + "/" + month + "/" + parseInt(date.getFullYear(),10); if (month == "00") month = "12"; eventsDate.loadEventsMonth($(localThis.input),parseInt(month,10)); }); //} var LastMonth = new Date(this.today.getFullYear(),this.next_m-2,1,0,0,0); var last = LastMonth.getMonth(); // total days the last month var counter = 0; for (var b = 1; b <= 31; b++) { LastMonth.setDate(b); if ( LastMonth.getMonth() == last) { counter++; } } this.tbody = new Element('tbody').appendTo(this.table); var first_day = this.today; var last_day = this.today; this.month = this.today.getMonth(); var tr = new Element('tr').appendTo(this.tbody); var day=0; /* first day week */ first_day.setDate(1); var rest = (!first_day.getDay())? 6: first_day.getDay()-1; counter = counter - rest; for (var i= this.config.Lng.first; i <= 6; i++) { if (first_day.getDay() == i) { break; } else { counter++; LastMonth.setDate(counter); if (LastMonth.getMonth() == this.today.getMonth()) LastMonth.setMonth(this.today.getMonth()-1); this.create_td(tr,counter,LastMonth,'noday'); } } (this.config.Lng.first)? brea_k = 1:brea_k = 0; /* everydays */ var date_s = this.today; var class_Css; var brea_k; // breaking week var daycounter = 0; for (var i = 1; i <= 31; i++) { date_s.setDate(i); if (date_s.getMonth() == this.month) { daycounter++; if (date_s.getDay() == brea_k) { var tr = new Element('tr').appendTo(this.tbody); } class_Css = (!date_s.getDay())? 'sunday' : ''; this.create_td(tr,i,date_s,class_Css); } } this.today.setMonth(this.month); this.today.setDate(daycounter); var NextMonth = new Date(this.today.getFullYear(),this.today.getMonth()+1,1,0,0,0); // finish month var num = date_s.getDay(); num = (brea_k)? 7 - num: 6 - num; var b; b = (brea_k)? 0 : 6 ; if (this.today.getDay() != b) { for (var i= 1; i <= (num); i++) { NextMonth.setDate(i); this.create_td(tr,i,NextMonth,'noday'); } } this.div.insertAfter($(this.input)); }, create_td: function(tr,i,date,class_Css) { var localThis = this; var td = new Element('td'); if (date) { var dia = date.getDate(); var mes = (date.getMonth()+1); // 9 to 09 or another number <= 9 if (dia <= 9) dia = "0"+ dia; if (mes <= 9) mes = "0"+ mes; //if (serverData.eventsDays.length == 5) td.attr('id', dia + '/'+ mes +'/'+ date.getFullYear()); //else //var xxxxx = serverData.eventsDays.length; var sw = true; for (var j=0;j