var thisdate = new Date ();
var thisDay = thisdate.getDate();
var thisMonth = thisdate.getMonth();
var thisYear = thisdate.getYear();
thisdate =  new Date (thisYear, thisMonth, thisDay);
if (thisYear < 1900)
  thisYear += 1900;

var showDate = new Date ();
var showYear = showDate.getFullYear();
var showMonth = showDate.getMonth();
var showDay = showDate.getDate();
var selMonth = null;
var firstDate = new Date (showYear, showMonth, showDay);

var calMin = null;
var calMax =  null;

function get_days(objdate)
{
   var _objdate = new Date (objdate);
	var monthnr=_objdate.getMonth();
	for(var i=28;i<=31;i++)
	{
		_objdate.setDate(i);
		if(_objdate.getMonth() != monthnr) break;
	}
	return --i;
}

var defaultContent = "";

function chgMonth(index)
{
   showDate.setMonth (showDate.getMonth() + index);
   showYear = showDate.getFullYear();
   showMonth = showDate.getMonth();
   showDay = showDate.getDate();
   firstDate = new Date (showYear, showMonth, showDay);
	fillCals ();
	loadData (calMin, calMax);
}

function drawCalContent (calID)
{
	selMonth = new Date(showYear, showMonth+calID, 1);
	preMonth = new Date(showYear, showMonth-1+calID, 1);
	postMonth= new Date(showYear, showMonth+1+calID, 1);
	var calYear = selMonth.getFullYear();

	var firstofMonth = selMonth.getDay();
	if(firstofMonth == 0) 
	   firstofMonth = 7;
	var monthnr = selMonth.getMonth();
   var dayStr = "";

	nrofdays=get_days(selMonth);
	prenrofdays=get_days(preMonth);
	postnrofdays=get_days(postMonth);

   for (i = 0; i < 42; i++)
   {
      var currCell = document.getElementById ("cal" + calID + "cell" + i);
      var currDay = (i - firstofMonth) + 2;
      var daystyle = "";
      var color = "00";
      var today = false;
      var monthinc = 0;

      currCell.date = new Date(selMonth);
      if (i < firstofMonth - 1)
      {
         currDay = prenrofdays + (i - firstofMonth) + 2;
         today = thisDay == currDay && preMonth.getMonth() == thisMonth && preMonth.getFullYear() == thisYear;
         color = (today ? "c0" : "60");
         monthinc = -1;
         currCell.date = new Date(preMonth);
      }
      else if (currDay > nrofdays)
      {
         currDay -= nrofdays
         today = thisDay == currDay && postMonth.getMonth() == thisMonth && postMonth.getFullYear() == thisYear;
         color = (today ? "c0" : "60");
         monthinc = 1;
         currCell.date = new Date(postMonth);
      }
      else if (thisDay == currDay && monthnr == thisMonth && calYear == thisYear)
      {
         today = true;
         color = "c0";
      }
         
      if (today)
         color = "#" + (color == "00" ? "90" : color) + "0000"
      else
         color = "#606060";// + color + color + color;

      currCell.date.setDate (currDay);
      currCell.innerHTML = currCell.date.getDate();
      currCell.style.color = color;

      if (i == 0 && calID == 0)
         calMin = new Date(currCell.date);
      else if (i == 41 && calID == 2)
      {
         calMax = new Date(currCell.date);
         calMax.setDate (calMax.getDate ()+1);
      }
   }
   document.getElementById ("month" + calID).innerHTML = monthList[monthnr];
   document.getElementById ("year" + calID).innerHTML = calYear;
}

