(function($){$.fn.calendar=function(opts){var options=$.extend({},$.fn.calendar.defaults,opts);return this.each(function(){new Calendario(this,options);});};$.fn.calendar.defaults={meses:['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],dias_semana:['lun','mar','mie','jue','vie','sab','dom'],mes_anterior:'ver las noticias del mes anterior',mes_siguiente:'ver las noticias del mes siguiente',noticias_de_dia:'noticias del día'};function Calendario(form,opts){this.form=$(form);this.opts=opts;this.form_day=this.form.find('.calendar-day');this.form_month=this.form.find('.calendar-month');this.form_year=this.form.find('.calendar-year');this.only_calendar=this.form.hasClass('only-calendar');this.form.hide();this.meses=this.opts.meses;this.today=new Date();this.date=new Date();this.date.setDate(1);this.calendar=$('<div id="calendar"></div>');var self=this;this.back=$('<a class="back" href="#" title="'+this.opts.mes_anterior+'"></a>').click(function(e){e.preventDefault();self.date.setDate(1);self.date.setMonth(self.date.getMonth()-1);self.update_calendar();});this.next=$('<a class="next" href="#" title="'+this.opts.mes_siguiente+'"></a>').click(function(e){e.preventDefault();self.date.setDate(1);self.date.setMonth(self.date.getMonth()+1);self.update_calendar();});if(this.only_calendar){this.calendar.insertAfter(this.form);}else{this.link=$('<a class="calendar" href="#">'+this.opts.noticias_de_dia+'</a>').insertAfter(this.form);this.link.click(function(e){e.preventDefault();var $calendar=self.calendar;var $t=$(this);if(!document.getElementById('calendar')){$calendar.hide().appendTo($t.parent());}
if($calendar.css('display')=='none'){var pos=$t.position();pos.top+=$t.height();pos.left-=240-$t.outerWidth();$calendar.css(pos).fadeIn();}
else{$calendar.hide();}});}
this.calendar.append(this.build_caption());this.update_calendar();};Calendario.prototype.extend=$.extend;Calendario.prototype.extend({build_table:function(){var table=$('<table cellspacing="0" cellpadding="0"></table>');var header='<thead><tr>';$(this.opts.dias_semana).each(function(){header+='<th>'+this+'</th>';});header+='</tr></thead>';table.append(header);table.append(this.build_body());return table;},build_caption:function(){var cab=$('<div class="calendar-cab"></div>');cab.append(this.next);cab.append(this.back);this.caption=$('<span></span>');cab.append(this.caption);return cab;},build_body:function(){var c_dias=1,total_dias=0,start_day=this.date.getDay()?this.date.getDay():7;temp_date=new Date(this.date.valueOf());temp_date.setMonth(temp_date.getMonth()-1);total_dias=this.calculate_days_of_month(this.date.getMonth());var dias_mes_anterior=this.calculate_days_of_month(temp_date.getMonth());dias_mes_anterior-=(start_day-2);var mes_siguiente=false;var body=$('<tbody>');while(c_dias<=total_dias){var tr=$('<tr>');for(var i=1;i<=7;i++){var td=$('<td></td>');if(i>=start_day&&c_dias<=total_dias){this.date.setDate(c_dias);var td_class=this.date<this.today?'back':'';if(this.date.getDate()==this.today.getDate()&&this.date.getMonth()==this.today.getMonth()&&this.date.getFullYear()==this.today.getFullYear()){td_class='today';}
td.addClass(td_class);td.html(c_dias++);td.data('year',this.date.getFullYear());td.data('month',this.date.getMonth()+1);td.data('day',this.date.getDate());if(c_dias>total_dias){dias_mes_anterior=1;mes_siguiente=true;}}
else{td.addClass('othermonth');if(mes_siguiente==true){temp_date.setMonth(this.date.getMonth()+1);}
td.data('year',temp_date.getFullYear());td.data('month',temp_date.getMonth()+1);td.data('day',dias_mes_anterior);td.html(dias_mes_anterior++);}
var self=this;td.click(function(){var $t=$(this);self.form_year.find('[value='+$t.data('year')+']').get(0).selected=true;self.form_month.find('[value='+$t.data('month')+']').get(0).selected=true;self.form_day.find('[value='+$t.data('day')+']').get(0).selected=true;if(!self.only_calendar){self.calendar.hide();}
self.form.submit();});tr.append(td);}
start_day=0;body.append(tr);}
return body;},update_calendar:function(){this.calendar.find('table').remove();this.caption.text(this.meses[this.date.getMonth()]+' '+this.date.getFullYear());this.calendar.append(this.build_table());},calculate_days_of_month:function(month){days=0;switch(month){case 1:var y=this.date.getFullYear();days=(y%4&&!(y%100)?29:28);break;case 0:case 2:case 4:case 6:case 7:case 9:case 11:days=31;break;default:days=30;}
return days;}});})(jQuery);
