var constStandardReisezeitraum = 12;	// Anzahl an Monaten von heute an gerechnet. Wenn kein Reisezeitraum definiert ist, wird dieser Wert verwendet



var now=new Date ();
var Milisek =60*1000;	//Millisekunde
var Hour = Milisek*60;	//Stunde
var Day = Hour*24;	//Tag	
var TODAY=new Date (now.getUTCFullYear (), now.getUTCMonth (), now.getUTCDate (), 12);
var TOMORROW=new Date (Day+TODAY.getTime ());


function appendClass(obj, paramClass) {
  obj.className=obj.className+' '+paramClass;
}

function removeClass(obj, paramClass) {
  var arrClasses=obj.className.split (' ');
  var strNewClasses='';
  for (var dummy=0; dummy<arrClasses.length; dummy++) {
    if (arrClasses[dummy]!=paramClass) strNewClasses+=' '+arrClasses[dummy];
  }
  obj.className=strNewClasses;
}


function fnOffsetLeft (obj) {

  var retValue=obj.offsetLeft;
  if (obj.offsetParent) retValue+=fnOffsetLeft (obj.offsetParent);
  return (retValue);
}


function fnOffsetTop (obj) {

  var retValue=obj.offsetTop;
  if (obj.offsetParent) retValue+=fnOffsetTop (obj.offsetParent);
  return (retValue);
}


function fnWindowWidth () {
  var retValue=0;
  if (document.all!=undefined) {
    retValue=document.all.offsetWidth;
  } else {
    retValue=window.innerWidth;
  }
  return (retValue);
}



function idgObjCalendar (date) {

  this.ID=String.randomString (10);
  this.sheets=3;
  this.format='%d.%m.%Y';
  this.caption='';
  this.periods=[];
  this.pickups=[];
  this.pickuplength=0;
  this.pickupID=-1;
  this.bindField=null;
  this.mindate=null;
  this.maxdate=null;

  if (typeof (date)=='undefined') date=new Date ();

  if (typeof (date)=='string') {
    arrDate=date.split ('.');
    this.viewdate=new Date (arrDate[2], arrDate[1]-1, 1,12,0,0,0);
  }

  if (typeof (date)=='object') {
    date.setUTCDate (1);
    date.setUTCHours (12);
    date.setUTCMinutes (0);
    date.setUTCSeconds (0);
    date.setUTCMilliseconds (0);
    this.viewdate=date;
  }


  this.viewport=fnCreateElement ('DIV', 'idgCalendar');
  this.viewport.appendChild (fnCreateElement ('DIV', 'idgCalendarShadow'));

  var calendarCaption=fnCreateElement ('DIV', 'idgCalendarCaption', '<SPAN style="position: absolute; left: 10px;">Bitte wählen Sie Ihren</SPAN>');
  var calendarCaptionText=fnCreateElement ('DIV', 'idgCalendarCaptionText', this.caption);
  calendarCaptionText.id='idgCalendarCaptionText'+this.ID;

  var buttonClose=fnCreateElement ('DIV', 'idgCalendarButtonClose', '[schließen]');
  buttonClose.onclick = this.hide.bindAsEventListener (this);

  this.buttonLeft=fnCreateElement ('DIV', 'idgCalendarButtonLeft', '<IMG src="/riu/externer_content/walls/allgemein/ibe/images/icon_left.gif">');
  this.buttonLeft.onclick = this.fnSetViewDate.bind (this, this, -1);

  this.buttonRight=fnCreateElement ('DIV', 'idgCalendarButtonRight', '<IMG src="/riu/externer_content/walls/allgemein/ibe/images/icon_right.gif">');
  this.buttonRight.onclick = this.fnSetViewDate.bind (this, this, 1);

  calendarCaption.appendChild (this.buttonLeft);
  calendarCaption.appendChild (this.buttonRight);

  calendarCaption.appendChild (calendarCaptionText);
  calendarCaption.appendChild (buttonClose);

  this.viewport.appendChild (calendarCaption);
  this.viewportsheets=fnCreateElement ('DIV', 'idgCalendarSheets');
  this.viewport.appendChild (this.viewportsheets);

  var calendarShortcuts=fnCreateElement ('DIV', 'idgCalendarShortCuts');
  calendarShortcuts.id='idgCalendarShortCuts'+this.ID;
  this.viewport.appendChild (calendarShortcuts)

  var selectPatch=document.createElement ('IFRAME');
  selectPatch.src='';
  selectPatch.className='ieselectpatchCalendar';
  selectPatch.style.bottom='';
  selectPatch.style.top='0px';
  selectPatch.style.width=27	+this.sheets*165+'px'
  selectPatch.frameBorder=0;
  this.viewport.appendChild (selectPatch);


  if (document.getElementById ('MainHeaderTUS')!=undefined) {
    document.getElementById ('MainHeaderTUS').appendChild (this.viewport);
  } else {
    document.getElementById ('MainHeader').appendChild (this.viewport);
  }
  
  this.lastMouseOver=null;

}



