/*
 *	jQuery ttCaroussel 
 *  
 *	@handcrafted by 	Jeroen Hulscher (@JeroenHulscher) and Boy van Amstel (@BoyvanAmstel)
 *	@version 			1.1.2
 */

jQuery.ttCarousel =
{
    build: function (options) {

        try {

            // Default settings
            var defaults = {
                carousel: ".ttCarousel li",
                activeClass: "active",
                controlClass: "ttCarousel-controls",
                currentClass: "ttCarousel-current",
                totalClass: "ttCarousel-total",
                timeout: 4000,
                fadeTime: 300,
                currentIndex: 0,
                animationType: null,
                contentClass: "block"
            }
            // Move to options
            var options = jQuery.extend(defaults, options);
            var object = this;
            var carouselItems = jQuery(object).find(options.carousel).size() + 1;

            // Accessibility overwrite and creation of ttCarousel controls
            // WP: changed href from # to void(0) because of ie7+8 compatibility, otherwise clicking on the image will open a new window;
            jQuery(object).addClass("activated").append('<div class="' + options.controlClass + '"></div>');
            for (i = 1; i < carouselItems; i++) { jQuery('.' + options.controlClass).append('<a href="javascript.void:(0);" class="item' + i + '"><span class="hidden">item' + i + '</span></a>'); }


            jQuery(object).find(options.carousel + ':first').addClass(options.activeClass);
            jQuery('.' + options.controlClass).find('a:first').addClass(options.activeClass);

            jQuery(object).find(options.carousel).hide();
            jQuery(object).find(options.carousel + "." + options.activeClass).show();

            // Set all items on current spot

            jQuery(options.carousel).each(function () {
                if (!jQuery(this).hasClass(options.activeClass)) {
                    jQuery(this).find("." + options.contentClass).css('bottom', '-150px');
                    jQuery(this).find("img").css('left', '-10px');
                }
            });

            // animate if there is more then 1 item
            //console.log(carouselItems)
            if (carouselItems > 2) {
                jQuery(object).everyTime(options.timeout, 2, function () {
                    jQuery.ttCarousel.changeObjects(object, options);
                });
            }

            // When hovering controls
            jQuery(object).find("." + options.controlClass).hover(function () {
                jQuery(object).stopTime(2);
            }, function () {
                jQuery(object).everyTime(options.timeout, 2, function () {
                    jQuery.ttCarousel.changeObjects(object, options);
                });
            });

            jQuery(object).find(".pauseControl a").click(function () {
                if (jQuery(this).html() === "play") {
                    jQuery(this).html('pause');
                    jQuery(object).everyTime(options.timeout, 2, function () {
                        jQuery.ttCarousel.changeObjects(object, options);
                    });
                } else {
                    jQuery(this).html('play');
                    jQuery(object).stopTime(2);
                }
            });

            jQuery(object).find("." + options.controlClass + " a").click(function (e) {
                e.preventDefault();

                jQuery(object).stopTime(2);

                var tempItem = jQuery(this).attr('class').substring(4, 5) - 1;
                var selectedItem = jQuery(object).find(options.carousel).eq(tempItem);
                var items = jQuery(object).find(options.carousel);
                var currentIndex = options.currentIndex;
                var currentItem = jQuery(object).find(options.carousel).find(options.activeClass);
                jQuery(items).eq(currentIndex).find("." + options.contentClass).animate({ bottom: '-150' }, options.fadeTime);
                jQuery(items).eq(currentIndex).find("img").animate({ opacity: 0, left: '-10' }, options.fadeTime);
                jQuery(items).eq(currentIndex).fadeOut(options.fadeTime).removeClass(options.activeClass);
                jQuery(object).find("." + options.controlClass + " a").eq(currentIndex).css('background', '#fff');
                jQuery(this).css('background', '#4b2582');
                options.currentIndex = tempItem;

                jQuery(object).find("." + options.controlClass + " a." + options.activeClass).removeClass(options.activeClass);
                jQuery(object).find(options.carousel).eq(tempItem).fadeIn(500).addClass(options.activeClass);
                jQuery(object).find(options.carousel).eq(tempItem).find("." + options.contentClass).animate({ bottom: '20' }, 500);
                jQuery(object).find(options.carousel).eq(tempItem).find("img").animate({ opacity: 100, left: '0' }, 500);

                return false;
            });
            return this;
        }
        catch (err) {
            return false;
        }
    },
    changeObjects: function (object, options) {
        var items = jQuery(object).find(options.carousel);
        var amountItems = jQuery(object).find(options.carousel).size();
        var currentIndex = options.currentIndex;

        switch (options.animationType) {
            default:
                jQuery(object).find("." + options.controlClass + " a").css('background', '#ffffff');

                jQuery(items).eq(currentIndex).find("." + options.contentClass).animate({ bottom: '-150' }, options.fadeTime);
                jQuery(items).eq(currentIndex).find("img").animate({ opacity: 0, left: '-10' }, options.fadeTime);
                jQuery(items).eq(currentIndex).fadeOut(options.fadeTime).removeClass(options.activeClass);

                jQuery(object).find("." + options.controlClass + " a." + options.activeClass).removeClass(options.activeClass);

                if (currentIndex >= amountItems - 1) { currentIndex = 0; } else { currentIndex = currentIndex + 1; }

                jQuery(items).eq(currentIndex).fadeIn(500).addClass(options.activeClass);
                jQuery(items).eq(currentIndex).find("." + options.contentClass).animate({ bottom: '20' }, 500);
                jQuery(items).eq(currentIndex).find("img").animate({ opacity: 100, left: '0' }, 500);

                options.currentIndex = currentIndex;
                jQuery(object).find("." + options.controlClass + " a").eq(currentIndex).css("background", "#4b2582");
                break;
        }
    }
};

