// ----------------------------
// calendar.js
// 13.08.2007 (c) by GlobalBases.com GmbH
// 
// Dieses Script darf nicht ohne der Genehmigung der GlobalBases.com GmbH 
// verwendet werden. Ebenfalls ist die Verwendung in Teilen untersagt!
// ----------------------------

var cal = 0;
var check1 = new EvFhCheckbox();
check1.initCheckbox("check1","0em","19.3em","Nachrichten");
var check2 = new EvFhCheckbox();
check2.initCheckbox("check2","0em","21.3em","Veranstaltungen");
var button1 = new EvFhButton();
button1.initButton("button1","","","0em","23.5em");

function loadCalendar(name) {
  cal = new EvFhCalendar();  
  cal.initCalendar(name);
  cal.printCalendar();
}

function EvFhCalendar() {

  this.divname = "calendar";
  this.days = new Array("Mo","Di","Mi","Do","Fr","Sa","So");
  this.nameMonth = new Array("Jan.", "Feb.", "März", "Apr.", "Mai", "Juni",
                             "Juli", "Aug.", "Sep.", "Okt.", "Nov.", "Dez.");

  this.today = new Date();
  this.startdate = new Date();
  this.stopdate = new Date();
  this.showdate = new Date();
  this.status = 1;
  this.firstcell = 0;

  this.initCalendar = function(name) {
    this.divname = name;
  }

  this.printCalendar = function() {
    var erg = this.printHead();
    erg = erg + this.printTitle();
    erg = erg + this.printDays();
    erg = erg + this.printFoot();
    erg = erg + check1.printCheckbox();
    erg = erg + check2.printCheckbox();
    erg = erg + button1.printButton();
    document.getElementById(this.divname).innerHTML = erg;
    this.setCalendarView();
    this.setFootLine();
  }

  this.printDate = function(date) {
    sd = String(date.getDate());
    if( sd.length < 2 ) { sd = "0"+sd; }
    sm = String(date.getMonth()+1);
    if( sm.length < 2 ) { sm = "0"+sm; }
    sy = date.getFullYear();
    return sd + "." + sm + "." + sy;
  }

  this.setFootLine = function() {
    if( this.status == 1 ) {
      document.getElementById("calfoot").innerHTML = "<p>"+this.printDate(this.startdate)+"</p>";
    }
    if( this.status > 1 ) {
      if( this.status == 2 ) {
        document.getElementById("calfoot").innerHTML = "<p>"+this.printDate(this.startdate)+"</p>";
      }
      if( this.status == 3 ) {
        if( this.startdate < this.stopdate ) {
          document.getElementById("calfoot").innerHTML = "<p>"+this.printDate(this.startdate) + " - &nbsp;" + this.printDate(this.stopdate)+"</p>";
        } else {
          document.getElementById("calfoot").innerHTML = "<p>"+this.printDate(this.stopdate) + " - &nbsp;" + this.printDate(this.startdate)+"</p>";
        }
      }
    }
  }

  this.printHead = function() {
    var imgnext = "<img src='images/calnext.gif' border='0' style='position:absolute;top:0.5em;left:11.0em;width:2.6em;height:1.4em;cursor:pointer;' onclick='cal.actionNextMonth();'>";
    var imgprev = "<img src='images/calprev.gif' border='0' style='position:absolute;top:0.5em;left:0.3em;width:2.6em;height:1.4em;cursor:pointer;' onclick='cal.actionPrevMonth()'>";
    var mid = this.divFactory("calheadtext","calheadtext","calheadtext","position:absolute;top:0.4em;left:3.2em;width:7.5em;height:1.8em;overflow:hidden;","");
    var erg = this.divFactory("calhead","calhead","calhead","position:absolute;top:0em;left:0em;width:13.9em;height:2.4em;overflow:hidden; ",imgprev+mid+imgnext);
    return erg;
  }

  this.fillHead = function() {
    document.getElementById("calheadtext").innerHTML = "<p>"+this.nameMonth[this.showdate.getMonth()]+" "+this.showdate.getFullYear()+"</p>";
  }

  this.printTitle = function() {
    var erg = "";
    for( var i = 0; i < 7; i++ ) {
      var pos = i*2.0;
      erg = erg + this.divFactory("caltitle","caltitle_"+i,"caltitle","position:absolute;top:2.5em;left:"+pos+"em;width:1.9em;height:2.0em;overflow:hidden; ","<p>"+this.days[i]+"</p>");
    }
    return erg;
  }

  this.printDays = function() {
    var erg = "";
    var x = 0;
    var y = 0;
    for( var i = 0; i < 42; i++ ) {
      var x = i % 7;
      var y = Math.floor(i / 7);
      var xpos = x*2.0;
      var ypos = y*2.1;
      ypos = ypos + 2.5 + 2.1;
      erg = erg + "<div name='calday' id='calday_"+i+"' class='calday' style='position:absolute;top:"+ypos+"em;left:"+xpos+"em;width:1.9em;height:2.0em;overflow:hidden;' onclick='cal.actionClickDay("+i+")'></div>";
    }
    return erg;
  }

  this.printFoot = function() {
    return this.divFactory("calfoot","calfoot","calfoot","position:absolute;top:17.5em;left:0em;width:13.9em;height:1.5em;overflow:hidden;","");
  }

  this.clearDays = function() {
    //var elements = document.getElementsByName("calday");
    var elements = 0;
    //alert(elements.length);
    for( var i = 0; i < 42; i++ ) {
      elements = document.getElementById("calday_"+i);
      elements.innerHTML = "";
      elements.style.backgroundColor = "#FFFFFF";
    }
  }

  this.getFirstDayCell = function() {
    var firstday = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),1);
    //alert(firstday);
    fd = firstday.getDay();
    if( fd == 0 ) { fd = 7; }
    //alert(fd);
    this.firstcell = fd;
    return fd;
  }
  
  this.insertDaysInCell = function(fd) {
    for( var i = 0; i < 31; i++ )
    {
      var testday = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),i+1);
      //alert(testday);
      if( testday.getMonth() == this.showdate.getMonth() ) {
        var si = ""+(i+1);
        if( si.length < 2 ) { si = "0"+si; }
        var element = document.getElementById("calday_"+(i+fd-1));
        element.innerHTML = "<p>"+si+"</p>";
        if( (testday.getDate() == this.today.getDate()) && (testday.getMonth() == this.today.getMonth()) ) {
          element.style.backgroundColor = "#EFEEF6";
        }
      }
    }
  }

  this.setCalendarView = function() {
    //document.getElementById("cal_"+this.ElementId+"_title").innerHTML = this.printMonth();
    this.clearDays();
    this.insertDaysInCell(this.getFirstDayCell());
    this.fillHead();
  }

  this.divFactory = function(name,id,cl,style,innerHtml) {
    var erg = "<div";
    if( name.length > 0 ) {
      erg = erg + " name='"+name+"'";
    }
    if( id.length > 0 ) {
      erg = erg + " id='"+id+"'";
    }
    if( cl.length > 0 ) {
      erg = erg + " class='"+cl+"'";
    }
    if( style.length > 0 ) {
      erg = erg + " style='"+style+"'";
    }
    erg = erg + ">"
    if( innerHtml.length > 0 ) {
      erg = erg + innerHtml;
    }
    erg = erg + "</div>";
    return erg;
  }

  this.getStatus = function() {
    return this.status;
  }

  this.getStartDate = function() {
    return this.startdate;
  }

  this.getStopDate = function() {
    return this.stopdate;
  }

  this.actionNextMonth = function() {
    this.showdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth()+1,this.showdate.getDate());
    this.setCalendarView();
  }

  this.actionPrevMonth = function() {
    this.showdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth()-1,this.showdate.getDate());
    this.setCalendarView();
  }

  this.actionClickDay = function(value) {
    var da = document.getElementById("calday_"+value).innerHTML;
    if( da.length > 0 ) {
      nda = value - this.firstcell +2;
      switch(this.status) {
        case 1 : this.startdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),nda);
                 this.stopdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),nda);
                 this.status = 2;
                 break;
        case 2 : this.stopdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),nda);
                 this.status = 3;
                 break;
        case 3 : this.startdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),nda);
                 this.stopdate = new Date(this.showdate.getFullYear(),this.showdate.getMonth(),nda);
                 this.status = 2;
                 break;
      }
      this.setFootLine();
    }
  }
}

