// JavaScript Document
Event.observe(window,"load",initApplication);
var pulloutRoundedItems=$A();

var PulloutRoundedBox=Class.create();
PulloutRoundedBox.prototype={initialize:function(_4)
{
  this.element=_4;
  this.header=_4.getElementsByClassName("heading")[0];
  this.textContainer1=$(_4).getElementsByClassName("text1")[0];
  this.textContainer2=$(_4).getElementsByClassName("text2")[0];
  this.header.style.cursor="pointer";
  if(this.textContainer1.visible()){this.toggleContent();}
  Event.observe(this.header,"click",this.toggleContent.bind(this));
}
,toggleContent:function(_5){
  if(!this.textContainer1){return;}
  var _6=this.header.tagName=="H2"?"url(fileadmin/layout/images/plus.gif)":"url(fileadmin/layout/images/plus_schwarz.gif)";
  if(this.textContainer1.visible()){this.textContainer1.hide(); this.textContainer2.hide();}
  else{_6=this.header.tagName=="H2"?"url(fileadmin/layout/images/minus.gif)":"url(fileadmin/layout/images/minus_schwarz.gif)";
  this.textContainer1.style.display="block"; this.textContainer2.style.display="block";}this.header.style.backgroundImage=_6;}
};

function initApplication(){initPulloutRounded();}

function initPulloutRounded()
{
  var _11=$A();
  var _12=document.getElementsByClassName("mms_calendar_event");
  if(!_12.length){return;}
  _12.each(function(_13){pulloutRoundedItems.push(new PulloutRoundedBox(_13));});
}

window.onload = function()
{
  var div = document.getElementById('test');
  var start_date = null;
  
  //Date.parse(date) --> Millisekunden ab 1.1.1970  
  // erster Aufruf (aktuelles Start-Datum in hidden-Field schreiben)

  if(!document.calendar_mms.js_current_start.value)
  {  
  	  
    start_date = Date.parse(new Date());
    document.calendar_mms.js_current_start.value = start_date;
  }
  // aktuelles Start-Datum aus dem hidden-Field auslesen
  else
  {    
    start_date = document.calendar_mms.js_current_start.value;    
  }      
  
  mycalendar.init(13, start_date, div);
  mycalendar.show(0);
}