idgObjCalendar.prototype.showCalendar = function (event, pickupID) {

  this.viewportsheets.innerHTML='';
  this.pickupID=pickupID;
  
  if (this.viewdate.GetFutureMonth (-1).valueOf ()<this.mindate.valueOf ()) this.buttonLeft.style.display='none';
    else this.buttonLeft.style.display='block';
  if (this.viewdate.GetFutureMonth (this.sheets-1).valueOf ()>this.maxdate.valueOf ()) this.buttonRight.style.display='none';
    else this.buttonRight.style.display='block';
    
  for (var dummy=0; dummy<this.sheets; dummy++) {
    var objDate=new Date (this.viewdate.getUTCFullYear (), this.viewdate.getUTCMonth ()+dummy, 1, 12);
    this.viewportsheets.appendChild (this.fnCreateCalendarSheet (objDate));
  }
  document.getElementById ('idgCalendarCaptionText'+this.ID).innerHTML=this.pickups[pickupID][1];

  this.viewport.style.display='block';
}



function showCalendar(DateRef,EventRef,ImagePath,hposOffset,vposOffset,layer) {

  
  if (typeof (idgCalendar)=='undefined') {
    initCalendarIBE ();  
  }
  
  
  if (typeof (idgCalendar)!='undefined') {
  
    if (typeof (DateRef.id)!=undefined && DateRef.id=='Anreise_am') {
      var eventtarget=(EventRef.target) ? EventRef.target : EventRef.srcElement;
      eventtarget.onclick=idgCalendar.showCalendar.bind (idgCalendar, idgCalendar.pickups[0][0], 0);
      idgCalendar.showCalendar (EventRef,0);    
    }
    if (typeof (DateRef.id)!=undefined && DateRef.id=='Abreise_am') {
      var eventtarget=(EventRef.target) ? EventRef.target : EventRef.srcElement;
      eventtarget.onclick=idgCalendar.showCalendar.bind (idgCalendar, idgCalendar.pickups[1][0], 1);
      idgCalendar.showCalendar (EventRef,1);
    }
  }
  
}

function conditionalShowCalendar () {

  if (typeof (idgCalendar)=='undefined') {
    initCalendarIBE ();  
  }


  idgCalendar.showCalendar (idgCalendar.pickups[1][0],1);
}

