function Thumbnail() {
  this.Canvas = null;
  this.Empty = null;
  this.BarOpacity = .35;

  this.thumb_canvas = null;
  this.thumb_effect = null;
  this.image_name = null;
  this.image_checkbox = null;
  this.thumb_nav = null;

  this.ImageDesc = null;
  this.Type = "Thumbnail";
  this.CheckboxClicked = ThumbnailCheckboxClicked;
  this.Update = ThumbnailUpdate;
}

function ThumbnailUpdate(types) {
  var empty = this.Empty;
  var ID = TP.ID;
  var image_desc = this.ImageDesc;
  if (image_desc == null) empty = true;

  if (empty) {
    this.thumb_canvas.style.visibility = 'hidden';
    this.thumb_effect.style.visibility = 'hidden';
    this.image_name.style.visibility = 'hidden';
    this.thumb_nav.style.visibility = 'hidden';
  }
  else {
    if (types == null || types.effect != null) {
      this.thumb_effect.style.visibility = (ID.SelectedImageDesc.Index == image_desc.Index) ? 'visible' : 'hidden';
      this.thumb_effect.style.left = '0px';
    }

    if (types == null || types.canvas != null) {
      this.thumb_canvas.style.visibility = 'visible';
      this.thumb_canvas.style.backgroundImage = 'url(http://i.digiproofs.com/i/'+image_desc.ImageId+'5'+image_desc.Rotation+'10000000)';
    }

    if (types == null || types.imagename != null) {
      var image_name_obj = $(this.image_name);
      var full_image_name = image_desc.Caption;
      var image_name = full_image_name;
      if (full_image_name.length > 20) {
	image_name_obj.attr("title", full_image_name);
      }
      else {
	image_name_obj.attr("title", "");
      }
      if (full_image_name.length > 20) {
	image_name = '...' + image_name.substr(image_name.length - 17, image_name.length);
      }
      this.image_name.style.visibility = 'visible';
      this.image_name.innerHTML = image_name;
    }

    if (types == null || types.checkbox != null) {
      var checked = TP.FMs['favorites'].IsMember(image_desc.Index) ? 'checked' : '';
      this.image_checkbox.attr("checked", checked);
    }

    this.thumb_nav.style.visibility = 'visible';
  }
}

function TThumbMousedOver(pos, e) {
  var ID = TP.ID;
  if (e != null && e.relatedTarget != null && e.relatedTarget.className == 'imageshowDone') {
    return;
  }

  var image_desc = ID.PageImageDescs[pos];
  ID.UpdateSelectedImageDesc(image_desc);
  TP.UpdateCookie({cur_ivid: image_desc.FavoriteId});
  ID.Thumbnails[pos].Update({'effect': 1});
  if (ID.MarkedPos != null && ID.Thumbnails[ID.MarkedPos] != null)
    ID.Thumbnails[ID.MarkedPos].Update({'effect': 1});
  ID.MarkedPos = pos;
}

function ThumbnailCheckboxClicked(pos, e) {
  var ID = TP.ID;

  if (e != null) e.stopImmediatePropagation();
  var image_desc = ID.PageImageDescs[pos];
  ID.UpdateSelectedImageDesc(image_desc);
  TP.UpdateCookie({cur_ivid: image_desc.FavoriteId});
  ID.ToggleFavoriteness(image_desc);
  ID.Thumbnails[pos].Update({'checkbox': 1});
}

function TPopupLargeView(pos, auto_zoom) {
  if (auto_zoom == null) auto_zoom = false;
  var ID = TP.ID;
  var image_index = ID.PageImageDescs[pos].Index;

  $.imageshow({
    auto_zoom: false,
    index: image_index,
    get_image: function(index) {
      var image_desc = ID.PageImageDescs[index - TP.CurPage.StartSeq];
      if (image_desc.ImageId == null) return null;
      var event = TP.CurEvent;
      var image = jQuery.extend(
	{
	  EventFirst: index == event.StartSeq,
	  EventLast: index == event.StartSeq + event.ImageCount - 1
	},
	image_desc
      );
      return image;
    },
    get_large_url: function(image) {
      var large_url = '/ecom/zoom_image.pl?ivid='+image.FavoriteId;
      var event_i = TP.EL.TPImageIdToEventI(image.Index);
      var event = TP.EL.Events[event_i];
      large_url += '&eaid='+event.AccessId;
      if (event.Password != null) large_url += '&pass='+event.Password;
      return large_url;
    },
    toggle_select: function(image) {
      TP.UpdateCookie({cur_ivid: image.FavoriteId});
      ID.ToggleFavoriteness(image);
      if (TP.FMs['favorites'].IsMember(image.Index)) {
	$('.imageshowSelectImage').attr("src", "/_img/ecom/lv-checkbox-checked.png");
      }
      else {
	$('.imageshowSelectImage').attr("src", "/_img/ecom/lv-checkbox-unchecked.png");
      }
      var T = ID.Thumbnails[ID.TPImageIdToThumbNum[image.Index]];
      if (T != null) T.Update({'checkbox': 1});
    },
    is_selected: function(image) {
      return TP.FMs['favorites'].IsMember(image.Index);
    },
    can_zoom: function(image) {
      var event_i = TP.EL.TPImageIdToEventI(image.Index);
      var event = TP.EL.Events[event_i];
      if (! event.AllowZoom) return false;
      if (image.Width <= 512 && image.Height <= 512) return false;
      return true;
    },
    notify_cur_image: function(index, completed_callback) {
      if (TP.FMs['favorites'].IsMember(index)) {
	$('.imageshowSelectImage').attr("src", "/_img/ecom/lv-checkbox-checked.png");
      }
      else {
	$('.imageshowSelectImage').attr("src", "/_img/ecom/lv-checkbox-unchecked.png");
      }

      if (index < TP.CurPage.StartSeq) {
	TP.JumpToPage(TP.CurPage.Index - 1, index, completed_callback);
      }
      else if (index >= TP.CurPage.StartSeq + TP.CurPage.ImageCount) {
	TP.JumpToPage(TP.CurPage.Index + 1, index, completed_callback);
      }
      else {
        var T = ID.Thumbnails[ID.TPImageIdToThumbNum[index]];
	  ID.SelectedImageDesc = T.ImageDesc;
	  T.Update({'effect': 1});
        var Tm = ID.Thumbnails[ID.MarkedPos];
        if (Tm != null) Tm.Update({'effect': 1});
	ID.MarkedPos = T.Pos;
        completed_callback();
      }
    }
  });
}

