ThumbsView = {type: 'thumbs',totalItems: 0};

ThumbsView.initLink = function(a) {
  
  a.style.cursor = 'default';
  a.onclick = function() {ThumbsView.setSelection(this);return false;};
  a.ondblclick = function() {ThumbsView.activateSelection(this);};
  a.onselectstart = function() {return false;};
  if(a.getAttribute('selected')) {
    ThumbsView.setSelection(thumbLinks[i]);
  }

  var spans=a.getElementsByTagName('span');
  for (var i=0;i<spans.length;i++) {
  dom.disableSelection(spans[i])
  }
  dom.disableSelection(a)
  ThumbsView.totalItems++;
}

ThumbsView.init = function()
{

  
  document.body.style.overflow = 'hidden';
  
  ThumbsView.stopFixing();
  ThumbsView.fixViewSize();
  
  document.onkeydown = ThumbsView.keyPressed;
  dom.addEvent(window, 'resize', ThumbsView.fixViewSize);
  dom.addEvent( document.body, 'mouseup', ThumbsView.clearSelection);
 
}


ThumbsView.fixViewSize = function() 
{
 
  var screenH = dom.getViewportDimensions().height;
  if(dom.browser() != 'ie')
  {
    var table = dom.element('thumbs-view');
    var tbody = dom.element('table-scroll-body');
    var height =  screenH - dom.getElementPosition(dom.element('table-scroll-body')).y - 23;
    tbody.style.height =  height + 'px';
    tbody.style.overflowY = 'auto';
    tbody.style.overflowX = 'hidden';
    document.body.style.overflow = 'hidden'; 
  } 
  else
  {
    var viewport = dom.element('viewport');
    var height = screenH - dom.getElementPosition(viewport).y - dom.element('status-holder').offsetHeight - 3;
    viewport.style.height =  height + 'px';
    viewport.style.overflowY = 'auto';
    viewport.style.overflowX = 'hidden';
    document.body.style.overflow = 'hidden'; 
  }

  
}

ThumbsView.setSelection = function(el)
{
  if(!el) return false;

  ThumbsView.clearSelection();

  var thumbHolder=dom.element(el.id+'-inner-thumb')
  dom.addClass(thumbHolder, 'selected');

  var label = el.getElementsByTagName('label')[0];
  dom.addClass(label, 'selected');

  ThumbsView.currentSelection = el;
  setCookie( 'lvl_'+level+'_sel',  el.id );

  SideBar.showInfo( el );

  /*
  scroll to position
  */
  var scrollarea=dom.element( dom.browser()=='ie' ? 'viewport' : 'table-scroll-body' );

  var minTop=scrollarea.scrollTop+10
  var maxTop=minTop+scrollarea.offsetHeight

  var el_y=dom.getElementPosition(el).y
  if(el_y<minTop) {scrollarea.scrollTop=el_y-el.offsetHeight-50;}
  if(el_y>maxTop) {scrollarea.scrollTop+=  Math.abs(maxTop-el_y)+110}

}

ThumbsView.getSelection = function()
{
  return ThumbsView.currentSelection;
}
ThumbsView.activateSelection = function(a)
{

  switch(dom.getBaseClass(a))
  {
    case "folder":
      location.href = a.href;
      break;
    case "picture":
      PictureViewer.loadByLink(a);
      break;
    case "movie":
      if(getHiddenField(a,'downloadLink')=='register.php') {
        location.href = getHiddenField(a,'downloadLink');
      } else {
        dom.element('hiddenFrame').src = getHiddenField(a,'downloadLink');
      }
      break;
    case 'software':
      //alert(a.getAttribute('ext'))
      //alert(a.getAttribute('href')+'&action=show')
      if(!isUserLogin || getHiddenField(a,'ext')=='zip') {
        location.href=a.getAttribute('href')
      }else {
        window.open(a.getAttribute('href')+'&action=show','tmp')
      }//location.href=a.getAttribute('href')+'&action=show'
      break;
  }
  a.blur();
  document.body.style.cursot='wait'
  ThumbsView.setSelection(a);
  ThumbsView.loading = true;
}

ThumbsView.clearSelection = function(e)
{

  if(ThumbsView.currentSelection)
  {
    var do_clear = true;
    if(e)
    {
      var safe_clicks =
      [
        document.getElementById('sidebar'),
        document.getElementById('toolbar'),
        document.getElementById('menu-layer-view'),
        document.getElementById('pictureViewer'),
        document.getElementById('pv_dragDummy')
      ];
      str=''
      for (var i=0; i<safe_clicks.length; i++)
      {
        if(safe_clicks[i])
        {
          if ( dom.hitTest(safe_clicks[i], dom.getMousePosition(e)) )
          {
            do_clear = false;
          }
        }
      }
    }

    if(do_clear)
    {
      //alert('ThumbsView.clearSelection(), ThumbsView.currentSelection='+ThumbsView.currentSelection)

     // var thumbHolder = ThumbsView.currentSelection.getElementsByTagName('div')[0];
      var thumbHolder=dom.element(ThumbsView.currentSelection.id+'-inner-thumb')
      dom.removeClass(thumbHolder, 'selected');

      var label = ThumbsView.currentSelection.getElementsByTagName('label')[0];
      dom.removeClass(label, 'selected');
      ThumbsView.currentSelection = undefined;
      SideBar.hideInfo();
    }
  }

  setCookie( 'lvl_'+level+'_sel',  '' );
}



