﻿/**********************************************************************
*         Get GoogleCalendarEntries          *
************************************************************************/


var myServiceCalendarJS;
var queryCalendarJS;
var arrayCalendarJS = new Array();

/**
 * Adds a leading zero to a single-digit number.  Used for displaying dates.
 */
function padNumberCalendarJS(num) {
  if (num <= 9) {
    return "0" + num;
  }
  return num;
}

function setupMyServiceCalendarJS() {
    myServiceCalendarJS = new google.gdata.calendar.CalendarService('ConradlerCalendar');
	queryCalendarJS = new google.gdata.calendar.CalendarEventQuery(feedUrl);

	// Create and set the minimum and maximum start time for the date query
	var currentTime = new Date();
	var month = currentTime.getMonth() + 1;
	var day = currentTime.getDate();
	var year = currentTime.getFullYear();
	var nextyear = year+1;
	
	if(year == '2011')
	{
		year = '2012'	
	}
	
	var startMin = google.gdata.DateTime.fromIso8601(year+'-01-01T00:00:00.000-00:00');
	var startMax = google.gdata.DateTime.fromIso8601(nextyear+'-12-31T00:00:00.000-23:59');
	queryCalendarJS.setMinimumStartTime(startMin);
	queryCalendarJS.setMaximumStartTime(startMax);
	queryCalendarJS.setOrderBy("starttime");
	queryCalendarJS.setSortOrder('ascending');
}

function handleMyFeedCalendarJS(feedRoot) {
	
  var entries = feedRoot.feed.getEntries();

  /* loop through each event in the feed */
  var len = entries.length;
  for (var i = 0; i < len; i++) {
    var entry = entries[i];
    var title = entry.getTitle().getText();
    var startDateTime = null;
    var startJSDate = null;
    var times = entry.getTimes();
    if (times.length > 0) {
      startDateTime = times[0].getStartTime();
      startJSDate = startDateTime.getDate();
    }
    var entryLinkHrefCal = null;
    if (entry.getHtmlLink() != null) {
      entryLinkHrefCal = entry.getHtmlLink().getHref();
    }

	arrayCalendarJS[i] = new Object();
	arrayCalendarJS[i]['date'] = startJSDate;
	arrayCalendarJS[i]['link'] = entryLinkHrefCal;
	
  }
  
  new CalendarJS().init("calendar");
 
}

function handleErrorCalendarJS(e) {
  alert("There was an error!");
  alert(e.cause ? e.cause.statusText : e.message);
}

function myGoogleCalendarJS()
{
	setupMyServiceCalendarJS();
 
	myServiceCalendarJS.getEventsFeed(queryCalendarJS, handleMyFeedCalendarJS, handleErrorCalendarJS);
	
}



