var POPCAL = "popCalendar";
var popCalCurrent;
var popCalDisplay;

var MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
var DAYS = [ "s", "m", "t", "w", "t", "f", "s" ];

popCalOffsetLeft = 0;
popCalOffsetTop = 0;

function popCalendar( f, el, elb )
{
  popCalCurrent = getDate( f, el, elb );
  drawCalendar( f, el, elb, popCalCurrent );
}

function drawCalendar( f, el, elb )
{
  var thecal = getCalendar();
  var thebutton;
  thecal.className = "popCalendar";
  thecal.style.display = "none";
  thecal.style.left = (getLeftPos(elb)+getWidth(elb)+popCalOffsetLeft) + "px";
  thecal.style.top = (getTopPos(elb)+popCalOffsetTop) + "px";

  popCalDisplay = new Date(popCalCurrent);
  writeCalendar( thecal, f, el );
}

function writeCalendar( thecal, f, el )
{
  var popCalLoop = new Date(popCalDisplay);
  var popCalToday = new Date();
  popCalLoop.setDate(1);
  var loopMonth = popCalLoop.getMonth();
  thecal.innerHTML = "";
  var week = append( thecal, "", "" );
  append( week, "<a href=\"javascript:moveyear(-1,'"+f+"','"+el+"')\">&laquo;&laquo;</a>", "monthPrevious" );
  append( week, "<a href=\"javascript:movemonth(-1,'"+f+"','"+el+"')\">&laquo;</a>", "monthPrevious" );
  append( week, "<a href=\"javascript:moveyear(1,'"+f+"','"+el+"')\">&raquo;&raquo;</a>", "monthNext" );
  append( week, "<a href=\"javascript:movemonth(1,'"+f+"','"+el+"')\">&raquo;</a>", "monthNext" );
  append( week, MONTHS[popCalLoop.getMonth()] + " " + popCalLoop.getFullYear(),"monthTitle" );
  week = append( thecal, "", "" );
  //append( week, popCalLoop.getFullYear(),"monthTitle" );
  var esc = 1;

  week = append( thecal, "", "week" );
  for ( d=0; d<7; d++ )
  {
    var i = (d<6) ? d+1 : 0;
    append( week, DAYS[i], "dayhead h"+DAYS[i] );
  }
  while( popCalLoop.getMonth()==loopMonth )
  {
    week = append( thecal, "", "week" );
    for ( d=0; d<=6; d++ )
    {
      var i = (d<6) ? d+1 : 0;
      if ( popCalLoop.getDay()==i && popCalLoop.getMonth()==loopMonth)
      {
        var click = "setDate( '"+f+"','"+el+"'," + popCalLoop.getFullYear() + ", " + (popCalLoop.getMonth()+1) + ", " + popCalLoop.getDate() + "); return false";
        var className = "day"
        if ( popCalLoop.getDate()==popCalCurrent.getDate() && popCalLoop.getMonth()==popCalCurrent.getMonth() && popCalLoop.getFullYear()==popCalCurrent.getFullYear() )
        {
          className += " selected";
        }
        else
        if ( popCalLoop.getDate()==popCalToday.getDate() && popCalLoop.getMonth()==popCalToday.getMonth() && popCalLoop.getFullYear()==popCalToday.getFullYear() )
        {
          className += " today";
        }
        className += " " + DAYS[popCalLoop.getDay()];
        append( week, "<a href=\"#\" onclick=\""+click+"\">" + popCalLoop.getDate() + "</a>", className );
        popCalLoop.setDate( popCalLoop.getDate()+1 );
      }
      else
      {
        append( week, "&nbsp;", "daynone" );
      }
    }
    esc++;
  }
  append( thecal, "<a href=\"#\" onclick=\"hideCalendar();return false\">x</a>", "close" );
  thecal.style.display = "block";
  showIframe( thecal );
}

function setDate( f, el, year, month, day )
{
  if ( typeof(document.forms[f].elements[el+"_year"])!="undefined" &&
       typeof(document.forms[f].elements[el+"_month"])!="undefined" &&
       typeof(document.forms[f].elements[el+"_day"])!="undefined" )
  {
    if ( document.forms[f].elements[el+"_year"].type.indexOf("select")!=-1 )
    {
      setIndex( document.forms[f].elements[el+"_year"], year );
      setIndex( document.forms[f].elements[el+"_month"], month );
      setIndex( document.forms[f].elements[el+"_day"], day );
    }
    else
    {
      document.forms[f].elements[el+"_year"].value = year;
      document.forms[f].elements[el+"_month"].value = (month<10 ? "0":"")+month;
      document.forms[f].elements[el+"_day"].value = (day<10 ? "0":"")+day;
    }
  }
  else
  if ( typeof(document.forms[f].elements[el+"year"])!="undefined" &&
       typeof(document.forms[f].elements[el+"month"])!="undefined" &&
       typeof(document.forms[f].elements[el+"day"])!="undefined" )
  {
    if ( document.forms[f].elements[el+"year"].type.indexOf("select")!=-1 )
    {
      setIndex( document.forms[f].elements[el+"year"], year );
      setIndex( document.forms[f].elements[el+"month"], month );
      setIndex( document.forms[f].elements[el+"day"], day );
    }
    else
    {
      document.forms[f].elements[el+"year"].value = year;
      document.forms[f].elements[el+"month"].value = (month<10 ? "0":"")+month;
      document.forms[f].elements[el+"day"].value = (day<10 ? "0":"")+day;
    }
  }
  else
  if ( typeof(document.forms[f].elements[el])!="undefined" && document.forms[f].elements[el].value!="" )
  {
    document.forms[f].elements[el].value = year + "/" + month + "/" + day;
  }
  hideCalendar();
}

