
var current_image_index = 0;
var current_zoom_level = 'standard';

// function ObjectImage(id, filename, date, credit, description, date_added) {
//
var OCImage = new Class({
  initialize: function(params) {
    $extend(this, params);
  },

  getDateFormatted: function() {
    return this.date.dateFormat(OBJECT_IMAGE.DATE_FORMAT.DATE);
  },

  getDateAddedFormatted: function() {
    return this.date_added.dateFormat(OBJECT_IMAGE.DATE_FORMAT.DATE_ADDED);
  }
});

var ObjectImage = new Class({
  Extends: OCImage,

  getUrl: function() {
    return OBJECT_IMAGE.BASE_URL.STANDARD + "/" + this.filename;
  },

  getFullUrl: function() {
    return OBJECT_IMAGE.BASE_URL.FULL + "/" + this.filename;
  }

});

ObjectImage.getById =  function(id) {
  for(var i=0;i<object_images.length;i++) {
    if(object_images[i].id==id) {
      return object_images[i];
    }
  }
};

var ExhibitionImage = new Class({
  Extends: OCImage,

  getUrl: function() {
    return EXHIBITION_IMAGE.BASE_URL.STANDARD + "/" + this.filename;
  },

  getFullUrl: function() {
    return EXHIBITION_IMAGE.BASE_URL.FULL + "/" + this.filename;
  }

});

ExhibitionImage.getById = function(id) {
  for(var i=0;i<exhibition_images.length;i++) {
    if(exhibition_images[i].id==id) {
      return exhibition_images[i];
    }
  }
};


function showObjectImage(index) {
  if(object_images.length <= index) return;

  current_image_index = index;

  _updateObjectImage();
}

function zoomMainImage(level) {
  current_zoom_level = (typeof level == 'undefined')?'full':'standard';

  _updateObjectImage();
}


function _updateObjectImage() {
  var main_image = $("main-image");
  var source = null;

  var img = object_images[current_image_index];

  switch(current_zoom_level) {
    case 'full': source = img.getFullURL(); break;
    default: source = img.getURL(); break;
  }
  main_image.src = source;

  $("main-image-filename").set('html', img.filename);
  $("main-image-credit").set('html', img.credit);
  var _desc = [];
  if(img.view)
    _desc.push(img.view);
  if(img.description)
    _desc.push(img.description);
  $("main-image-description").set('html',_desc.join(', '));
  $("main-image-date").set('html', img.getDateFormatted());
}


function parseSQLDate(sql_date) {
  var parts = sql_date.split('-');
  var year = parts[0];
  var month = parts[1];
  var day = parts[2];

  var ret = new Date();
  ret.setYear(year);
  ret.setMonth(month-1);
  ret.setDate(day);

  return ret;
}

function toggleDisplay(element) {
	if(element.getStyle('display') == 'block') {
		element.setStyle('display', 'none');
	} else if(element.getStyle('display') == 'none') {
		element.setStyle('display', 'block');
	}
}

// This causes text inputs with class text-input-tip to cause their current value 
// to be displayed as a 'tip', like "enter accession number here", which is cleared
// on focus (and restored if user doesn't enter anything)
window.addEvent('domready', function() {
  $$('.text-input-tip').each(function(el) {
    var _orig_value = el.value;

    el.addClass('text-input-tip-active');

    el.addEvent('focus', function(e) {
      if(e && e.target) {
        if(e.target.value==_orig_value) {
          el.removeClass('text-input-tip-active');
          e.target.value = '';
        }
      }
    });

    el.addEvent('blur', function(e) {
      if(e && e.target) {
        if(e.target.value=='') {
          e.target.addClass('text-input-tip-active');
          e.target.value = _orig_value;
        }
      }
    });
  });

  new Asset.css('/css/opencollection-script-only.css');
});


window.addEvent('domready', function() {

  if($('exhibition-timeline')) {
    var div = $('exhibition-timeline').getParent('div');

    var makeClickHandler = function(direction) {
      return function() {
        var lis = $('exhibition-timeline').getElements('li');
        var li;
        if(direction == 'backward') {
          li = lis[0];
        } else {
          li = lis[lis.length-1];
        }

        var anchor = li.getElement('a');
        if(anchor && anchor.getProperty('href')) {
          var href = anchor.getProperty('href');
          var exhib_id = parseInt(href.substring(new String('/opencollection/exhibitions/').length));

          new Request.JSON({url: OPENCOLLECTION_BASE_URL + '/ajax.php?action=get-exhibition-timeline&direction=' + direction + '&start_id=' + exhib_id, method: 'get', onComplete: function(res) {
            if(res.length < 10) {
              $('exhibition-timeline-button-' + direction).fade(0.5);
            } else {
              $('exhibition-timeline-button-backward').fade(1);
              $('exhibition-timeline-button-forward').fade(1);
            }

            if(!res.length) return;

            var replace_ul = new Element('ul');
            for(var i=0;i<res.length;i++) {
              var li = new Element('li').set('text', res[i].date + ': ');
              if($('comment-item-id') && res[i].id == $('comment-item-id').get('value')) {
                li.set('text', res[i].title);
              } else {
                li.adopt(new Element('a').setProperty('href', OPENCOLLECTION_BASE_URL + '/exhibitions/' + res[i].id).set('text', res[i].title));
              }
              if(res[i].has_images) {
                li.addClass('exhibition-timeline-has-images');
              }
              replace_ul.adopt(li);
            }
            // replace_ul.replaces($('exhibition-timeline'));
            replace_ul.setProperty('id', 'exhibition-timeline');
            var slide_dir = direction=='backward'?'south':'north';
            new SlideTween($('exhibition-timeline'), {direction: slide_dir}).start(replace_ul);


         }}).get();

        }
      }
    };

    var backward_button = new Element('a').setProperty('href', 'javascript:void(0);').adopt(new Element('img').setProperty('src', '/images/icons/arrow_up.png')).addEvent('click', makeClickHandler('backward')).setProperty('id', 'exhibition-timeline-button-backward');
    var forward_button = new Element('a').setProperty('href', 'javascript:void(0);').adopt(new Element('img').setProperty('src', '/images/icons/arrow_down.png')).addEvent('click', makeClickHandler('forward')).setProperty('id', 'exhibition-timeline-button-forward');

    if(div.getElement('a.right-column-more')) {
      backward_button.inject($('exhibition-timeline'), 'before').setStyles({display:'block', textAlign:'center'});
      forward_button.inject(div.getElement('a.right-column-more'), 'before').setStyles({display:'block', textAlign:'center'});
    }
  }

  window.addEvent('domready', function() {
    $$('div.expandable-right-column-list').each(function(expandableListDiv) {
      expandableListDiv.setStyle('padding-bottom', '0.5em');
      var list, label;
      if((list = expandableListDiv.getElement('ul')) && (label = expandableListDiv.getElement('span'))) {
      
        /*
        * No more icon!
        var icon = new Element('img').setProperty('src','/opencollection/images/pulsing-arrow.gif')
            .setStyle('margin-bottom', '-0.3em').setStyle('margin-left','0.3em');
        label.setStyle('cursor','pointer').adopt(icon);
        */

        var size = list.measure( function() { return this.getSize(); } );
        list.default_height = size.y;
        list.setStyles({height: 0, overflow: 'hidden', marginLeft: 0});
        label.default_text = label.get('text');
      
        label.addEvent('click', function(e) {
          var elem = new Element(e.target);
          var list = elem.getParent('div').getElement('ul');
          var is_expanded = parseInt(list.getStyle('height')) > 0;
        
          if(is_expanded) {
            list.tween('height', 0);
            label.set('text', label.default_text);
          } else {
            list.tween('height', list.default_height);
            label.set('text', 'Close');
          }
        });
      }
    });
  });

  $$('input.tag-ac').each(function(el) {

    el.addEvent('focus', function(el) { el.target.select(); } );
    
    var completer = new Autocompleter.Ajax.Json(el, 
      OPENCOLLECTION_BASE_URL + '/ac_lookup/tags.php',
      {
        postVar: 'q',
        zIndex: 200
      }
    );

  });

  $$('textarea.tag-ac').each(function(el) {

    el.addEvent('focus', function(e) { e.target.select(); } );
  
    el.addEvent('keyup', function(e) {
      var text = e.target.value;
      // var tags = /"?[^"]+"dddd
    });

  });

	if(!(navigator.userAgent.contains('iPhone') || navigator.userAgent.contains('iPod') || navigator.userAgent.contains('iPad'))) {
    $$('.thumb-block-thumb').each(function(el) {
    el.addEvent('mouseover', function(e) {
      if(e.target && e.target.getParent()) {
        var imageDiv = e.target;
        var anchorTag = imageDiv.getParent('a');
        var hoverDiv = false;
        if(!(hoverDiv = imageDiv.getNext())) {

          var hoverHeight = 30; //px
          
          if ( imageDiv.hasClass('thumb-size-150') ) {
            var hoverWidth = 150;
            var hoverTop = 150 - hoverHeight;
          }
          else if ( imageDiv.hasClass('thumb-size-140') ) {
            var hoverWidth = 140;
            var hoverTop = 140 - hoverHeight;
          }
          else {
            var hoverWidth = 50;
            var hoverTop = 50;
          }

          var hoverLeft = 0;
          var title = anchorTag.title ? anchorTag.title : 'Untitled';
          
          if(hoverWidth < 100) {
            var thumbPadding = 3;
            hoverLeft = hoverWidth + thumbPadding;

            hoverWidth = (hoverWidth + thumbPadding) * 2;
            hoverHeight = parseInt(imageDiv.getStyle('height'));
            hoverTop = 0;

						var parent = anchorTag.getParent();
						var parentSize = parent.getSize();
						var position = anchorTag.getPosition(parent);

	          var hoverTooBig = (position.x + hoverWidth + anchorTag.getSize().x) > parentSize.x;
						if(hoverTooBig && !e.target.hasClass('hover-right') && !parent.hasClass('hover-right')) {
	            hoverLeft = -1 * hoverWidth - thumbPadding;
	          }
          }

          var maxTitleLength = 50;
          if(title.length > maxTitleLength) {
            title = title.substring(0, maxTitleLength-3) + '...';
					}
					
          var hoverDiv = new Element('div').set('html', '<p>' + title + '</p>').addClass('thumb-block-hover');
          hoverDiv.setStyle('top', hoverTop + 'px');
          hoverDiv.setStyle('left', hoverLeft + 'px');
          hoverDiv.setStyle('width', hoverWidth + 'px');
          hoverDiv.setStyle('height', hoverHeight + 'px');
          hoverDiv.setStyle('font-size', '16px'); 
          hoverDiv.setStyle('line-height', '17px');
          hoverDiv.setStyle('opacity', 0);
          hoverDiv.injectAfter(imageDiv);

          anchorTag.title = '';
        }

        var maxOpacity = 0.7;
        if(parseInt(imageDiv.getStyle('width')) < 100) {
          maxOpacity = 0.9;
        }

        hoverDiv.set('tween', {duration:'short'});
        hoverDiv.tween('opacity', maxOpacity);
      }
    });

    el.addEvent('mouseout', function(e) {

      if(e.target && e.target.getParent()) {
        var imageDiv = e.target;
        if(hoverDiv = imageDiv.getNext()) {
          hoverDiv.tween('opacity', 0);
        }
      }
    });
  });
	}

  applyMainImageNavigationHandling();
});