/**********************************************************************
*          Calendar JavaScript [DOM] v3.10 by Michael Loesler          *
************************************************************************
* Copyright (C) 2005-09 by Michael Loesler, http//derletztekick.com    *
*                                                                      *
*                                                                      *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or    *
* (at your option) any later version.                                  *
*                                                                      *
* This program is distributed in the hope that it will be useful,      *
* but WITHOUT ANY WARRANTY; without even the implied warranty of       *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
* GNU General Public License for more details.                         *
*                                                                      *
* You should have received a copy of the GNU General Public License    *
* along with this program; if not, see <http://www.gnu.org/licenses/>  *
* or write to the                                                      *
* Free Software Foundation, Inc.,                                      *
* 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.            *
*                                                                      *
 **********************************************************************/

	function CalendarJS() {
		this.now = new Date();
		this.dayname = ["Mo","Di","Mi","Do","Fr","Sa","So"];
		this.monthname = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];	
		this.tooltip = ["vorheriger Monat","nächster Monat","aktuelles Datum"];
		this.monthCell = document.createElement("th");
		this.tableHead = null;
		this.parEl = null;		
		
		this.init = function( id, initDate ) {		
			this.now = initDate?initDate:new Date();
			this.date = this.now.getDate();
			this.month = this.mm = this.now.getMonth();
			this.year = this.yy = this.now.getFullYear();
			this.monthCell.colSpan = 5;
			this.monthCell.appendChild(document.createTextNode( this.monthname[this.mm]+" "+this.yy ));
			this.tableHead = this.createTableHead();
			this.parEl = document.getElementById( id );
			this.show();
			if (!initDate) this.checkDate();
		},
		
		
		this.checkDate = function() {
			var self = this;
			var today = new Date();
			if (this.date != today.getDate()) {
				this.date  = today.getDate();
				if (this.mm == this.month && this.yy == this.year)
					this.switchMonth("current");
				this.month = today.getMonth();
				if (this.mm == this.month && this.yy == this.year)
					this.switchMonth("current");
				this.year  = today.getFullYear();
				if (this.mm == this.month && this.yy == this.year)
					this.switchMonth("current");
 
			}
			window.setTimeout(function() { self.checkDate(); }, Math.abs(new Date(this.year, this.month, this.date, 24, 0, 0)-this.now));
		},
		
		this.removeElements = function( Obj ) {
			for (var i=0; i<Obj.childNodes.length; i++)
				Obj.removeChild(Obj.childNodes[i]);
			return Obj;
		},
			
		this.show = function() {
			this.parEl = this.removeElements( this.parEl );
			this.monthCell.firstChild.replaceData(0, this.monthCell.firstChild.nodeValue.length, this.monthname[this.mm]+" "+this.yy);
			var table = document.createElement("table");
			table.appendChild( this.createTableBody() );
			table.appendChild( this.tableHead );
			this.parEl.appendChild( table );
		},
				
		this.createTableHead = function() {
			var thead = document.createElement("thead");
			var tr = document.createElement("tr");
			var th = this.getCell( "th", "\u00AB", "last_month" )
			th.Instanz = this;
			th.onclick = function() { this.Instanz.switchMonth("prev"); };
			th.title = this.tooltip[0];
			try { th.style.cursor = "pointer"; } catch(e){ th.style.cursor = "hand"; }
			tr.appendChild( th );
			this.monthCell.Instanz = this;
			this.monthCell.onclick = function() { this.Instanz.switchMonth("current"); };
			this.monthCell.title = this.tooltip[2];
			try { this.monthCell.style.cursor = "pointer"; } catch(e){ this.monthCell.style.cursor = "hand"; }
			tr.appendChild( this.monthCell );			
			th = this.getCell( "th", "\u00BB", "next_month" )
			th.Instanz = this;
			th.onclick = function() { this.Instanz.switchMonth("next"); };
			th.title = this.tooltip[1];
			try { th.style.cursor = "pointer"; } catch(e){ th.style.cursor = "hand"; }
			tr.appendChild( th );
			thead.appendChild( tr );
			tr = document.createElement('tr');
			for (var i=0; i<this.dayname.length; i++)
				tr.appendChild( this.getCell("th", this.dayname[i], "weekday" ) );
			thead.appendChild( tr );
			return thead;
		},
		
		this.createTableBody = function() {
			var dayspermonth = [31,28,31,30,31,30,31,31,30,31,30,31];
			var sevendaysaweek = 0;
			var begin = new Date(this.yy, this.mm, 1);
			var firstday = begin.getDay()-1;
			if (firstday < 0)
				firstday = 6;
			if ((this.yy%4==0) && ((this.yy%100!=0) || (this.yy%400==0)))
				dayspermonth[1] = 29;
			var tbody = document.createElement("tbody");
			var tr = document.createElement('tr');
			if (firstday == 0) {
				for (var i=0; i<this.dayname.length; i++) {
					var prevMonth = (this.mm == 0)?11:this.mm-1;
					tr.appendChild( this.getCell( "td", dayspermonth[prevMonth]-6+i, "last_month" ) );
				}
				tbody.appendChild( tr );
				tr = document.createElement('tr');
			}
			
			for (var i=0; i<firstday; i++, sevendaysaweek++) {
				var prevMonth = (this.mm == 0)?11:this.mm-1;
				tr.appendChild( this.getCell( "td", dayspermonth[prevMonth]-firstday+i+1, "last_month" ) );
				
			}			
			
			for (var i=1; i<=dayspermonth[this.mm]; i++, sevendaysaweek++){
				if (this.dayname.length == sevendaysaweek){
					tbody.appendChild( tr );
					tr = document.createElement('tr');
					sevendaysaweek = 0;
				}
				
				var td = null;
				
				//GoogleCalendar
				for (var j=0; j<arrayCalendarJS.length; j++)
				{
					if(arrayCalendarJS[j]['date'].getFullYear() == this.yy && arrayCalendarJS[j]['date'].getMonth() == this.mm && arrayCalendarJS[j]['date'].getDate() == i)
					{
						if (sevendaysaweek == 5 || sevendaysaweek == 6)
							td = this.getCell( "td", i, "event weekend" );
						else
							td = this.getCell( "td", i, "event" );
					}
				}
				
				if(td == null)
				{
					if (i==this.date && this.mm==this.month && this.yy==this.year && (sevendaysaweek == 5 || sevendaysaweek == 6))
						td = this.getCell( "td", i, "today weekend" );
					else if (i==this.date && this.mm==this.month && this.yy==this.year)
						td = this.getCell( "td", i, "today" );
					else if (sevendaysaweek == 5 || sevendaysaweek == 6)
						td = this.getCell( "td", i, "weekend" );
					else
						td = this.getCell( "td", i, null );
				}
					
				td.setDate = this.setDate;
				td.dd = i;
				td.mm = this.mm;
				td.yy = this.yy;
				td.onclick = function(e) {
					var currentDate = new Date(this.yy, this.mm, this.dd);
					this.setDate( currentDate );
				};
				tr.appendChild( td );
			}
	
			var daysNextMonth = 1;
			for (var i=sevendaysaweek; i<this.dayname.length; i++) 
				tr.appendChild( this.getCell( "td", daysNextMonth++, "next_month"  ) );
				
			tbody.appendChild( tr );
			
			while (tbody.getElementsByTagName("tr").length<6) {
				tr = document.createElement('tr');
				for (var i=0; i<this.dayname.length; i++) 
					tr.appendChild( this.getCell( "td", daysNextMonth++, "next_month"  ) );
				tbody.appendChild( tr );
			}

			return tbody;
			
		},
		
		this.setDate = function(date) {
			// Weiterverarbeitung des geklickten Datums			
			//GoogleCalendar
				for (var j=0; j<arrayCalendarJS.length; j++)
				{
					if(arrayCalendarJS[j]['date'].getFullYear() == date.getFullYear() && arrayCalendarJS[j]['date'].getMonth() == date.getMonth() && arrayCalendarJS[j]['date'].getDate() == date.getDate())
					{
						//window.alert( arrayCalendarJS[j]['link']);
						window.open(arrayCalendarJS[j]['link'], "Termin", "width=800,height=560,scrollbars=yes");
					}
				}
		}
		
		this.getCell = function(tag, str, cssClass) {
			var El = document.createElement( tag );
			El.appendChild(document.createTextNode( str ));
			if (cssClass != null)
				El.className = cssClass;
			return El;
		},
		
		this.switchMonth = function( s ){
			switch (s) {
				case "prev": 
					this.yy = (this.mm == 0)?this.yy-1:this.yy;
					this.mm = (this.mm == 0)?11:this.mm-1;
				break;
				
				case "next":
					this.yy = (this.mm == 11)?this.yy+1:this.yy;
					this.mm = (this.mm == 11)?0:this.mm+1;
				break;
				
				case "current":
					this.yy = this.year;
					this.mm = this.month;
				break;
			}
			this.show();
		}
	}
	
	var DOMContentLoaded = false;
	function addContentLoadListener (func) {		
		if (document.addEventListener) {
			var DOMContentLoadFunction = function () {
				window.DOMContentLoaded = true;
				func();
			};
			document.addEventListener("DOMContentLoaded", DOMContentLoadFunction, false);
		}
		var oldfunc = (window.onload || new Function());
		window.onload = function () {
			if (!window.DOMContentLoaded) {
				oldfunc();
				func();
			}
		};
	}
	
	addContentLoadListener( function() {
			myGoogleCalendarJS();
			//new CalendarJS().init("calendar");			
			//new CalendarJS().init("calendar", new Date(2009, 1, 15));
	} );
