// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
function toggle_left_bbh()
{
	 var showClass = 'past'
	 var hideClass = 'present'
	
     var selNodeList = document.getElementsByClassName(showClass);
	 selNodeList.each(function(item) {
	  item.toggle();
	 });
	
	 selNodeList = document.getElementsByClassName(hideClass);
	 selNodeList.each(function(item) {
	  item.toggle();
	 });
	
	$('leaver').toggle();
	
}

//THE FOLLOWING CODE IS ADAPTED FROM COLIN RAMSAY'S TICKERTAPE JAVASCRIPT CODE.
//It no longer scrolls but uses scriptaculous effects to grow the latest item
//in the list.
//
// Copyright (c) 2007 Colin Ramsay
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// 
// Cross browser mouseenter and mouseleave courtest of stchur:
// http://ecmascript.stchur.com/2007/03/15/mouseenter-and-mouseleave-events-for-firefox-and-other-non-ie-browsers/
//
// TickerTape v1.1 - http://colinramsay.co.uk/tickertape/
// A scrolling ticker-tape component which dynamically loads in articles using ajax.
//
// Vertical usage:		var ticker = new TickerTape('tickerTape', 'dataurl.php', 5000);
// Horizontal usage:	var ticker = new TickerTape('tickerTape', 'dataurl.php', 5000, true);
//

function TickerTape(url, cssClassName, scrollInterval, horizontal) {
	// Set whether this ticker scrolls horizontally
	// if it is not set or is false, then it will
	// be a vertical ticker by default.
	this.horizontal = horizontal;

	// Request JSON data from this url.
	this.dataUrl = url;

	// The classname which will be assigned to the tickertape container
	// Note: this is assigned in addition to 'basicTickerTape'.
	this.cssClassName = cssClassName;

	// How many milliseconds to wait between scrolling an item.
	this.scrollInterval = scrollInterval;

	// The id of the last item retrieved from the dataUrl.
	this.lastId = 0;

	// The total number of pixels which have been scrolled since the
	// ticker started. Used to keep track of where to scroll to next.
	this.totalScroll = 0;

	// Used to track the window.setInterval id for the scroll
	// so that we only have one scroll going at once.
	this.scrollIntervalId = null;

	// The number of items returned in the last update.
	this.numberReturned = 0;

	// Tracks the item within the container which was just scrolled.
	this.currentChild = 0;

	// Has the scroll been paused by user interaction?
	this.isScrollPaused = false;

	// If a scroll is paused, we can use this to resume
	// Otherwise it simply tracks how much we need to scroll for 
	// the currently scrolling element.
	this.amountToScroll = 0;
	
	//NEW STUFF
	//Store JSON data
	this.messages = new Array();
	this.names = new Array();
	this.itemsId = new Array();
	
	this.listItem;

	//Need to keep track of which css style to apply
	this.cssFlag = false;
	
	//Track where we are in the list
	this.listMarker = 0;

	// Start it up!
	this.init();
};


// Creates a <div> element at the point where the TickerTape script
// was included. The <div> has a class of tickerTape and a random id.
TickerTape.prototype.createDom = function() {

	// Generate a random number and use it to build for the id of the <ul>
	var randomId = "tickerTape" + Math.floor(Math.random()*999);

	// Write out a <div> element to the calling document
	document.write('<div class="'+ this.cssClassName +' basicTickerTape" id="' + randomId +'"><ul></ul></div>');

	var tickerTapeWrapper = document.getElementById(randomId);

	//xb.addEvent(tickerTapeWrapper, 'mouseenter', this.pauseScroll.simpleBind(this));

	//xb.addEvent(tickerTapeWrapper, 'mouseleave', this.resumeScroll.simpleBind(this));

	// Assign the new <div> element to a property of the tickertape class for easy access
	this.container = tickerTapeWrapper.getElementsByTagName('ul')[0];
}


// Calls the server with lastId we received to get the next lot of items back. Note
// that this.lastId will be 0 if this is the first time the update has been called
TickerTape.prototype.update = function() {
	// We need to be able to handle a dataUrl with existing querystring parameters
	var concatCharacter = this.dataUrl.indexOf('?') > -1 ? '&' : '?';
	var urlWithParams = this.dataUrl + concatCharacter + "lastId=" + this.lastId;

	// Make a call to the server, passing through a function
	// which will be called when the update is complete
	var xhr = new XMLHttpRequest();

	// Set up a callback function
	xhr.onreadystatechange = this.updateCallback.simpleBind(this, xhr);

	// Make the request
	xhr.open("GET", urlWithParams);
	xhr.send("");
}


