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)
{
    ViewMode.getInstance().onUpdateAllView(html);
    
    if (ViewMode.getInstance()._calendar.firstChild.className != "monthGrid")
    {
        ViewMode.getInstance()._calendar.style.position = "relative";
    }
    else
    {
        ViewMode.getInstance()._calendar.style.position = "static";
        ViewMode.getInstance()._calendar.firstChild.style.position = "relative";
    } 
//    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["calendarMonth"] = "calendarMonth";
    //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" ||
                  ViewMode.getInstance()._calendars[i].className == "calendarMonth")
             {
                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>")), 10);
                       html = html.substring(html.indexOf(">") + 1,  html.length);
                       ViewMode.getInstance()._calendars[num].innerHTML = html;
                             
                      if (ViewMode.getInstance()._calendars[num].firstChild.className != "monthGrid")
                      {
                          ViewMode.getInstance()._calendars[num].style.position = "relative";
                      }
                      else
                      {
                          ViewMode.getInstance()._calendars[num].style.position = "static";
                          ViewMode.getInstance()._calendars[num].firstChild.style.position = "relative";
                      }                
                    })                      
        }
   } 
}

