  Date.prototype.dayShortNames=Array("So","Mo","Di","Mi","Do","Fr","Sa");
function tiOptList(id)
{
  tiOptList.prototype.checkClick=check;
  tiOptList.prototype.checkFavourite=favourite;
  tiOptList.prototype.checkTime=checkTime;
  tiOptList.prototype.render=render;
  tiOptList.prototype.optionIndex=optionIndex;
  tiOptList.prototype.applyTimeDown=applyTimeDown;
  tiOptList.prototype.maxOptions=6;
  this.id=id;
  this.cleanUp=cleanUp;
  $(id).tiOptList=this;
  this.options=[];
  
  function check(e)
  {
    var element = Event.element(e);
    var d=element.date;
    
    //use time of first element or default
    var defaultStartHour=20;
    if (this.options.length>0)
    {
      d.setHours(this.options[0].date.getHours());
      d.setMinutes(this.options[0].date.getMinutes());
    } else {
      d.setHours(defaultStartHour);
      d.setMinutes(0);
    }
    
    var pos=this.optionIndex(d);
    //alert(pos);
    if (pos>-1)
    {
      //delete option
      this.options[pos].unselect();
      cal.setUnmarked(d);
    } else {
      //add option
      if (this.options.length<this.maxOptions)
      {
        this.options[this.options.length]=new option(d);
        cal.setMarked(d);
      } else {
        alert('Maximal können ' + this.maxOptions + ' Termine gewählt werden');
      }
    }
    this.cleanUp();
    this.render();
  }

  function favourite(e)
  {
    var element = Event.element(e);
    //alert(element);
    var i=element.optionIndex;
    this.options[i].favourite=(this.options[i].favourite==false); //switch
    var d=element.date;
    this.render();
  }
  
  function checkTime(e)
  {
    var element = Event.element(e);
    //alert(element);
    var i=element.optionIndex;
    element.value=guessTime(element.value);
    
    var h=parseInt(element.value.substr(0,2),10);
    var m=parseInt(element.value.substr(3,2),10);
    //alert (h + ':' + m);
    this.options[i].date.setHours(h);
    this.options[i].date.setMinutes(m);
    this.render();
  }
  
  function applyTimeDown()
  //function applyTimeDown(idx)
  {
    idx=0;
    if ((idx+1)<this.options.length)
    {
      for (var i=idx+1;i<this.options.length;i++)
      {
        this.options[i].date.setHours(this.options[idx].date.getHours());
        this.options[i].date.setMinutes(this.options[idx].date.getMinutes());
      }
    }
    this.render();
  }
  
  function option(d)
  {
    this.date=new Date(d);
    this.date.formated=format_date(this.date);
    this.favourite=false;
    option.prototype.unselect=function() { this.date=0; }
  }
  
  function cleanUp()
  {
    this.options.sort(optionSort);
    
    //clear deleted ones, they should be at the beginnging now
    while ((this.options.length>0) && (this.options[0].date==0))
    {
      this.options.shift();
    }
  }
  
  function optionIndex(d)
  {
    var found=-1;
    for(var i=0;i<this.options.length;i++)
    {
      if ((this.options[i].date.getDate()==d.getDate()) && (this.options[i].date.getFullYear()==d.getFullYear()) && (this.options[i].date.getMonth()==d.getMonth()))
      {
        found=i;
      }
    }
    return found;
  }
  
  function optionSort(a,b)
  {
    return a.date - b.date;
  }
  
  function render()
  {
    $(this.id).innerHTML='<ul id="optionList"></ul>';
    for (var i=0;i<this.options.length;i++)
    {
      var li=new Element('li');
      var span=new Element('span');
      span.innerHTML='X';
      span.date=new Date(this.options[i].date);
      Event.observe(span,'click',optList.checkClick.bind(optList));
      
      var dateText=document.createTextNode(this.options[i].date.formated);
      
      //input felder f�r Uhrzeit
      //var time=document.createElement('input');
      var time=new Element('input');
      time.id='time' + i;
      time.type='text';
      time.addClassName('timeInput');
      time.size=5;
      time.value=zero(this.options[i].date.getHours()) + ':' + zero(this.options[i].date.getMinutes());
      time.optionIndex=i;
      Event.observe(time,'change',optList.checkTime.bind(optList));
      
      //applyTimeDown
      if (i==0)
      {
        var applyDown=new Element('img');
        applyDown.addClassName('applyTimeDown');
        applyDown.src='/images/applyTimeDown.png';
        applyDown.writeAttribute('alt','Zeit für alle übernehmen');
        applyDown.writeAttribute('title','Zeit für alle übernehmen');
        Event.observe(applyDown,'click',optList.applyTimeDown.bind(optList));
      }
      
      var fav=new Element('span');
      fav.addClassName('fav');
      
      var star=new Element('img');
      star.optionIndex=i;
      if (this.options[i].favourite==true)
      {
        li.addClassName('favourite');
        star.src='/images/star.png';
      } else {
        star.src='/images/nostar.png';
      }
      Event.observe(star,'click',optList.checkFavourite.bind(optList));
      fav.appendChild(star);

      li.appendChild(span);
      li.appendChild(dateText);
      li.appendChild(time);
      if (i==0)
      {
        li.appendChild(applyDown);
      }
      li.appendChild(fav);
      
      $('optionList').appendChild(li);
    }
  }
  
  function format_date(d)
  {
    return d.dayShortNames[d.getDay()] + ', ' + zero(d.getDate()) + '.' + zero(d.getMonth()+1) + '.' + d.getFullYear();
  }
  
  function zero(i)
  {
    return i >9 ? i : '0' + i;
  }
}