function checkCalClick(eventObj)
{
   hideDetails();
   var isIE = false;
   var target = null;
   if (!eventObj)
   {
      target = window.event.srcElement;
      isIE = true;
   }
   else
      target = eventObj.target
   
   var targetID = target.id;
   var re = /cal(\d)cell(\d{1,})/;
   var matchObj = re.exec(targetID);
   if (!matchObj)
      return;
   
   var minDate = new Date(showDate.getFullYear(), showDate.getMonth(), 1);
   var maxDate = new Date(minDate);
   maxDate.setMonth(maxDate.getMonth()+3);
   if (target.date < minDate || target.date >= maxDate)
   {
      showDate = new Date(target.date);
	   showYear = showDate.getFullYear();
	   showMonth = showDate.getMonth();
      firstDate = new Date (showYear, showMonth, showDay);
      fillCals ();
      loadData (calMin, calMax);
   }
   
   var scrollTo = 0;
   var eventObj = document.getElementById ("Termin" + target.eventID);
   if (eventObj)
      eventObj.scrollIntoView();
}

function fillCals()
{
   drawCalContent(0);
   drawCalContent(1);
   drawCalContent(2);
   document.getElementById("cals").onclick = checkCalClick;
}

//=========================================================================================

var ajaxObj = new CAjax();
var g_ClientIP = "";
//var str_loadingData = "<%=getLangStr ("str_loadingData", 1)%>";
var CategoryFilter = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
var arrEvents = new Array();

var eventListObj = null;
function CEvent ()
{
   this.EventDataID = 0;
   this.EventName = "";
   this.EventTime = "";
   this.Beschreibung = "";
   this.Character = "";
   this.ShortText = "";
   this.Color = "";
   this.CalImage = "";
   this.CharacterID = 0;
   this.Date = null;
   this.LongText = "";
   this.ImageName = "";
   this.Zeitraum = 0;
   this.active = false;
   this.EventID = 0;
   this.StartDate = null;
   
   this.domObj = null;
   this.Draw = CEvent_Draw;
   //this.Parse = CEvent_ParseTemplate;
}

function cloneObject(what) 
{
   for (i in what) 
      this[i] = what[i];
}

var lastWeek = 0;
var EventCount = 0;
function CEvent_Draw(elID)
{
   if (CategoryFilter[this.CharacterID] == 0 || this.Date < firstDate)
   {
      this.active = false;
      return false;
   }

   var currWeek = getYearWeek (this.Date);
   if (lastWeek != currWeek)
   {
      if (lastWeek != 0)
      {
         var hr = document.createElement("hr");
         hr.className = "seperator";
         hr.id = "hr" + this.Date.getFullYear() + "_" + this.Date.getMonth() + "_" + this.Date.getDate();
         eventListObj.appendChild (hr)
      }
      lastWeek = currWeek;
   }
   ParseTemplate(this, this.domObj);
   this.domObj.EventObj = this;
   this.domObj.onclick = showDetails;
   this.domObj.id = "Termin" + EventCount;
   this.domObj.style.display = "block";
   this.EventID = EventCount;
   eventListObj.appendChild (this.domObj);
   EventCount++;
   this.active = true;
   return true;
}

