//  written by Tan Ling Wee on 2 Dec 2001
//  last updated 23 June 2002
//  email : fuushikaden@yahoo.com

/*
 * Date         Author      Changes
 *              MP          This Js was created by merging the original Js
 *                          (dated 23 June 2002) taken from the web site and the
 *                          one included inside the popcsscal example. The merge
 *                          action was intended in that every CSS rule was copied from
 *                          the js css-enabled to the newer one (from the web site)
 *                          in order to obtain the best of the two js'.
 *              MP          build the calendar layer by setting innerHTML value whether
 *                          the normal definition (with document.write()) failed
 */


/*******************************************************************************

How To Use
----------

Firstly, you will need to include a javascript library at the top of your html
file like this: <script language='javascript' src='popcalendar.js'></script>
After which, put the following line inside the onclick event of a button,
popUpCalendar(this, this, "d mmm yyyy")

The first "this" in the parameter list refers to the trigger control (in this
case the button). The second "this" refer to the control to hold the value of the
date, which is the same button in this case. The third parameter refers to the
date format.

The date format can have three types of separators: hyphen(-), space( ), or
slash(/), but must be consistent in their usage. E.g. d/m/yyyy
The acceptable tokens are :-
 d - date
 dd - date (padded with 0 if less than 10)
 m - month (in numbers)
 mm - month (in numbers, padded with 0 if less than 10)
 mmm - month (in words)
 yyyy - year

The default value you place in the date container must be the same format as the
format you specified.

To fix the position of the popup calendar, you can change the values of the
variables fixedX and fixedY. Setting them to -1 will make them appear just below
the trigger control.

To start the week on Monday, just amend the startAt variable at the beginning of
the javascript file. Assigning a value of 0 will start the week on Sunday, and 1
will start the week on Monday.

To show week numbers as well (for compliance to ISO-8601 standard), change the
showWeekNumber variable to 1.

Defining Holidays
-----------------
To insert a holiday, use the following javascript function :
addHoliday (date, month, year, description)
If the year is set to 0 (zero), all the years with that date will be defined as
a holiday. For example, addHoliday(25,12,0, "Christmas Day")

Compatibility
-------------
Only tested with IE6 and Netscape 6. Guarantee won't work in Opera, Netscape 4
and IE for Macintosh.

*******************************************************************************/

var fixedX = -1;          // x position (-1 if to appear below control)
var fixedY = -1;          // y position (-1 if to appear below control)
var startAt = 1;          // 0 - sunday ; 1 - monday
var showWeekNumber = 1;   // 0 - don't show; 1 - show
var showToday = 1;        // 0 - don't show; 1 - show
var imgDir = "/res/imgs/";      // directory for images ... e.g. var imgDir="/img/"
var lang_curr = getLang();

if (lang_curr==null) lang_curr='it';

if (lang_curr=='it')
	var gotoString = "Vai al Mese Corrente";
if (lang_curr=='en')
var gotoString = "Go To Current Month";
if (lang_curr=='it')
	var todayString = "Oggi  &egrave;";
if (lang_curr=='en')	
var todayString = "Today is";
if (lang_curr=='it')	
	var weekString = "Set";	
if (lang_curr=='en')	
var weekString = "Wk";
var scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically.";
var scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically.";
var selectMonthMessage = "Click to select a month.";
var selectYearMessage = "Click to select a year.";
var selectDateMessage = "Select [date] as date."; // do not replace [date], it will be replaced by date.

var crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected,
    dateSelected, omonthSelected, oyearSelected, odateSelected,
    monthConstructed, yearConstructed, intervalID1, intervalID2,
    timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear;

var bPageLoaded = false;
var ie = document.all;
var dom = document.getElementById;

var ns4 = document.layers;
var today = new Date();
var dateNow  = today.getDate();
var monthNow = today.getMonth();
var yearNow  = today.getUTCFullYear();
var imgsrc = new Array("drop1.gif","drop2.gif","left1.gif","left2.gif","right1.gif","right2.gif");
var img = new Array();

