
function getPage (id)
{
   if (pages[id] == undefined ) pages[id] = new PageItem(id);
   return pages[id];
}

function getCurPage ()
{
   return getPage (curPage);
}
/**
 * Объект страница.
 */
function PageItem (id) {
    this.BOTTOM_HEIGHT = 80;
    this.id = id;
    this.page = document.getElementById("page_"+id);
    this.content = document.getElementById("content_"+id);

    this.topSize = 0;

    this.menu = document.getElementById("menu_"+id);
    this.title = document.getElementById("title_"+id);

    //  this.id!=0 - не главная страничка, на других страницах всегда есть меню и заголовок
    if(this.menu != null && this.id != '0') this.topSize += this.menu.offsetHeight;
    if(this.title != null) this.topSize += this.title.offsetHeight;


    this.getHeight = function () {
      if (this.id!='0')
        this.page.style.height = 'auto';
      return this.topSize+this.content.offsetHeight
          + this.BOTTOM_HEIGHT;
    };

    this.setPageHeight = function (height) {
      // this.pageSize - this.contentSize  - размер заголовка и меню, если есть
      height = height - this.BOTTOM_HEIGHT;
      this.page.style.height = height+"px";
    };

    this.getScrollTop = function () {
       return absPosition(this.page).y;
    };

}
/**
 *Получает и устанавливает размер новой страници
 */
function getNewPageHeight ()
{
    var height = screenSize().h;
    var newHeight = getCurPage().getHeight();
    if (newHeight < height ) {
        newHeight = height;
        getCurPage().setPageHeight(height);
    }
   return newHeight;
}

/**
 * Метод обрабатывающийся при скроле
 */
function onResize()
{

    var screen = document.getElementById("screen");
    //устанавливаем размеры и для страницы чтобы растянуть на всю
    var newHeight = getNewPageHeight ();
    screen.style.height = newHeight+"px";
    //смещаем
    var scrollTop = getCurPage().getScrollTop();
    screen.scrollTop = scrollTop;
}

// Обеспечение эфекта скролла
var resizeInterval; //интервал для эмуляции ресайса
function scrollEffect (from, to)
{
    clearInterval(resizeInterval);
    var screen = document.getElementById("screen");
    // для начала устанавливаем размер "экрана
    var newHeight = getNewPageHeight ();
    screen.style.height = newHeight+"px";
    
    clearTimeout(floatTimer);
    floatEffect (getPage(from).getScrollTop(), getPage(to).getScrollTop(), function(scroll) {screen.scrollTop = scroll;},
                    function() {
                        closeHiddenPages ();
                        resizeInterval = setInterval(function(){
                                                onResize()
                                             }, 100);
                            });
}
// установка адреса
function setUrl (url)
{
    var subUrl = url.split(localURL);
    location.href = '#'+subUrl[subUrl.length-1];
}
// Функция создает новую страничку используя частично данные текущей страницы
// и добавляет ее после текущей страницы
// возращает объект content для вставки содержимого
function createNewPage (newId, parents, pageTitle)
{
    var pageDiv = document.createElement("div");
    var menuDiv = document.createElement("div");
    var titleDiv = document.createElement("div");
    var contentDiv = document.createElement("div");
    //поиск "адекватного" родителя
    var i = -1;
    var parent = null;
    var parentId = null;
    while ( i < parents.length && parent == null)
        {
            i++;
            parent = document.getElementById("page_"+parents[i]);
            parentId = parents[i];
        }
    
    var isHidden = false;
    for (var i = 0; i<parents.length; i++)
        if (parents[i] == -1) { 
            isHidden = true;
            break;
        }
    
    pageDiv.setAttribute("id", "page_"+newId);
    menuDiv.setAttribute("id", "menu_"+newId);

    titleDiv.setAttribute("id", "title_"+newId);

    contentDiv.setAttribute("id", "content_"+newId);

    pageDiv.appendChild(menuDiv);
    pageDiv.appendChild(titleDiv);
    pageDiv.appendChild(contentDiv);

    insertAfter(pageDiv,parent);

    var menu = document.getElementById("menu_"+newId);
    menu.innerHTML = document.getElementById("menu_"+parentId).innerHTML;
    menu.className = "menuTab";
    // Необходимо убрать выделенный элемент у скрытых страниц
    if (isHidden)
    {
        var links = menu.getElementsByTagName("a");
        for (var i=0; i< links.length; i++)
            if (links[i].className == "selected") links[i].className = "";
    }
    var title = document.getElementById("title_"+newId);
    // если скрытый элемент, то необходимо установить его заголовок
    if (isHidden && pageTitle != null )
        title.innerHTML = pageTitle;
    else    
        title.innerHTML = document.getElementById("title_"+parentId).innerHTML;
    title.className = "title";
    var content = document.getElementById("content_"+newId);
    content.className = "content";
    return content;
}
// функция отвечающая за закрытия спрятаных страничек
var hiddenPages = new Array();
function closeHiddenPages ()
{
    for (var i = 0; i < hiddenPages.length; i++)
        if (hiddenPages[i].id != curPage &&
            hiddenPages[i].isHidden == false)
            {
            hiddenPages[i].isHidden = true;
            document.getElementById("page_"+hiddenPages[i].id).style.display="none";
            
            }
    onResize();
}
// callback для загрузки данных страници
function loadPage (msg, url)
{
    try {
        eval(msg);
        setUrl (url);
        loadedPages[url] = result['page'];
        var content = document.getElementById("content_"+result['page']);
        if (content == null)
            {
            content = createNewPage (result['page'], result['parent'], result['title']);
            hiddenPages.push({id: result['page'], isHidden: false});
            initLinks (document.getElementById("page_"+result['page']));
            }

        content.innerHTML = result['content'];
        //инициализируем ссылки
        initLinks (content);
        var from = curPage;
        
        curPage = result['page'];
        pages[curPage] = new PageItem(curPage);
        showOrHide ("loader", true);
        scrollEffect (from, curPage);
    }
    catch(er) {
        alert(msg);
        alert(er);
    }
}
// Запрос данных на сервере
function changePageQuery (url)
{
    showOrHide ("loader", false);
    var obj = new ajax('POST', url, function(msg) {
        loadPage(msg, url);
    } );
    obj.params['ajax'] = true;
    obj.load();
}

