//Constants amb el nom dels mesos i els dies de cada mes.
var nomMesos_CA = new Array("Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Decembre");
var diesMes  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

//Variable que serà la finestra on es montarà el calendari.
var calendari;

//Variable que contindra la data que ha de mostrar el calendari.
var dataCalendari;

function crearCalendari(nomCampFormulari,classe)
{
  //Procediment que obre una finestra i pinta un calendari en html. El valor seleccionat es copia a la variable que rep.
  //Entrada: Nom de la variable del formulari.
  //Sortida: cap.
  //Format de la data: DD/MM/YYYY
  
  //Creem la finestra que contindrà el calendari.
  var tamanyFinestraX=160;
  var tamanyFinestraY=160;
  var posicioFinestraX=(screen.width/2)-(tamanyFinestraX/2);
  var posicioFinestraY=(screen.height/2)-(tamanyFinestraY/2);
  calendari = window.open("", "Calendari","width="+tamanyFinestraX+",height="+tamanyFinestraY+",status=no,resizable=no,top="+posicioFinestraY+",left="+posicioFinestraX);

  //Calculem el mes que s'ha de mostrar del calendari.
  //Si el camp on ha d'anar la data ja en té una, i el format és correcte, el mes que mostrarà el calendari serà el mes d'aquesta data.
  var dataFormulari = document.forms[0].elements[nomCampFormulari].value;
  
  if (validarFormatData(dataFormulari))
  {
    //Data del formulari correcte. Creem una date amb la data del camp del formulari.
    dataCalendari=new Date(parseInt(dataFormulari.substring(6)),parseInt(dataFormulari.substring(3,5))-1, parseInt(dataFormulari.substring(0,2)));
  }  
  else
  {
    //Format de la data incorrecte o null. Creem una date amb la data actual.
    dataCalendari=new Date();
  }
    
  //Pintem el calendari.
  pintarCalendari(dataCalendari.getDate(),dataCalendari.getMonth(),dataCalendari.getFullYear(),nomCampFormulari)
}