var bShow = false;

//-----------------------------------------------------------------------------

/* hides <select> and <applet> objects (for IE only) */
function hideElement( elmID, overDiv )
{
  if( ie )
  {
    for( i = 0; i < document.all.tags( elmID ).length; i++ )
    {
      obj = document.all.tags( elmID )[i];
      if( !obj || !obj.offsetParent )
      {
        continue;
      }

      // Find the element's offsetTop and offsetLeft relative to the BODY tag.
      objLeft   = obj.offsetLeft;
      objTop    = obj.offsetTop;
      objParent = obj.offsetParent;

      while( objParent.tagName.toUpperCase() != "BODY" )
      {
        objLeft  += objParent.offsetLeft;
        objTop   += objParent.offsetTop;
        objParent = objParent.offsetParent;
      }

      objHeight = obj.offsetHeight;
      objWidth = obj.offsetWidth;

      if(( overDiv.offsetLeft + overDiv.offsetWidth ) <= objLeft );
      else if(( overDiv.offsetTop + overDiv.offsetHeight ) <= objTop );
      else if( overDiv.offsetTop >= ( objTop + objHeight ));
      else if( overDiv.offsetLeft >= ( objLeft + objWidth ));
      else
      {
        obj.style.visibility = "hidden";
      }
    }
  }
}

//-----------------------------------------------------------------------------

/*
 * unhides <select> and <applet> objects (for IE only)
 */
function showElement( elmID )
{
  if( ie )
  {
    for( i = 0; i < document.all.tags( elmID ).length; i++ )
    {
      obj = document.all.tags( elmID )[i];

      if( !obj || !obj.offsetParent )
      {
        continue;
      }

      obj.style.visibility = "";
    }
  }
}

//-----------------------------------------------------------------------------

function HolidayRec (d, m, y, desc)
{
  this.d = d
  this.m = m
  this.y = y
  this.desc = desc
}

//-----------------------------------------------------------------------------

var HolidaysCounter = 0
var Holidays = new Array()


function addHoliday (d, m, y, desc)
{
  Holidays[HolidaysCounter++] = new HolidayRec ( d, m, y, desc )
}

//-----------------------------------------------------------------------------

if (dom)
{
  for (i=0;i<imgsrc.length;i++)
  {
    img[i] = new Image
    img[i].src = imgDir + imgsrc[i]
  }
  document.write ("<div onclick='bShow=true' id='calendar'  class='div-style'><table width="+((showWeekNumber==1)?250:220)+" class='table-style'><tr class='title-background-style' ><td><table width='"+((showWeekNumber==1)?248:218)+"'><tr><td class='title-style'><B><span id='caption'></span></B></td><td align=right><a href='javascript:hideCalendar()'><IMG class='img_controlCalendar' SRC='"+imgDir+"close.gif' WIDTH='15' HEIGHT='13' BORDER='0' ALT='Close the Calendar'></a></td></tr></table></td></tr><tr><td class='body-style'><span id='content'></span></td></tr>")
  if (showToday==1) {
    document.write ("<tr class='today-background-style'><td class='today-style'><span id='lblToday'></span></td></tr>")
  }
  document.write ("</table></div><div id='selectMonth' class='div-style'></div><div id='selectYear' class='div-style'></div>");
}

if (lang_curr=='it')
	var monthName = new Array("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre")
	