var applyMainImageNavigationHandling = function() {
  if($('main-image')) {

    $$('.thumb-block-link').each(function(el) {
      el.addEvent('click', function(e) {
        var ev = new Event(e);

        var el = new Element(e.target);
        if(el.get('tag') == 'img') {
          el = el.getParent('a');
        }
        var id_prop = el.getProperty('id');
        if(id_prop && id_prop.length > 'thumb-block-link-'.length) {
          var id = id_prop.substring('thumb-block-link-'.length);

          var image;
          if(el.hasClass('exhibition-thumb')) {
            image = ExhibitionImage.getById(id);
          } else 
            image = ObjectImage.getById(id);

          // No javascript image data? (probably lib/arch) Just let allow link to navigate normally
          if(!image) return;

          var image_url = image.getUrl();
          if($('main-image').getProperty('src').contains(image_url)) {
            return;
          }

          var completeHandler = function(new_img) {
            $('main-image').getParent('a').setProperty('href', image.getFullUrl());
            $('main-image').getParent('a').setProperty('title', image.caption.strip_tags());

            // Update the value of the 'Image: ' line (object pages)
            var shortCaptionHolder;
            if(shortCaptionHolder = $('image-short-caption')) {
              shortCaptionHolder.set('html', image.short_caption);

              // If CUR image, the short caption will include a reveal-elements link to explain CUR images
              rewriteRevealElementLinks();
            }

            // Update any <span> elements whose id refers to an image property
            for(var k in image) {
              var el;
              if(el = $('image-' + k)) {
                el.set('html', image[k]);
              }
            }
            
            if(image['call_number']) {
              $('image-call_number').set('html', ' (' + image['call_number'] + ')');
            }

            $$('a').each(function(el) {
              if(el.getProperty('href')) {
                if(el.getProperty('href').contains('image/')) {
                  var new_url = el.getProperty('href').replace(/image\/\d+/, 'image/' + id);
                  el.setProperty('href', new_url);

                } else if(el.getProperty('href').contains('edit_photo.php?avitar_photo=')) {
                  var new_url = el.getProperty('href').replace(/edit_photo\.php\?avitar_photo=[^&]+/, 'edit_photo.php?avitar_photo=' + image.getUrl());
                  el.setProperty('href', new_url);
                }
              }
            });
          };

          new ImageTween($('main-image'), {onComplete: completeHandler}).start(image.getUrl());
          ev.stop();
        }

      });
    });
  }

};