// The server should return an array of objects that we can use
// to form an item on the tape.
TickerTape.prototype.updateCallback = function(e) {
	// Only run this if the XHR has finished loading
	if (e.readyState != 4) {
		return;
	}

	// Probably should swap this call to eval for something safer?
	var json = eval(e.responseText);

	// Remember the number returned in this request so we can use it elsewhere
	this.numberReturned = json.length;
	
	//Loop through the returned items and store them in an array.
	for(var i = 0; i < this.numberReturned; i++) {
		this.messages[i] = json[i].Message;
		this.names[i] = json[i].Name;
		this.itemsId[i] = json[i].Id;
		
		// Track the Id of the items which are added
		// so that we can send it back to the server
		// on the next update.
		this.lastId = json[i].Id;
	}
	
	// Now loop through the first three and build HTML from them
	//for(var i = this.listMarker; i < this.listMarker+3; i++) {
	for(var i = this.listMarker+2; i >= this.listMarker; i--) {
		this.buildHTML(i);
		
		//The list item that will have the grow affect applied
		//needs to be put into a container of fixed height so
		//the other items in list don't collapse up.
		var innerContainer = document.createElement('li');
		var singleList = document.createElement('ul');
		singleList.appendChild(this.listItem);
		innerContainer.appendChild(singleList);
		
		// Add the built item to the document
		//this.container.appendChild(this.listItem);
		this.container.appendChild(innerContainer);
		this.currentChild++;
	}
}

TickerTape.prototype.buildHTML = function(i) {
	// Produces HTML like this:
	// <li><p>Message</p><p class="name">Name</p>
	this.listItem = document.createElement('li');
	var message = document.createElement('p');
	var name = document.createElement('p');
	
	this.listItem.id = "item" + this.itemsId[i];
	message.id = "msg" + this.itemsId[i];
	message.innerHTML = this.messages[i];
	name.id = "name" + this.itemsId[i];
	name.className = 'name';
	name.innerHTML = this.names[i];
	this.listItem.appendChild(message);
	this.listItem.appendChild(name);
}

// Adds a new element to the top of the list of messages.
TickerTape.prototype.push = function() {
	this.currentChild == this.messages.length ? this.currentChild = 0 : this.currentChild = this.currentChild;
	this.listMarker = this.currentChild;
	
	this.insertNewItem(this.listMarker);
}

TickerTape.prototype.insertNewItem = function(i) {
	this.buildHTML(i);
	
	//Get previous item so know where to insert new item before
	var prevItem = this.container.childNodes[0];
	
	//The list item that will have the grow affect applied
	//needs to be put into a container of fixed height so
	//the other items in list don't collapse up.
	var innerContainer = document.createElement('li');
	var singleList = document.createElement('ul');
	singleList.appendChild(this.listItem);
	innerContainer.appendChild(singleList);
	
	//Insert the inner container into main list
	this.container.insertBefore(innerContainer,prevItem);
	this.container.removeChild(this.container.childNodes[3]);
	//this.container.insertBefore(this.listItem,prevItem);
	Effect.Grow(this.listItem.id);
	
	this.currentChild++;
}

// Called when the TickerTape class is instantiated.
TickerTape.prototype.init = function() {
	this.createDom();
	this.update();
	
	var timeoutCallback = this.push.simpleBind(this);
	window.setInterval(function() { timeoutCallback(); }, this.scrollInterval);
}

// Simple version of the Prototype library's bind() which will only work in
// this case, but doing it this way removes the need for Prototype's $A support.
Function.prototype.simpleBind = function() {
	var	__method = this;
	var args =	[arguments[1]];
	var object =	arguments[0];

	return function() {
		return __method.apply(object, args);
	}
}

// Cross browser way of getting XMLHttpRequest from Jonathan Snook, see:
// http://snook.ca/archives/javascript/short_xmlhttprequest_abstraction/
/*@cc_on
@if (@_jscript_version >= 5 && @_jscript_version < 5.7)
  function XMLHttpRequest() {
    try{
      return new ActiveXObject('Msxml2.XMLHTTP');
      }catch(e){}
  }
@end
@*/