if (lang_curr=='en')
var monthName = new Array("January","February","March","April","May","June","July","August","September","October","November","December")
if (startAt==0)
{
	if (lang_curr=='it')
  		dayName =  new Array ("Dom","Lun","Mar","Mer","Gio","Ven","Sab")
  		
  	if (lang_curr=='en')	
  dayName = new Array ("Sun","Mon","Tue","Wed","Thu","Fri","Sat")
}
else
{
	if (lang_curr=='it' || lang_curr==null)
  		dayName =  new Array ("Lun","Mar","Mer","Gio","Ven","Sab","Dom")		
  		
  	if (lang_curr=='en')	
  dayName = new Array ("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
}


function swapImage(srcImg, destImg){
  if (ie) { document.getElementById(srcImg).setAttribute("src",imgDir + destImg) }
}

//-----------------------------------------------------------------------------

function init() {
  if (!ns4)
  {
    //if (!ie) { yearNow += 1900  }

    // [MP] : sometimes the above insert action of the <div id=calendar> element
    // by using of document.write  doesn't work so that a test is need in order
    // to embed such a div in another way
    if (!document.getElementById("calendar")) {
      var sDiv;
      sDiv = "<div onclick='bShow=true' id='calendar'  class='div-style'><table width="+((showWeekNumber==1)?250:220)+" class='table-style'><tr class='title-background-style' ><td><table width='"+((showWeekNumber==1)?248:218)+"'><tr><td class='title-style'><B><span id='caption'></span></B></td><td align=right><a href='javascript:hideCalendar()'><IMG SRC='"+imgDir+"close.gif' WIDTH='15' HEIGHT='13' BORDER='0' ALT='Close the Calendar'></a></td></tr></table></td></tr><tr><td class='body-style'><span id='content'></span></td></tr>";
      if (showToday==1) {
        sDiv += "<tr class='today-background-style'><td class='today-style'><span id='lblToday'></span></td></tr>";
      }
      sDiv += "</table></div><div id='selectMonth' class='div-style'></div><div id='selectYear' class='div-style'></div>";
      document.body.innerHTML += sDiv;
    }
    crossobj=(dom)?document.getElementById("calendar").style : ie? document.all.calendar : document.calendar
    hideCalendar()

    crossMonthObj=(dom)?document.getElementById("selectMonth").style : ie? document.all.selectMonth : document.selectMonth

    crossYearObj=(dom)?document.getElementById("selectYear").style : ie? document.all.selectYear : document.selectYear

    monthConstructed=false;
    yearConstructed=false;

    if (showToday==1)
    {
      document.getElementById("lblToday").innerHTML = todayString + " <a class='today-style' onmousemove='window.status=\""+gotoString+"\"' onmouseout='window.status=\"\"' title='"+gotoString+"' href='javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();'>"+dayName[(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+", " + dateNow + " " + monthName[monthNow].substring(0,3)  + " " + yearNow + "</a>";
    }

    sHTML1= "<span id='spanLeft'  class='title-control-normal-style' onmouseover='swapImage(\"changeLeft\",\"left2.gif\");this.className=\"title-control-select-style\";window.status=\""+scrollLeftMessage+"\"' onclick='javascript:decMonth()' onmouseout='clearInterval(intervalID1);swapImage(\"changeLeft\",\"left1.gif\");this.className=\"title-control-normal-style\";window.status=\"\"' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG class='img_controlCalendar' id='changeLeft' SRC='"+imgDir+"left1.gif' width=10 height=11 BORDER=0>&nbsp</span>"
    sHTML1+="<span id='spanRight' class='title-control-normal-style' onmouseover='swapImage(\"changeRight\",\"right2.gif\");this.className=\"title-control-select-style\";window.status=\""+scrollRightMessage+"\"' onmouseout='clearInterval(intervalID1);swapImage(\"changeRight\",\"right1.gif\");this.className=\"title-control-normal-style\";window.status=\"\"' onclick='incMonth()' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartIncMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG class='img_controlCalendar' id='changeRight' SRC='"+imgDir+"right1.gif' width=10 height=11 BORDER=0>&nbsp</span>&nbsp"
    sHTML1+="<span id='spanMonth' class='title-control-normal-style' onmouseover='swapImage(\"changeMonth\",\"drop2.gif\");this.className=\"title-control-select-style\";window.status=\""+selectMonthMessage+"\"' onmouseout='swapImage(\"changeMonth\",\"drop1.gif\");this.className=\"title-control-normal-style\";window.status=\"\"' onclick='popUpMonth()'></span>&nbsp;"
    sHTML1+="<span id='spanYear'  class='title-control-normal-style' onmouseover='swapImage(\"changeYear\",\"drop2.gif\");this.className=\"title-control-select-style\";window.status=\""+selectYearMessage+"\"'  onmouseout='swapImage(\"changeYear\",\"drop1.gif\");this.className=\"title-control-normal-style\";window.status=\"\"' onclick='popUpYear()'></span>&nbsp;"

    document.getElementById("caption").innerHTML  = sHTML1

    bPageLoaded=true
  }
}

//-----------------------------------------------------------------------------

function hideCalendar() {
  if (crossobj != null) crossobj.visibility="hidden"
  if (crossMonthObj != null){crossMonthObj.visibility="hidden"}
  if (crossYearObj != null){crossYearObj.visibility="hidden"}

    showElement( 'SELECT' );
  showElement( 'APPLET' );
}

//-----------------------------------------------------------------------------

function padZero(num) {
  return (num < 10)? '0' + num : num ;
}

//-----------------------------------------------------------------------------

function constructDate(d,m,y)
{
  sTmp = dateFormat
  sTmp = sTmp.replace ("dd","<e>")
  sTmp = sTmp.replace ("d","<d>")
  sTmp = sTmp.replace ("<e>",padZero(d))
  sTmp = sTmp.replace ("<d>",d)
  sTmp = sTmp.replace ("mmm","<o>")
  sTmp = sTmp.replace ("mm","<n>")
  sTmp = sTmp.replace ("m","<m>")
  sTmp = sTmp.replace ("<m>",m+1)
  sTmp = sTmp.replace ("<n>",padZero(m+1))
  sTmp = sTmp.replace ("<o>",monthName[m])
  return sTmp.replace ("yyyy",y)
}

//-----------------------------------------------------------------------------

function closeCalendar() {
  var sTmp
  hideCalendar();
  ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected)
   /*La riga successiva è stata commentata perchè apparentemente inutile*/
  //ctlToPlaceValue.fireEvent( "onchange" );
}

//-----------------------------------------------------------------------------

/*** Month Pulldown ***/
function StartDecMonth()
{
  intervalID1=setInterval("decMonth()",80)
}


function StartIncMonth()
{
  intervalID1=setInterval("incMonth()",80)
}


function incMonth () {
  monthSelected++
  if (monthSelected>11) {
    monthSelected=0
    yearSelected++
  }
  constructCalendar()
}


function decMonth () {
  monthSelected--
  if (monthSelected<0) {
    monthSelected=11
    yearSelected--
  }
  constructCalendar()
}


function constructMonth() {
  popDownYear()
  if (!monthConstructed) {
    sHTML = ""
    for (i=0; i<12; i++) {
      sName = monthName[i];
      if (i==monthSelected){
        sName = "<B>" + sName + "</B>"
      }
      sHTML += "<tr><td id='m" + i + "' onmouseover='this.className=\"dropdown-select-style\"' onmouseout='this.className=\"dropdown-normal-style\"' onclick='monthConstructed=false;monthSelected=" + i + ";constructCalendar();popDownMonth();event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
    }

    document.getElementById("selectMonth").innerHTML = "<table width=70 class='dropdown-style' cellspacing=0 onmouseover='clearTimeout(timeoutID1)' onmouseout='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"popDownMonth()\",100);event.cancelBubble=true'>" + sHTML + "</table>"

    monthConstructed=true
  }
}


function popUpMonth() {
  constructMonth()
  crossMonthObj.visibility = (dom||ie)? "visible" : "show"
  crossMonthObj.left = parseInt(crossobj.left) + 50
  crossMonthObj.top = parseInt(crossobj.top) + 26

  hideElement( 'SELECT', document.getElementById("selectMonth") );
  hideElement( 'APPLET', document.getElementById("selectMonth") );
}


function popDownMonth() {
  crossMonthObj.visibility= "hidden"
}

//-----------------------------------------------------------------------------

/*** Year Pulldown ***/

function incYear() {
  for (i=0; i<7; i++){
    newYear = (i+nStartingYear)+1
    if (newYear==yearSelected)
    { txtYear = "&nbsp;<B>" + newYear + "</B>&nbsp;" }
    else
    { txtYear = "&nbsp;" + newYear + "&nbsp;" }
    document.getElementById("y"+i).innerHTML = txtYear
  }
  nStartingYear ++;
  bShow=true
}


function decYear() {
  for (i=0; i<7; i++){
    newYear = (i+nStartingYear)-1
    if (newYear==yearSelected)
    { txtYear = "&nbsp;<B>" + newYear + "</B>&nbsp;" }
    else
    { txtYear = "&nbsp;" + newYear + "&nbsp;" }
    document.getElementById("y"+i).innerHTML = txtYear
  }
  nStartingYear --;
  bShow=true
}


function selectYear(nYear) {
  yearSelected=parseInt(nYear+nStartingYear);
  yearConstructed=false;
  constructCalendar();
  popDownYear();
}

function constructYear() {
  popDownMonth()
  sHTML = ""
  if (!yearConstructed) {

    sHTML = "<tr><td align='center' onmouseover='this.className=\"dropdown-select-style\"' onmouseout='clearInterval(intervalID1);this.className=\"dropdown-normal-style\"' onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\",30)' onmouseup='clearInterval(intervalID1)'>-</td></tr>"
    j = 0
    nStartingYear = yearSelected-3
    for (i=(yearSelected-3); i<=(yearSelected+3); i++) {
      sName = i;
      if (i==yearSelected){
        sName = "<B>" + sName + "</B>"
      }

      sHTML += "<tr><td id='y" + j + "' onmouseover='this.className=\"dropdown-select-style\"' onmouseout='this.className=\"dropdown-normal-style\"' onclick='selectYear("+j+");event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
      j ++;
    }

    sHTML += "<tr><td align='center' onmouseover='this.className=\"dropdown-select-style\"' onmouseout='clearInterval(intervalID2);this.className=\"dropdown-normal-style\"' onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\",30)' onmouseup='clearInterval(intervalID2)'>+</td></tr>"

    document.getElementById("selectYear").innerHTML = "<table width=44 class='dropdown-style' onmouseover='clearTimeout(timeoutID2)' onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\",100)' cellspacing=0>" + sHTML + "</table>"

    yearConstructed = true
  }
}


function popDownYear() {
  clearInterval(intervalID1)
  clearTimeout(timeoutID1)
  clearInterval(intervalID2)
  clearTimeout(timeoutID2)
  crossYearObj.visibility= "hidden"
}


function popUpYear() {
  var leftOffset

  constructYear()
  crossYearObj.visibility = (dom||ie)? "visible" : "show"
  leftOffset = parseInt(crossobj.left) + document.getElementById("spanYear").offsetLeft
  if (ie)
  {
    leftOffset += 6
  }
  crossYearObj.left = leftOffset
  crossYearObj.top = parseInt(crossobj.top) + 26
}

//-----------------------------------------------------------------------------

/*** calendar ***/
function WeekNbr(n) {
  // Algorithm used:
  // From Klaus Tondering's Calendar document (The Authority/Guru)
  // hhtp://www.tondering.dk/claus/calendar.html
  // a = (14-month) / 12
  // y = year + 4800 - a
  // m = month + 12a - 3
  // J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045
  // d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461
  // L = d4 / 1460
  // d1 = ((d4 - L) mod 365) + L
  // WeekNumber = d1 / 7 + 1

  year = n.getFullYear();
  month = n.getMonth() + 1;
  if (startAt == 0) {
     day = n.getDate() + 1;
  }
  else {
     day = n.getDate();
  }

  a = Math.floor((14-month) / 12);
  y = year + 4800 - a;
  m = month + 12 * a - 3;
  b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
  J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
  d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
  L = Math.floor(d4 / 1460);
  d1 = ((d4 - L) % 365) + L;
  week = Math.floor(d1/7) + 1;

  return week;
}


function constructCalendar () {
  var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31)

  var dateMessage
  var startDate = new Date (yearSelected,monthSelected,1)
  var endDate

  if (monthSelected==1)
  {
    endDate = new Date (yearSelected,monthSelected+1,1);
    endDate = new Date (endDate - (24*60*60*1000));
    numDaysInMonth = endDate.getDate()
  }
  else
  {
    numDaysInMonth = aNumDays[monthSelected];
  }

  datePointer = 0
  dayPointer = startDate.getDay() - startAt

  if (dayPointer<0)
  {
    dayPointer = 6
  }

  sHTML = "<table border=0 class='body-style'><tr>"

  if (showWeekNumber==1)
  {
    sHTML += "<td width=27><b style='font-weight: bold;'>" + weekString + "</b></td><td width=1 rowspan=7 class='weeknumber-div-style'><img src='"+imgDir+"divider.gif' width=1></td>"
  }

  for (i=0; i<7; i++) {
    sHTML += "<td width='27' align='right'><B style='font-weight: bold;'>"+ dayName[i]+"</B></td>"
  }
  sHTML +="</tr><tr>"

  if (showWeekNumber==1)
  {
    sHTML += "<td align=right>" + WeekNbr(startDate) + "&nbsp;</td>"
  }

  for ( var i=1; i<=dayPointer;i++ )
  {
    sHTML += "<td>&nbsp;</td>"
  }

  for ( datePointer=1; datePointer<=numDaysInMonth; datePointer++ )
  {
    dayPointer++;
    sHTML += "<td align=right>"

    var sStyle="normal-day-style"; //regular day

    if ((datePointer==dateNow)&&(monthSelected==monthNow)&&(yearSelected==yearNow)) //today
    { sStyle = "current-day-style"; }
    else if (dayPointer % 7 == (startAt * -1) +1) //end-of-the-week day
    { sStyle = "end-of-weekday-style"; }

    //selected day
    if ((datePointer==odateSelected) && (monthSelected==omonthSelected) && (yearSelected==oyearSelected))
    { sStyle += " selected-day-style"; }

    sHint = ""
    for (k=0;k<HolidaysCounter;k++)
    {
      if ((parseInt(Holidays[k].d)==datePointer)&&(parseInt(Holidays[k].m)==(monthSelected+1)))
      {
        if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0)))
        {
          sStyle += " holiday-style";
          sHint+=sHint==""?Holidays[k].desc:"\n"+Holidays[k].desc
        }
      }
    }

    var regexp= /\"/g
    sHint=sHint.replace(regexp,"&quot;")

    dateMessage = "onmousemove='window.status=\""+selectDateMessage.replace("[date]",constructDate(datePointer,monthSelected,yearSelected))+"\"' onmouseout='window.status=\"\"' "

                      sHTML += "<a class='"+sStyle+"' "+dateMessage+" title=\"" + sHint + "\" href='javascript:dateSelected="+datePointer+";closeCalendar();'>&nbsp;" + datePointer + "&nbsp;</a>"

                      sHTML += ""
    if ((dayPointer+startAt) % 7 == startAt) {
      sHTML += "</tr><tr>"
      if ((showWeekNumber==1)&&(datePointer<numDaysInMonth))
      {
        sHTML += "<td align=right>" + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + "&nbsp;</td>"
      }
    }
  }

  document.getElementById("content").innerHTML   = sHTML
  document.getElementById("spanMonth").innerHTML = "&nbsp;" + monthName[monthSelected] + "&nbsp;<IMG class='img_controlCalendar' id='changeMonth' SRC='"+imgDir+"drop1.gif' WIDTH='12' HEIGHT='10' BORDER=0>"
  document.getElementById("spanYear").innerHTML = "&nbsp;" + yearSelected + "&nbsp;<IMG class='img_controlCalendar'id='changeYear' SRC='"+imgDir+"drop1.gif' WIDTH='12' HEIGHT='10' BORDER=0>"
}