ThumbsView.keyPressed = function(e)
{
  if (ViewManager.keysReserved) return true;

  var pgScroll = 15;
  var sel = ThumbsView.currentSelection;

  var scrollBody = dom.element('viewport');

  var code
  if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;

	if(code)
	{
    switch (code)
    {
      case 8: //backspace
        location.href = dom.element('level-up').href;
        return false;
        break;
      case 13: //enter
        ThumbsView.activateSelection(sel); return false; break;
      case 33: //pgUp
        if(PictureViewer.isActive) {PictureViewer.previous();return false;}
        scrollBody.scrollTop -= pgScroll; return false; break;
      case 34: //pgDown
        if(PictureViewer.isActive) {PictureViewer.next();return false;}
        scrollBody.scrollTop += pgScroll; return false; break;
      case 36: //home
        if(PictureViewer.isActive) {PictureViewer.loadByLink(dom.element('a_1'));return false;}
        scrollBody.scrollTop = 0; ThumbsView.setSelection(dom.element('a_1'));
        return false;
        break;
      case 35: //end
        if(PictureViewer.isActive) {PictureViewer.loadByLink(dom.element('a_'+ThumbsView.totalItems));return false;}
        scrollBody.scrollTop = scrollBody.scrollHeight; ThumbsView.setSelection(dom.element('a_'+ThumbsView.totalItems));
        return false;
        break;

      case 37: if(PictureViewer.isActive) {PictureViewer.previous();return false;} //left
      case 38: if(PictureViewer.isActive) {PictureViewer.previous();return false;} //up
      case 39: if(PictureViewer.isActive) {PictureViewer.next();return false;} //right
      case 40: if(PictureViewer.isActive) {PictureViewer.next();return false;} //down
        if(sel)
        {
          var dirs = {37:'left',38:'up',39:'right',40:'down'};
          var nextThumb = ThumbsView.getThumbInDirection(dirs[e.keyCode]);
          //alert(nextThumb)
          ThumbsView.setSelection(nextThumb);
        }
        else
        {
          ThumbsView.setSelection(dom.element('a_1'));
        }

        return false;
        break;

      case 27: //Esc
        if(PictureViewer.isActive)
        {
          if(PictureViewer.maximized)
          {
            PictureViewer.restore();
          }
          else
          {
            PictureViewer.close();
          }
        }
        else
        {
          DetailsView.clearSelection();
        }
        break;
    }
  }
}

ThumbsView.getThumbInDirection = function(dir)
{
  var curId = Number(ThumbsView.getSelection().id.split('a_')[1])-1;
  //alert(curId)
  switch (dir)
  {
    case 'left': 
      return dom.element('a_'+( Number(ThumbsView.getSelection().id.split('a_')[1])-1 )) || dom.element('a_0');
      break;
    case 'right': 
      return dom.element('a_'+( Number(ThumbsView.getSelection().id.split('a_')[1])+1 )) || undefined;
      break;
      
    case 'up':
    case 'down':
      var thumbs = dom.element('table-scroll-body').getElementsByTagName('a');
      var cols = [];
      var y0 = dom.getElementPosition(thumbs[0]).y;
      // now create simulated colums array by checking all thumbs, 
      // and starting new column when a thumb has other x value than the previous one
      // or pushing a thumb into the column if it has the same x
      var rowchange=null;
      for (var i=0; i<thumbs.length; i++)
      {
        if(!rowchange)
        {
          var pos = dom.getElementPosition(thumbs[i])
          var y = pos.y;
          if(y == y0) 
          {
            cols.push(pos.x);
          }
          else
          {
            rowchange=true;
          }
        }
      }


      if(dir=='up')
      {
        return dom.element('a_'+( Number(ThumbsView.getSelection().id.split('a_')[1])-cols.length )) || dom.element('a_0');

      }
      if(dir=='down')
      {
        return dom.element('a_'+( Number(ThumbsView.getSelection().id.split('a_')[1])+cols.length )) || undefined;
      }
      return
  }
  return false
}
 
ThumbsView.doFix = function() {
  ThumbsView.fixViewSize(); 

};
ThumbsView.startFixing = function() {
  ThumbsView.fixInt = window.setInterval("ThumbsView.doFix()",100)
};
ThumbsView.stopFixing = function() {
  window.clearInterval(ThumbsView.fixInt)
};
ThumbsView.startFixing();
dom.addEvent(window,'load',ThumbsView.init);
ViewManager.currentView = ThumbsView;