function initCalendarIBE () {

  var arrReisetermine=[TODAY, TOMORROW];
  if (document.forms[0].anreisedatum!=undefined) {
    document.forms[0].anreisedatum.onchange='';
    document.forms[0].anreisedatum.onkeydown='';
    document.forms[0].anreisedatum.onkeyup='';
    document.forms[0].anreisedatum.id='Anreise_am';
    var arrAnreisetermin=document.forms[0].anreisedatum.value.split ('.');
    if (arrAnreisetermin[2].length==2) arrReisetermine[0]=new Date (1900+parseInt('1'+arrAnreisetermin[2]), arrAnreisetermin[1]-1, arrAnreisetermin[0],12);
      else arrReisetermine[0]=new Date (parseInt(arrAnreisetermin[2]), arrAnreisetermin[1]-1, arrAnreisetermin[0],12);
  }
  
  if (document.forms[0].abreisedatum!=undefined) {
    document.forms[0].abreisedatum.onchange='';
    document.forms[0].abreisedatum.onkeydown='';
    document.forms[0].abreisedatum.onkeyup='';
    document.forms[0].abreisedatum.id='Abreise_am';
    var arrAbreisetermin=document.forms[0].abreisedatum.value.split ('.');
    if (arrAbreisetermin[2].length==2) arrReisetermine[1]=new Date (1900+parseInt('1'+arrAbreisetermin[2]), arrAbreisetermin[1]-1, arrAbreisetermin[0],12);
      else arrReisetermine[1]=new Date (parseInt(arrAbreisetermin[2]), arrAbreisetermin[1]-1, arrAbreisetermin[0],12);

  }
  

  var arrReisezeitraum=[TODAY.strdate ('%d.%m.%Y'), TODAY.GetFutureMonth (constStandardReisezeitraum).strdate ('%d.%m.%Y')];
  if (typeof(arrViews[0][4])!='undefined') arrReisezeitraum=arrViews[0][4][0];
  

  idgCalendar=new idgObjCalendar ();
  idgCalendar.format='%d.%m.%y';

  idgCalendar.fnSetPickups ([['Anreise_am', 'Anreisetermin', arrReisetermine[0]], ['Abreise_am', 'Abreisetermin', arrReisetermine[1]]]);  
  idgCalendar.fnSetPeriods ([arrReisezeitraum]);
  idgCalendar.mindate=new Date (TODAY.getUTCFullYear (), TODAY.getUTCMonth (), TODAY.getUTCDate (), 12);
  idgCalendar.mindate.setUTCDate (1);

  
  if (document.forms[0].chkOneWay!=undefined) {
    document.forms[0].chkOneWay.onchange=fnSwitchOneWay.bind (document.forms[0].chkOneWay, idgCalendar);
    if (document.forms[0].chkOneWay.checked==1 || document.forms[0].chkOneWay.checked==true) idgCalendar.fnChangePickupLength (1);
  }

}

function fnSwitchOneWay (paramCalendar) {

  if (this.checked==1 || this.checked==true) {
    paramCalendar.fnChangePickupLength (1);
  } else {
    paramCalendar.fnChangePickupLength (2);
  }
}


function initCalendarLP () {

  if (typeof (document.getElementById ('Anreise_am')!='undefined')) {
    document.getElementById ('Anreise_am').onchange='';
    document.getElementById ('Anreise_am').onblur='';
  }
  
  if (typeof (document.getElementById ('Abreise_am')!='undefined')) {
    document.getElementById ('Abreise_am').onchange='';
    document.getElementById ('Abreise_am').onblur='';
  }

  var arrReisezeitraum=[TODAY.GetFutureDate (1).strdate ('%d.%m.%Y'), TODAY.GetFutureMonth (constStandardReisezeitraum).strdate ('%d.%m.%Y')];
  if (typeof (minAnreise)!='undefined' && minAnreise!='') {
    arrReisezeitraum[0]=minAnreise;
  }
  if (typeof (maxAbreise)!='undefined' && maxAbreise!='') {
    arrReisezeitraum[1]=maxAbreise;
  }
  

  var arrReisetermine=[TOMORROW, TOMORROW];
  if (typeof (defaultAnreise)!='undefined' && defaultAnreise!='') {
    var dummyDateSplit=defaultAnreise.split ('.');
    var dummyDate=new Date (dummyDateSplit[2], dummyDateSplit[1]-1, dummyDateSplit[0],12);
    if (dummyDate.getTime () > arrReisetermine[0].getTime ()) {
      arrReisetermine[0]=dummyDate;
    }
  }
  if (typeof (defaultAbreise)!='undefined' && defaultAbreise!='') {
    var dummyDateSplit=defaultAbreise.split ('.');
    var dummyDate=new Date (dummyDateSplit[2], dummyDateSplit[1]-1, dummyDateSplit[0],12);
    if (dummyDate.getTime () > arrReisetermine[1].getTime ()) {
      arrReisetermine[1]=dummyDate;
    }
  }
  

  idgCalendar=new idgObjCalendar (arrReisetermine[0].strdate ('%d.%m.%Y'));
  idgCalendar.fnSetPickups ([['Anreise_am', 'Anreisetermin', arrReisetermine[0]], ['Abreise_am', 'Abreisetermin', arrReisetermine[1]]]);  
  idgCalendar.fnSetPeriods ([arrReisezeitraum]);
  idgCalendar.mindate=new Date (TODAY.getUTCFullYear (), TODAY.getUTCMonth (), TODAY.getUTCDate (),12);
  idgCalendar.mindate.setUTCDate (1);


}