function popUpCalendar(ctl, ctl2 , format) {
  var leftpos=0
  var toppos=0
  
  if (bPageLoaded)
  {
  if ( crossobj.visibility == "hidden" ) {
      ctlToPlaceValue = document.getElementById(ctl2);
      //ctlToPlaceValue = document.getElementByName(ctl2);
      //ctlToPlaceValue = ctl2;
      
      dateFormat=format;

      formatChar = " "
      aFormat = dateFormat.split(formatChar)
      if (aFormat.length<3)
      {
        formatChar = "/"
        aFormat = dateFormat.split(formatChar)
        if (aFormat.length<3)
        {
          formatChar = "."
          aFormat = dateFormat.split(formatChar)
          if (aFormat.length<3)
          {
            formatChar = "-"
            aFormat = dateFormat.split(formatChar)
            if (aFormat.length<3)
            {
              // invalid date format
              formatChar=""
            }
          }
        }
      }

      tokensChanged = 0
      if ( formatChar != "" )
      {
        // use user's date
        //aData = ctl2.value.split(formatChar)
        aData = document.getElementById(ctl2).value.split(formatChar) 

        for (i=0;i<3;i++)
        {
          if ((aFormat[i]=="d") || (aFormat[i]=="dd"))
          {
            dateSelected = parseInt(aData[i], 10)
            tokensChanged ++
          }
          else if ((aFormat[i]=="m") || (aFormat[i]=="mm"))
          {
            monthSelected = parseInt(aData[i], 10) - 1
            tokensChanged ++
          }
          else if (aFormat[i]=="yyyy")
          {
            yearSelected = parseInt(aData[i], 10)
            tokensChanged ++
          }
          else if (aFormat[i]=="mmm")
          {
            for (j=0; j<12; j++)
            {
              if (aData[i]==monthName[j])
              {
                monthSelected=j
                tokensChanged ++
              }
            }
          }
        }
      }

      if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected))
      {
        dateSelected = dateNow
        monthSelected = monthNow
        yearSelected = yearNow
      }

      odateSelected=dateSelected
      omonthSelected=monthSelected
      oyearSelected=yearSelected

      aTag = ctl
      do {
        aTag = aTag.offsetParent;
        leftpos += aTag.offsetLeft;
        toppos += aTag.offsetTop;
      } while(aTag.tagName!="BODY");

      //crossobj.left = (fixedX==-1) ? (ctl.offsetLeft + leftpos) : fixedX
      //crossobj.top = (fixedY==-1) ? (ctl.offsetTop + toppos + ctl.offsetHeight + 2) : fixedY
	  
	  if (fixedX==-1){
		crossobj.left = '' + (ctl.offsetLeft + leftpos) +'px';
	  }else{
		crossobj.left = '' + fixedX+'px';
	  }
	  
	  if (fixedY==-1){
		crossobj.top = '' + (ctl.offsetTop + toppos + ctl.offsetHeight + 2)+'px';
	  }else{
		crossobj.top = '' + fixedY+'px';
	  }
	  
	  
      constructCalendar (1, monthSelected, yearSelected);
      crossobj.visibility=(dom||ie)? "visible" : "show"

      hideElement( 'SELECT', document.getElementById("calendar") );
      hideElement( 'APPLET', document.getElementById("calendar") );
//alert("4");
      document.getElementById("calendar").focus();

      bShow = true;
    }
    else
    {//alert("5");
      hideCalendar()
      //alert("ctlNow: " + ctlNow + "and ctl: " + ctl);
      if (ctlNow!=ctl) {popUpCalendar(ctl, ctl2, format)}
    }
    ctlNow = ctl
  }else{
  	//alert('ciao');
  	}
}

//-----------------------------------------------------------------------------

/*document.onkeypress = function hidecal1 () {

  if (event.keyCode==27 || event.which==27)
  {
    hideCalendar()
  }
}*/

document.onclick = function hidecal2 () {
  if (!bShow)
  {
    hideCalendar()
  }
  bShow = false
}

//-----------------------------------------------------------------------------

if(ie)
{
  init();
}
else
{
  window.onload=init();
}

