Event.observe(window, 'load', function()
{
	// search collapse
	var collapseable = document.getElementsByClassName('collapse');
	collapseable.each(function(obj)
	{
		var elements = obj.immediateDescendants();
		var legend = elements[0];
		var contents = elements[1];
		var state = elements[2];
		
		if (!state) return;
		if (state.value == '1')
			Element.hide(contents);		
		
		Event.observe(legend, 'click', function()
		{
			if (contents.style.display == '')
			{
				state.value = '1';
				Effect.BlindUp(contents, {duration:.2});			
				$(legend).removeClassName('active');
			}
			else
			{
				state.value = '0';
				Effect.BlindDown(contents, {duration:.2});			
				$(legend).addClassName('active');
			}
		});
	});
	
	// promo rotator
	var promos = document.getElementsByClassName('promo');
	if (promos.length > 0)
		getRandomElementFrom(promos).style.display = 'inline';
	
	
	// print tool tip
	var halpcontent = $('halpcontent');
	if (halpcontent)
	{	
		var tip = new Tip('halp', halpcontent.innerHTML,
		{
			title : 'Printing Tips', 
			className: 'silver', 
			showOn: 'mouseover',
			effect: 'appear',
			hideOn:
			{
				element: '.close', 
				event: 'mouseover' 
			},
			hook:{target: 'topLeft', tip: 'topRight'},
			offset: {x: -3, y:0 },
			fixed: true, 
			closeButton: true			
		});
	}
	

	// scroll animation		
	$$('a[href*="#"]').each(function(anchor)
	{
		anchor.observe('click', function(event) 
		{
			var pageAnchor = $$('a[name~="#{href}"]'.interpolate({href: this.href.split('#')[1]})).first();
			if (pageAnchor)
			{
				var delta = pageAnchor.offsetTop - document.viewport.getScrollOffsets().top;
				var updateUrl    = function(){ location.href = this.href }.bind(this);
				new Effect.Scroll(window, { y: delta, afterFinish: updateUrl, duration: 0.4 });
				Event.stop(event);
			}			
		});
	});	
	
});

function getRandomElementFrom(elements) 
{
    return elements[Math.floor((Math.random() * elements.length))];
}

// used by the media filter to select list items by the geographical group
function selectMedia(formElement, mediaToSelect, doSelect)
{
	if (formElement)
	{
		$A(formElement.options).each(function(option)
		{
			formElement.options[0].selected = false;
			$A(mediaToSelect).find(function(media)
			{
				var found = false;				
				if (media == option.value)
				{
					found = true;
					option.selected = doSelect;
				}
				
				return found;				
			});
		});
	}
}

// following code is MIT licensed (C) Gary Haran 2007

/**
* Provide the same behavior as window.scrollTo to divs with overflow without removing
* the ability to scroll a page to a given element.
*/
Element.addMethods({
  scrollTo: function(element, left, top){
    var element = $(element);
    if (arguments.length == 1){
      var pos = element.cumulativeOffset();
      window.scrollTo(pos[0], pos[1]);
    } else {
      element.scrollLeft = left;
      element.scrollTop  = top;
    }
    return element;
  }
});

/**
* Effect.Scroll allows you to animate scrolling on a page (or div w/ overflow: scroll || auto)
*/
Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    this.start(Object.extend({x: 0, y: 0}, arguments[1] || {}));
  },
  setup: function() {
    var scrollOffsets = (this.element == window) 
                ? document.viewport.getScrollOffsets() 
                : Element._returnOffset(this.element.scrollLeft, this.element.scrollTop) ;
    this.originalScrollLeft = scrollOffsets.left;
    this.originalScrollTop  = scrollOffsets.top;
  },
  update: function(pos) {
    this.element.scrollTo(Math.round(this.options.x * pos + this.originalScrollLeft), Math.round(this.options.y * pos + this.originalScrollTop));
  }
});