idgObjCalendar.prototype.fnSetViewDate = function (event, paramDate) {
  if (typeof (paramDate)=='number') {
    this.viewdate.setUTCMonth (this.viewdate.getUTCMonth()+paramDate);
  } else {
    this.viewdate=paramDate;
  }
  this.showCalendar (event, this.pickupID);
}



idgObjCalendar.prototype.fnCreateShortcuts = function () {
  var arrShortcuts=[];
  var now = new Date ();
  now.setUTCDate (1);
  now.setUTCHours (12);
  now.setUTCMinutes (0);
  now.setUTCSeconds (0);
  now.setUTCMilliseconds (0);

  var calendarShortcut=fnCreateElement ('TABLE');
  calendarShortcut.style.marginLeft='5px';
  calendarShortcut.style.display='block';
  calendarShortcut.style.clear='left';
  var calendarShortcuts=fnCreateElement ('TBODY');
  calendarShortcut.appendChild (calendarShortcuts);


  for (var dummy=0; dummy<this.periods.length; dummy++) {
    dummy2=new Date (this.periods[dummy][0]);
    dummy2.setUTCDate (1);
    for (; dummy2.valueOf () < this.periods[dummy][1]; dummy2.setUTCMonth (dummy2.getUTCMonth ()+1)) {
      if (dummy2.valueOf () >= now.valueOf ()) arrShortcuts.push (new Date (dummy2.valueOf ()));
    }

  }
  
  var viewportLine=null;
  for (var dummy=0; (dummy<arrShortcuts.length && dummy<18); dummy++) {
    if (dummy%(2*this.sheets)==0) {
      if (viewportLine!=null) calendarShortcuts.appendChild (viewportLine);
      viewportLine=fnCreateElement ('TR', '');
    }
    var viewportCell=fnCreateElement('TD', 'idgCalendarShortCutsCell', arrShortcuts[dummy].strdate ('%M %Y'));
    if (dummy==arrShortcuts.length-2) {
      viewportCell.onclick=this.fnSetViewDate.bind (this, viewportCell, arrShortcuts[dummy].GetFutureMonth (-1));
    } else if (dummy==arrShortcuts.length-1) {
      viewportCell.onclick=this.fnSetViewDate.bind (this, viewportCell, arrShortcuts[dummy].GetFutureMonth (-2));
    } else {
      viewportCell.onclick=this.fnSetViewDate.bind (this, viewportCell, arrShortcuts[dummy]);
    }
    viewportCell.onmouseover=function (event) {
                               appendClass (this, 'mouseover');
                             };
    viewportCell.onmouseout=function (event) {
                               removeClass (this, 'mouseover');
                             };
    viewportLine.appendChild (viewportCell);
  }
  calendarShortcuts.appendChild (viewportLine);
  
  document.getElementById ('idgCalendarShortCuts'+this.ID).appendChild (calendarShortcut);  

}