function EvFhCheckbox() {

  this.status = 1;
  this.name = "checkbox";
  this.xpos = "0em";
  this.ypos = "0em";
  this.value = "";

  this.initCheckbox = function(name,xpos,ypos,value) {
    this.name = name;
    this.xpos = xpos;
    this.ypos = ypos;
    this.value = value;
  }
 
  this.actionClick = function() {
    switch(this.status) {
      case 1 : document.getElementById(this.name+"_img").src = "images/cal_no.gif";
               this.status = 0;
               break;
      case 0 : document.getElementById(this.name+"_img").src = "images/cal_ok.gif";
               this.status = 1;
               break;
    }
  }

  this.getStatus = function() {
    return this.status;
  }

  this.printCheckbox = function() {
    var erg = "<div id='"+this.name+"' ";
    erg = erg + "class='checkbox' ";
    erg = erg + "style='position:absolute;left:"+this.xpos+";top:"+this.ypos+";width:13em;height:2em;cursor:pointer;'";
    erg = erg + " onclick='"+this.name+".actionClick()'>";
    erg = erg + "<img src='images/cal_ok.gif' id='"+this.name+"_img' border='0' style='position:absolute;top:0em;left:0em;width:1.7em;height:1.7em;'>";
    erg = erg + "<div style='position:absolute;top:0em;left:2em;width:11em;height:1.5em;background-color:transparent;'><p>"+this.value+"</p></div>";
    erg = erg + "</div>";
    return erg;
  }
}

