Newsgroup: it.comp.lang.javascript
Titolo: Calendario

Ciao,
devo realizzare una pagina con un calendarietto dotato di freccine (avanti e
indietro) per scorrere i mesi.
Ho guardato un pņ in giro e gli esempi che ho trovato sono tutti con popup.
Ho provato ad adattare del codice ma da errore.
Se avete il tempo di dargli un'occhiata vi posto quello che ho trovato e
modificato...e che ovviamente non funziona....altrimenti link utili?
Grazie!ciao
ro*

 indietro) per scorrere i mesi.
C'è il DHTML Calendar 
http://www.prioregroup.com/dhtmlcalendar.asp
 che è 
popup ma con poche modifiche è possibile renderlo statico sulla pagina, 
infatti dal popup poi ho tratto il Back Calendar 
http://www.prioregroup.com/filecounter.asp?file=dateback.zip
 ma non permette 
di modificare la data, infatti usa quella corrente, se dai una occhiata al 
codice di entrambe probabilmente riesci a capire come modificarlo per 
renderlo statico sulla pagina con la possibilità di cambiare le date.
Ciao

> C'è il DHTML Calendar 
http://www.prioregroup.com/dhtmlcalendar.asp
 che è
Grazie,avevo trovato il link in rete ma ieri non mi dava la pagina (oggi
si).
Ho comunque già sistemato un altro script
Grazie e Ciao
Ro*

 C'è il DHTML Calendar 
http://www.prioregroup.com/dhtmlcalendar.asp
 
IE-Only, è una schifezza
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 IE-Only, è una schifezza
Se volete, e se può essere utile a qualcuno posto qui quello che ho trovato
e modificato
testandolo su IE,Netscape 7 e Firefox0.8
Interessa?
Ciao ciao
Ro*

 Interessa?
Sinceramente a me no, però se posti resta come storico...
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 IE-Only, è una schifezza
A si? e perche ? tuo concorrente ?
Guarda che opensource puoi modificarlo per renderlo "bello" come dici tu.

 Guarda che opensource puoi modificarlo per renderlo "bello" come dici tu.