idgObjCalendar.prototype.fnCreateCalendarSheet = function (objDate) {

  var intStartDay=objDate.getDay ();
 
  var viewportsheet=document.createElement ('TABLE');
  viewportsheet.className='idgCalendarSheet';
  
  var viewportsheets=document.createElement ('TBODY');
  viewportsheet.appendChild (viewportsheets);
  
  
  
  var viewportLine=fnCreateElement ('TR', 'idgCalendarSheetMonth');
  var viewportCell=fnCreateElement ('TD', '', '<NOBR>'+objDate.strdate ('%F %y')+'</NOBR>');
  viewportCell.setAttribute("colSpan",7);
  viewportLine.appendChild (viewportCell);
  viewportsheets.appendChild (viewportLine);    
  viewportLine=fnCreateElement ('TR', 'idgCalendarSheetCaptionDays');
  viewportLine.appendChild (fnCreateElement ('TD', '','Mo'));
  viewportLine.appendChild (fnCreateElement ('TD', '','Di'));
  viewportLine.appendChild (fnCreateElement ('TD', '','Mi'));
  viewportLine.appendChild (fnCreateElement ('TD', '','Do'));
  viewportLine.appendChild (fnCreateElement ('TD', '','Fr'));
  viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetDaysWeekend','Sa'));
  viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetDaysWeekend','So'));
  viewportsheets.appendChild (viewportLine);



  var intCountLines=1;
  var viewportLine=fnCreateElement ('TR', 'idgCalendarSheetDays');
  if (objDate.getDay ()==0) for (var dummy=1; dummy<7; dummy++) viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetOtherMonth', '&nbsp;'));
    else for (var dummy=1; dummy<objDate.getDay (); dummy++) viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetOtherMonth', '&nbsp;'));

  if (objDate.getDay ()==1) {
    for (var dummy=1; dummy<8; dummy++) viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetOtherMonth', '&nbsp;'));
    viewportsheets.appendChild (viewportLine);
    viewportLine=fnCreateElement ('TR', 'idgCalendarSheetDays');
    intCountLines++;
  }

  var blnOutOfPeriod=false;
  if (this.pickupID>0) {
    for (var dummy=this.pickups[this.pickupID-1][2].valueOf (); dummy<objDate.valueOf (); dummy+=Date.OneDay) {
      if (!this.fnDateInPeriod (new Date (dummy))) blnOutOfPeriod=true;
    }
  }
  
  
  for (var dummy=1; dummy<=(objDate.GetDaysInMonth ()+1); dummy++) {
    if (intStartDay==1 && !(dummy==1 && objDate.getDay ()==1)) {
      viewportsheets.appendChild (viewportLine);
      viewportLine=fnCreateElement ('TR', 'idgCalendarSheetDays');
      intCountLines++;
    }
    if (intStartDay==0 || intStartDay==6) strBufferClass='idgCalendarSheetDaysWeekend'; else strBufferClass='';
    viewportDay=fnCreateElement ('TD', strBufferClass, dummy);

    if (this.pickupID==0 || (this.pickupID>0 && this.pickups[this.pickupID-1][2].valueOf ()<=objDate.GetFutureDate (dummy-1).valueOf ())) {

      if (this.pickupID>0 && !this.fnDateInPeriod (objDate.GetFutureDate (dummy-1))) blnOutOfPeriod=true;

      if (!blnOutOfPeriod && this.fnDateInPeriod (objDate.GetFutureDate (dummy-1))) {
        appendClass (viewportDay, 'inPeriod');
        blnDayPicked=false;
        for (var dummy2=0; dummy2<this.pickups.length; dummy2++) {
          if (this.pickups[dummy2][2]!=null && this.pickups[dummy2][2].valueOf () == objDate.GetFutureDate (dummy-1).valueOf ()) {
            appendClass (viewportDay, 'mouseover');
            blnDayPicked=true;
          }
        }

        viewportDay.onmouseover = this.fnMouseOver.bind (this, viewportDay, objDate.GetFutureDate (dummy-1));
        if (blnDayPicked==false) {
          viewportDay.onmouseout = this.fnMouseOut.bind (this, viewportDay, objDate.GetFutureDate (dummy-1));
        }
        viewportDay.id="idgCalendarSheetDays"+this.ID+objDate.GetFutureDate (dummy-1).valueOf ();
        viewportDay.onclick = this.fnMouseClick.bind (this, viewportDay, objDate.GetFutureDate (dummy-1));
      }
      


    }
    if ((objDate.GetFutureDate (dummy-1).valueOf ()> this.pickups[0][2].valueOf ()) && (objDate.GetFutureDate (dummy-1).valueOf ()< this.pickups[1][2].valueOf ())) {
      appendClass (viewportDay, 'mouseover');
    }


    viewportLine.appendChild (viewportDay);
    intStartDay=(intStartDay+1)%7;
  }

  if (intStartDay>1) for (var dummy=intStartDay; dummy<8; dummy++) viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetOtherMonth', '&nbsp;'));
  if (intStartDay==0) viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetOtherMonth', '&nbsp;'));
  viewportsheets.appendChild (viewportLine);

  if (intCountLines<6) {
    viewportLine=fnCreateElement ('TR', 'idgCalendarSheetDays');
    for (var dummy=1; dummy<8; dummy++) viewportLine.appendChild (fnCreateElement ('TD', 'idgCalendarSheetOtherMonth', '&nbsp;'));
    viewportsheets.appendChild (viewportLine);
  }

  return (viewportsheet);

}



