/*******************************************************************************
 * <OWNER> = Damon Toal-Rossi
 * <ORGANIZATION> = Xynergy, Inc. for Los Alamos National Laboratories
 * <YEAR> = 2008
 * 
 * In the original BSD license, both occurrences of the phrase "COPYRIGHT 
 * HOLDERS AND CONTRIBUTORS" in the disclaimer read "REGENTS AND CONTRIBUTORS".
 * 
 * Here is the license template:
 * 
 * Copyright (c) <YEAR>, <OWNER>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 * 
 * * Redistributions of source code must retain the above copyright notice, 
 *   this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright notice, 
 *   this list of conditions and the following disclaimer in the documentation 
 *   and/or other materials provided with the distribution.
 * * Neither the name of the <ORGANIZATION> nor the names of its contributors 
 *   may be used to endorse or promote products derived from this software 
 *   without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 * POSSIBILITY OF SUCH DAMAGE.
*/

var Slideshow = {
	options: {},
		
	setNext: function(e) {
		Slideshow.options.element.select('.'+Slideshow.options.next).each(function(n){
			if (typeof(e.next('a.'+Slideshow.options.slide)) == 'undefined') {
				n.addClassName('disabled');
				n.rel='';
			} else {
				n.removeClassName('disabled');
				n.rel=e.next('a.'+Slideshow.options.slide).id;
			}
		});
	},

	setPrev: function(e) {
		Slideshow.options.element.select('.'+Slideshow.options.prev).each(function(n){
			if (typeof(e.previous('a.'+Slideshow.options.slide)) == 'undefined') {
				n.addClassName('disabled');
				n.rel='';
			} else {
				n.removeClassName('disabled');
				n.rel=e.previous('a.'+Slideshow.options.slide).id;
			}
		});
	},

	switchSlide: function(slide) {
		if (slide) {
			Slideshow.options.element.select('.'+Slideshow.options.placeholder).each(function(p){
				p.src=slide.href;
				p.title=slide.title;
				p.alt=slide.title;
			});
			Slideshow.options.element.select('.'+Slideshow.options.desc).each(function(d){
				d.update(slide.title);
			});
			
			Slideshow.setNext(slide);
			Slideshow.setPrev(slide);
			
			Slideshow.options.element.select('a.'+Slideshow.options.slide).each(function(s){
				s.removeClassName('selected');
			});
			slide.addClassName('selected');
		}
	},
	
	create: function(element) {
		Slideshow.options = Object.extend({ 
      element: 	$(element),
			placeholder: 'placeholder', 
			prev: 		'prev', 
			next: 		'next', 
			desc: 		'desc', 
			slide: 		'slide', 
			slides: 	'slides'
    }, arguments[1] || {});
		
		Slideshow.options.element.select('a.'+Slideshow.options.slide).each(function(e){
			Event.observe(e,'click',Slideshow.handleNumberClick.bindAsEventListener(e));
		});
		
		[Slideshow.options.prev,Slideshow.options.next].each(function(d){
			Slideshow.options.element.select('.'+d).each(function(b){
				b.observe('click',Slideshow.handlePrevNextClick.bindAsEventListener(b,d));
			});
		});
		
		first = Slideshow.options.element.select('.'+Slideshow.options.slides+' .'+Slideshow.options.slide).shift();
		Slideshow.switchSlide(first);
	},
	
	handleNumberClick: function(ev) {
		Event.stop(ev);
		e = Event.element(ev);
		Slideshow.switchSlide(e);
	},
	
	handlePrevNextClick: function(ev) {
		Event.stop(ev);
		e = Event.element(ev);
		Slideshow.switchSlide($(e.rel));
	}

}
