//Определяем пространство имен Lk
if(typeof Lk == 'undefined') Lk = {};

/**
 *  Функции формирования взаимозаменяемых панелей
 *  todo Переделать в класс
 */
/**
 *  gShowHideRegistr массив для хранения указателей на панели по доменам (т.е. можно сделать несколько взаимнозаменяемых
 *                     панелей)
 *
 */
var gShowHideRegistr = new Array();
function registrationShowHideElement(fDomainName, fElementId)
  {
     if(!Ext.isArray(fElementId))
        {
           if(!gShowHideRegistr[fDomainName])
             gShowHideRegistr[fDomainName] = new Array();

           gShowHideRegistr[fDomainName][fElementId] = document.getElementById(fElementId);
        }
     else
       for(var t = 0; t < fElementId.length; t++)
         registrationShowHideElement(fDomainName, fElementId[t]);
  }

var gControlElement = null;
function showHidePanel(fDomainName, fElementId, fControlElement, fHandler)
  {
     if(!gShowHideRegistr[fDomainName])
       return ;
     var tDomainContainer = gShowHideRegistr[fDomainName];
     //alert(fElementId);
     if(!tDomainContainer[fElementId])
       return ;
     //alert(tDomainContainer[fElementId]);
     for(var tElementName in tDomainContainer)
       {
          if(tDomainContainer[tElementName] && typeof(tDomainContainer[tElementName]) != 'function')
            tDomainContainer[tElementName].style.display = "none";
       }

     if(gControlElement)
       gControlElement.className = "unselected";

     if(fControlElement != gControlElement)
        {
           fControlElement.className = "selected";
           gControlElement = fControlElement;
           tDomainContainer[fElementId].style.display = "";
        }
     else
       gControlElement = null;

     if(fHandler)
       fHandler(fDomainName, fElementId, fControlElement);

  }

/**
 *
 */
Lk.ShadowWindow = function(){
   var pThis = this;
   var tShadow;
   var tContainer;
   var tWindow;

   var getScrollPosition = function()
      {
         var tScrollTop = document.body.scrollTop;
         if (tScrollTop == 0)
           {
              if (window.pageYOffset)
                tScrollTop = window.pageYOffset;
              else
                tScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
           }
         return tScrollTop; 
      }

   var getPageSize = function()
      {
         var xScroll, yScroll;
         if (window.innerHeight && window.scrollMaxY) {
            xScroll = document.body.scrollWidth;
            yScroll = window.innerHeight + window.scrollMaxY;
         } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
         } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
         }

         var windowWidth, windowHeight;
         if (self.innerHeight) {	// all except Explorer
            windowWidth = self.innerWidth;
            windowHeight = self.innerHeight;
         } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
            windowWidth = document.documentElement.clientWidth;
            windowHeight = document.documentElement.clientHeight;
         } else if (document.body) { // other Explorers
            windowWidth = document.body.clientWidth;
            windowHeight = document.body.clientHeight;
         }

         // for small pages with total height less then height of the viewport
         if(yScroll < windowHeight){
            pageHeight = windowHeight;
         } else {
            pageHeight = yScroll;
         }

         // for small pages with total width less then width of the viewport
         if(xScroll < windowWidth){
            pageWidth = windowWidth;
         } else {
            pageWidth = xScroll;
         }


         var tResult = { pageWidth:pageWidth, pageHeight:pageHeight, windowWidth:windowWidth, windowHeight:windowHeight };
         return tResult;
      }


   this.show = function(fContent, fSizeStrategy) {
      tShadow = jQuery('<div class="darkUnderground"></div>');
      tContainer = jQuery('<div class="container"></div>');
      tWindow = jQuery('<div class="window"></div>');
      tContainer.click(function(){ pThis.destroy(); });

      jQuery(document.body).append(tShadow);
      jQuery(document.body).append(tContainer);
      tContainer.append(tWindow);
      if(typeof fContent != 'undefined')
        tWindow.append(fContent);
      if(typeof fSizeStrategy != 'undefined')
         {
            tWindow.height(fSizeStrategy.height || (jQuery(tShadow).height() - fSizeStrategy*2 -/*padding+border*/ 12));
            tWindow.width(fSizeStrategy.width || (jQuery(tShadow).width() - fSizeStrategy*2 - /*padding+border*/ 12));
            tWindow.css('margin-top', fSizeStrategy.top || fSizeStrategy);
         }

      tShadow.css('height', getPageSize().pageHeight);
      tContainer.css('top', getScrollPosition());

   }

   this.destroy = function() {
      tShadow.remove();
      tContainer.remove();
      delete tWindow;
      delete tContainer;
      delete tShadow;
   }
}
Lk.ShadowWindow.prototype = new Lk.ShadowWindow();

/**
 * Класс для создания интерфейса пользователя выбора месяца (и года)
 *    fConfig.element - элемент в который бедет добавлен контейнер элементов
 *    fConfig.dateStart - дата начала необходимого периода
 *    fConfig.dateEnd - дата завершения необходимого периода
 *    fConfig.dateSelected - текущая установленная дата
 * @param fConfig необходимые параметры
 */
Lk.MonthYearSelector = function(fConfig)
  {
     var tElement = null;
     if(!fConfig || typeof(fConfig.element) == 'undefined')
       {
          alert('Контейнер для создания MonthYearSelector не определен');
          return null;
       }

     tElement = fConfig.element;

     var tMonthesList = '';
     for(var t in Date.monthNames)
       {
          if($.isFunction(Date.monthNames[t])) continue;
          tMonthesList += "<li id='month" + t + "'><a href='#' onclick='return false;'>" + Date.monthNames[t] + "</a></li>"
       }

     var tYearList = '';
     for(var i = fConfig.dateStart.getFullYear(); i <= fConfig.dateEnd.getFullYear(); i++)
       {
          tYearList += "<li><a href='#' onclick='return false;'>" + i + "</a></li>"
       }

     tElement.html("<ul class='menu'><li>Выбирите необходимый месяц</li>"+
                      "<li class='month'><span>" + Date.monthNames[fConfig.dateSelected.getMonth()] + "</span>"+
                         "<ul class='monthList'>"+
                            tMonthesList +
                         "</ul>"+
                      "</li>"+
                      "<li class='s'></li>"+
                      "<li class='year'><span>" + fConfig.dateSelected.getFullYear() + "</span>"+
                         "<ul class='yearList'>"+
                            tYearList +
                         "</ul>"+
                      "</li>"+
                      "<input type='hidden' name='year' value='" + fConfig.dateSelected.getFullYear() +
                      "'/><input type='hidden' name='month' value='" + fConfig.dateSelected.getMonth() + "'/>"+
                   "</ul>");

     $('li.month, li.year', tElement).hover( function(){ $('.monthList, .yearList', this).show() }, function(){ $('.monthList, .yearList', this).hide()});

     $('li.month li', tElement).click(
                  function() {
                     $(this).parent('ul').hide();
                     $(this).parents('li.month').children('span').text( $(this).text() );
                     $("input[name='month']", tElement).val($(this).attr('id').replace('month', ''));
                  }
               );
     $('li.year li', tElement).click(
                  function() {
                     $(this).parent('ul').hide();
                     $(this).parents('li.year').children('span').text( $(this).text() );
                     $("input[name='year']", tElement).val($(this).text());
                  }
               );

  }