idgObjCalendar.prototype.hide = function () {

  this.viewport.style.display='none';

}

idgObjCalendar.prototype.fnMouseClick = function (event, day) {
  this.pickups[this.pickupID][2]=day;
  this.pickups[this.pickupID][0].value=day.strdate (this.format);
  if (typeof(fnHideAlertWindow) == "function") fnHideAlertWindow ();
  if (this.pickupID<(this.pickuplength-1)) {
    this.hide ();
    window.setTimeout (this.showCalendar.bind (this, event, this.pickupID+1), 500);
  } else {
    this.hide ();
  }

}


idgObjCalendar.prototype.fnMouseOver = function (event, day) {
  appendClass (document.getElementById ('idgCalendarSheetDays'+this.ID+day.valueOf ()), 'mouseover');
  if (this.pickupID==1) {
    for (var dummy=day; dummy.valueOf () >this.pickups[0][2].valueOf (); dummy=dummy.GetFutureDate (-1)) {
      appendClass (document.getElementById ('idgCalendarSheetDays'+this.ID+dummy.valueOf ()), 'mouseover');
    }
    if (this.lastMouseOver!=null) {
      for (var dummy=this.lastMouseOver; dummy.valueOf () >day.valueOf (); dummy=dummy.GetFutureDate (-1)) {
        removeClass (document.getElementById ('idgCalendarSheetDays'+this.ID+dummy.valueOf ()), 'mouseover');
      }
    }
    this.lastMouseOver=day;
  }
  

  
}

idgObjCalendar.prototype.fnMouseOut = function (event, day) {
  removeClass (document.getElementById ('idgCalendarSheetDays'+this.ID+day.valueOf ()), 'mouseover');
}

function fnGetTimeStamp3 (paramYear, paramMonth, paramDay) {

  var retValue=new Date ();

  retValue.setUTCDate (paramDay);
  retValue.setUTCMonth ((paramMonth-1));
  retValue.setUTCYear (paramYear);

  return (retValue.valueOf ());

}

idgObjCalendar.prototype.fnSetPickups = function (paramArray) {
  this.pickups=[];
  this.pickuplength=0;

  for (var dummy=0; dummy<paramArray.length; dummy++) {
    this.pickups.push ([document.getElementById (paramArray[dummy][0]), paramArray[dummy][1], null]);
    this.pickups[this.pickups.length-1][0].onfocus = this.showCalendar.bind (this, this.pickups[this.pickups.length-1][0], dummy);
    this.pickups[dummy][2]=new Date (paramArray[dummy][2].getUTCFullYear (), paramArray[dummy][2].getUTCMonth (), paramArray[dummy][2].getUTCDate (), 12);
    this.pickups[dummy][0].value=this.pickups[dummy][2].strdate (this.format);
    this.pickups[dummy][0].setAttribute('default', this.pickups[dummy][0].value);  
  }
  this.pickuplength=this.pickups.length;
  this.viewport.style.top=fnOffsetTop (this.pickups[0][0])+'px';

  if ((fnOffsetLeft (this.pickups[0][0])+this.sheets*166+50)>1000) {
    this.viewport.style.left=(1000-(this.sheets*166+24))+'px';    
  } else {
    this.viewport.style.left=fnOffsetLeft (this.pickups[0][0])+'px';
  }
  
}