function setIndex( el, val )
{
  for ( i=0; i<el.options.length; i++ )
  {
    if ( el.options[i].value == val )
    {
      el.selectedIndex = i;
      break;
    }
  }
}

function movemonth( val, f, el )
{
  popCalDisplay.setMonth( popCalDisplay.getMonth()+val );
  var thecal = getCalendar();
  writeCalendar( thecal, f, el );
}
function moveyear( val, f, el )
{
  popCalDisplay.setFullYear( popCalDisplay.getFullYear()+val );
  var thecal = getCalendar();
  writeCalendar( thecal, f, el );
}
function getCalendar()
{
  var thecal;
  if ( typeof(document.getElementById( POPCAL ))!="undefined" && document.getElementById( POPCAL )!=null )
  {
    thecal = document.getElementById( POPCAL );
  }
  else
  {
    thecal = document.createElement("div");
    thecal.id = POPCAL;
    thecal.style.display = "none";
    thecal.style.zIndex = 2;
    document.body.appendChild(thecal);
  }
  return thecal;
}

function hideCalendar( )
{
  var thecal = getCalendar();
  thecal.style.display = "none";
  hideIframe( thecal );
}

function append( outer, txt, style )
{
  var inner = document.createElement("div");
  inner.className = style;
  inner.innerHTML = txt;
  outer.appendChild( inner );
  return inner;
}

function getDate( f, el )
{
  if ( typeof(document.forms[f].elements[el+"_year"])!="undefined" &&
       typeof(document.forms[f].elements[el+"_month"])!="undefined" &&
       typeof(document.forms[f].elements[el+"_day"])!="undefined" )
  {
    if ( document.forms[f].elements[el+"_year"].value>0 &&
         document.forms[f].elements[el+"_month"].value>0 &&
         document.forms[f].elements[el+"_day"].value>0 )
    {
      return new Date( document.forms[f].elements[el+"_year"].value, document.forms[f].elements[el+"_month"].value-1, document.forms[f].elements[el+"_day"].value );
    }
  }
  else
  if ( typeof(document.forms[f].elements[el+"year"])!="undefined" &&
       typeof(document.forms[f].elements[el+"month"])!="undefined" &&
       typeof(document.forms[f].elements[el+"day"])!="undefined" )
  {
    if ( document.forms[f].elements[el+"year"].value>0 &&
         document.forms[f].elements[el+"month"].value>0 &&
         document.forms[f].elements[el+"day"].value>0 )
    {
      return new Date( document.forms[f].elements[el+"year"].value, document.forms[f].elements[el+"month"].value-1, document.forms[f].elements[el+"day"].value );
    }
  }
  else
  if ( typeof(document.forms[f].elements[el])!="undefined" && document.forms[f].elements[el].value!="" )
  {
    return new Date( document.forms[f].elements[el].value );
  }
  return new Date();
}

function getLeftPos( layername )
{
  elt = document.getElementById( layername );
  if( elt != null )
  {
    if( elt.pageX )
    {
      return elt.pageX;
    }
    x = 0;
    while( elt.offsetParent != null )
    {
      x += elt.offsetLeft;
      elt = elt.offsetParent;
    }
    x += elt.offsetLeft;
    return x;
  }
  return( -1 );
}

function getTopPos( layername )
{
  elt = document.getElementById( layername );
  if( elt != null )
  {
    if( elt.pageY )
    {
      return elt.pageY;
    }
    y = 0;
    while( elt.offsetParent != null )
    {
      y += elt.offsetTop;
      elt = elt.offsetParent;
    }
    y += elt.offsetTop;
    return y;
  }
  return(-1);
}

function getWidth( layername )
{
  elt = document.getElementById( layername );
  if( elt != null )
  {
    if( elt.style && elt.style.pixelWidth )
      return elt.style.pixelWidth;
    if( elt.style && elt.style.width )
      return stringToNumber(elt.style.width);
    if( elt.offsetWidth )
      return stringToNumber( elt.offsetWidth );
    if( elt.document && elt.document.width )
      return elt.document.width;
    if( elt.clip )
      return elt.clip.right - elt.clip.left;
  }
  return( 0 );
}

function getHeight( layername )
{
  elt = document.getElementById( layername );
  if( elt != null )
  {
    if( elt.style && elt.style.pixelHeight )
      return elt.style.pixelHeight;
    if( elt.style && elt.style.height )
      return stringToNumber(elt.style.height);
    if( elt.offsetHeight )
      return stringToNumber( elt.offsetHeight );
    if( elt.document && elt.document.height )
      return elt.document.height;
    if( elt.clip )
      return elt.clip.bottom - elt.clip.top;
  }
  return( 0 );
}