function pintarCalendari(dia,mes,any,camp)  
{
  calendari.document.open();    
      
  var columna = 0;
  
  //Creem el html.
  calendari.document.write("<HTML>");
  calendari.document.write("  <HEAD>");
  calendari.document.write("    <TITLE>Calendari</TITLE>");
  calendari.document.write("    <STYLE>");
  calendari.document.write("      .text { color:#A3AF07;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px}");
  calendari.document.write("      .textPetit { color:#A3AF07;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px}");
  calendari.document.write("      a.link:link {  color:#2964BE;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #2964BE; text-decoration: none}");
  calendari.document.write("      a.link:visited { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #2964BE; text-decoration: none}");
  calendari.document.write("      a.link:hover { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color:#A3AF07; text-decoration: none;font-weight: bold}");
  calendari.document.write("    </STYLE>");
  calendari.document.write("  </HEAD>");
  calendari.document.write("  <BODY>");

  //Pintem la capsalera del calendari.
  calendari.document.write("    <TABLE BORDER=\"0\" align=\"left\" valign=\"top\">")
  calendari.document.write("      <TR>");
  if (mes > 0) 
    calendari.document.write("      <TD ALIGN=\"CENTER\"><A HREF=\"javascript:window.opener.pintarCalendari("+dia+","+(mes-1)+","+any+",'"+camp+"')\" CLASS=\"link\"><<</A></TD>");
  else 
    calendari.document.write("      <TD ALIGN=\"CENTER\"><A HREF=\"javascript:window.opener.pintarCalendari("+dia+",11,"+(any-1)+",'"+camp+"')\" CLASS=\"link\"><<</A></TD>");
  calendari.document.write("        <TD COLSPAN=\"5\" ALIGN=\"CENTER\" CLASS=\"text\">"+nomMesos_CA[mes]+" "+any+"</TD>");
  if (mes < 11) 
    calendari.document.write("      <TD ALIGN=\"CENTER\"><A HREF=\"javascript:window.opener.pintarCalendari("+dia+","+(mes+1)+","+any+",'"+camp+"')\" CLASS=\"link\">>></A></TD>");
  else 
    calendari.document.write("      <TD ALIGN=\"CENTER\"><A HREF=\"javascript:window.opener.pintarCalendari("+dia+",0,"+(any+1)+",'"+camp+"')\" CLASS=\"link\">>></A></TD>");
  calendari.document.write("      </TR>");
  calendari.document.write("      <TR CLASS=\"textPetit\" align=\"CENTER\"><TD WIDTH=\"14%\"><B>Dl</B></TD><TD WIDTH=\"14%\"><B>Dt</B></TD><TD WIDTH=\"14%\"><B>Dc</B></TD><TD WIDTH=\"14%\"><B>Dj</B></TD><TD WIDTH=\"14%\"><B>Dv</B></TD><TD WIDTH=\"14%\"><B>Ds</B></TD><TD WIDTH=\"14%\"><B>Dg</B></TD></TR>");
  calendari.document.write("      <TR>");

  //Pintem els dies del calendari.
  //Calculem la columna que ha de començar el dia 1 del mes que mostrem el calendari.
  //Creem un objecte data auxiliar amb el dia 1 del mes i any actual.
  var dataAuxiliar = new Date(any,mes,1);

  //Pintem les columnes buides fins arribar a la columna (dia de la setmana) que ha de començar el mes. 
  //El mètode que ens retorna el dia de la setmana, comença des de el diumenge. Si és diumenge, li donem valor 6 i
  //si es una altre dia, li restem 1.
  var diaSetmana=dataAuxiliar.getDay();
  if (diaSetmana == 0) diaSetmana=6;
  else diaSetmana-=1;
  
  for (i=0; i < diaSetmana; i++)
  {   
    calendari.document.write("    <TD WIDTH='14%'> </TD>");
    columna++;
  }  
  
  //Si el mes que mostrem és febrer (1) i l'any és bixest, febrer tindrà 29 dies.
  if (mes == 1)
    if (any % 4 == 0) diesMes[mes]=29;
    else diesMes[mes]=28;
  
  //Pintem el calendari.
  for (i=1; i<=diesMes[mes]; i++)
  { 
    //Creem la data en format DD/MM/AAAA que es traspassarà al camp del formulari.    
    valorFormulari="";
    if (i < 10) valorFormulari='0';
    valorFormulari+=i+'/';
    if (mes+1 < 10) valorFormulari+='0';
    valorFormulari+=parseInt(mes+1)+'/'+any;
    
    calendari.document.write("    <TD align=\"center\" WIDTH=\"14%\"><a href='#' onclick=\"opener.document.forms[0].elements['"+camp+"'].value='"+valorFormulari+"';window.close();\" CLASS=\"link\">"+i+"</a></TD>");
    columna++;
    if  (columna == 7)
    {   
      calendari.document.write("  </TR><TR>");
      columna = 0;
    }
  }
  calendari.document.write("  </TR>");
  calendari.document.write("</TABLE>");
  
  calendari.document.close();    
  calendari.focus();
}

function validarFormatData(da)
{
  //Funcio que valida una data en format dd/mm/aaaa.
  //Entrada: data en format dd/mm/aaaa
  //Sortida: true/false

  //Abans de fer cap comprovació, treiem els espais en blanc de la cadena.
  var dat=treureEspais(da);

  if (dat.length != 10) 
  {
  	return false;
  }	
  else
  {
  	if (dat.substring(2,3) == '/' && dat.substring(5,6) == '/') 
  	{ 
  		return (f_esDataValida(dat.substring(6),dat.substring(3,5), dat.substring(0,2))); 	
    }
    else
    {
    	return false;
    }	
  }		
}

function treureEspais(cadena)
{
  var contador=0;
  var novaCadena='';
  
  while (contador < cadena.length)
  {
    if (cadena.charAt(contador) != " ")
    {
      novaCadena=novaCadena+cadena.charAt(contador);
    }
    contador++;
  }
  return novaCadena;
}

function f_esDataValida(any, mes, dia)
{
  var data = new Date(any,mes-1,dia);
  var result=false;

  if((dia-1+1)==data.getDate())
    if((mes-1)==data.getMonth())
      if((any-1+1)==data.getFullYear())
      {
        this.any = any;
        this.mes = zeros(2-mes.length)+mes;
        this.dia = zeros(2-dia.length)+dia;
        if (any.toString().length==4)
        result=true;
      }
  return result;
}

function zeros(n)
{
   if(n<1) return "";
   var cad = new String();
   for(var i=0;i<n;i++)
      cad=cad + '0';
   return cad;
}
