function calendarOver (src) { 
      src.style.cursor = "pointer"; 
	  src.className='calendar-cell-over';
} 

function calendarOut (src) { 
      src.style.cursor = "default"; 
	  src.className='calendar-cell';
} 

function calendarLeapYear(year) {
   if (year % 4 == 0) // basic rule
      return true // is leap year
   return false // is not leap year
}

function calendarExit(tabla) {
	//document.getElementById(tabla).style.visibility='hidden';	
	document.getElementById(tabla).style.display='none';	
}

function calendarGetDays(month, year) {
   var ar = new Array(13)
   ar[0] = 0 // January
   ar[1] = 31 // January
   ar[2] = (calendarLeapYear(year)) ? 29 : 28 // February
   ar[3] = 31 // March
   ar[4] = 30 // April
   ar[5] = 31 // May
   ar[6] = 30 // June
   ar[7] = 31 // July
   ar[8] = 31 // August
   ar[9] = 30 // September
   ar[10] = 31 // October
   ar[11] = 30 // November
   ar[12] = 31 // December
   return ar[month]
}

function calendarGetMonthName(month) {
   var ar = new Array(13)
   ar[0] = '' // January
   ar[1] = 'Enero' // January
   ar[2] = 'Febrero'// February
   ar[3] = 'Marzo' // March
   ar[4] = 'Abril' // April
   ar[5] = 'Mayo' // May
   ar[6] = 'Junio' // June
   ar[7] = 'Julio' // July
   ar[8] = 'Agosto' // August
   ar[9] = 'Septiembre' // September
   ar[10] = 'Octubre' // October
   ar[11] = 'Noviembre' // November
   ar[12] = 'Diciembre' // December
   return ar[month]
}

function calendarReturn(tabla,campo,dia) {
	// alert(campo+' '+dia);	
	// document.getElementById(tabla).style.visibility='hidden';	
	document.getElementById(campo).value=dia;
	document.getElementById(campo).focus();
	document.getElementById(tabla).style.display='none';	

}

function calendarShow(tabla,campo,dia) {
	var now = new Date();
	var dd = now.getDate();
	var mm = now.getMonth();
	var aa = now.getFullYear();
	if (dia!=='') {
		dd = dia.substr(0,2);
		mm = dia.substr(3,2);
		aa = dia.substr(6,4);
	}
	// alert(dd+'-'+mm+'-'+aa);
	// document.getElementById(tabla).style.visibility='visible';	
	document.getElementById(tabla).style.display='BLOCK';	
	calendarWrite(tabla,campo,dd,mm,aa);
}

function calendarNextDay(dia,numDias) {
	var hoy = new Date(dia.substr(6,4),dia.substr(3,2)-1,dia.substr(0,2));	
	var nDia= new Date();
	var ms  = parseInt(numDias*24*60*60*1000);
    
	nDia.setTime(hoy.getTime()+ms);
	// alert(hoy+' '+nDia);
	var dd = nDia.getDate(); if (dd<10) dd = '0'+dd;
	var mm = nDia.getMonth()+1; if (mm<10) mm = '0'+mm;
	var result = dd+'-'+mm+'-'+nDia.getFullYear();
	return result;
}

function calendarGetNoches(fDesde,fHasta) {
	var desde = new Date(fDesde.substr(6,4),fDesde.substr(3,2)-1,fDesde.substr(0,2));
	var hasta = new Date(fHasta.substr(6,4),fHasta.substr(3,2)-1,fHasta.substr(0,2));
	var ms 	  = parseInt(1000 *60 *60 *24);
	//desde.setDate(parseInt(fDesde.substr(0,2)));
	//desde.setMonth(parseInt(fDesde.substr(3,2)));
	//desde.setFullYear(parseInt(fDesde.substr(6,4)));

	//hasta.setDate(parseInt(fHasta.substr(0,2)));
	//hasta.setMonth(parseInt(fHasta.substr(3,2)));
	//hasta.setFullYear(parseInt(fHasta.substr(6,4)));
	var nuevo = Math.floor((hasta.getTime()-desde.getTime()) / ms );
	// alert (fDesde+' '+fHasta+' '+desde+' '+hasta+' '+d+'-'+m+'-'+a);
	return nuevo;
}