function ParseTemplate (srcObj, obj)
{
   obj.innerHTML = obj.innerHTML.replace (/##bgimage##/, srcObj.CalImage).replace (/##date##/, '<h1 class="calmonth">' + srcObj.Date.getDate() + '</h1>' + monthList[srcObj.Date.getMonth()].substr(0,3));
   obj.innerHTML = obj.innerHTML.replace (/##EventName##/, srcObj.EventName).replace (/##EventBeschreibung##/, srcObj.Beschreibung).replace (/##EventShortText##/, srcObj.ShortText);
}

function showDetails(eventObj)
{
   var target = null;
   if (!eventObj)
      target = window.event.srcElement;
   else
      target = eventObj.target
   
   while (target.id == "")
   {
      target = target.parentNode;
   }
   
   var detailsObj = document.getElementById("termindetails");
   detailsObj.innerHTML = parseDetailsDummy (target.EventObj);
   detailsObj.style.display = "block";

   if (detailsObj.offsetHeight > 378) 
   {
       detailsObj.style.overflow.value = "scroll";
   }
   
   document.getElementById("terminliste").style.display = "none";
}

function hideDetails()
{
   document.getElementById("termindetails").style.display = "none";
   document.getElementById("terminliste").style.display = "block";
}


function parseDetailsDummy(detailsObj)
{
   var mainObj = document.getElementById("termindetailsDummy");
   var obj = document.getElementById("termindetailsCell");
   for (j = 0; j < obj.childNodes.length; j++)
   {
      var currObj = obj.childNodes[j];
      switch (currObj.className)
      {
         case "DetailsLocation": 
            if (detailsObj.Zeitraum > 1)
            {
               var tmp_date = new Date (detailsObj.StartDate);
               currObj.innerHTML = detailsObj.Beschreibung + ", " + FormatDate(tmp_date, "#d#. #monthlong# #yyyy#", "ger"); 
               tmp_date.setDate (tmp_date.getDate() + detailsObj.Zeitraum-1);
               currObj.innerHTML += " bis " + FormatDate(tmp_date, "#d#. #monthlong# #yyyy#", "ger")
            }
            else
               currObj.innerHTML = detailsObj.Beschreibung + ", " + FormatDate(detailsObj.StartDate, "#d#. #monthlong# #yyyy#", "ger"); 
            break;
         case "DetailsHead": currObj.innerHTML = detailsObj.EventName; break;
         case "DetailsSubHead": currObj.innerHTML = detailsObj.ShortText; break;
         case "DetailsImage": currObj.src = detailsObj.ImageName ? "/graphic/mrd/events/" + detailsObj.ImageName + ".png" : "/graphic/1PTrans.gif"; break;
         case "DetailsText": currObj.innerHTML = detailsObj.LongText; break;
      }
   }
   return mainObj.innerHTML;
}

function changeFilter(CharacterID)
{
   eventListObj = document.getElementById ("terminliste");
   eventListObj.innerHTML = "";

   CategoryFilter[CharacterID] = CategoryFilter[CharacterID] ? 0 : 1;
   document.getElementById("Training").src = CategoryFilter[3] ? "/graphic/termine/caption_blue.png" : "/graphic/termine/caption_blue_inactive.png";
   document.getElementById("Tagung").src = CategoryFilter[4] ? "/graphic/termine/caption_green.png" : "/graphic/termine/caption_green_inactive.png";
   document.getElementById("Event").src = CategoryFilter[1] ? "/graphic/termine/caption_red.png" : "/graphic/termine/caption_red_inactive.png";
   document.getElementById("Unternehmensvorstellung").src = CategoryFilter[2] ? "/graphic/termine/caption_yellow.png" : "/graphic/termine/caption_yellow_inactive.png";
   window,setTimeout ("refreshList();", 1);
}

function refreshList()
{
   drawEvents ();
}

function drawEvents ()
{
   if (startEventObj != null)
   {
      var detailsObj = document.getElementById("termindetails");
      detailsObj.innerHTML = parseDetailsDummy (startEventObj);
      detailsObj.style.display = "block";
      document.getElementById("terminliste").style.display = "none";
      startEventObj = null;
   }

   eventListObj = document.getElementById ("terminliste");
   eventListObj.innerHTML = "";
   lastWeek = 0;

   EventCount = 0;
   for (x = 0; x < arrEvents.length; x++)
   {
      var eventDIV = document.getElementById ("eventDummy").cloneNode(true);
      arrEvents[x].domObj = eventDIV;
      arrEvents[x].Draw(x);
   }

   var currCal = -1;
   for (i = 0; i < 42*3; i++)
   {
      var currCell = i%42;
      if (currCell == 0)
         currCal++;
      var currCell = document.getElementById ("cal" + currCal + "cell" + currCell);
      var calDate = currCell.date;

      var color1 = "black";
      var color2 = "#606060";
      if (thisdate*1 == calDate*1)
      {
         color1 = "#c00000";
         color2 = "#c00000";
      }
      
      currCell.style.fontWeight = "normal";
      currCell.style.color = color2;
      
      for (j = 0; j < arrEvents.length; j++)
      {
         if (arrEvents[j].active && arrEvents[j].Date*1 == calDate*1)
         {
            currCell.style.fontWeight = "bold";
            currCell.style.color = color1;
            currCell.eventID = arrEvents[j].EventID;
            break;
         }
      }

   }

}

function eventsSortCallback (el1, el2)
{
   el1Date = el1.Date*1;
   el2Date = el2.Date*1;
   if (el1Date < el2Date)
      return -1;
   if (el1Date > el2Date)
      return 1;
   return 0;
}

var startEventObj = null;
function requestCallback (req)
{
   var xmldoc = req.responseXML;
   var rootElement = xmldoc.getElementsByTagName("events").item(0);
   var regExp = /(\d{4})-(\d{1,})-(\d{1,})T*/;
   arrEvents = new Array();
   

   //if (_debug)
   //   alert(rootElement.childNodes.length);
   for (var i = 0; i < rootElement.childNodes.length; i++)
   {
      var EventNode = rootElement.getElementsByTagName("event").item(i);
      if (!EventNode)
         continue;
      var eventObj = new CEvent();
      eventObj.EventDataID = xmlGetNodeValue(EventNode, "EventID");
      eventObj.EventName = xmlGetNodeValue(EventNode, "EventName");
      eventObj.EventTime = xmlGetNodeValue(EventNode, "EventTime");
      eventObj.Beschreibung = xmlGetNodeValue(EventNode, "Beschreibung");
      eventObj.Character = xmlGetNodeValue(EventNode, "Character");
      eventObj.ShortText = xmlGetNodeValue(EventNode, "ShortText");
      eventObj.Color = xmlGetNodeValue(EventNode, "Color");
      eventObj.CalImage = xmlGetNodeValue(EventNode, "CalImage");
      eventObj.CharacterID = xmlGetNodeValue(EventNode, "CharacterID")*1;
      eventObj.LongText = xmlGetNodeValue(EventNode, "LongText");
      eventObj.ImageName = xmlGetNodeValue(EventNode, "ImageName");
      eventObj.Zeitraum = xmlGetNodeValue(EventNode, "Zeitraum")*1;
     
      var matchObj = regExp.exec(eventObj.EventTime);
      if (matchObj)
         eventObj.Date = new Date (matchObj[1], matchObj[2]-1, matchObj[3]);
      eventObj.StartDate = eventObj.Date;

      if (eventObj.Zeitraum < 1)
         eventObj.Zeitraum = 1;
         
      if (eventObj.ShortText == "")
         eventObj.ShortText = "<br />";

      arrEvents.push (eventObj);   
      var zr = eventObj.Zeitraum;
      for (j = 1; j < zr; j++)
      {
         var eventObjNew = new cloneObject(eventObj);
         eventObjNew.Date =  new Date(eventObj.Date);
         eventObjNew.Date.setDate(eventObjNew.Date.getDate() + j);
         arrEvents.push (eventObjNew);   
      }
      
      if (eventObj.EventDataID == TerminID)
         startEventObj = eventObj;
   }
   arrEvents.sort(eventsSortCallback);

   drawEvents();
}

function loadData (starttime, endtime)
{
   var requester = ajaxObj.AddRequest ();
   requester.URL = "/include/aspx/club/SchedulerEventsXML.aspx?starttime=" + FormatDate(starttime, "#dd#.#mm#.#yyyy#") + "&endtime=" + FormatDate(endtime, "#dd#.#mm#.#yyyy#");
   /*
   if (_debug)
   {
      document.getElementById ("terminliste").innerHTML = requester.URL;
      return;   
   }
   */
   requester.CallBack = requestCallback;
   document.getElementById ("terminliste").innerHTML = "";
   ajaxObj.SendRequests ();
}

