﻿var EventCalendar = function(){this.ctor.apply(this, arguments);}; Object.SetProperties(EventCalendar.prototype, 
{
   ctor:function(){
     var args = Object.ToArray(arguments);
     this.IsEditable=args[0];
     this.ShowingDate=new Date();
     this.Container=args[1];
     this.TabSettings=args[2];
     this.Styles=args[3];
     this.Labels=args[4];
     this.Settings=args[5];
     this.Args=args.slice(6);
     this.Render();
   },
   Render:function()
   {
     var eManager = new EventManager(this, this.IsEditable, this.ShowingDate, this.Styles, this.Labels, this.Settings);
     var tabs = [];
     if(this.Settings.Year.Visible)tabs.push(new YearTabIcon(eManager));
     if(this.Settings.Month.Visible)tabs.push(new MonthTabIcon(eManager));
     if(this.Settings.Day.Visible)tabs.push(new DayTabIcon(eManager));
     if(this.Settings.List.Visible)tabs.push(new ListTabIcon(eManager));
     if(this.IsEditable)tabs.push(new NewTabIcon(eManager));     
     this.TabSettings.tablist = tabs;
     this.TabContainer = new TabContainer(this.Container, this.TabSettings);
   },
   IsEditable:false,
   ShowingDate:new Date(),
   TabContainer:null,
   Styles:{},
   Labels:{},
   Settings:{},
   Args:new Array()
});

var YearTabIcon = function(eManager)
{
   this.EManager = eManager;
   this.Label = this.EManager.Labels.Year.TabTitle;
   this.Value = "Year";
   this.Render = function(body)
   {
      var manager = this.EManager;
      var from = new Date(manager.ShowingDate); from.setMonth(0); from.setDate(1); from.setHours(0,0,0,0);
      var to = new Date(from); to.setFullYear(to.getFullYear()+1); to.setMilliseconds(to.getMilliseconds()-1);      
      manager.GetEventList(from, to, function(body, manager, list){
        var mer = new YearEventsRenderer(manager);
        mer.Render(body, list);
      }.Bind(this, body, manager));
   }
}

var MonthTabIcon = function(eManager)
{
   this.EManager = eManager;
   this.Label = this.EManager.Labels.Month.TabTitle;
   this.Value = "Month";
   this.Render = function(body)
   {
      var manager = this.EManager;
      var from = manager.ShowingDate;from.setDate(1);
      var to = new Date(from);to.setMonth(from.getMonth()+1);to.setMilliseconds(to.getMilliseconds()-1);
      manager.GetEventList(from, to, function(body, manager, list){
        var mer = new MonthEventsRenderer(manager);
        mer.Render(body, list);
      }.Bind(this, body, manager));
   }
}

var DayTabIcon = function(eManager)
{
   this.EManager = eManager;
   this.Label = this.EManager.Labels.Day.TabTitle;;
   this.Value = "Day";
   this.Render = function(body)
   {
      var manager = this.EManager;
      var from = manager.ShowingDate; from.setHours(0,0,0,0);
      var to = new Date(from); to.setDate(to.getDate()+1);to.setMilliseconds(to.getMilliseconds()-1);          
      manager.GetEventList(from, to, function(body, manager, list){
        var mer = new DayEventsRenderer(manager);
        mer.Render(body, list);
      }.Bind(this, body, manager));
   }
}

var ListTabIcon = function(eManager)
{
   this.EManager = eManager;
   this.Label = this.EManager.Labels.List.TabTitle;;
   this.Value = "List";
   this.Render = function(body)
   {
      var manager = this.EManager;
      var from, to;

      if(manager.ListShow && manager.ListShow=="day"){
        from = manager.ShowingDate; from.setHours(0,0,0,0);
        to = new Date(from); to.setDate(to.getDate()+1);to.setMilliseconds(to.getMilliseconds()-1);          
      }
      else{
        from = manager.ShowingDate;from.setDate(1);from.setHours(0,0,0,0);
        to = new Date(from);to.setMonth(from.getMonth()+1);to.setHours(0,0,0,0);to.setMilliseconds(to.getMilliseconds()-1);      
      }      
      delete manager.ListShow;
      
      manager.GetEventList(from, to, function(body, from, to, manager, list){
        var mer = new ListEventsRenderer(manager);
        mer.ShowingDateFrom=from;
        mer.ShowingDateTo=to;
        mer.Render(body, list);
      }.Bind(this, body, from, to, manager));
   }
}

var NewTabIcon = function(eManager)
{
   this.EManager = eManager;
   this.Label = this.EManager.Labels.Editor.TabTitle;
   this.Value = "New";
   
   this.Render = function(body)
   {
      var ee = new EventEditor(this.EManager);
      var ec = this.EManager;      
      ec.GetEmptyEvent( 
        function(renderer, body, param, newEvent){
           renderer.Render(body, newEvent, param, null);
        }.Bind({}, ee, body, {HeaderTitle:this.EManager.Labels.Editor.NewEventTitle, IsNew:true})
      );
   }
}