idgObjCalendar.prototype.fnChangePickupLength = function (paramLength) {

  if (paramLength<this.pickuplength) {
    for (var dummy=paramLength; dummy<this.pickuplength; dummy++) {
      this.pickups[dummy][0].disabled=true;
      this.pickups[dummy][0].onfocus = '';
    }
  } else {
    for (var dummy=this.pickuplength; dummy<paramLength; dummy++) {
      this.pickups[dummy][0].disabled=false;
      this.pickups[dummy][0].onfocus = this.showCalendar.bind (this, this.pickups[dummy][0], dummy);
    }
  }
  this.pickuplength=paramLength;

}


idgObjCalendar.prototype.fnSetPeriods = function (paramArray) {


  var dummyDate=new Date (2001,0,1,12);
  this.periods=[];
  this.mindate=new Date (2080,0,1,12).valueOf ();
  this.maxdate=0;
  for (var dummy=0; dummy<paramArray.length; dummy++) {
    arrDateStart=paramArray[dummy][0].split ('.');
    dummyDate.SetDate (arrDateStart[2], arrDateStart[1], 1);
    if (dummyDate.valueOf ()<this.mindate.valueOf ()) this.mindate=new Date (arrDateStart[2], arrDateStart[1]-1, 1, 12);
    
    dummyDate.SetDate (arrDateStart[2], arrDateStart[1], arrDateStart[0]);


    if (dummyDate.valueOf ()<TODAY.valueOf ()) {
      dummyDate.SetDate (TODAY.getUTCFullYear (), TODAY.getUTCMonth ()+1, TODAY.getUTCDate ());
    }

    intDateStart=dummyDate.valueOf ()-12*60*60*1000;

    arrDateEnd=paramArray[dummy][1].split ('.');
    dummyDate.SetDate (arrDateEnd[2], arrDateEnd[1], 1);
    if (dummyDate.valueOf ()>this.maxdate.valueOf ()) this.maxdate=new Date (arrDateEnd[2], arrDateEnd[1]-1, 1, 12);
    dummyDate.SetDate (arrDateEnd[2], arrDateEnd[1], arrDateEnd[0]);
    intDateEnd=dummyDate.valueOf ();
    

    this.periods.push ([intDateStart, intDateEnd]);
  }
  this.fnCreateShortcuts ();
}


idgObjCalendar.prototype.fnDateInPeriod = function (paramDate) {

  var intTimeStamp=paramDate.valueOf ();
  var blnDateInPeriod=false;

  for (var dummy=0; dummy<this.periods.length; dummy++) if (intTimeStamp>=this.periods[dummy][0] && intTimeStamp<=this.periods[dummy][1]) blnDateInPeriod=true;

  return (blnDateInPeriod);

}


function fnCreateElement (elementname, classname, innerHTML) {

  var retValue=document.createElement (elementname);
  if (classname!=undefined) retValue.className=classname;
  if (innerHTML!=undefined && innerHTML!='') retValue.innerHTML=innerHTML;

  return (retValue);

}


Function.prototype.bindAsEventListener = function (object, param) {

  var method = this;
  var wrapper = function (event) {
 		          method.call(object, event || window.event, param);
	            };

  return wrapper;
};

Function.prototype.bind = function () {
    var method = this, args = Array.prototype.slice.apply(arguments), object = args.shift();
    return function () { return method.apply(object, args); };
};