// массив загруженных страниц
var loadedPages = {};
// функция которая навешивается на ссылку onclick
function changePage (event, url)
{
   if (url == null)
    url = this.href;
  
   if (loadedPages[url] == undefined)
       {
        changePageQuery (url);
        return false;
       }
    var from = curPage;
    curPage = loadedPages[url];

   var pageObj = document.getElementById('page_'+curPage);
   if (pageObj.style.display == "none") {
       pageObj.style.display = "";
       for(var i=0; i < hiddenPages.length; i++)
           if (hiddenPages[i].id == curPage)
               {
                   hiddenPages[i].isHidden = false;
               }
   }
   setUrl (url);
   scrollEffect (from, curPage);

   return false;
}

// функция возрата на главную
function toMain ()
{
    changePage (event, localURL+"index.php");
}

// функция отображение табов
/**
 * int level - уровень (0, 1, 2)
 * string tabType - тип вкладки (cart, tag, info) 
 */
function showTabs (level, tabType)
{
    var tabs = document.getElementById("tabs");
    level = ( level<0 || level>2 )?0:level;
    
    if (level == 0 || tabType == null)
        {
            tabs.className = "";
            return;
        }
    
    tabs.className = "show"+level+" show"+tabType;
}

// переключение картинки в каталоге
function changeImg(id, pageId)
{
    var img = document.getElementById("catImg_"+pageId);
    img.innerHTML = "<img src='upload/shop/img/img"+id+".jpg' />";
}

