
var Calendario=Class.create();Calendario.prototype={initialize:function(mostrarcontroles,fecha,target,dias_activados,idFieldDate,numMeses,accionGenericaTodos,accionGenericaEnAdelante,fechaInicioConsulta,fechaFinConsulta){var calendario=this;var partesFecha;var strNumDiaMeses=[31,28,31,30,31,30,31,31,30,31,30,31];this.recargado=false;this.field=idFieldDate||false;this.dia=1;this.mes=1;this.anno=2000;this.numdias=30;this.accionGenericaTodos=accionGenericaTodos;this.accionGenericaEnAdelante=accionGenericaEnAdelante;this.numMeses=numMeses||1;this.diainiciomes=0;this.bisiesto=false;this.diasfestivos=new Array();this.dias_activados=dias_activados||new Array();this.dias_con_datos=new Array();this.aToolTips=new Array();this.nomsemanal=strNomSemanal;this.meses=strMeses;this.numdiasmeses=strNumDiaMeses;this.mostrarcontroles=mostrarcontroles||false;this.idtarget=target||'calendario';this.fechaInicioConsulta=fechaInicioConsulta||'';this.fechaFinConsulta=fechaFinConsulta||'';if(this.mostrarcontroles){this.eventMesAnterior=this.event_mes_anterior.bindAsEventListener(this);this.eventMesSiguiente=this.event_mes_siguiente.bindAsEventListener(this);}
this.ini(fecha,this.idtarget,this.dias_activados);},ini:function(fecha,target,dias_activados){this.idtarget=target;if(dias_activados){}
if(fecha==''){this._get_hoy();this._render_calendario();}
else{var d=fecha.split('/');if(d.length==3){this._ini_calendario(d[0],d[1],d[2]);this._render_calendario();}else{alert(strErrorFecha);return false;}}},event_mes_anterior:function(event){if(this.mes==1){this.anno--;this.mes=12;this.dia=1;}else{this.mes--;this.dia=1;}
var fecha=this.dia+'/'+this.mes+'/'+this.anno;this.ini(fecha,this.idtarget);Event.stop(event);},event_mes_siguiente:function(event){if(this.mes==12){this.anno++;this.mes=1;this.dia=1;}else{this.mes++;this.dia=1;}
var fecha=this.dia+'/'+this.mes+'/'+this.anno;this.ini(fecha,this.idtarget);Event.stop(event);},updateInputDate:function(strDate){this.field.value=strDate;},_get_hoy:function(dia,mes,anno){var d=new Date();this.anno=d.getFullYear();this.mes=d.getMonth()+1;this.dia=d.getDate();d.setDate(1);this._bisiesto();this.numdias=this.numdiasmeses[this.mes-1];this.diainiciomes=d.getDay();},_ini_calendario:function(dia,mes,anno){var tmp=mes-1;var d=new Date(anno,tmp,dia);this.anno=d.getFullYear();this.mes=d.getMonth()+1;this.dia=d.getDate();d.setDate(1);this._bisiesto();this.numdias=this.numdiasmeses[this.mes-1];this.diainiciomes=d.getDay();},_bisiesto:function(){this.bisiesto=(!(this.anno%4)&&(this.anno<1582||this.anno%100||!(this.anno%400)))?true:false;if(this.bisiesto)this.numdiasmeses[1]=29;},_get_diainiciomes:function(){var mes=this.mes-1;var d=new Date(this.anno,this.mes,1);this.diainiciomes=d.getDay();},_get_datos_calendario:function(url,parametros){var tmpURL=url;var pars=parametros;new Ajax.Request(tmpURL,{parameters:pars,onSuccess:function(t){alert(t.responseText);},onFailure:function(t){alert('Error '+t.status+' -- '+t.statusText);}});},_difDias:function(CadenaFecha1,CadenaFecha2){var fecha1,fecha2
var fecha1=CadenaFecha1.split('/');var fecha2=CadenaFecha2.split('/');var miFecha1=new Date(fecha1[2],fecha1[1]-1,fecha1[0]);var miFecha2=new Date(fecha2[2],fecha2[1]-1,fecha2[0]);var diferencia=miFecha2.getTime()-miFecha1.getTime();var dias=Math.floor(diferencia/(1000*60*60*24));return dias;},_entreFechas:function(fechaAComparar,fechaIni,fechaFin){if(this._difDias(fechaIni,fechaAComparar)>=0&&this._difDias(fechaAComparar,fechaFin)>=0){return true;}else{return false;}},_posicionDiaConDatos:function(dia){var tmpFecha,sFechaIni,sFechaFin,i;tmpFecha=''+dia+'/'+this.mes+'/'+this.anno
for(i=1;i<this.dias_activados.length;i++){sFechaIni=this.dias_activados[i].fechaInicio;sFechaFin=this.dias_activados[i].fechaFinal;if(this._entreFechas(tmpFecha,sFechaIni,sFechaFin)){return i;}}
return false;},_tratarRegistrosEDC:function(dia){this.dias_con_datos.push(dia);},_render_calendario:function(){var calendario=this;var tmp=0;var chkinicio=false;var d=new Date();var hoy_anno=d.getFullYear();var hoy_mes=d.getMonth()+1;var hoy_dia=d.getDate();var html_calendario='<table class="cal_mes">\n\t<tbody>\n';var aToolTips=new Array();if(this.mostrarcontroles){html_calendario+='<tr><th id="'+this.idtarget+'_mes_anterior" class="cal_mes_anterior">&nbsp;<&nbsp; </th><th class="cal_titulo_mes" colspan="5"><b> '+this.meses[this.mes-1]+' '+this.anno+' </b></th><th id="'+this.idtarget+'_mes_siguiente" class="cal_mes_siguiente">&nbsp;>&nbsp;</th></tr>';}else{html_calendario+='<tr><th class="cal_titulo_mes" colspan="7"><b> '+this.meses[this.mes-1]+' '+this.anno+' </b></th></tr>';}
html_calendario+='<tr>';for(i=0;i<7;i++)
{html_calendario+='<th>'+this.nomsemanal[i]+'</th>';}
html_calendario+='</tr>';var inicio=this.diainiciomes-1;if(inicio<0)inicio=6;for(var i=0;i<6;i++)
{html_calendario+='\t\t<tr>\n';for(var j=0;j<7;j++)
{if(i==0&&j==inicio)chkinicio=true;else if(tmp>this.numdias)chkinicio=false;if(chkinicio&&tmp<this.numdias)
{tmp++;if(this.field!=''){if(hoy_anno==this.anno&&hoy_mes==this.mes&&hoy_dia==tmp)
{html_calendario+='<td class="cal_dias_hoy">';}
else if(j>4)
{html_calendario+='<td class="cal_dias_finde">';}
else
{html_calendario+='<td class="cal_dias">';}
html_calendario+='<span onclick="updateInputDate(\''+tmp+'/'+this.mes+'/'+this.anno+'\', \''+this.field+'\');return false;">'+tmp+'</span>';if(this.accionGenericaTodos!=''&&this.dias_activados.length>=1){html_calendario+=this.accionGenericaTodos;}
if(this.accionGenericaEnAdelante!=''&&this.dias_activados.length>=1){html_calendario+=this.accionGenericaEnAdelante;}
html_calendario+='</td>';}else{if(this._posicionDiaConDatos(tmp))
{if(j>4)
{html_calendario+='<td class="cal_dias_finde">';}
else if(hoy_anno==this.anno&&hoy_mes==this.mes&&hoy_dia==tmp)
{html_calendario+='<td class="cal_dias_hoy"> ';}
else
{html_calendario+='<td class="cal_dias">';}
html_calendario+=tmp
var sFechaAux=''+tmp+'/'+this.mes+'/'+this.anno;var tmpColor='1';var html_reg='';var contReg=0;if(this.numMeses>1){this.aToolTips.push(tmp+'_'+this.mes+'_'+this.anno);tmpNumToolTip=this.aToolTips.length-1;html_calendario+='<div class="EDC_Datos" id="div_tooltip_'+this.aToolTips[tmpNumToolTip]+'">';for(tmpReg=1;tmpReg<this.dias_activados.length;tmpReg++){if(this._entreFechas(sFechaAux,this.dias_activados[tmpReg].fechaInicio,this.dias_activados[tmpReg].fechaFinal))
{html_reg+='<div style="clear:both;text-align:left;padding-top:5px;padding-bottom:5px; border-bottom:1px dotted #888;border-top:1px dotted #888;">'
html_reg+=$(this.dias_activados[tmpReg].resultadoHTML).innerHTML;html_reg+='</div>';contReg++;}}
html_calendario+='&nbsp;&nbsp;'+contReg+'&nbsp;&nbsp;';html_calendario+='</div>';html_calendario+='<div class="tooltip" style="display:none;" id="tooltip_'+this.aToolTips[tmpNumToolTip]+'">';html_calendario+=html_reg;html_calendario+='</div></td>';}else{for(tmpReg=1;tmpReg<this.dias_activados.length;tmpReg++){html_reg='';if(this._entreFechas(sFechaAux,this.dias_activados[tmpReg].fechaInicio,this.dias_activados[tmpReg].fechaFinal)){tmpNumToolTip=this.aToolTips.length;this.aToolTips.push(tmp+'_'+this.mes+'_'+this.anno+'-'+tmpNumToolTip);tmpNumToolTip=this.aToolTips.length-1;if(this.dias_activados[tmpReg].cssDinamico!=""){html_calendario+='<div class="EDC_Datos '+this.dias_activados[tmpReg].cssDinamico+'" id="div_tooltip_'+this.aToolTips[tmpNumToolTip]+'">';}else{html_calendario+='<div class="EDC_Datos" id="div_tooltip_'+this.aToolTips[tmpNumToolTip]+'">';}
html_reg+='<div style="clear:both;text-align:left;padding-top:5px;padding-bottom:5px; border-bottom:1px dotted #888;border-top:1px dotted #888;">'
html_reg+=$(this.dias_activados[tmpReg].resultadoHTML).innerHTML;html_reg+='</div>';contReg++;html_calendario+='<span href="#">'+this.dias_activados[tmpReg].descripcion+'</span>';html_calendario+='</div>';html_calendario+='<div class="tooltip" style="display:none;" id="tooltip_'+this.aToolTips[tmpNumToolTip]+'">';html_calendario+=html_reg;html_calendario+='</div>';}}
html_calendario+='</td>';}
this.dias_con_datos.push(tmp);}else if(j>4){html_calendario+='<td class="cal_dias_finde"> '+tmp+' </td>';}else{html_calendario+='<td class="cal_dias"> '+tmp+' </td>';}}}
else
{html_calendario+='<td class="cal_vacio"> &nbsp; </td>';}}
html_calendario+='\t\t</tr>\n';}
html_calendario+='\t</tbody>\n</table>\n';Element.update(this.idtarget,html_calendario);if(typeof cargado!='undefined'&&this.dias_activados.length>=1){var activator,tooltip;for(aux=0;aux<this.aToolTips.length;aux++){activator='';tooltip='';activator=document.getElementById('div_tooltip_'+this.aToolTips[aux]);tooltip=document.getElementById('tooltip_'+this.aToolTips[aux]);if(activator!=''&&tooltip!=''){if(!activator.getAttribute('activado')){Tooltip.add(activator,tooltip);}else{activator.setAttribute('activado','activado');}}}}
if(this.dias_activados.length>=1){for(aux=0;aux<this.aToolTips.length;aux++){new Draggable('tooltip_'+this.aToolTips[aux],{revert:false});}}
if(this.mostrarcontroles){Event.observe(this.idtarget+'_mes_anterior','click',calendario.eventMesAnterior);Event.observe(this.idtarget+'_mes_siguiente','click',calendario.eventMesSiguiente);}}}
var Calendarios=Class.create();Calendarios.prototype={initialize:function(fecha,target,dias_activados,nummeses,strTitulo,idfield,parametrosEDC){var calendarios=this;this.field=idfield||false;this.titulo=strTitulo||'';this.dias_activados=dias_activados||{};this.accionGenericaTodos='';this.accionGenericaEnAdelante='';if(nummeses==-1)
{this.mostrarcontroles=true;nummeses=1;}
else
this.mostrarcontroles=false;this.num_meses_render=nummeses||1;this.annos=new Array();this.meses=new Array();this.recarga=false;this.nommeses=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];this.calendarios=new Array();this.idtarget=target||'calendario';this.fechaFinal=parametrosEDC.fechaFinal||fecha;this.fechaInicio=parametrosEDC.fechaInicio||fecha;this.eventPeriodoAnterior=this.event_periodo_anterior.bindAsEventListener(this);this.eventPeriodoSiguiente=this.event_periodo_siguiente.bindAsEventListener(this);this.event_1Mes=this.event_pintar_1Mes.bindAsEventListener(this);this.event_2Meses=this.event_pintar_2Meses.bindAsEventListener(this);this.event_12Meses=this.event_pintar_12Meses.bindAsEventListener(this);this.cals_target=new Array();this.draw_container();if(fecha==''){var d=new Date();var anno=d.getFullYear();var mes=d.getMonth();this.draw_calendar(mes,anno);}else{var f=fecha.split('/');if(f.length==3){var tmp=f[1]-1;var d=new Date(f[2],tmp,f[0]);var anno=d.getFullYear();var mes=d.getMonth();this.draw_calendar(mes,anno);}else{alert('Error, el formato de fecha es incorrecto\ndd/mm/aaaa');return false;}}},draw_container:function(){var html_calendario='<div id="EDC_Container_Calendario_'+this.num_meses_render%3+'"><div id="'+this.idtarget+'_crtl" class="cal_controles"></div><table class="tbl_container_calendario">';for(i=0;i<this.num_meses_render;i++){if(i%3==0){html_calendario+='<tr>'}
this.cals_target[i]=this.idtarget+'_numcal_'+i;html_calendario+='<td class="celda_calendario"><div id="'+this.cals_target[i]+'" class="calendario"></div></td>';if(i%3==2){html_calendario+='</tr>'}}
html_calendario+='</table><div style="clear:both;">&nbsp;</div></div>';Element.update(this.idtarget,html_calendario);},draw_controls:function(){var calendarios=this;if(this.meses.length>1){if(this.annos.length=1){this.titulo=this.nommeses[this.meses[0]-1]+'('+this.annos[0]+') - '+this.nommeses[this.meses[this.meses.length-1]-1]+'('+this.annos[this.annos.length-1]+')';}else{this.titulo=this.nommeses[this.meses[0]-1]+' - '+this.nommeses[this.meses[this.meses.length-1]-1]+'('+this.annos[0]+')';}}
var html_calendario='<table class="cal_controles">\n\t<tbody>\n';html_calendario+='<tr><th id="'+this.idtarget+'_mes_anterior" class="cal_mes_anterior" style="width:24px"><img src="../../css/img/ico_calendario_retroceder.gif"/></th>';html_calendario+='<th class="cal_titulo_mes" >';if(this.num_meses_render!=1){html_calendario+='<span id="'+this.idtarget+'_1_mes"><img src="../../css/img/ico_calendario_1mes.gif"/> 1 '+strLiteralMes+'</span>&nbsp;';}else{html_calendario+='<span id="'+this.idtarget+'_1_mes" class="desactivado"><img src="../../css/img/ico_calendario_desactivado.gif"/> 1 '+strLiteralMes+'</span>&nbsp;';}
if(this.num_meses_render!=2){html_calendario+='<span id="'+this.idtarget+'_2_meses"><img src="../../css/img/ico_calendario_2meses.gif"/> 2 '+strLiteralMeses+'</span>&nbsp;';}else{html_calendario+='<span id="'+this.idtarget+'_2_meses" class="desactivado"><img src="../../css/img/ico_calendario_desactivado.gif"/> 2 '+strLiteralMeses+'</span>&nbsp;';}
if(this.num_meses_render!=12){html_calendario+='<span id="'+this.idtarget+'_12_meses"><img src="../../css/img/ico_calendario_12meses.gif"/> 12 '+strLiteralMeses+'</span>&nbsp;';}else{html_calendario+='<span id="'+this.idtarget+'_12_meses" class="desactivado"><img src="../../css/img/ico_calendario_desactivado.gif"/> 12 '+strLiteralMeses+'</span>&nbsp;';}
html_calendario+='</th>';html_calendario+='<th id="'+this.idtarget+'_mes_siguiente" class="cal_mes_siguiente" style="width:24px"><img src="../../css/img/ico_calendario_avanzar.gif"/></th></tr>';html_calendario+='\t</tbody>\n</table>\n';Element.update(this.idtarget+'_crtl',html_calendario);Event.observe(this.idtarget+'_mes_anterior','click',calendarios.eventPeriodoAnterior);Event.observe(this.idtarget+'_mes_siguiente','click',calendarios.eventPeriodoSiguiente);Event.observe(this.idtarget+'_1_mes','click',calendarios.event_1Mes);Event.observe(this.idtarget+'_2_meses','click',calendarios.event_2Meses);Event.observe(this.idtarget+'_12_meses','click',calendarios.event_12Meses);},draw_calendar:function(mes,anno){for(i=0;i<this.num_meses_render;i++){mes++;this.meses[i]=mes;if(this.meses[i]>12){anno++;this.annos[i]=anno;this.meses[i]=mes=1;}else{this.annos[i]=anno;}
if(typeof this.dias_activados.datos=='object'){tmpDiasActivados=this.dias_activados.datos;}else{tmpDiasActivados={};}
if(this.dias_activados.accionGenericaTodos!=''){this.accionGenericaTodos=this.dias_activados.accionGenericaTodos;}else{this.accionGenericaTodos='';}
if(this.dias_activados.accionGenericaEnadelante!=''){this.accionGenericaEnAdelante=this.dias_activados.accionGenericaEnadelante;}else{this.accionGenericaEnAdelante='';}
this.calendarios[i]=new Calendario(this.mostrarcontroles,'1/'+this.meses[i]+'/'+this.annos[i],this.cals_target[i],tmpDiasActivados,this.field,this.num_meses_render,this.accionGenericaTodos,this.accionGenericaEnAdelante,this.fechaInicio,this.fechaFinal);}
if(!this.mostrarcontroles)this.draw_controls();},draw_calendar_ctrl_meses:function(){var tmpDiasActivados='';mes=this.meses[0]-1;anno=this.annos[0];this.meses=new Array();this.annos=new Array();for(i=0;i<this.num_meses_render;i++){mes++;this.meses[i]=mes;if(this.meses[i]>12){anno++;this.annos[i]=anno;this.meses[i]=mes=1;}else{this.annos[i]=anno;}
if(typeof this.dias_activados.datos=='object'){tmpDiasActivados=this.dias_activados.datos;}else{tmpDiasActivados={};}
if(this.dias_activados.accionGenericaTodos!='object'){this.accionGenericaTodos=this.dias_activados.accionGenericaTodos;}else{this.accionGenericaTodos='';}
if(this.dias_activados.accionGenericaEnadelante!='object'){this.accionGenericaEnAdelante=this.dias_activados.accionGenericaEnadelante;}else{this.accionGenericaEnAdelante='';}
this.calendarios[i]=new Calendario(this.mostrarcontroles,'1/'+this.meses[i]+'/'+this.annos[i],this.cals_target[i],tmpDiasActivados,this.field,this.num_meses_render,this.accionGenericaTodos,this.accionGenericaEnAdelante,this.fechaInicio,this.fechaFinal);}
if(!this.mostrarcontroles)this.draw_controls();},event_periodo_anterior:function(event){this.recarga=true;var tmpmes=this.meses[0]-this.meses.length-1;var tmpanno=this.annos[0];if(tmpmes<1){tmpmes+=12;tmpanno=this.annos[0]-1;this.draw_calendar(tmpmes,tmpanno);}else{this.draw_calendar(tmpmes,tmpanno);}
Event.stop(event);},event_periodo_siguiente:function(event){this.recarga=true;var tmpmes=this.meses.length-1;var tmpanno=this.annos.length-1;if(this.meses[tmpmes]>=12){tmpmes=0;tmpanno=this.annos[tmpanno]+1;this.annos[tmpanno]=tmpanno
this.draw_calendar(tmpmes,tmpanno);}else if(this.num_meses_render==12){tmpmes=this.meses[tmpmes];tmpanno=this.annos[tmpanno]+1;this.draw_calendar(tmpmes,tmpanno);}else if(this.meses[tmpmes]==1&&this.num_meses_render==2){tmpmes=this.meses[tmpmes];tmpanno=this.annos[tmpanno]+1;this.draw_calendar(tmpmes,tmpanno)}else{tmpmes=this.meses[tmpmes];tmpanno=this.annos[tmpanno];this.draw_calendar(tmpmes,tmpanno);}
Event.stop(event);},event_pintar_1Mes:function(event){this.num_meses_render=1;this.draw_container();this.draw_calendar_ctrl_meses();},event_pintar_2Meses:function(event){this.num_meses_render=2;this.draw_container();this.draw_calendar_ctrl_meses();},event_pintar_12Meses:function(event){this.num_meses_render=12;this.draw_container();this.draw_calendar_ctrl_meses();}}