var mycalendar = {

  weekDays : new Array('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'),
  monthDays : new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
  months : new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'),
  elements : new Array(21),
  
  duration : null,
  startTime : null,
  divContainer : null,
  
  init : function(dur, sta, div)
  {
    this.duration = dur;
    this.startTime = this.toInt(sta);
    this.divContainer = div;
  },
  
  show: function(direction)
  {
    this.startTime = this.startTime + ((this.duration+1) * 86400000/*1Tag in ms*/ * direction);    
    document.calendar_mms.js_current_start.value = mycalendar.startTime;    
    
    var date = new Date(this.startTime);

    var startDay = date.getDate();
    var startMonth = date.getMonth();
    var startYear = date. getFullYear();
    
    // Schaltjahr ermitteln
    if(this.isLeapyear(startYear))
      this.monthDays[1] = 29;
    else
      this.monthDays[1] = 28;
    
    // Startindex im Array ermitteln (alles davor wird 0)
    var startIndex = null; 
    if(date.getDay())
      startIndex = date.getDay() -1;
    else
      startIndex = 6;
      
    var day = startDay;
    var month = startMonth;
    var year = startYear;
   
    //elemente-Array füllen
    for(i=0; i<=this.duration; i++)
    {     
      this.elements[startIndex] = this.generateSpan(day, day + '-' + (month+1) + '-' + year, 'cal_value');
      
      startIndex++;
      day++;
      
      if(day > this.monthDays[startMonth])
      {
        day = 1;
        month++;
        if(month > 11)
        {
          month = month % 12;
          year++;
        }
      }        
    }
    
    //die restlichen Elemente mit einem leeren span füllen
    for(var i=0; i<this.elements.length; i++)
    {
      if(!this.elements[i])
        this.elements[i] = this.generateSpan('', 'cal_empty');
    }
    
    // alte Elemente entfernen
    this.deleteOldElements();
    
    // Tabelle anzeigen
    this.generateTable(startMonth, month, startYear, year);
    
    // Navigation anzeigen
    this.generateNavigation();
   
    // Clearer einfügen
    this.generateClearer();
    
    // Uhrzeit einfügen
    this.generateClock();
    
    // Clearer einfügen
    this.generateClearer();
    
    // Current highlighten
    this.highlightCurrent();
  },
  
  generateSpan : function(val, date, cla)
  {
    var span = document.createElement('span');
    var text = document.createTextNode(val);
    span.appendChild(text);
    span.className = cla;
    span.title = date;
    span.onclick = new Function('document.calendar_mms.js_current_date.value="'+date+'"; document.calendar_mms.submit();');
    return span;
  },
  
  generateTable : function(startMonth, endMonth, startYear, endYear)
  {   
    var table = document.createElement('table');
    table.id = 'cal_tab';  
    
    // head
    var thead = document.createElement('thead');
    
    var tr1 = document.createElement('tr');
    var tr2 = document.createElement('tr');
    
    // head1
    var th = document.createElement('th');
    if(startMonth == endMonth)
      th.appendChild(document.createTextNode(this.months[startMonth] + ' ' + endYear));
    else
    {
      if(startYear == endYear)
        th.appendChild(document.createTextNode(this.nameCutter(startMonth) + '/' + this.nameCutter(endMonth) + ' ' + endYear));
      else
        th.appendChild(document.createTextNode(this.nameCutter(startMonth) + ' ' + startYear + '/' + this.nameCutter(endMonth) + ' ' + endYear));
    }
    th.className = 'monat';
    th.colSpan = '7';
    tr1.appendChild(th);
    
    // head2    
    for(var i=0; i<7; i++)
    {
      var th = document.createElement('th');
      th.appendChild(document.createTextNode(this.weekDays[i]));
      th.className = 'weekDays';
      tr2.appendChild(th);
    }
    thead.appendChild(tr1);
    thead.appendChild(tr2);    
    
    // body
    var tbody = document.createElement('tbody');
    var tr = document.createElement('tr');  
    for(var i=0; i<this.elements.length; i++)
    {     
      var td = document.createElement('td');
      td.appendChild(this.elements[i]);
      tr.appendChild(td);
      if(i%7 == 6)
      {
        tbody.appendChild(tr);
        tr = document.createElement('tr');
      }
    }
    
    table.appendChild(thead);
    table.appendChild(tbody);
    
    this.divContainer.appendChild(table);   
  },
  
  deleteOldElements : function()
  {		
		// Kindelemente entfernen
		while(this.divContainer.hasChildNodes())
    {
      this.divContainer.removeChild(this.divContainer.firstChild);
    }
  },
  
  generateClearer : function()
  {
    var clear = document.createElement('div');
    clear.className = 'clearer';
    this.divContainer.appendChild(clear);
  },
  
  generateClock : function()
  {
    var clock = document.createElement('div');
    clock.id = 'cal_clock';
    
    var now = new Date();
    var Std = now.getHours();
    var Min = now.getMinutes();
        
    clock.innerHTML = ((Std < 10) ? "0" + Std : Std) +':'+ ((Min < 10) ? "0" + Min : Min);    
    
    this.divContainer.appendChild(clock);    
    // Uhrzeit aktualisieren (jede Sekunde)
    setInterval('mycalendar.refreshClock();', 1000);
  },
  
  refreshClock : function()
  {
    var now = new Date();
    var Std = now.getHours();
    var Min = now.getMinutes();
    
    var clock = document.getElementById('cal_clock');   
    clock.innerHTML = ((Std < 10) ? "0" + Std : Std) +':'+ ((Min < 10) ? "0" + Min : Min);
  },
  
  generateNavigation : function()
  {
    var div = document.createElement('div');
    div.id = 'cal_prev';    
    div.onclick = new Function('mycalendar.show(-1);');
    div.appendChild(document.createTextNode('<<'));
    this.divContainer.appendChild(div); 
    
    var div = document.createElement('div');
    div.id = 'cal_next';    
    div.onclick = new Function('mycalendar.show(1);');
    div.appendChild(document.createTextNode('>>'));     
    this.divContainer.appendChild(div); 
  },
  
  nameCutter : function(monthIndex)
  {
    var monthName = this.months[monthIndex];
    
    switch(monthIndex)
    {
      case 0  :
      case 1  :
      case 7  :
      case 8  :
      case 9  :
      case 10 :
      case 11 : monthName = monthName.substring(0,3); monthName += ''; break;
    }
    
    return monthName;
  },
  
  // String -> Int
  toInt : function( x )
  {
  	return ( x > 0 ? Math.floor( x ) : Math.ceil ( x ) )
  },
  
  // aktuelles Datum hightlighten
  highlightCurrent : function()
  {
    var elements = this.divContainer.getElementsByTagName('span');
    
    for(var i=0; i<elements.length; i++)
    {
    	var curDate = document.calendar_mms.calendar_startday.value + '-'+ document.calendar_mms.calendar_startmonth.value + '-'+ document.calendar_mms.calendar_startyear.value;
 
      if(elements[i].getAttribute('title') == curDate)
        elements[i].className = 'cal_cur';
    }  
  },
  
  // Ermitteln ob Schaltjahr
  isLeapyear : function (x)
  {    
    if (x % 400 == 0)
      return true;
    else if (x % 100 == 0)
      return false;
    else if (x % 4 == 0)
      return true;
    else
      return false;
  }
}