function calendarWrite(tabla,campo,dia,mes,anyo) {
   var now = new Date();
   var year = now.getYear();
   var month = now.getMonth();
   var day = now.getDate();
   
   // var hoy = new Date();
   var hoy = new Date(now.getFullYear(),now.getMonth(),now.getDate());
   	dia=eval(dia);
	mes=eval(mes);
	anyo=eval(anyo);
	if (mes==0)  { 
		mes=12; anyo--;
		mes_ant=12; any_ant=anyo;
		mes_prox=1; any_prox=eval(anyo)+1;
	} else if (mes==13) { 
		mes=1;  anyo++; 
		mes_ant=0; any_ant=anyo;
		mes_prox=1; any_prox=anyo;		
	} else {
		mes_ant=eval(mes)-1; 
		any_ant=anyo; 
		mes_prox=eval(mes)+1;
		any_prox=anyo;
	}

   var date = now.getDate();
   now = null;

   var firstDayInstance = new Date(anyo, mes-1, 1);
   var firstDay = firstDayInstance.getDay();
   if (firstDay==0) firstDay=7;
   var days = calendarGetDays(mes, anyo);

   var digit = 1;
   var curCell = 1;
	
	var html='';
	html += '<table border="0" cellspacing="1" cellpadding="2" class="calendar-box">';	
	
	// Cabecera
    html += '<tr>';
    html += '<td class="calendar-head" align="center">';
    html += "<a href=JavaScript:calendarWrite('"+tabla+"','"+campo+"',0,"+mes_ant+","+any_ant+") class=calendar-link>&laquo;</a>";
	html += '</td>';
    html += '<td colspan="5" class="calendar-head" align="center">';
	html += calendarGetMonthName(eval(mes))+' '+anyo;
	html += '</td>';	
    html += '<td class="calendar-head" align="center">';	
    html += "<a href=JavaScript:calendarWrite('"+tabla+"','"+campo+"',0,"+mes_prox+","+any_prox+") class=calendar-link>&raquo;</a>";	
    html += '</td>';
    html += '</tr>';
   
    // es defineix els titols dels dies de la setmana
	html += '<tr>';
	html += '<td>Lu</td>';
    html += '<td>Ma</td>';
    html += '<td>Mi</td>';
    html += '<td>Ju</td>';
    html += '<td>Vi</td>';
    html += '<td>Sa</td>';
    html += '<td>Do</td>';
    html += '</tr>';

	// Por cada fila se escribe
	// el codigo HTML necesario
	for (var row = 1; row <= 6; row++) {
		html += '<tr>';
        for (var col = 1; col <= 7; col++) {
        	if (digit > days) { valor=''; } else { valor=digit; }
           	if ((curCell < firstDay) || (digit > days)) {
            	html += '<td class="calendar-cell">&nbsp;</td>';
           	} else {
				dia='';
				if (digit<10) { dia+='0'+digit } else { dia+=digit }
				if (mes<10) { dia+='-0'+mes } else { dia+='-'+mes }
				dia+='-'+anyo;
				texto_script ='';
				texto_script =' class="calendar-cell" ';
				texto_script += "onClick=calendarReturn('"+tabla+"','"+campo+"','"+dia+"') ";
				texto_script += 'onMouseOver="calendarOver(this)" ';
				texto_script += 'onMouseOut="calendarOut(this)" ';
			   	html += '<td '+texto_script+'>'+valor+'</td>';
              	digit++;
           }
		   curCell++;		   
       }   
       html += '</tr>';
	}	
	// linea de peu
	html +='<tr><td colspan="7"><a href="javascript:calendarExit('+"'"+tabla+"'"+')"> cerrar</a></td></tr>';
	html += '</table>';	
	document.getElementById(tabla).innerHTML = html;
}