/* корзина */
    var cartTimer;
    // print cart
    function printCart (msg)
    {
        try {
            eval(msg);
            var cartDiv = document.getElementById("rightCart");
            var cartOrderDiv = document.getElementById("cartOrderDiv");
            cartDiv.innerHTML = data['cart'];
            cartOrderDiv.innerHTML = data ['order'];
            initLinks (cartDiv);
            initLinks (cartOrderDiv);
        }
        catch (e) {alert(msg);alert(e);}
    }
    // обработка результата
     function addToCartRes (msg)
     {
         printCart (msg);
         showOrHide ("loader", true);
         showTabs (1, 'cart');
         cartTimer = window.setTimeout(function() {showTabs ();}, 3000);
     }
    //добавление в корзину
     function addToCart(id, obj)
     {
         var cartDiv = document.getElementById("rightCart");
         cartDiv.onclick = function () {clearTimeout(cartTimer);};
         clearTimeout(cartTimer);
         var amountStr = "";
         if (obj != null)
             {
               var parent = obj.parentNode;
               var inputs = parent.getElementsByTagName('input');
               if (inputs[0] != undefined && inputs[0].name == 'amount' )
                    amountStr = "&amount="+inputs[0].value;
             }
         
         var obj = new ajax('GET', "index.php?addToCart="+id+amountStr, addToCartRes);
         showOrHide ("loader", false);
         obj.load();
     }

    //пересчет содержимого карзины
    function recountCart ()
    {
      var obj = new ajax('POST', "index.php?setCart=recount", function (msg) {showOrHide ("loader", true);printCart (msg)} );
      var cartOrderTable = document.getElementById("orderCartTable");
      var inputs = cartOrderTable.getElementsByTagName('input');
      for (var i =0; i<inputs.length; i++ )
        obj.params[inputs[i].name] = inputs[i].value;
      showOrHide ("loader", false);
      obj.load();
    }
    //удалить элементы
    function delCartItem (id)
    {
      var obj = new ajax('GET', "index.php?setCart=delItem&delItem="+id, function (msg) {showOrHide ("loader", true);printCart (msg)} );
      showOrHide ("loader", false);
      obj.load();
    }
    // отправить заказ
    function sendOrder ()
    {
      showOrHide ("loader", false);
      var obj = new ajax('POST', "index.php?setCart=sendOrder", function (msg) {showOrHide ("loader", true);printCart (msg)} );
      var cartOrderTable = document.getElementById("cartOrderDiv");
      var inputs = cartOrderTable.getElementsByTagName('input');
      for (var i =0; i<inputs.length; i++ )
        obj.params[inputs[i].name] = inputs[i].value;
      obj.load();
    }

//переключатель картинки галлереи
function changeGallPic (picObj, id, page_id)
{
    var picDiv = picObj.parentNode;
    var gallParent = picDiv.parentNode;
    var imgs = gallParent.getElementsByTagName('img');
    var divs = gallParent.getElementsByTagName('div');
    imgs[0].src = "gallery/full/"+id+".jpg";
    for (var i=1; i<imgs.length; i++)
        imgs[i].className = '';
    picObj.className = 'selected';
    var pageId = page_id;
    var obj = new ajax('GET', "index.php?way="+page_id+"&pic="+id, function (msg) {divs[0].innerHTML = msg+"&nbsp;";} );
    obj.load();
}

// инит функции и функции ответственные за ссылки
var localURL = "";

function initLinks (obj)
{
    var links = obj.getElementsByTagName('a');

    if (localURL == "")
    {
        var splitUrl = location.href.split('/');
        localURL = "";
        for (var i=0; i< splitUrl.length-1; i++)
            localURL += splitUrl[i]+"/";
    }
    for (var i=0; i< links.length; i++)
    {
        var link = links[i];

        if (link.href.indexOf(localURL) >= 0)
            if (link.onclick == null && link.target != "_blank")    
                link.onclick = changePage;
    }
}

 // INIT
doOnLoad (function() {
    onResize();
    window.onresize = onResize;
    showOrHide ("loader", true);
    showOrHide ("startDemo", true);
    
    initLinks (document);

    var splitUrl = location.href.split('#');
    if (splitUrl.length == 2)
    {
        var url = localURL + splitUrl[1];
        changePage (null, url)
    }
    else
        {
            resizeInterval = setInterval(function(){
                                                onResize()
                                             }, 100);
        }
});


//  расчет позиции панели с табом
//window.onscroll = function() {
//    var tabs = document.getElementById("tabs");
//    tabs.style.right = "auto";
//    tabs.style.left = getLeftPosTab(tabs) + "px";
//};

function getLeftPosTab(obj)
{
    var posNoScroll = document.body.offsetWidth - obj.clientWidth;
    return posNoScroll + (screenSize().w - document.body.offsetWidth + document.body.scrollLeft);
}

// Функция для листинга элементов группы каталога
function catGroup(pageId, obj)
{
    changePageQuery (obj.href)
}

// Функция для листинга элементов группы каталога (вариант для селекта)
function changeCatGroup(pageId, obj)
{
    changePageQuery (obj.options[obj.selectedIndex].value);
}