jQuery.fn.extend({ ttCarousel: jQuery.ttCarousel.build });	

jQuery.fn.extend({
	everyTime: function(interval, label, fn, times, belay) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, times, belay);
		});
	},
	oneTime: function(interval, label, fn) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, 1);
		});
	},
	stopTime: function(label, fn) {
		return this.each(function() {
			jQuery.timer.remove(this, label, fn);
		});
	}
});

jQuery.extend({
	timer: {
		guid: 1,
		global: {},
		regex: /^([0-9]+)\s*(.*s)?$/,
		powers: {
			'ms': 1,
			'cs': 10,
			'ds': 100,
			's': 1000,
			'das': 10000,
			'hs': 100000,
			'ks': 1000000
		},
		timeParse: function(value) {
			if (value == undefined || value == null)
				return null;
			var result = this.regex.exec(jQuery.trim(value.toString()));
			if (result[2]) {
				var num = parseInt(result[1], 10);
				var mult = this.powers[result[2]] || 1;
				return num * mult;
			} else {
				return value;
			}
		},
		add: function(element, interval, label, fn, times, belay) {
			var counter = 0;
			if (jQuery.isFunction(label)) {
				if (!times) 
					times = fn;
				fn = label;
				label = interval;
			}
			interval = jQuery.timer.timeParse(interval);
			if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
				return;
			if (times && times.constructor != Number) {
				belay = !!times;
				times = 0;
			}
			times = times || 0;
			belay = belay || false;
			if (!element.$timers) 
				element.$timers = {};
			if (!element.$timers[label])
				element.$timers[label] = {};
			fn.$timerID = fn.$timerID || this.guid++;
			var handler = function() {
				if (belay && this.inProgress) 
					return;
				this.inProgress = true;
				if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
					jQuery.timer.remove(element, label, fn);
				this.inProgress = false;
			};
			handler.$timerID = fn.$timerID;
			if (!element.$timers[label][fn.$timerID]) 
				element.$timers[label][fn.$timerID] = window.setInterval(handler,interval);
			if ( !this.global[label] )
				this.global[label] = [];
			this.global[label].push( element );
		},
		remove: function(element, label, fn) {
			var timers = element.$timers, ret;
			if (timers) {	
				if (!label) {
					for ( label in timers )
						this.remove(element, label, fn);
				} else if ( timers[label] ) {
					if ( fn ) {
						if ( fn.$timerID ) {
							window.clearInterval(timers[label][fn.$timerID]);
							delete timers[label][fn.$timerID];
						}
					} else {
						for ( var fn in timers[label] ) {
							window.clearInterval(timers[label][fn]);
							delete timers[label][fn];
						}
					}
					for ( ret in timers[label] ) break;
					if ( !ret ) {
						ret = null;
						delete timers[label];
					}
				}
				for ( ret in timers ) break;
				if ( !ret ) 
					element.$timers = null;
			}
		}
	}
});
if (jQuery.browser.msie)
	jQuery(window).one("unload", function() {
		var global = jQuery.timer.global;
		for ( var label in global ) {
			var els = global[label], i = els.length;
			while ( --i )
				jQuery.timer.remove(els[i], label);
	}
});
	