var highlightSearchTerms = function(start_node) {

  var start_node = start_node || $$('body')[0];

  // add highlight spans before any event handlers are applied to elements 
  // because the application of highlights may overwrite said handlers
  if(/(&|\?)(referring-)?q=[^&]+/.test(window.location)) {
    var qs = new QueryString();
    var q = qs['q'] || qs['referring-q'];
    if(q) {
      q = q.replace(/\+/g,' ');
      q = q.replace(/\*/g,'');
      q = q.replace(/"/g,'');
      var terms = q.split(/ /g).include(q);
      // sort terms in reverse order by length
      terms = terms.sort(function(e1, e2) { if(e1.length>e2.length) return -1; else return 1 });
      for(var i=0;i<terms.length;i++) {
        var term = terms[i];

        var regex = new RegExp("(^|>)([^<]*)?(" + term + ")([^>]*)?($|<)","ig"); 
        var replace = '$1$2<span class="searchable-content-highlighted">$3</span>$4$5';
        var elems = start_node.getElements('.searchable-content'); // :$$('.searchable-content');
        // $$('.searchable-content').each(function(el) {
        elems.each(function(el) {
          if(el.get('html')) {
            // var highlighted_html = el.get('html').replace(regex, replace);
            var highlighted_html = el.innerHTML.replace(regex, replace);
            el.set('html', highlighted_html);
          }
        });
      }
    }

    setTimeout(function() {
      start_node.getElements('.searchable-content-highlighted').tween('background-color',['#FFFFFF','#F8DEA2']);

      $$('.searchable-content-highlighted').each(function(el) {
        var li;
        if((li = el.getParent('li')) && li.getStyle('height')!='auto' && li.reveal) {
          li.reveal();
        }
      });

    }, 100);
  }
};


window.addEvent('domready', function() {

  $$('ul.tabs').getElements('li').each(function(el) {
		var parent = el.getParent().getParent();
		
    var a = el.getElement('a');
    a.addEvent('click', function(e) {
			
      var el = new Element(e.target);
      el.blur();
			
      if(el.getProperty('id') && el.getProperty('id').indexOf('tab-') === 0) {
        var tab_id = el.getProperty('id').substring(4);
				
				parent.getElements('div.tab-content').each(function(element) {
					element.removeClass('active-tab');
				});

        var tab_content_div;
        if(tab_content_div = $('tab-content-' + tab_id)) {
          tab_content_div.addClass('active-tab');
        } else {
          var action = 'get-' + tab_id;
          if(!$('tab-content-loading')) {
            var loading_div = (new Element('div')).setProperty('id', 'tab-content-loading').addClass('tab-content-loading').inject($('content-tabs'),'after').setStyle('display','none');
          }
          $('tab-content-loading').setStyle('display','block');
          tab_content_div = (new Element('div')).addClass('tab-content').setProperty('id', 'tab-content-' + tab_id).inject('content-tabs', 'after');
          
          new Request.HTML({url: OPENCOLLECTION_BASE_URL + '/exhibitions/ajax.php', update: 'tab-content-' + tab_id}).addEvent('success', function(res) {
            $('tab-content-loading').setStyle('display','none');
            $('tab-content-' + tab_id).addClass('active-tab');


            applyLabelListTransforms();
            applyMainImageNavigationHandling();
            highlightSearchTerms($('tab-content-' + tab_id));

          }).get({id:exhibition.id, action: action});
          
        }

				parent.getElements('li.current-tab').each(function(element) {
					element.removeClass('current-tab');
				});
				$('tab-' + tab_id).addClass('current-tab');
      }

      var ev = new Event(e);
      ev.stop();
    });
  });

  highlightSearchTerms();

  var getTags = function(text) {

    var reg = /"[^"]+"|[^" ]+/gi;
    var matches = text.match(reg);
    if(matches) {
      var formatted_matches = [];
      for(var i=0;i<matches.length;i++) {
        if(matches[i] && matches[i].test(/[a-z0-9]/i)) {
          formatted_matches.push(new String(matches[i].match(/[^"]+/)).trim());
        }
      }
      matches = formatted_matches;
    } else {
      matches = [];
    }

    return matches;
  };

	var taggingInstructionsHeight;
  $$('div.tagging-instructions').each(function(el) {
	  el.setStyle('height', '0');
	  el.setStyle('overflow', 'hidden');
		var innerWrapper = el.getElement('div.tagging-instructions-inner-wrapper');
		var innerWrapperSize = innerWrapper.measure( function() { return this.getSize() } );
		taggingInstructionsHeight = innerWrapperSize.y;
  });

  // $$('textarea').each(function(el) {
  $$('.tag-input').each(function(el) {
    el.setProperty('autocomplete', 'off');

    el.addEvent('focus', function(e) {

      $$('div.tagging-instructions').each(function(el) {
        if(el.getStyle('height') != taggingInstructionsHeight + 'px') {
          var anim = new Fx.Morph(el, {duration: 700});
          anim.start({'height': [0, taggingInstructionsHeight]});
        }
      });
    });

    el.addEvent('keyup', function(e) {

      var text = el.value;
      el.suggestsDiv.empty();

      // Update next move text on tag game
      if($('tag-game-action') && $('tag-game-action').hasChild('save-tags-and-move-next')){
        $('tag-game-action').empty();
        $('tag-game-action').set('html', '<span id="disable-until-next-save">Awesome, looks like you are still working on this object.</span>');
      } else if($('tag-game-action') && $('tag-game-action').hasChild('disable-until-next-save') && text=='') {
        $('tag-game-action').empty();
        $('tag-game-action').set('html', '<a href="' + OPENCOLLECTION_BASE_URL + '/tag_game/" id="save-tags-and-move-next">I\'m done with this one. What else ya got?</a>');
      }

      el.cursor_location = el.value.length;

      var matches = getTags(el.value);
      // dbg('cursor loc: "' + el.value.substring(0, el.cursor_location) + '"');
      if(matches.length) {
        // Foreach match, remove enclosing quotes if found
        var activeTag = '' + matches[matches.length-1];


        if(el.value.substring(el.value.length - activeTag.length) == activeTag) {

          el.cursor_location = el.value.length - activeTag.length;

          var suggestions = [];

          if(typeof SUGGEST_TAGS != 'undefined') {
            for(var i=0;i<SUGGEST_TAGS.length;i++) {
              var user_tag = SUGGEST_TAGS[i];
              var max_len = Math.min(user_tag.length, activeTag.length);

              // If typed tag matches auto-complete tag exactly, don't bother showing it
              if(max_len == user_tag.length) continue;

              if(activeTag.substring(0, max_len) == user_tag.substring(0, max_len)) {

                suggestions.push(user_tag);

              }
            }
          }

          if(suggestions.length) {
            el.suggestsDiv.appendText('Suggestions: ');
          }

          for(var i=0;i<suggestions.length;i++) {
            var suggestion = new Element('a').addClass('tag-suggestion').set('html', suggestions[i].replace(/ /g, '&nbsp;')).setProperty('href', '#');
            suggestion.selected_tag_text = suggestions[i];
            suggestion.typed_tag_text = activeTag;
            suggestion.input = el;
            
            suggestion.addEvent('click', function() {
              var t = this.input.value;
              t = t.substring(0, this.input.cursor_location);
              var quote = (this.selected_tag_text.indexOf(' ') >= 0)?'"':'';
              t += quote + this.selected_tag_text + quote + ' ';
              this.input.value = t;

              this.input.focus();
            });
            el.suggestsDiv.adopt(suggestion);
            el.suggestsDiv.appendText(' ');
          }

        }
      }
    });

    if(!el.tagsDiv) {
      el.tagsDiv = new Element("div");
      el.tagsDiv.setStyle('padding-bottom', '0.3em');
      el.parentNode.insertBefore(el.tagsDiv, el);
    }

    if(!el.suggestsDiv) {
      el.suggestsDiv = new Element("div");
      el.suggestsDiv.setStyle('padding-top', '0.3em');
      el.parentNode.appendChild(el.suggestsDiv);
    }

    el.matches = {};
  });

  $$('span#catalog-description').each(function(el) {
    // If previous domready handler added highlight spans to cat. desc, don't ellipse it
    if(!el.getElement('span.searchable-content-highlighted')) {
      var t = el.get('text');
      if(t) {
        var trunc_position = 40;
        if(t.length > trunc_position) {
          var ellipse = new Element('a').setStyle('padding-left', '0.6em').setStyle('font-size', '0.9em').setStyle('font-style', 'italic').set('text', 'read more...').setProperty('href', 'javascript:void(0)');
          ellipse.addEvent('click', function(e) {
            
            var el = new Element(e.target);
            var p = el.getParent();
            p.getElements('span#catalog-description-hidden').each(function(el) { el.setStyle('display', 'inline'); el.fade('in'); });
            el.dispose();
            
          });
          var hiddenText = new Element('span').setProperty('id', 'catalog-description-hidden').setStyle('opacity', 0).setStyle('display', 'none').set('text',t.substring(trunc_position));;
          el.set('html', t.substring(0, trunc_position)).adopt(ellipse).adopt(hiddenText);
        }
      }
    }
    // el.setStyles({height:'3em', display:'block', overflow:'hidden'});
  });

  $$('p#copyright-restricted-note').each(function(el) {
    var show_button = new Element('a').setProperty('href', 'javascript:void(0);').appendText('Why is this image so small? ');
    show_button.span_node = new Element('span').set('html', el.get('html')).setStyles({'opacity': 0, 'display':'none'});
    show_button.addEvent('click', function(e) {
      if(this.span_node.getStyle('opacity') == 0) {
        this.span_node.setStyle('display', 'inline');
        this.span_node.fade('in');
      } else {
        this.span_node.fade('out');
      }
    });

    el.set('text','');
    el.adopt(show_button);
    el.adopt(show_button.span_node);
  });

  if($('top-tagger-email-alert')) {
    $('top-tagger-email-alert').getElements('input[type=submit]').each(function(el) { el.dispose(); });
    $('top-tagger-email-alert').getElements('input[type=checkbox]').each(function(el) { 
      el.addEvent('change', function(e) {
        var el = new Element(e.target);
        new Request.JSON({
          url: OPENCOLLECTION_BASE_URL + '/tag_game/',
          method: 'post'
        }).send('save_email_on_pass=1&is_ajax=1&email_on_pass=' + ($('email_on_pass').getProperty('checked')?'on':'off'));
      });
    });
  }

});

var rewriteTagDeleteLinks = function() {
  $$('a.tag-delete').each(function(el) {
    el.addEvent('click', function(e) {
      var ev = new Event(e);
      ev.stop();

      var el = new Element(e.target);

      // Look for conditions that block user from deleting tag
      var blocking_notice = false;
      // If tag owner (either logged in or anon, override other restrictions
      if(el.getParent('li').hasClass('is-tag-owner')) {

      // Prevent tags with multiple owners from being deleted
      } else if(el.getParent('li').hasClass('multiple-users-tag')) {
        blocking_notice = 'Sorry, this tag can\'t be deleted because it was added by multiple <span class="pink">Posse</span> members.';

      // Prevent non-logged-in users from deleting tags
      } else if(!user) {
        var r_url = window.location.href.substring(window.location.href.indexOf('brooklynmuseum.org/')+18);
        var item_type = 'object';
        if(window.location.href.indexOf('opencollection/archives')>0)
          item_type = 'archives image';
        if(window.location.href.indexOf('opencollection/exhibitions')>0)
          item_type = 'exhibition';
        blocking_notice = 'Join the <a href="/register/?r=' + r_url + '"><span class="pink">Posse</span></a> or <a href="/login/?r=' + r_url + '">log in</a> to delete tags on this ' + item_type + '.';
      }

      // If user can't delete tag, show notice
      if(blocking_notice) {
        if(!$('signup-login-notice-delete-tag')) {
          var notice = new Element('p').setProperty('id','signup-login-notice-delete-tag').addClass('signup-login-notice');
          notice.set('html',blocking_notice);
          var tags_ul = (new Element(e.target)).getParent('ul');
          notice.inject(tags_ul, 'after');
        }
        $('signup-login-notice-delete-tag').set('html',blocking_notice);
        (new Fx.Slide($('signup-login-notice-delete-tag'))).hide().slideIn();
        return;
      }

      var el = e.target;
      var matches = el.href.match(/tag_id=([0-9]+)/);
      if(matches) {
        var tag_id = matches[1];
        var tag_text = el.getPrevious().get('text');
        var context = 'item detail';
        var context_matches = el.href.match(/context=([^&]+)/);
        if(context_matches) {
          context = context_matches[1];
        }

        if(confirm('Are you sure you want to delete the tag ' + tag_text + '?')) {
     
          var options = {
            url: OPENCOLLECTION_BASE_URL + '/user_tags/ajax/',
            data: 'tag-action=delete&tag-id=' + tag_id + '&context=' + context,
            method: 'post', 
            onComplete: function(response) {
              if(response.success) {
                for(var i=0;i<response.tags.length;i++) {
                  var tag = response.tags[i];
                  var is_tag_owner = false;
                  var _tag;
                  var matching_tag_lis = $$('.tag-' + tag.tag_id);
                  if(_tag = matching_tag_lis.getLast()) {
                    if(_tag.hasClass('is-tag-owner')) {
                      is_tag_owner = true;
                    }
                    _tag.dispose();
                  }

                  var is_freeze_tag = window.location.href.indexOf('/freeze_tag') >= 0;
                  if(!is_tag_owner && !is_freeze_tag && $$('ul.tags')) {
                    if(!$('tag-moderation-thanks')) {
                      var thanks = (new Element('div')).setProperty('id','tag-moderation-thanks').set('html','Thanks for cleaning up!  Deleted tags will be moved into <a href="' + OPENCOLLECTION_BASE_URL + '/freeze_tag/start.php">Freeze Tag!</a> for review.  Play the game to decide a tag\'s fate!');
                      thanks.inject($$('ul.tags')[0],'after');

                      (new Fx.Slide(thanks)).slideIn();
                    }
                  }

                  // Update Tags by Posse
                  if($('posse-tags-holder')) {
                    var item_type = $('tag-item-type').getProperty('value');
                    var item_id = $('tag-item-id').getProperty('value');// object?object.id:false;
                    if(item_type && item_id && $('posse-tags-holder'))
                      $('posse-tags-holder').load(OPENCOLLECTION_BASE_URL + '/user_tags/ajax/?action=get-posse-tags-list&item_type=' + item_type + '&item_id=' + item_id);
                  }
                  // Freeze tag matches
                  if($('freeze-tag-matches')) {
                    $('freeze-tag-matches').load(OPENCOLLECTION_BASE_URL + '/user_tags/ajax/?action=get-freeze-tag-matches-list');
                  }
                }
              }
            }
          };
          var post = new Request.JSON(options);
          
          post.send();
        }
      }
      return false;
    });
  });
}

var rewriteRevealElementLinks = function() {
  // Override 'reveal' links to show/hide content via accordian
  $$('a.element-reveal').each(function(el) {
    el.setProperty('href', 'javascript:void(0);');
    el.addEvent('click', function(e) {
      var el = new Element(e.target);
      if(el.get('tag') != 'a')
        el = el.getParent('a');
      el.blur();

      // element id to be revealed is encoded in second classname: "reveal-[element id]"
      var reveal_id = reveal_div = false;
      var classes = el.get('class')?el.get('class').split(' '):[];
      for(var i=0;i<classes.length;i++) {
        if(classes[i].substring(0, "reveal-".length) == "reveal-") {
          reveal_id = classes[i].substring("reveal-".length);
          if(reveal_div = $(reveal_id))
            break;
        }
      }
      if(reveal_div) {
        // If not yet computed, compute the expanded height
        if(!reveal_div.expanded_height) {
          var original_display_style = reveal_div.getStyle('display');
          reveal_div.setStyles({display:'block',opacity:0});
          reveal_div.expanded_height = reveal_div.getSize().y; 
          reveal_div.setStyles({opacity:1, overflow:'hidden'});
          // If the div was hidden on page load it should begin collapsed
          if(original_display_style == 'none')
            reveal_div.setStyle('height','0px');
        }

        // animate
        if(reveal_div.getStyle('height') == '0px') {
          reveal_div.tween('height', reveal_div.expanded_height);
        } else  {
          reveal_div.tween('height', '0px');
        }
      }
    });
  });
};


var nav_set_data = [];
var nav_set_index;
var nav_set_preview_index;
var nav_set_key = (typeof nav_set_key == 'undefined')?false:nav_set_key;

var fetchNavSetData = function(start_index) {
  var start_index = (typeof start_index == 'undefined')?0:start_index;

  new Request.JSON({url: OPENCOLLECTION_BASE_URL + '/ajax.php?action=get-nav-set-data&start_index=' + start_index + (nav_set_key?('&set_key=' + nav_set_key):''), method: 'get', onComplete: function(res) {
    for(var i=0;i<res.length;i++) {
      nav_set_data[res[i].i] = res[i];
    }

    $('nav-set-next-prev').setStyle('visibility','visible');

    if(nav_set_preview_index == nav_set_data.length-1 || nav_set_index==nav_set_data.length-1) {
      $('nav-set-next').fade(0.5);
    }
  }}).get();
}

var advanceNavSetPreview = function(increment) {
  if(nav_set_preview_index + increment == nav_set_index) increment *= 2;

  if(nav_set_preview_index + increment < 0) return;
  if(nav_set_preview_index + increment >= nav_set_total) return;
  
  var next_item = nav_set_data[nav_set_preview_index+increment];
  if(next_item) {

    nav_set_preview_index += increment;

    var qs = new QueryString();
    var referring_q = qs['q'] || qs['referring-q'];
    var href = OPENCOLLECTION_BASE_URL + '/' + (next_item.type=='archivesimage'?'archives/image':(next_item.type + 's')) + '/' + next_item.id + (nav_set_id?'/set/' + nav_set_id:'') + ($defined(nav_set_key)?('/set/' + nav_set_key):'') + (referring_q?'?referring-q=' + referring_q:'');

    if(next_item.image_filename) {
      var item_type = next_item.type.replace('image','');
      var img_subfolder = item_type=='artist'?'objects':(item_type + (item_type.substr(item_type.length-1,1)!='s'?'s':''));
      var new_src = OPENCOLLECTION_BASE_URL + '/images/' + img_subfolder + '/size2_sq/' + next_item.image_filename;
      new ImageTween($('nav-set-preview-image'), {transition_type:'fade', onComplete: function(img) {
        $('nav-set-preview-image').getParent('a').setProperty('title', next_item.title?next_item.title:'Untitled').setProperty('href', href);
        $('nav-set-preview-label').set('html', (nav_set_preview_index+1) + ' / ' + (new Number(nav_set_total)).numberFormat(0) + ': ' + (next_item.caption?next_item.caption:'Untitled'));
        highlightSearchTerms($('nav-set-preview'));
      }
      }).start(new_src);
      // new SlideTween($('nav-set-preview-image'), {direction: 'east'}).start(new Element('img').setProperty('src', new_src));

      $('nav-set-preview-no-image').setStyle('display', 'none');
      $('nav-set-preview-image').setStyle('display', 'block');

    } else {
      $('nav-set-preview-no-image').set('text', next_item.title);
      $('nav-set-preview-image').getParent('a').setProperty('title', next_item.title).setProperty('href', href);
      $('nav-set-preview-label').set('html', (nav_set_preview_index+1) + ' / ' + (new Number(nav_set_total)).numberFormat(0) + ': ' + (next_item.caption?next_item.caption:'Untitled'));
      
      $('nav-set-preview-no-image').setStyle('display', 'inline');
      $('nav-set-preview-image').setStyle('display', 'none');
      highlightSearchTerms($('nav-set-preview'));
    }

    if(nav_set_preview_index==0 || (nav_set_index==0&&nav_set_preview_index==1)) {
      $('nav-set-previous').fade(0.5);
    } else {
      $('nav-set-previous').fade('show');
    }

    if(nav_set_preview_index==nav_set_data.length-1 || (nav_set_preview_index==nav_set_data.length-2 && nav_set_index==nav_set_data.length-1)) {
      $('nav-set-next').fade(0.5);
    } else {
      $('nav-set-next').fade('show');
    }
    
    // The dom isn't quite ready, so delay a bit before highlighting
    // setTimeout(function() { highlightSearchTerms($('nav-set-preview')); }, 100);
  }

  if(nav_set_preview_index>0 && !nav_set_data[nav_set_preview_index-1]) {
    fetchNavSetData(Math.max(0, nav_set_preview_index-NAV_SET.WIDGET_FETCH_SIZE));
  }
  if(nav_set_preview_index<nav_set_total-1 && !nav_set_data[nav_set_preview_index+1]) {
    fetchNavSetData(nav_set_preview_index+1);
  }
}

window.addEvent('domready', function(e) {

  rewriteRevealElementLinks();
  rewriteTagDeleteLinks();

  if($('nav-set-next')) {
    if(!nav_set_data.length)
      fetchNavSetData(Math.max(0, nav_set_index-Math.round(NAV_SET.WIDGET_FETCH_SIZE/2)));

    $('nav-set-next').addEvent('click', function(e) {
      advanceNavSetPreview(1);
      new Element(e.target).blur();
    });

    $('nav-set-previous').addEvent('click', function(e) {
      new Element(e.target).blur();
      advanceNavSetPreview(-1);
    });

    if(nav_set_index == 0) {
      $('nav-set-previous').fade(0.5);
    }
  }

  $$('#opencollection-top-navigation').each(function(el) {

    var expanded_on_load = true;

    var cookie_pref = 'true';
    if((cookie_pref = Cookie.read('oc_top_nav_expanded')) && cookie_pref=='false') {
      expanded_on_load = false;
    }

    // If we determine user prefers that it be collapsed, collapse it now 
    // (this is redundant because a server-side cookie check does the same thing in ../inc/left_nav..)
    if(!expanded_on_load) {
      $('opencollection-top-nav-secondary').setStyle('height', 0);
    }

    var button = new Element('a').setProperty('href', 'javascript:void(0);').setProperty('id', 'opencollection-nav-expand');
    if(expanded_on_load) {
      button.adopt(new Element('span').appendText('collapse'));
    } else {
      //$('opencollection-top-nav-secondary').setStyle('height', '0px');
      button.adopt(new Element('span').appendText('expand'));
    }
    button.adopt(new Element('img').setProperty('src', OPENCOLLECTION_BASE_URL + '/images/pulsing-arrow.gif'));
    button.addEvent('click', function(e) {
      var el = $('opencollection-nav-expand');
      var secondary_nav = $('opencollection-top-nav-secondary');
      var anim = new Fx.Morph(secondary_nav, {duration: 700});
      if(parseInt(secondary_nav.getStyle('height')) > 0) {
        anim.start({'height': [secondary_nav.getStyle('height'), 0]});
        el.getChildren('span').each(function(el) { el.set('text', 'expand'); });
        Cookie.write('oc_top_nav_expanded', 'false', {path: '/'});

      } else {
        anim.start({'height': [0, 28]});
        el.getChildren('span').each(function(el) { el.set('text', 'collapse'); });
        Cookie.write('oc_top_nav_expanded', 'true', {path: '/'});
      }
      e.target.blur();
    });
    el.insertBefore(button, el.getFirst());
  });

  if($('search-only-exhibitions')) {
    var updateSearchTagsOnly = function(e) {
      if($('search-scope-tags-only')) {
        var el = $('search-only-exhibitions');
        if(el.checked) {
          $('search-scope-tags-only').setProperty('disabled', 'disabled');
        } else {
          $('search-scope-tags-only').removeProperty('disabled');
        }
      }
      if($('search-scope-all')) {
        $('search-scope-all').setProperty('checked', 'checked');
      }
    };
    updateSearchTagsOnly();
    $('search-only-exhibitions').addEvent('change', updateSearchTagsOnly);
  }

  $$('form.tag-form').each(function(el) {
    el.addEvent('submit', function(e) {

      var options = {
        url: OPENCOLLECTION_BASE_URL + '/user_tags/ajax/', 
        data: el.toQueryString(),
        method: 'post', 
        onComplete: function(response) {
          if(response.success) {
            var is_freeze_tag = window.location.href.indexOf('/freeze_tag') >= 0;

            for(var i=0;i<response.tags.length;i++) {
              var tag = response.tags[i];
              var uls = $$('.tags');
              if(is_freeze_tag) {
                uls = [$('freezetag-add-tag-list')];
              }
              uls.each(function(ul) {

                // Add Tag li under 'Tags'
                var li = new Element('li').addClass('tag-' + tag.tag_id).addClass('is-tag-owner');
                li.set('html', '<a href="' + OPENCOLLECTION_BASE_URL + '/tags/' + tag.tag_text + '" title="Items tagged ' + tag.tag_text + '"' + ($('tag-game-action')?' target="_blank"':'') + '>' + tag.tag_text + '</a>' + ' <a href="' + OPENCOLLECTION_BASE_URL + '/user_tags/delete/?tag_id=' + tag.tag_id + '" class="tag-delete">[x]</a>');
                ul.adopt(li);

                // Update Tags by Posse
                //var item_type = $('tag-item-type').getProperty('value');
                var item_type = el.elements['tag-item-type'].getProperty('value');
                // var item_id = object?object.id:false;
                //var item_id = $('tag-item-id').getProperty('value');// object?object.id:false;
                var item_id = el.elements['tag-item-id'].getProperty('value');
                if(item_type && item_id && $('posse-tags-holder'))
                  $('posse-tags-holder').load(OPENCOLLECTION_BASE_URL + '/user_tags/ajax/?action=get-posse-tags-list&item_type=' + item_type + '&item_id=' + item_id);

                if(is_freeze_tag && $('inline-tag-form')) {
                  $('inline-tag-form').slide('in');
                }
              });
              // Update next move text on tag game
              if($('tag-game-action') && !is_freeze_tag){
                $('tag-game-action').empty();
                $('tag-game-action').set('html', '<a href="' + OPENCOLLECTION_BASE_URL + '/tag_game/" id="save-tags-and-move-next">I\'m done with this one. What else ya got?</a>');
              }
              el.elements['tag-text'].value = '';
            }
          } else {
            alert("Error saving tag: " + response.error);
          }

          rewriteTagDeleteLinks();
        }
      };
      var post = new Request.JSON(options);
      
      if(el.elements['tag-text'].getProperty('value') != el.elements['tag-text'].tip) {
        post.send();
      }

      var ev = new Event(e);
      ev.stop();
      return false;
    });

    setTextInputTip(el.elements['tag-text'], 'enter your own tags');
  });


  $$('.year-range').each(function(el) {

    var type = '';

    var year_begin_input, year_end_input;
    var inputs = el.getChildren();
    for(var i=0;i<inputs.length;i++) {
      inputs[i].type = 'hidden';

      if(inputs[i].name.indexOf('object') >= 0) {
        type = 'object';

      } else if(inputs[i].name.indexOf('exhibition') >= 0) {
        type = 'exhibition';
      }

      if(inputs[i].name.indexOf('end') > 0) {
        year_end_input = inputs[i];

      } else if(inputs[i].name.indexOf('begin') > 0) {
        year_begin_input = inputs[i];
      }
    }

    var year_steps;
    switch(type) {
      case 'object':
        year_steps = OBJECT_SEARCH_YEAR_MAX - OBJECT_SEARCH_YEAR_MIN;
        break;
      case 'exhibition':
        year_steps = EXHIBITION_SEARCH_YEAR_MAX - EXHIBITION_SEARCH_YEAR_MIN;
        break;
    }

    el.empty();
    el.adopt(year_begin_input);
    el.adopt(year_end_input);

    el.addClass('multi-slider');

    var first_knob = new Element('div').addClass('multi-slider-knob').setStyle('position', 'relative').setStyle('left', '0').setStyle( 'top', '-1px' );
    var second_knob = new Element('div').addClass('multi-slider-knob');
   // etStyle('position', 'relative').setStyle('top', '-1px' );
    el.adopt(first_knob);
    el.adopt(second_knob);

    var slider = new MultiSlider(el, first_knob, { 
      steps: year_steps, 
      knobheight: 23, 
      onChange: function(step){
        var min_year = this.min_value + step.minpos;
        var max_year = this.min_value + step.maxpos;

        this.year_begin_input.value = min_year;
        this.year_end_input.value = max_year;

        this.label.setRange(min_year, max_year);
      }
    }, second_knob);


    slider.year_begin_input = year_begin_input;
    slider.year_end_input = year_end_input;

    var label = new Element('div').setStyle('position', 'relative').setStyle('bottom', '25px');
    label.showSuffix = true;
    label.setRange = function(min_year, max_year) {

      var showSuffix1 = this.showSuffix && (min_year < 0 || max_year < 0);
      var showSuffix2 = this.showSuffix;

      var min_year_display = min_year < 0?(Math.abs(min_year) + " BCE"):(min_year + (showSuffix1?" CE":''));
      var max_year_display = max_year < 0?(Math.abs(max_year) + " BCE"):(max_year + (showSuffix2?" CE":''));

      this.set('text',min_year_display + ' to ' + max_year_display);
    }
    el.adopt(label);

    slider.label = label;

    first_knob.setStyle( 'left', '-1px' );

    var year_steps;
    switch(type) {
      case 'object':
        slider.min_value = OBJECT_SEARCH_YEAR_MIN;
        slider.max_value = OBJECT_SEARCH_YEAR_MAX;
        slider.label.setRange(OBJECT_SEARCH_YEAR_MIN, OBJECT_SEARCH_YEAR_MAX);
        break;
      case 'exhibition':
        slider.min_value = EXHIBITION_SEARCH_YEAR_MIN;
        slider.max_value = EXHIBITION_SEARCH_YEAR_MAX;
        slider.label.showSuffix = false;
        slider.label.setRange(EXHIBITION_SEARCH_YEAR_MIN, EXHIBITION_SEARCH_YEAR_MAX);
        break;
    }

  });

  // For XHTML compliance we use rel="new_window" in place of target="_blank"
  $$('a[rel=new_window]').each(function(el) {
    el.setProperty('target', '_blank');
  });
});


var setTextInputTip = function(el, tip) {
  el.addClass('text-input-tip-active');
  el.setProperty('value', tip);

  el.tip = tip;

  el.addEvent('focus', function(e) {
    if(e && e.target) {
      try {

        if(el.getProperty('value') == el.tip) {
          el.removeClass('text-input-tip-active');
          el.setProperty('value', '');
        }
      } catch(e) {
      }
    }
  });

  el.addEvent('blur', function(e) {
    if(e && e.target) {
      if(el && el.getProperty('value') == '') {
        el.addClass('text-input-tip-active');
        el.setProperty('value', el.tip);
      }
    }
  });
}

var applyShareByEmailAjaxRewrite = function() {
  $$('#opencollection-share-by-email').each(function(el) {
    el.addEvent('submit', function(e) {

      var ev = new Event(e);
      ev.stop();

      var f = $(e.target);

      var options = {
        url: OPENCOLLECTION_BASE_URL + '/share/ajax/', 
        method: 'post', 
        onSuccess: function(response) {
          if(response.success) {
            $('opencollection-share-by-email-message').set('html', 'Your message has been sent');
            $('opencollection-share-by-email').fade('out');
            $('opencollection-share-by-email-message').adopt(new Element('a').set('text', 'Click here to send this to someone else').setProperty('href', 'javascript:void(0);').addEvent('click', function() { 
              $('opencollection-share-by-email').getElements('input[type=text]').each(function(el) {
                el.value = '';
              });
              $('opencollection-share-by-email').fade('in');
              $('opencollection-share-by-email-message').set('html', 'Enter another friend\'s email address:');
            }).set('styles', {display:'block','margin-top':'1em'}));

          } else {
            $('opencollection-share-by-email-message').set('html', 'There was an error sending your message: <br/>').adopt(new Element('span').setStyle('color', '#900').set('text', response.message));
          }
        }
      };

      var item_type = f.getElement('input[name=item_type]').value;
      var item_id = f.getElement('input[name=item_id]').value;
      var message = f.getElement('textarea[name=message]').value;
      var recipient = f.getElement('input[name=recipient]').value;

      new Request.JSON(options).post({item_type: item_type, item_id: item_id, message: message, recipient: recipient});

      return false;
    });
  });
}

window.addEvent('domready', applyShareByEmailAjaxRewrite);


/* comments */

window.addEvent('domready', function(){

	$$('div.comment-question').each(function(question) {	
		question.getElements('p').each(function(paragraph) {
			paragraph.setStyle('display', 'none');
		});
		
		question.getElement('h4').addEvent('click', function(event) {
			event.preventDefault();
			question.getElements('p').each(function(paragraph) {
				toggleDisplay(paragraph);
				//paragraph.setStyle('display', 'block');
			});
		});
	});

	if($defined($('comment-add'))) {
		var comment_add = $('comment-add');
		var comment_clickthrough = $('comment-clickthrough');
		var comment_form = $('comment-form');
		
		comment_add.setStyle('display', 'block');
		comment_clickthrough.setStyle('display', 'none');
		comment_form.setStyle('display', 'none');
		
		comment_add.addEvent('click', function(event) {
			event.preventDefault();
			comment_add.setStyle('display', 'none');
			comment_clickthrough.setStyle('display', 'block');
			$('comment-feedback-block').setStyle('height', '0px');
			$('subscribe-feedback-block').setStyle('display', 'none');
		});
		
		$('comment-add-two').addEvent('click', function(event) {
			event.preventDefault();
			comment_clickthrough.setStyle('display', 'none');
			comment_form.setStyle('display', 'block');
		});
	}

  if($defined($('comment-text'))) {
		
    var item_type_name = $('comment-item-type').get('value').replace('_', ' ');
    setTextInputTip($('comment-text'), 'comment on this ' + item_type_name);

    if($('comment-valuation-warning')) {
      $('comment-text').addEvent('focus', function(e) {
        if($('comment-valuation-warning').getStyle('display') != 'block') {
          $('comment-valuation-warning').setStyle('display','block');
          (new Fx.Slide($('comment-valuation-warning'))).hide().slideIn();
        }
      });
    }
  } 
	
  if($defined($('see-all-comments'))) {
    $('see-all-comments').addEvent('click', function(e) {
      if($('all-comments').getStyle('display') != 'block') {
        var win_scroll_height = window.getScroll()['y'];
        var text_top = $('main-text').getCoordinates()['top'];
        if(win_scroll_height > text_top) {
          var diff = win_scroll_height - text_top;
          $('all-comments').setStyle('top', (diff+5)+'px');
        } else {
          $('all-comments').setStyle('top', '0px');
        }
        $('all-comments').setStyle('display','block');
      } else {
        $('all-comments').setStyle('display','none');
      }
    });

    $('all-comments-close').addEvent('click', function(e) {
      $('all-comments').setStyle('display','none');
    });
  }

  if($defined($('comment-form'))) {
    $('comment-feedback-block').setStyle('height','0px');
    $('comment-submit-button').addEvent('click', function(e) {
			e.preventDefault();
  		e.stop();

      var args = {
        'comment_text': 			$('comment-text').value,
        'comment_item_type': 	$('comment-item-type').value,
        'comment_item_id': 		$('comment-item-id').value
      };
      if($defined($('comment-user-name'))) {
        args['comment_user_name'] = $('comment-user-name').value;
      }
      if($defined($('comment-email'))) {
        args['comment_email'] = $('comment-email').value;
      }

			var r = new Request.JSON({url: '/opencollection/comments/ajax.php', secure: false, onComplete: function(result) {
        var subscribe_fx = new Fx.Morph($('comment-subscribe-block'), {transition: Fx.Transitions.Sine.easeOut});
				if(r.success) {
          if($('comment-valuation-warning')) {
            (new Fx.Slide($('comment-valuation-warning'))).hide();
          }

          var textarea = $('comment-text');
          textarea.value = 'comment on this object';
					textarea.addClass('text-input-tip-active');		// if the user comments again, the color
																												// of the "comment on this object" text
																												// will be grey.

          if($defined($('comment-block'))) {
            $('comment-block-container').setStyle('display','block');
          }
       
					$('exclude-comment-id').setProperty('value', r.comment_id);
          
					var thank_fx = new Fx.Morph($('comment-feedback-block'), {transition: Fx.Transitions.Sine.easeOut});
          var thx_text = '<p>Thank you for your comment. Comments are moderated and will be displayed shortly.</p>';
					
					if($('comment-feedback-block').getStyle('height') != '0px') {
            thank_fx.start({'height': [$('comment-feedback-block').getStyle('height'), 0]}).chain(function(){
              $('comment-feedback-block').set('html', thx_text);
              var fb_size = $('comment-feedback-block').getScrollSize();
              thank_fx.start({'height': [0,fb_size.y]});
            });
            subscribe_fx.start({'height': [$('comment-feedback-block').getStyle('height'), 0]});
          } else {
            $('comment-feedback-block').set('html', thx_text);
            var fb_size = $('comment-feedback-block').getScrollSize();
            thank_fx.start({'height': [0, fb_size.y]});
          }

					$('subscribe-feedback-block').setStyle('display', 'block');
					$('subscribe-feedback-block').set('html', r.subscribe_message);
					
					// Return the comments tab to its original state
					$('comment-form').setStyle('display', 'none');
					$('comment-add').setStyle('display', 'block');
					
        } else {
          var comment_error = result.comment_error ? result.comment_error : 'Please enter text into the comment box before submitting your comment.';
          $('comment-feedback-block').set('html', '<p>' + comment_error + '</p>');
          var thank_fx = new Fx.Morph($('comment-feedback-block'), {transition: Fx.Transitions.Sine.easeOut});

					var current_feedback_height = $('comment-feedback-block').getStyle('height');
          if(current_feedback_height == '0px'){
            var fb_size = $('comment-feedback-block').getScrollSize();
            thank_fx.start({'height': [0,fb_size.y]});
            //var sub_size = $('comment-subscribe-block').getScrollSize();
            //subscribe_fx.start({'height': [0,sub_size.y]});
          } else {
						var fb_size = $('comment-feedback-block').getScrollSize();
            thank_fx.start({'height': [current_feedback_height,fb_size.y]});
					}
        } // end if(result.success=='true')
			}}).get(args);
		});
	} // end comment-form code
	
  applyLabelListTransforms();
});

var applyLabelListTransforms = function() {
  $$('a.label-more-link').each(function(el) {
    
    var li = el.getParent('li');
    li.toggle = function() {
      var expanded_height = (li.getElement('div').getSize().y + 30) + 'px';
      if(this.li.getStyle('height') != expanded_height) {
        this.li.store('contracted_height', this.li.getStyle('height'));
        this.li.tween('height', this.li.getStyle('height'), expanded_height);
        this.li.getElement('a.label-more-link').set('text', 'less');
      } else {
        this.li.tween('height', this.li.getStyle('height'), this.li.retrieve('contracted_height'));
        this.li.getElement('a.label-more-link').set('text', 'more');
      }
    
    }; 
    el.li = li;
    el.addEvent('click', li.toggle);
    
  });
}

function favorite(action, iid, itype){
  var args = {
    'action': action,
    'item_id': iid,
    'item_type': itype
  }
  var r = new Request.JSON({url: '/opencollection/favorites/ajax.php', secure: false, onComplete: function(res){
      if(res.success){
        //$('favorite-button').setStyle('font-style', 'italic');
        if(res.result == 'added'){
          $('favorite-button').set('html','<a href="javascript:favorite(\'remove-favorite\', '+iid+', \''+itype+'\');"><img src="/images/icons/favorite_icon.png" alt=""/> In My Favorites</a>');
        }else if(res.result == 'removed'){
          $('favorite-button').set('html','<a href="javascript:favorite(\'add-favorite\', '+iid+', \''+itype+'\');"><img src="/images/icons/favorite_icon.png" alt=""/> Favorite</a>');
        }
      }else{
        alert(res.result);
      }
    }
  }).get(args);
}

function add_to_set(){
  $('add-to-sets-set-list').setStyle('display', 'block');
}

function create_new_set(){
  $('available-sets').setStyle('display', 'none');
  $('choose-a-set').setStyle('display', 'none');
  $('view-user-sets-msg').setStyle('display', 'none');
  $('create-a-set').setStyle('display', 'block');
  $('make-a-new-set').setStyle('display', 'block');
}

function hide_set_list(){
  $('add-to-sets-set-list').setStyle('display', 'none');
  if($defined($('make-a-new-set'))){
    $('make-a-new-set').setStyle('display', 'none');
  }
  if($defined($('create-a-set'))){
    $('create-a-set').setStyle('display', 'none');
  }
  if($defined($('choose-a-set'))){
    $('choose-a-set').setStyle('display', 'block');
  }
  if($defined($('available-sets'))){
    $('available-sets').setStyle('display', 'block');
  }
}

function close_pop() {
	$('login-pop').setStyle('display', 'none');
}

function login_pop(action) {
  var pop = $('login-pop');

  var r_url = window.location.href;
  var login_url = '/login/?r=' + escape(r_url);
  var register_url = '/register/index.php?r=' + escape(r_url);

  if(pop.getStyle('display') == 'none'){
    var html = '<a class="right" href="javascript:close_pop()" id="pop-close"><img src="/images/close_button.png" /></a><br />';
    if(action == 'favorite'){
      html += '<p class="popup-text">Want to favorite this object? Please join the <a href="' + register_url + '"><span class="pink">Posse</span></a> or <a href="' + login_url + '">log in</a>.</p>';
      var pos = $('favorite-button').getPosition();
    }else if(action == 'avitar'){
      html += '<p class="popup-text">Want to add this image as your avatar? Please join the <a href="' + register_url + '"><span class="pink">Posse</span></a> or <a href="' + login_url + '">log in</a>.</p>';
      var pos = $('avitar-button').getPosition();
    }
  
    pop.set('html', html);
    pop.setStyle('left', 200);
    pop.setStyle('top', pos['y']-455 );
    
    pop.setStyle('display','block');
  }else{
    pop.setStyle('display','none');
  }
}

function toggle_posse_tags(ul_number){
    if(posseFxOpen==0 && allowSlide){
      posseFxArray[ul_number].toggle();
      posseFxOpen = ul_number;
      allowSlide = false;
    } else if(posseFxOpen==ul_number && allowSlide) {
      posseFxArray[ul_number].toggle();
      posseFxOpen = 0;
      allowSlide = false;
    } else if (allowSlide) {
      posseFxArray[posseFxOpen].toggle();
      posseFxArray[ul_number].toggle();
      posseFxOpen = ul_number;
      allowSlide = false;
    }
}



var ImageTween = new Class({
  Implements: Options,

  options: {
    tween_dimensions: true,
    transition_type: 'fade',
    z_index: 1000,
    onComplete: function() {}
  },

  initialize: function(img, options) {
    this.setOptions(options);
    this.img = img;

    // getCoordinates seems to fail in IE6, so if coords can't be determined, simply hide and fade in
    if(this.img.getCoordinates().left == 0) {
      this.options.transition_type = 'fade-in';

    } else {
      if(!this.img.tween_holder) {
        this.img.tween_holder = new Element('div').setStyles($extend(this.img.getStyles(), this.img.getCoordinates())).setStyle('position','absolute');

        this.img.overlay_img = this.img.clone().setStyles({
          position:'relative',
          zIndex:this.options.z_index
        }).fade('hide');
        document.body.adopt(this.img.tween_holder);
        this.img.tween_holder.adopt(this.img.overlay_img);
      }
      // tween-holder div is hidden after animation to prevent it from blocking 
      // click events on elements beneath it. So make sure it's shown.
      this.img.tween_holder.setStyle('display','block');
    }

    if(this.img.loading_div) {
      this.loading_div = this.img.loading_div;
    } else {
      var loading_div_style = $extend(this.img.getCoordinates(), {position:'absolute',zIndex:this.options.z_index+1,backgroundColor:'#FFF'});
      // this.img.loading_div = this.loading_div = (new Element('div').set('html', 'Loading...')).fade('hide').inject(document.body, 'bottom');
      this.img.loading_div = (new Element('div')).set('html', 'Loading...').setStyle('opacity', 0);
      this.loading_div = this.img.loading_div;
      document.body.adopt(this.img.loading_div);
      this.loading_div.default_height = 20;
      loading_div_style.height = this.loading_div.default_height + 'px';
      this.loading_div.setStyles(loading_div_style)
    }
    var loading_div_top = this.img.getCoordinates().top + this.img.getCoordinates().height - this.loading_div.default_height;
    this.loading_div.setStyle('top', loading_div_top + 'px');
  },

  start: function(end_src) {
    this.loading_div.fade(0.5);
    
    if(this.options.transition_type == 'fade-in') {
      new Asset.image(end_src, {
        onload: function(new_img) { 
          this.img_tween.loading_div.fade('out');

          this.img = this.img_tween.img;

          this.img.fade('hide');
          this.img.src = new_img.src;
          this.img.fade('in');

          this.img_tween.options.onComplete(this.img)
        }
      }).img_tween = this;

    } else if(this.options.transition_type == 'fade') {
      new Asset.image(end_src, {
        onload: function(new_img) { 
          this.img_tween.loading_div.fade('out');

          this.img = this.img_tween.img;

          this.img.overlay_img.setProperty('src', this.img.getProperty('src'));
          this.img.overlay_img.fade('show');
          this.img.fade('hide');

          var prev_width = this.img.width;
          var prev_height = this.img.height;
          this.img.setProperty('src', new_img.getProperty('src'));

          if(this.img_tween.options.tween_dimensions) {
            new Fx.Morph(this.img.overlay_img).start({width: [prev_width, new_img.width], height: [prev_height, new_img.height]});
            new Fx.Morph(this.img).start({width: [prev_width, new_img.width], height: [prev_height, new_img.height]});
          }

          // Hide tween-holder div after animation completes to prevent it from
          // blocking click events on elems beneath it (e.g. thumb links)
          this.img.overlay_img.set('tween', {onComplete: function() { this.element.getParent('div').setStyle('display','none'); }});
          this.img.overlay_img.fade('out');
          this.img.fade('in');

          this.img_tween.options.onComplete(this.img)
        }
      }).img_tween = this;
    }
  },

  applyStyleClosure: function(el, styles) {
    console.log('returning closure for %o', el);
    return function() {
      el.setStyles(styles);
    };
  }
});

/*
 *  Replaces an element with another element using a sliding effect
 *  Usage: 
 *    new SlideTween(original_elem, {direction:'west'}).start(replacing_elem);
 */
var SlideTween = new Class({
  Implements: Options,

  options: {
    tween_dimensions: true,
    direction: 'north',
    z_index: 1000,
    onComplete: function() {}
  },

  initialize: function(elem, options) {
    this.setOptions(options);
    this.elem = elem;

    var size = this.elem.getSize();
    this.container = new Element('div');
    this.container.setStyle('width', size.x);
    this.container.setStyle('height', size.y);
    this.container.setStyle('overflow', 'hidden');
    this.container.replaces(this.elem);
    this.container.adopt(this.elem);
  },

  start: function(replace_elem) {
    if(this.options.direction == 'north') {
      var size = this.elem.getSize();
      this.container.adopt(replace_elem);
      this.elem.tween('margin-top', -1*size.y);

    } else if(this.options.direction == 'south') {
      // Elem must be in DOM to get size
      this.elem.getParent().adopt(replace_elem);
      var size = replace_elem.getSize();
      replace_elem.setStyle('margin-top', -1*size.y);
      this.container.grab(replace_elem, 'top');
      replace_elem.tween('margin-top', 0);

    } else if(this.options.direction == 'east') {
      this.elem.getParent().adopt(replace_elem);
      var size = replace_elem.getSize();
      replace_elem.setStyles({position: 'relative', width: size.x, left: -1*size.x});
      this.container.grab(replace_elem, 'top');
      this.elem.setStyles({position: 'relative', clear:'both',top: -1*size.y});
      this.elem.tween('left', size.x);
      replace_elem.tween('left', 0);

    } else if(this.options.direction == 'west') {
      this.elem.getParent().adopt(replace_elem);
      var size = this.elem.getSize();
      replace_elem.setStyles({position: 'relative', clear:'both', width: size.x, left: size.x, top: -1*this.elem.getSize().y});
      this.elem.setStyles({position: 'relative', width: size.x});
      this.container.adopt(replace_elem);
      replace_elem.tween('left', 0);
      this.elem.tween('left', -1*size.x);
    }

    if(this.options.tween_dimensions) {
      var size = replace_elem.getSize();
      var _slide_tween = this;
      new Fx.Morph(this.container, {
        onComplete: function() { 
          _slide_tween.elem = replace_elem;
          _slide_tween.elem.setStyles({position: 'static'});
          _slide_tween.elem.replaces(_slide_tween.container);
        }
      }).start({width: size.x, height: size.y});
    }
  }
});



String.implement({
  strip_tags: function() {
    return this.replace(/(<\/?[^>]+>)/gi, '');
  }
});

//var console = (typeof console == 'undefined')?{log:function(){}}:console;

var QueryString = new Class({ 
  initialize: function() { 
    $A(location.search.replace(/^\?/,'').split('&')).each(function(s){ 
      this[s.split('=')[0]] = unescape(s.split('=')[1]); 
    }.bind(this));
  }
});



Number.implement({

  /*
  Property: numberFormat
    Format a number with grouped thousands.

  Arguments:
    decimals, optional - integer, number of decimal percision; default, 2
    dec_point, optional - string, decimal point notation; default, '.'
    thousands_sep, optional - string, grouped thousands notation; default, ','

  Returns:
    a formatted version of number.

  Example:
    >(36432.556).numberFormat()  // returns 36,432.56
    >(36432.556).numberFormat(2, '.', ',')  // returns 36,432.56
  */

  numberFormat : function(decimals, dec_point, thousands_sep) {
    decimals = Math.abs(decimals) + 1 ? decimals : 2;
    dec_point = dec_point || '.';
    thousands_sep = thousands_sep || ',';
  
    var matches = /(-)?(\d+)(\.\d+)?/.exec((isNaN(this) ? 0 : this) + ''); // returns matches[1] as sign, matches[2] as numbers and matches[3] as decimals
    var remainder = matches[2].length > 3 ? matches[2].length % 3 : 0;
    return (matches[1] ? matches[1] : '') + (remainder ? matches[2].substr(0, remainder) + thousands_sep : '') + matches[2].substr(remainder).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep) + 
        (decimals ? dec_point + (+matches[3] || 0).toFixed(decimals).substr(2) : '');
  }

});

/*
*/
// Archives and Collection hub blog posts:

/*
 * DEP'd in favor of lightbox
window.addEvent('domready', function() {
  $$('p.zipper a').each(function(link){
    return;
    link.addEvent('click', function(e) {
      var ev = new Event(e);
      ev.stop();

      // Hide any posts currently shown
      $$('.full-blog-post').setStyle('display','none');

      // Determine numeric index of post in sidebar
      var index = this.getParent('p').getProperty('id').substring("zipper-".length);

      post = $('full-blog-post-' + index);
      if(post.getStyle('display')=='none'){

        var win_scroll_height = window.getScroll()['y'];
        var text_top = $('main-text').getCoordinates()['top'];
        if(win_scroll_height > text_top){
          var diff = win_scroll_height - text_top;
          post.setStyle('top', (diff+20)+'px');
        }else{
          post.setStyle('top', '0px');
        }

        post.setStyle('display','block');
      } else {
        post.setStyle('display','none');
      }
    });
  });
      
  $$('.close-blog-post').each(function(item){
    item.addEvent('click', function(){
      post = this.getParent();
      if(post.getStyle('display')=='none'){
        post.setStyle('display','block');
      } else {
        post.setStyle('display','none');
      }
    });
  });

  $$('.full-blog-post').each(function(item){
    images = item.getChildren('img');
    images.each(function(item){
      if(item.getProperty('width') > 450 ){
        item.addClass('needs-to-be-smaller');
      }
    });
  });
});
*/

/*
 * Highlights slider on department home
 *
 */

var highlight_slideshow;
var highlight_total;
window.addEvent('domready', function() {
  if( $('highlight_container') != null ) 
    $('highlight_container').setStyle('display', 'block');

  if( $('highlight_ticker_nav') != null ) {
  	highlight_slideshow = new SlideShow('highlight_container', {
	  	selector: '.highlight_content'
		  //transition: 'pushLeft'
  	});

    highlight_total = $('highlight_ticker').getElements('a').length;

	  $('highlight_prev_arrow').addEvent('click', function() {
		  highlight_slideshow.show('previous', {transition: 'pushRight', duration: '600'});
      updateCount( highlight_slideshow.index );
    });

  	$('highlight_next_arrow').addEvent('click', function() {
	  	highlight_slideshow.show('next', {transition: 'pushLeft', duration: '600'});
      updateCount( highlight_slideshow.index );
  	});
  
    function updateCount( index ) {
      var start = 0;
      var text = '';
    
      if ( index != 0 )
        start = index*12;
      if ( start+12 < highlight_total )
        text = ((start == 0 )?(start+1):start) + ' - ' + (start+12);
      else
        text = start + ' - ' + highlight_total;

      $('highlights_count').set('text', text );
    }
  }
});


window.addEvent('domready', function() {
  if ( $('wordcloud') != null ) {
    $('wordcloud').addEvent( 'mouseover', function() {
      $('wordcloud').setStyle('border-color', '#08b' );
    });
    $('wordcloud').addEvent( 'mouseout', function() {
      $('wordcloud').setStyle('border-color', '#ccc' );
    });
  }
});

window.addEvent('domready', function() {
  if ( typeof( user_data ) != 'undefined' && user_data != null && user_data != false ) {
    var user = user_data;
    
    // capitalize the screenname... it looks better
    var name = user.screen_name.substr(0,1).toUpperCase() + user.screen_name.substr(1);
    
    // shorten about text if it's too long
    if ( user.about_me.length > 200 ) 
      var about = user.about_me.substr(0,200) + '...';
    else
      var about = user.about_me;

    document.getElementById("welcome-posse-member").innerHTML = "Welcome, " + name + '!';
    document.getElementById("play-posse-thumb").src = user.profile_pic;
    document.getElementById("posse-about-text").innerHTML = about;
  }
});