function EvFhButton() {
  
  this.name = "button";
  this.img = "";
  this.imgover = "";
  this.xpos = "0em";
  this.ypos = "0em";

  this.initButton = function(name, img, imgover,xpos,ypos) {
    this.name = name;
    this.img = img;
    this.imgover = imgover;
    this.xpos = xpos;
    this.ypos = ypos;
  }
  
  this.getIntDat = function(dat) {
    var day = ""+dat.getDate();
    if( day.length < 2 ) { day = "0"+day; }
    var month = ""+(dat.getMonth()+1);
    if( month.length < 2 ) { month = "0"+month; }
    var year = dat.getFullYear();
    return ""+year+month+day+"";
  }

  this.actionClick = function() {
    var dstat = cal.getStatus();
    var dstart = cal.getStartDate();
    var dstop = cal.getStopDate();
    var c1 = check1.getStatus();
    var c2 = check2.getStatus();
    if( dstart < dstop ) {
      location.href="index_aktuell.html?cal="+dstat+"&calstart="+this.getIntDat(dstart)+"&calstop="+this.getIntDat(dstop)+"&c1="+c1+"&c2="+c2;
    } else {
      location.href="index_aktuell.html?cal="+dstat+"&calstart="+this.getIntDat(dstop)+"&calstop="+this.getIntDat(dstart)+"&c1="+c1+"&c2="+c2;
    }
  }

  this.printButton = function() {
    var erg = "<div id='"+this.name+"' class='button'";
    erg = erg + " style='position:absolute;left:"+this.xpos+";top:"+this.ypos+";width:13.9em;height:1.6em;text-align:center;'>";
    erg = erg + "<img src='images/cal_anzeigen.gif' border='0' style='width:5.5em;height:1.5em;cursor:pointer'";
    erg = erg + " onclick='"+this.name+".actionClick()'>";
    erg = erg + "</div>";
    return erg;
  }
}

