function ViewMode()
{
    this._calendars = null;
    this.Init();
}

ViewMode._instance = null;

ViewMode.getInstance = function()
{
   if(ViewMode._instance == null)
   {
      ViewMode._instance = new ViewMode();
   }
   
   return ViewMode._instance;
}

ViewMode.prototype.Init = function()
{
   this._calendar = _$('idGrid').parentNode.parentNode;
}

ViewMode.prototype.SwitchToDayView = function(idCalendar)
{
   var tableGrid = _$(idCalendar).firstChild.lastChild.previousSibling;

   ViewMode.getInstance()._calendar = _$(idCalendar);
   Proxy.getInstance().SwitchToDayView(
                idCalendar,
                tableGrid.getAttribute('date'), 
                _$(idCalendar).getAttribute('siteSettings'), 
                _$(idCalendar).getAttribute('viewSettingPath'),
                tableGrid.getAttribute('numHours'),          
                ViewMode.getInstance().onUpdateView);
}

ViewMode.prototype.SwitchToMonthView = function(idCalendar)
{
   var tableGrid = _$(idCalendar).firstChild.lastChild.previousSibling;
   
   ViewMode.getInstance()._calendar = _$(idCalendar);
   Proxy.getInstance().SwitchToMonthView(
                idCalendar, 
                tableGrid.getAttribute('date'), 
                _$(idCalendar).getAttribute('siteSettings'), 
                _$(idCalendar).getAttribute('viewSettingPath'),
                tableGrid.getAttribute('numHours'),                                 
                ViewMode.getInstance().onUpdateView);
}

ViewMode.prototype.SwitchToWeekView = function(idCalendar)
{
   var tableGrid = _$(idCalendar).firstChild.lastChild.previousSibling;
   
   ViewMode.getInstance()._calendar = _$(idCalendar);
   Proxy.getInstance().SwitchToWeekView(
                idCalendar,
                tableGrid.getAttribute('date'), 
                _$(idCalendar).getAttribute('siteSettings'), 
                _$(idCalendar).getAttribute('viewSettingPath'),
                tableGrid.getAttribute('numHours'),                         
                ViewMode.getInstance().onUpdateView);
}

ViewMode.prototype.SwitchToDayViewToDay = function(idCalendar, date)
{
   ViewMode.getInstance()._calendar = _$(idCalendar);
   Proxy.getInstance().SwitchToDayView(
                idCalendar,
                date, 
                _$(idCalendar).getAttribute('siteSettings'), 
                _$(idCalendar).getAttribute('viewSettingPath'),
                _$(idCalendar).firstChild.lastChild.previousSibling.getAttribute('numHours'),               
                ViewMode.getInstance().onUpdateView);
}

ViewMode.prototype.SwitchToMonthViewToDay = function(idCalendar, date)
{
   ViewMode.getInstance()._calendar = _$(idCalendar);
   Proxy.getInstance().SwitchToMonthView(
                idCalendar,   
                date, 
                _$(idCalendar).getAttribute('siteSettings'), 
                _$(idCalendar).getAttribute('viewSettingPath'),    
                _$(idCalendar).firstChild.lastChild.previousSibling.getAttribute('numHours'),           
                ViewMode.getInstance().onUpdateView);
}

ViewMode.prototype.SwitchToWeekViewToDay = function(idCalendar, date)
{
   ViewMode.getInstance()._calendar = _$(idCalendar);
   Proxy.getInstance().SwitchToWeekView(
                idCalendar,   
                date, 
                _$(idCalendar).getAttribute('siteSettings'), 
                _$(idCalendar).getAttribute('viewSettingPath'), 
                _$(idCalendar).firstChild.lastChild.previousSibling.getAttribute('numHours'),
                ViewMode.getInstance().onUpdateView);
}

ViewMode.prototype.onUpdateView = function(html)
{
    if (ViewMode.getInstance()._calendar != null)
    {
        ViewMode.getInstance()._calendar.innerHTML = html;                         
    }
    Proxy.getInstance().stopProgress();     
}

ViewMode.prototype.onUpdateAllView = function(html)
{   
    if (ViewMode.getInstance()._calendar != null)
    {
        ViewMode.getInstance()._calendar.innerHTML = html;                         
        ViewMode.getInstance().onUpdateCalendars();
    }
    Proxy.getInstance().stopProgress();     
}

ViewMode.prototype.onUpdateCalendars = function()
{
    var classes = new Array();
    classes["calendar"] = "calendar";
    //classes["navCalendarDiv"] = "navCalendarDiv";

    ViewMode.getInstance()._calendars = getDivElements(classes);
    
    for (i = 0; i < ViewMode.getInstance()._calendars.length; ++i)
    {
         if (ViewMode.getInstance()._calendars[i] != ViewMode.getInstance()._calendar)
         {
             var calendar;
             if ( ViewMode.getInstance()._calendars[i].className == "calendar")
             {
                calendar = ViewMode.getInstance()._calendars[i].firstChild.lastChild.previousSibling;
             }            
             else
             {
                calendar = ViewMode.getInstance()._calendars[i];
             }
             var options = new Sitecore.Modules.EventCalendar.Logic.Utils.Options();
             options.CalendarID = ViewMode.getInstance()._calendars[i].id;
             options.Date = calendar.getAttribute('date');
             options.SiteSettingsPath = ViewMode.getInstance()._calendars[i].getAttribute('siteSettings');
             options.ControlSettingsPath = ViewMode.getInstance()._calendars[i].getAttribute('viewSettingPath') || ViewMode.getInstance()._calendars[i].getAttribute('selectorSettingPath')             
             
             Proxy.getInstance()._service.GetViewHTML(
                   i,                  
                   calendar.getAttribute('startHour') || 0,
                   calendar.getAttribute('mode'),
                   calendar.getAttribute('mode'), 
                   calendar.getAttribute('numHours') || 0,
                   options,
                   function (html)
                   { 
                       html = html.substring(html.indexOf("<calendarNum>") + 13, html.length);
                       var num = parseInt(html.substring(0, html.indexOf("</calendarNum>")));
                       html = html.substring(html.indexOf(">") + 1,  html.length);
                       ViewMode.getInstance()._calendars[num].innerHTML = html;
                    })                
        }
   } 
}