Sì, ma se si posta in un newsgroup è bene quantomeno specificarlo
(soprattutto se nella richiesta non è specificato "IE-Only" o "Solo
Intranet", e quindi è sottinteso web, e quindi quel controllo non va bene).
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

> però se posti resta come storico...
ok io lo posto lo stesso poi fate vobis!
il link da cui l'ho preso è il seguente:
http://www.jsdir.com/staffscripts/script077.asp
Io l'ho modificato mostrandolo non come popup ma all'interno della pagina
stessa caricato all'onload.
e aggiungendo una variabile ArrayNews  che è un vettore di giorni a cui
corrispondono le news e che sono
gli unici ad essere cliccabili.
Mi è sembrato comunque giusto mantenere il nome dell'autore originale dello
script
Ciao
Ro*
////////////////////////////////////////////////////////////////////////////
<html>
<head>
<TITLE>Prove Calendario</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" >
//                   Calendario vers. 1.0
//                     by Maurizio Mauri
//                   mailto: 
M.M...@mclink.it
var xwidth = 220;
var xheight = 180;
var browser = document.layers ? 0 : document.all ? 1 : 2;
// colori
var backtable = '#CCFFFF';//'#90C0FF';
var calendback = '#FFFFFF';//'#DDDDBB';
var lines = '#FF99CC';//'#404040';
var bright = '#660099';//'#000000';
var festa = '#FFFFCC';//'#FD9139';
var evCol = '#66FF00';
var ArrayNews = new
Array("8*12*2004","1*12*2004","28*12*2004","16*12*2004","8*1*2005","1*1*2005
","28*1*2005","17*1*2005");
// ------ Non cambiare ----------
var mesi = new Array('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio',
'Giugno',
               'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre',
'Dicembre');
var days = new Array('Lu', 'Ma', 'Me', 'Gi', 'Ve', 'Sa', 'Do');
var dd = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var today = new Date();
var anno = today.getFullYear();
var mese = today.getMonth();
var currday = today.getDate();
var cellwidth = Math.floor(xwidth / 7);
xwidth = cellwidth * 7;
var xmese = 0;
var aboutx = false;
var isOn = false;
/*
function action(g, m , a) {
   function format(x) {
      return x > 9 ? x : "0" + x;
   }
   getId().showIt(false);
   if (tipo == 0) {
      source[0].value = format(g);
      source[1].value = format(m + 1);
      source[2].value = a;
   }
   else
      source.value = format(g) + '-' + format(m + 1) + '-' + a;
}*/
function action(g, m , a) {
 //alert("action e g ="+g+" e m="+m+" e a="+a);
 m = m+1;
 if(g.lenght == 1)
 g="0"+g;
 if(m.lenght == 1)
 m="0"+m;
 alert("ho cliccato su "+g+"/"+m+"/"+a);
}
document.write('<style type="text/css">\n<!--');
document.write('.cal { font-family: Arial, Helvetica, sans-serif; font-size:
10px; font-weight: bold; color: #000099}');
document.write('.num { font-family: Arial, Helvetica, sans-serif; font-size:
12px; text-decoration:none}');
document.write('.mese {  font-family: Arial, Helvetica, sans-serif;
font-size: 14px; font-weight: bold; color: #663300}');
document.write('.butt {  font-family: Arial, Helvetica, sans-serif;
font-size: 10px}');
document.write('-->\n</style>');
function comparedate(d1, d2) {
   if (d1.getFullYear() == d2.getFullYear() && d1.getMonth() ==
d2.getMonth() && d1.getDate() == d2.getDate())
      return true;
   return false;
}
function pasqua(aa) {
   var xx = new Array(22, 22, 23, 23, 24, 24);
   var yy = new Array(2, 2, 3, 4, 5, 5);
   var a = aa % 19;
   var b = aa % 4;
   var c = aa % 7;
   var i = Math.floor(aa / 100) - 15;
   var x = xx[i], y = yy[i];
   var d = (19*a + x) % 30;
   var e = (2*b + 4*c + 6 * d + y) % 7;
   var p = 22 + d + e;
   var m = 300;
   if (p > 31) {
      m = 400;
      p = p - 31;
   }
   return m + p;
}
function isfesta(d) {
   //alert("isFesta e d="+d);
   var feste = new Array(0, 101, 106, 425, 501, 602, 815, 1101, 1208, 1225,
1226);
   if (d.getDay() == 0)
      return true;
   var pp = pasqua(d.getFullYear()) + 1;     // Pasquetta
      if (pp % 100 > 31)
         pp = 401;
   feste[0] = pp;
   for (var i = 0; i < feste.length; i++)
      if (Math.floor(feste[i] / 100) == d.getMonth() + 1) {
         var gg = feste[i] % 100;
         if (gg == d.getDate())
            return true;
      }
   return false;
}
function existNews(dNw)
{
 var tempdate5 = dNw.getDate() + "*" + (dNw.getMonth()+1) + "*" +
dNw.getFullYear();
 return isInArray(tempdate5);
}
function isInArray(toControl)
{
 var toRet=false;
 for (var i = 0; i < ArrayNews.length; i++)
 {
        //alert(toControl+" == "+ArrayNews[i]+"?"+toControl ==
ArrayNews[i]);
  if(toControl == ArrayNews[i])
  {
   toRet = true;
  }
 }
 return toRet;
}
function calendar(currday, mese, anno) {
   var dx = 2 - (new Date(anno, mese, 1)).getDay();
   if (dx == 2)
      dx = -5;
   var daysInMonth = dd[mese];
   if (mese == 1) {
      if (anno % 4 == 0 && anno % 100 != 0  || anno % 400 == 0)
         daysInMonth++
   }
   var tx = '<div class="mese">&nbsp;&nbsp;' + mesi[mese] + ' ' + anno
+'</div>\n';
   tx += '<table width="' + xwidth + '" border="0" cellspacing="1"
cellpadding="1">\n';
   tx += '<tr align="right">\n';
   for (var i = 0; i < 7; i++)
      tx += '<td width="' + cellwidth+ '" class="cal">' + days[i] +
'&nbsp;</td>\n';
   tx += '</tr>\n';
   for (var j = 0; j < 6; j++) {
      tx += '<tr bgcolor="' + calendback + '" align="right">\n';
      for (var i = 0; i < 7; i++) {
   var hasNews=false;
   var bgstring = "";
         var fgcol = lines;
         var fgstring = '&nbsp;';
         if (dx > 0 && dx <= daysInMonth) {
            fgstring = dx;
            var ddx = new Date(anno, mese, dx);
            if (isfesta(ddx)) {
               bgstring = ' bgcolor="' + festa + '"';
            }
            if (comparedate(ddx, today)) {
               fgcol = bright;
               fgstring = '<b><u>' + dx + '</u></b>\n';
            }
            if (existNews(ddx)) {
      hasNews=true;
               fgcol = evCol;
               fgstring = '<b><u>' + dx + '</u></b>\n';
            }
   var tempdate = ddx.getDate() + ", " + ddx.getMonth() + ", " +
ddx.getFullYear();
   if(hasNews)
   {
    fgstring = '<a href="javascript:action(' + tempdate + ')" class =
"num"><font color="' + fgcol + '">' + fgstring +  '</font></a>\n';
   }
   else
   {
    fgstring = '<font color="' + fgcol + '">' + fgstring +  '</font>\n';
   }
         }
         tx += '<td width="' + cellwidth + '" class="num"' + bgstring +
'>\n';
         tx += fgstring;
         tx += '</td>\n';
         dx++;
      }
      tx += '</tr>\n';
   }
   tx += '</table>\n';
   return tx;
}
function dataframe(x) {
   var s = '<table width="' + xwidth + '" border="1" cellspacing="0"
cellpadding="0" bgcolor="' + backtable + '">';
   s += '<tr>\n<td class="mese" valign="middle">';
   s += x; // calendar(currday, mese, anno);
   s += '</td></tr><tr><td>';
   s += '<form class="butt"><table width="100%" border="0" cellspacing="0"
cellpadding="2">';
   s += '<tr>';
   s += '<td><!-- input type="button" name="about" value="about"
class="butt" onclick="xabout()"--></td>';
   s += '<td align="right"><input type="button" name="prev" value=" << "
class="butt" onclick="altro_mese(-1)">';
   s += '<input type="button" name="current" value="Default" class="butt"
onclick="altro_mese(9)">';
   s += '<input type="button" name="next" value=" >> " class="butt"
onclick="altro_mese(1)"></td>';
   s += '</tr></form></table>';
   s += '</td>\n</tr>\n</table>';
   return s;
}
function altro_mese(x) {
   xmese += x;
   if (x == 9)
      xmese = 0;
   var xday = (xmese == 0)? currday : 99;
   var mm = (mese + xmese) % 12;
   while (mm < 0)
      mm += 12;
   var s = dataframe(calendar(xday, mm, anno + Math.floor((mese + xmese) /
12)));
   writeLayer(s);
   aboutx = false;
}
function getId() {
   switch (browser) {
      case 0:
         return document.layers.calframe;
      case 1:
         return eval('calframe');
      case 2:
         return document.getElementById("calframe");
   }
}
function moveLayer(xPos, yPos) {
   switch (browser) {
   case 0:
      this.left = xPos;
      this.top = yPos;
      break;
   case 1:
      this.style.pixelLeft = xPos;
      this.style.pixelTop = yPos;
     break;
   default:
      this.style.left = xPos;
      this.style.top = yPos;
   }
}
function createlayer() {
   var s;
   if (document.layers)
      s = '<layer id="calframe" visibility="hide" z-index=1>';
   else
      s = '<div id="calframe" style="position:absolute; visibility:
hidden">';
   if (document.layers)
      s += '</layer>';
   else
      s += '</div>';
   document.writeln(s);
}
function showIt(on) {
   isOn = on;
   if (browser)
      this.style.visibility = (on) ? "visible" : "hidden";
   else
      this.visibility = (on) ? "show" : "hide"
}
function writeLayer(s) {
   var id = getId();
   if (browser)
      id.innerHTML = s;
   else {
      id.document.open();
      id.document.write(s);
      id.document.close();
   }
}
function init() {
   var id = getId();
   id.moveLayer = moveLayer;
   id.showIt = showIt;
   id.showIt(false);
}
function showCalendar(d, xpos, ypos) {
   if (!isOn) {
      if (d) {
            anno = d.getFullYear();
            mese = d.getMonth();
            currday = d.getDate();
         } else {
            anno = today.getFullYear();
            mese = today.getMonth();
            currday = today.getDate();
      }
      if (arguments.length > 2) {
         var id = getId();
         id.moveLayer(xpos, ypos);
      }
      else
   {
  getId().moveLayer(100, 100);
   }
      xmese = 0;
      writeLayer(dataframe(calendar(currday, mese, anno)));
   }
   getId().showIt(!isOn);
}
createlayer(1);
</script>
<style type="text/css">
<!--
-->
</style>
</head>
<body bgcolor="#FFFFFF" onload="init();showCalendar();">
<form name="myform" >
<!-- font face="Arial, Helvetica, sans-serif" size="2">Prova mia: </font>
<input type="button" name="pulsente2" value="cliccami"
onClick="showCalendar();"-->
</form>
</body>
</html>

 
http://www.jsdir.com/staffscripts/script077.asp
[CUT]
Potresti postarlo a Riccardo (il webmaster di jsdir), magari ti pubblica
questa modifica che può essere interessante.
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 questa modifica che può essere interessante.
ok!
Ciao
Rosaria

Beccati questo!
http://sourceforge.net/projects/jscalendar