// Slideshow Javascript
// Created by Henry Woodbury, Dynamic Diagrams, Inc., 2010
// Based on a subset of Agile Carousel functionality, http://www.agilecarousel.com/

(function(jq) { // Create Closure
	jq.fn.slideshow = function(options) {
        agile_validated = 'fail';
        validate_carousel = function() {
            var p;
            for (p in options) {
                checkme = options[p];
                checkme = checkme.toString();
                checkme = checkme.replace(/<\S+>/g, '');
            } // for
            agile_validated = 'pass';
        }
        validate_carousel();
        if (agile_validated == 'pass') {
			var defaults = {
				replace_contents: "yes",
				slide_class: 'slide',
				slide_container: 'slideshow',
				slide_source: "internal",
                timer_length: "7000",
                transition_duration: 1000
            }
            var options = jq.extend(defaults, options);
			slide_container_selector = '#' + defaults.slide_container;
			slide_selector = "div." + defaults.slide_class;
			jq(document).ready(function() {
				if (defaults.slide_source == "internal") {
					carousel();
				} else {
					jq.ajax({
	        	        type: "GET",
	        	        url: defaults.slide_source,
	        	        cache: false,
	        	        success: function(html) {
				            slide_container_elem = jq('#' + defaults.slide_container);
	        	            slide_container_elem.html(html);
	        	            carousel();
	        	        }
	        	    }); // ajax
				} // if (data is internal)
			}); // document.ready
			carousel = function() {
                curr_slide_id = defaults.slide_container + "-1";
                first_slide_selector = '#' + curr_slide_id;
				curr_slide_id_number = 1;
                next_slide_id_number = 1;
                transition_type = defaults.transition_type;
                slide_finder = jq(slide_container_selector + " " + slide_selector);
				slide_id_array = [];
                slides_index_counter = 0;
                slide_finder.each(function() {
                    slide_id_array[slides_index_counter] = jq(this).attr("id");
                    slides_index_counter++;
                });
                slide_finder_array_length = slide_finder.length;
                // set up the carousel
                // hide all the slides except slide_1
				jq(slide_container_selector + ' ' + slide_selector + ':not(' + first_slide_selector + ')').hide();

				function fade_transition() {
                    jq('#' + curr_slide_id).fadeOut(defaults.transition_duration);
                    jq('#' + next_slide_id).fadeIn(defaults.transition_duration);
                } //function fade_transition()

				function rotate_slides() {
					function transition_slides() {
						fade_transition();
                        curr_slide_id_number = next_slide_id_number;
                        curr_slide_id = next_slide_id;
                    } // function transition_slides()
                    transition_slides();
				} // function rotate_slides()

				skip = function(direction) {
                    // identify next slide class
                    curr_slide_id_string = curr_slide_id.toString();
                    split_curr_slide_id_string = curr_slide_id.split("-");
                    curr_slide_id_string = split_curr_slide_id_string.pop();
                    curr_slide_id_number = parseFloat(curr_slide_id_string);
                    if (direction == 'next') {
                        next_slide_id_number = curr_slide_id_number + 1;
                    } else if (direction == 'prev') {
                        next_slide_id_number = curr_slide_id_number - 1;
                    } else if (direction == 'first') {
                        next_slide_id_number = slide_id_array.length;
                        curr_slide_id_number = 1;
                    } else if (direction == 'last') {
                        next_slide_id_number = 1;
                        curr_slide_id_number = slide_id_array.length;
                    } else {
                        next_slide_id_number = direction;
                    };
                    next_slide_id = defaults.slide_container + '-' + next_slide_id_number;
                    // if next slide is after the last slide, then go to first slide
                    if (next_slide_id_number > slide_id_array.length) {
                        next_slide_id = defaults.slide_container + "-1";
                        curr_slide_id_number = slide_id_array.length;
                        next_slide_id_number = 1;
                        // if next slide is before the first slide, then go to first slide	
                    } else if (next_slide_id_number < 1) {
                        next_slide_id = defaults.slide_container + '-' + slide_id_array.length;
                        next_slide_id_number = slide_id_array.length;
                    } // else 
                    // animate to next slide
                    rotate_slides();
                } //skip

				slideshow_timer = setInterval("skip('next')", defaults.timer_length);
			} // carousel()
		} // if (validation)
	} // End function slideshow
})(jQuery); // End Closure


