var active = new Array();
var today = new Date();
var now = new Date();
var monate = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var weekdays = new Array("Su","Mo","Tu","We","Th","Fr","Sa");
var closeCal = "Close";
var allow_past = false;
var allow_today = false;
var quick;
var x_correction = 0;
var y_correction = 0;
var pastYears = 0;
var nextYears = 2;
var parentObj;

function clickAction(day,month,year)
{
parentObj.value = day+'-'+(month+1)+'-'+year;
closeCalendar();

if(poppedOut) changeDate();
}

function closeCalendar()
{
   document.getElementById('calendar').style.visibility = 'hidden';
}

function datepicker(xObj)
{
  if(parentObj == '') parentObj = xObj;
  

  if (!document.getElementById('calendar'))
  {
    var newNode = document.createElement("div");
    newNode.setAttribute("id", 'calendar');
    newNode.setAttribute("class", "calendarDiv");
    newNode.setAttribute("style", "visibility: hidden;");
    document.body.appendChild(newNode);
  }

  // Calculate X,Y Pos
  x = xObj.offsetLeft + xObj.offsetWidth + x_correction ;
  y = xObj.offsetTop + y_correction ;
  
  // deal with elements inside tables and such
  var parent = xObj;
  while (parent.offsetParent) {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop ;
  }


  var pickerDiv = document.getElementById('calendar');
  pickerDiv.style.position = "absolute";
  pickerDiv.style.left = x + "px";
  pickerDiv.style.top = y + "px";

  pickerDiv.style.zIndex = 10000;
  
  if(xObj == parentObj && pickerDiv.style.visibility == 'visible')
  {
    pickerDiv.style.display = ("none");
    pickerDiv.style.visibility = ("hidden");
  }
  else
  {
    pickerDiv.style.visibility = ("visible");
    pickerDiv.style.display = ("block");
  }

  parentObj = xObj;
  
  
  // Display Calendar in DIV
  
  if(xObj.value != '')
  {
      xDate = xObj.value.split('-');
      setActive(xDate[0],xDate[1],xDate[2]);
  }
  else displayCalendar();

}


function setActive(day,month,year)
{
month--;
now.setDate(day);
now.setMonth(month);
now.setFullYear(year);
active[0] = day;
active[1] = month;
active[2] = year;
displayCalendar();
}

function scrollCalendar(indic)
{
   month = now.getMonth();
   if(indic == 0) month--;
   else month++;

   if(month == -1)
   {
   	now.setFullYear(now.getFullYear()-1);
        now.setMonth(11);
   }
   else if(month == 12)
   {
   	now.setFullYear(now.getFullYear()+1);
        now.setMonth(0);
   }
   else now.setMonth(month);

   displayCalendar();
}

function chooseYear(year)
{
   now.setFullYear(year);
   displayCalendar();
}

function chooseMonth(month)
{
   now.setMonth(month);
   displayCalendar();
}

function quickSelect(xId,xObj)
{
   // Calculate X,Y Pos
  var x = xObj.offsetLeft;
  var y = xObj.offsetTop + xObj.offsetHeight;

  if(document.getElementById(quick))
   {
         try
         {
           if(document.getElementById(quick).style.display == '' && quick == xId)
           {
                document.getElementById(quick).style.display = 'none';
                return true;
           }
           else document.getElementById(quick).style.display = 'none';
         } catch (e) {}
   }
   document.getElementById(xId).style.display = '';
   document.getElementById(xId).style.left = x + "px";
   quick = xId;
}

function displayCalendar()
{
   begin = now;
   begin.setDate(1);

   day = begin.getDay();
   if(day == 0) day = 7;
   blanks = "";
   //Blanks 1
   for(i=1;i<day;i++) blanks += "<td>&nbsp;</td>";
   // Rendering Years
   year = "";
   for(j=now.getFullYear()-pastYears-1;j<now.getFullYear()+nextYears;j++) year += '<a href="javascript:void(0);" onclick="chooseYear('+j+');">'+j+'</a>';
   // Rendering Months
   month = "";
   for(j=0;j<12;j++) month += '<a href="javascript:void(0);" onclick="chooseMonth('+j+');">'+monate[j]+'</a>';
   // Headline
   headline = '<table border="0" cellspacing="0" cellpadding="0" class="cpick">';
   headline += '<tr class="cpick_top"><td class="cpick_headline" colspan="5"><div class="cpick_month_down" id="month_down" style="display:none;">'+month+'</div><a href="javascript:void(0);" onclick="quickSelect(\'month_down\',this);" class="quickSelect">'+monate[now.getMonth()]+'</a> <div class="cpick_year_down" id="year_down" style="display:none;">'+year+'</div><a href="javascript:void(0);" onclick="quickSelect(\'year_down\',this);" class="quickSelect">'+now.getFullYear()+'</a></td><td class="cpick_rr"><a href="javascript:void(0);" onclick="scrollCalendar(0);"><<</a></td><td class="cpick_fw"><a href="javascript:void(0);" onclick="scrollCalendar(1);">>></a></td></tr>';
   headline += '<tr class="cpick_day"><td>'+weekdays[1]+'</td><td>'+weekdays[2]+'</td><td>'+weekdays[3]+'</td><td>'+weekdays[4]+'</td><td>'+weekdays[5]+'</td><td>'+weekdays[6]+'</td><td>'+weekdays[0]+'</td></tr>';

   maxTag = 31;
   if(now.getMonth()==3 ||now.getMonth()==5 || now.getMonth()==8 || now.getMonth()==10 ) maxTag--;

   if(now.getMonth()==1)
   {
      maxTag = maxTag - 3;
      if(now.getFullYear()%4==0) maxTag++;
      if(now.getFullYear()%100==0) maxTag--;
      if(now.getFullYear()%400==0) maxTag++;
   }


   day_td = "";
   k = i-1;
   z = 0;
   


   for(m=1;m<(maxTag+1);m++)
   {
      if(allow_today) mRef = m+1;
      else mRef = m;

      k++;
      if(k==1) day_td += "<tr>";
      add_class = "";
      if(today.getDate() == m && now.getMonth() == today.getMonth() && now.getFullYear() == today.getFullYear()) add_class = "today";
      if(active[0] == m && now.getMonth() == active[1] && now.getFullYear() == active[2]) add_class = "active";
      if(( (( today.getDate() < mRef  && now.getMonth() == today.getMonth() && now.getFullYear() == today.getFullYear()) || now.getFullYear() > today.getFullYear() || (now.getFullYear() == today.getFullYear() && now.getMonth() > today.getMonth())) && !allow_past ) || allow_past)
      {
        day_td += '<td class="day"><a href="javascript:void(0);" class="'+add_class+'" onclick="clickAction('+m+','+now.getMonth()+','+now.getFullYear()+');">'+m+'</a></td>';
      }
      else
      {
        day_td += '<td class="day"><div class="'+add_class+'">'+m+'</div></td>';
      }

      if((k%7)==0) day_td += "</tr>";
   }

   if((k%7)!=0)
   {
      for(x=(k%7);x<8-1;x++) day_td += "<td>&nbsp;</td>";
      day_td += "</tr>";
   }

   end = '<tr class="footer"><td colspan="7"><div class="close"><a href="javascript:void(0);" onclick="closeCalendar();">'+closeCal+'</a></div></td></tr>';
   end += '</table>';
   document.getElementById("calendar").innerHTML = headline + blanks + day_td + end;
   document.getElementById("calendar").style.display = "";
}
