// JavaScript Document


/*
 * Superfish v1.4.8 - jQuery menu widget
 * Copyright (c) 2008 Joel Birch
 *
 * Dual licensed under the MIT and GPL licenses:
 * 	http://www.opensource.org/licenses/mit-license.php
 * 	http://www.gnu.org/licenses/gpl.html
 *
 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
 */

;(function($){
	$.fn.superfish = function(op){

		var sf = $.fn.superfish,
			c = sf.c,
			$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
			over = function(){
				var $$ = $(this), menu = getMenu($$);
				clearTimeout(menu.sfTimer);
				$$.showSuperfishUl().siblings().hideSuperfishUl();
			},
			out = function(){
				var $$ = $(this), menu = getMenu($$), o = sf.op;
				clearTimeout(menu.sfTimer);
				menu.sfTimer=setTimeout(function(){
					o.retainPath=($.inArray($$[0],o.$path)>-1);
					$$.hideSuperfishUl();
					if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
				},o.delay);	
			},
			getMenu = function($menu){
				var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
				sf.op = sf.o[menu.serial];
				return menu;
			},
			addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
			
		return this.each(function() {
			var s = this.serial = sf.o.length;
			var o = $.extend({},sf.defaults,op);
			o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
				$(this).addClass([o.hoverClass,c.bcClass].join(' '))
					.filter('li:has(ul)').removeClass(o.pathClass);
			});
			sf.o[s] = sf.op = o;
			
			$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
				if (o.autoArrows) addArrow( $('>a:first-child',this) );
			})
			.not('.'+c.bcClass)
				.hideSuperfishUl();
			
			var $a = $('a',this);
			$a.each(function(i){
				var $li = $a.eq(i).parents('li');
				$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
			});
			o.onInit.call(this);
			
		}).each(function() {
			var menuClasses = [c.menuClass];
			if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
			$(this).addClass(menuClasses.join(' '));
		});
	};

	var sf = $.fn.superfish;
	sf.o = [];
	sf.op = {};
	sf.IE7fix = function(){
		var o = sf.op;
		if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
			this.toggleClass(sf.c.shadowClass+'-off');
		};
	sf.c = {
		bcClass     : 'sf-breadcrumb',
		menuClass   : 'sf-js-enabled',
		anchorClass : 'sf-with-ul',
		arrowClass  : 'sf-sub-indicator',
		shadowClass : 'sf-shadow'
	};
	sf.defaults = {
		hoverClass	: 'sfHover',
		pathClass	: 'overideThisToUse',
		pathLevels	: 1,
		delay		: 800,
		animation	: {opacity:'show'},
		speed		: 'normal',
		autoArrows	: false,
		dropShadows : false,
		disableHI	: false,		// true disables hoverIntent detection
		onInit		: function(){}, // callback functions
		onBeforeShow: function(){},
		onShow		: function(){},
		onHide		: function(){}
	};
	$.fn.extend({
		hideSuperfishUl : function(){
			var o = sf.op,
				not = (o.retainPath===true) ? o.$path : '';
			o.retainPath = false;
			var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
					.find('>ul').hide().css('visibility','hidden');
			o.onHide.call($ul);
			return this;
		},
		showSuperfishUl : function(){
			var o = sf.op,
				sh = sf.c.shadowClass+'-off',
				$ul = this.addClass(o.hoverClass)
					.find('>ul:hidden').css('visibility','visible');
			sf.IE7fix.call($ul);
			o.onBeforeShow.call($ul);
			$ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
			return this;
		}
	});

})(jQuery);


(function(b){b.fn.ticker=function(p){var d=b.extend({},b.fn.ticker.defaults,p),h="#"+b(this).attr("id"),i=b(this).attr("tagName");return this.each(function(){function e(c){var j=0,k;for(k in c)c.hasOwnProperty(k)&&j++;return j}function f(c){if(d.debugMode)window.console&&window.console.log?window.console.log(c):alert(c)}function l(){if(a.contentLoaded==false){if(d.ajaxFeed)f("Code Me!");else if(d.htmlFeed)if(b(h+" LI").length>0)b(h+" LI").each(function(c){a.newsArr["item-"+c]={type:d.titleText,content:b(this).html()}});
else{f("Couldn't find any content for the ticker to use!");return false}else{f("Couldn't find any content for the ticker to use!");return false}a.contentLoaded=true}b(a.dom.titleElem).html(a.newsArr["item-"+a.position].type);b(a.dom.contentID).html(a.newsArr["item-"+a.position].content);if(a.position==e(a.newsArr)-1)a.position=0;else a.position++;distance=b(a.dom.contentID).width();time=distance/d.speed;b(a.dom.wrapperID).find(a.dom.titleID).fadeIn().end().find(a.dom.titleElem).fadeIn("slow",q)}function q(){if(a.play){var c=
b(a.dom.titleElem).width()+20;b(a.dom.revealID).css("left",c+"px");b(a.dom.revealElem).show(1,function(){b(a.dom.contentID).css("left",c+"px").show();b(a.dom.revealID).css("margin-left","0px").animate({zoom:1},20).animate({marginLeft:distance+"px"},time,"linear",m)})}else return false}function m(){if(a.play){b(a.dom.contentID).animate({zoom:1},d.pauseOnItems).fadeOut("slow");b(a.dom.revealID).hide(1,function(){b(a.dom.tickerID).animate({zoom:1},d.pauseOnItems).fadeOut(d.fadeOutSpeed,function(){b(a.dom.wrapperID).find(a.dom.titleElem+
","+a.dom.revealElem+","+a.dom.contentID).hide().end().find(a.dom.tickerID+","+a.dom.revealID+","+a.dom.titleID).show().end().find(a.dom.tickerID+","+a.dom.revealID+","+a.dom.titleID).removeAttr("style");l()})})}else b(a.dom.revealElem).hide()}function g(){a.play=false;b(a.dom.tickerID+","+a.dom.revealID+","+a.dom.titleID+","+a.dom.titleElem+","+a.dom.revealElem+","+a.dom.contentID).stop(true,true);b(a.dom.revealID+","+a.dom.revealElem).hide();b(a.dom.wrapperID).find(a.dom.titleID+","+a.dom.titleElem).show().end().find(a.dom.contentID).show()}
function n(){a.play=true;a.paused=false;m()}function o(c){g();switch(c){case "prev":a.position=a.position==0?e(a.newsArr)-2:a.position==1?e(a.newsArr)-1:a.position-2;b(a.dom.titleElem).html(a.newsArr["item-"+a.position].type);b(a.dom.contentID).html(a.newsArr["item-"+a.position].content);break;case "next":b(a.dom.titleElem).html(a.newsArr["item-"+a.position].type);b(a.dom.contentID).html(a.newsArr["item-"+a.position].content);break}if(a.position==e(a.newsArr)-1)a.position=0;else a.position++}var a=
{position:0,time:0,distance:0,newsArr:{},play:true,paused:false,contentLoaded:false,dom:{contentID:"#ticker-content",titleID:"#ticker-title",titleElem:"#ticker-title SPAN",tickerID:"#ticker",wrapperID:"#ticker-wrapper",revealID:"#ticker-swipe",revealElem:"#ticker-swipe SPAN",controlsID:"#ticker-controls",prevID:"#prev",nextID:"#next",playPauseID:"#play-pause"}};if(i!="UL"&&d.htmlFeed===true){f("Cannot use <"+i.toLowerCase()+"> type of element for this plugin - must of type <ul>");return false}(function(){b(a.dom.wrapperID).append('<div id="'+
a.dom.tickerID.replace("#","")+'"><div id="'+a.dom.titleID.replace("#","")+'"><span style="display: none;"><!-- --\></span></div><p id="'+a.dom.contentID.replace("#","")+'"></p><div id="'+a.dom.revealID.replace("#","")+'"><span style="display: none;"><!-- --\></span></div></div>');b(a.dom.wrapperID).removeClass("no-js").addClass("has-js");b(a.dom.tickerElem+","+a.dom.titleElem+","+a.dom.contentID).hide();if(d.controls){b(a.dom.controlsID).live("click",function(c){c=c.target.id;switch(c){case a.dom.prevID.replace("#",
""):a.paused=true;b(a.dom.playPauseID).addClass("paused");o(c);break;case a.dom.nextID.replace("#",""):a.paused=true;b(a.dom.playPauseID).addClass("paused");o(c);break;case a.dom.playPauseID.replace("#",""):if(a.play==true){a.paused=true;b(a.dom.playPauseID).addClass("paused");g()}else{a.paused=false;b(a.dom.playPauseID).removeClass("paused");n()}break}}).live("mouseover",function(c){c=c.target.id;b("#"+c).hasClass("controls")&&b("#"+c).addClass("over")}).live("mousedown",function(c){c=c.target.id;
b("#"+c).hasClass("controls")&&b("#"+c).addClass("down")}).live("mouseout",function(c){c=c.target.id;b("#"+c).hasClass("controls")&&b("#"+c).removeClass("over")}).live("mouseup",function(c){c=c.target.id;b("#"+c).hasClass("controls")&&b("#"+c).removeClass("down")});b(a.dom.wrapperID).append('<ul id="'+a.dom.controlsID.replace("#","")+'"><li id="'+a.dom.playPauseID.replace("#","")+'" class="controls"></li><li id="'+a.dom.prevID.replace("#","")+'" class="controls"></li><li id="'+a.dom.nextID.replace("#",
"")+'" class="controls"></li></ul>')}b(a.dom.contentID).mouseover(function(){a.paused==false&&g()}).mouseout(function(){a.paused==false&&n()});l()})()})};b.fn.ticker.defaults={speed:0.1,ajaxFeed:false,htmlFeed:true,debugMode:true,controls:true,titleText:"Latest",pauseOnItems:2E3,fadeInSpeed:300,fadeOutSpeed:300}})(jQuery);


/**
 * jQuery lightBox plugin
 * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
 * and adapted to me for use like a plugin from jQuery.
 * @name jquery-lightbox-0.5.js
 * @author Leandro Vieira Pinho - http://leandrovieira.com
 * @version 0.5
 * @date April 11, 2008
 * @category jQuery plugin
 * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)
 * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
 * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
 */
(function($){$.fn.lightBox=function(settings){settings=jQuery.extend({overlayBgColor:'#000',overlayOpacity:0.8,fixedNavigation:false,imageLoading:'/images/lightbox-ico-loading.gif',imageBtnPrev:'/images/lightbox-btn-prev.gif',imageBtnNext:'/images/lightbox-btn-next.gif',imageBtnClose:'/images/lightbox-btn-close.gif',imageBlank:'/images/lightbox-blank.gif',containerBorderSize:10,containerResizeSpeed:400,txtImage:'Image',txtOf:'of',keyToClose:'c',keyToPrev:'p',keyToNext:'n',imageArray:[],activeImage:0},settings);var jQueryMatchedObj=this;function _initialize(){_start(this,jQueryMatchedObj);return false;}
function _start(objClicked,jQueryMatchedObj){$('embed, object, select').css({'visibility':'hidden'});_set_interface();settings.imageArray.length=0;settings.activeImage=0;if(jQueryMatchedObj.length==1){settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));}else{for(var i=0;i<jQueryMatchedObj.length;i++){settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));}}
while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('href')){settings.activeImage++;}
_set_image_to_view();}
function _set_interface(){$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="'+settings.imageLoading+'"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="'+settings.imageBtnClose+'"></a></div></div></div></div>');var arrPageSizes=___getPageSize();$('#jquery-overlay').css({backgroundColor:settings.overlayBgColor,opacity:settings.overlayOpacity,width:arrPageSizes[0],height:arrPageSizes[1]}).fadeIn();var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]}).show();$('#jquery-overlay,#jquery-lightbox').click(function(){_finish();});$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function(){_finish();return false;});$(window).resize(function(){var arrPageSizes=___getPageSize();$('#jquery-overlay').css({width:arrPageSizes[0],height:arrPageSizes[1]});var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]});});}
function _set_image_to_view(){$('#lightbox-loading').show();if(settings.fixedNavigation){$('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();}else{$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();}
var objImagePreloader=new Image();objImagePreloader.onload=function(){$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);objImagePreloader.onload=function(){};};objImagePreloader.src=settings.imageArray[settings.activeImage][0];};function _resize_container_image_box(intImageWidth,intImageHeight){var intCurrentWidth=$('#lightbox-container-image-box').width();var intCurrentHeight=$('#lightbox-container-image-box').height();var intWidth=(intImageWidth+(settings.containerBorderSize*2));var intHeight=(intImageHeight+(settings.containerBorderSize*2));var intDiffW=intCurrentWidth-intWidth;var intDiffH=intCurrentHeight-intHeight;$('#lightbox-container-image-box').animate({width:intWidth,height:intHeight},settings.containerResizeSpeed,function(){_show_image();});if((intDiffW==0)&&(intDiffH==0)){if($.browser.msie){___pause(250);}else{___pause(100);}}
$('#lightbox-container-image-data-box').css({width:intImageWidth});$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({height:intImageHeight+(settings.containerBorderSize*2)});};function _show_image(){$('#lightbox-loading').hide();$('#lightbox-image').fadeIn(function(){_show_image_data();_set_navigation();});_preload_neighbor_images();};function _show_image_data(){$('#lightbox-container-image-data-box').slideDown('fast');$('#lightbox-image-details-caption').hide();if(settings.imageArray[settings.activeImage][1]){$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();}
if(settings.imageArray.length>1){$('#lightbox-image-details-currentNumber').html(settings.txtImage+' '+(settings.activeImage+1)+' '+settings.txtOf+' '+settings.imageArray.length).show();}}
function _set_navigation(){$('#lightbox-nav').show();$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({'background':'transparent url('+settings.imageBlank+') no-repeat'});if(settings.activeImage!=0){if(settings.fixedNavigation){$('#lightbox-nav-btnPrev').css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnPrev').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}}
if(settings.activeImage!=(settings.imageArray.length-1)){if(settings.fixedNavigation){$('#lightbox-nav-btnNext').css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnNext').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}}
_enable_keyboard_navigation();}
function _enable_keyboard_navigation(){$(document).keydown(function(objEvent){_keyboard_action(objEvent);});}
function _disable_keyboard_navigation(){$(document).unbind();}
function _keyboard_action(objEvent){if(objEvent==null){keycode=event.keyCode;escapeKey=27;}else{keycode=objEvent.keyCode;escapeKey=objEvent.DOM_VK_ESCAPE;}
key=String.fromCharCode(keycode).toLowerCase();if((key==settings.keyToClose)||(key=='x')||(keycode==escapeKey)){_finish();}
if((key==settings.keyToPrev)||(keycode==37)){if(settings.activeImage!=0){settings.activeImage=settings.activeImage-1;_set_image_to_view();_disable_keyboard_navigation();}}
if((key==settings.keyToNext)||(keycode==39)){if(settings.activeImage!=(settings.imageArray.length-1)){settings.activeImage=settings.activeImage+1;_set_image_to_view();_disable_keyboard_navigation();}}}
function _preload_neighbor_images(){if((settings.imageArray.length-1)>settings.activeImage){objNext=new Image();objNext.src=settings.imageArray[settings.activeImage+1][0];}
if(settings.activeImage>0){objPrev=new Image();objPrev.src=settings.imageArray[settings.activeImage-1][0];}}
function _finish(){$('#jquery-lightbox').remove();$('#jquery-overlay').fadeOut(function(){$('#jquery-overlay').remove();});$('embed, object, select').css({'visibility':'visible'});}
function ___getPageSize(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=window.innerWidth+window.scrollMaxX;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;}
var windowWidth,windowHeight;if(self.innerHeight){if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;}else{windowWidth=self.innerWidth;}
windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;}
if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;}
if(xScroll<windowWidth){pageWidth=xScroll;}else{pageWidth=windowWidth;}
arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize;};function ___getPageScroll(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft;}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft;}
arrayPageScroll=new Array(xScroll,yScroll);return arrayPageScroll;};function ___pause(ms){var date=new Date();curDate=null;do{var curDate=new Date();}
while(curDate-date<ms);};return this.unbind('click').click(_initialize);};})(jQuery);

/*
 * jQuery Cycle Plugin (with Transition Definitions)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2009 M. Alsup
 * Version: 2.34 (26-JAN-2009)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Requires: jQuery v1.2.3 or later
 *
 * Originally based on the work of:
 *	1) Matt Oakes (http://portfolio.gizone.co.uk/applications/slideshow/)
 *	2) Torsten Baldes (http://medienfreunde.com/lab/innerfade/)
 *	3) Benjamin Sterling (http://www.benjaminsterling.com/experiments/jqShuffle/)
 */
;(function($) {

var ver = '2.34';

// if $.support is not defined (pre jQuery 1.3) add what I need
if ($.support == undefined) {
	$.support = {
		opacity: !($.browser.msie && /MSIE 6.0/.test(navigator.userAgent))
	};
}

function log() {
	if (window.console && window.console.log)
		window.console.log('[cycle] ' + Array.prototype.join.call(arguments,''));
};

$.fn.cycle = function(options) {
	if (this.length == 0) {
		// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
		log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
		return this;
	}

	var opt2 = arguments[1];
	return this.each(function() {
		if (this.cycleStop == undefined)
			this.cycleStop = 0;
		if (options === undefined || options === null)
			options = {};
		if (options.constructor == String) {
			switch(options) {
			case 'stop':
				this.cycleStop++; // callbacks look for change
				if (this.cycleTimeout) clearTimeout(this.cycleTimeout);
				this.cycleTimeout = 0;
				$(this).removeData('cycle.opts');
				return;
			case 'pause':
				this.cyclePause = 1;
				return;
			case 'resume':
				this.cyclePause = 0;
				if (opt2 === true) { // resume now!
					options = $(this).data('cycle.opts');
					if (!options) {
						log('options not found, can not resume');
						return;
					}
					if (this.cycleTimeout) {
						clearTimeout(this.cycleTimeout);
						this.cycleTimeout = 0;
					}			 
					go(options.elements, options, 1, 1);
				}
				return;
			default:
				options = { fx: options };
			};
		}
		else if (options.constructor == Number) {
			// go to the requested slide
			var num = options;
			options = $(this).data('cycle.opts');
			if (!options) {
				log('options not found, can not advance slide');
				return;
			}
			if (num < 0 || num >= options.elements.length) {
				log('invalid slide index: ' + num);
				return;
			}
			options.nextSlide = num;
			if (this.cycleTimeout) {
				clearTimeout(this.cycleTimeout);
				this.cycleTimeout = 0;
			}			 
			go(options.elements, options, 1, num >= options.currSlide);
			return;
		}

		// stop existing slideshow for this container (if there is one)
		if (this.cycleTimeout) clearTimeout(this.cycleTimeout);
		this.cycleTimeout = 0;
		this.cyclePause = 0;
		
		var $cont = $(this);
		var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();
		var els = $slides.get();
		if (els.length < 2) {
			log('terminating; too few slides: ' + els.length);
			return; // don't bother
		}

		// support metadata plugin (v1.0 and v2.0)
		var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
		if (opts.autostop) 
			opts.countdown = opts.autostopCount || els.length;

		$cont.data('cycle.opts', opts);
		opts.container = this;
		opts.stopCount = this.cycleStop;

		opts.elements = els;
		opts.before = opts.before ? [opts.before] : [];
		opts.after = opts.after ? [opts.after] : [];
		opts.after.unshift(function(){ opts.busy=0; });
		if (opts.continuous)
			opts.after.push(function() { go(els,opts,0,!opts.rev); });
			
		// clearType corrections
		if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
			clearTypeFix($slides);

		// allow shorthand overrides of width, height and timeout
		var cls = this.className;
		opts.width = parseInt((cls.match(/w:(\d+)/)||[])[1]) || opts.width;
		opts.height = parseInt((cls.match(/h:(\d+)/)||[])[1]) || opts.height;
		opts.timeout = parseInt((cls.match(/t:(\d+)/)||[])[1]) || opts.timeout;

		if ($cont.css('position') == 'static') 
			$cont.css('position', 'relative');
		if (opts.width) 
			$cont.width(opts.width);
		if (opts.height && opts.height != 'auto') 
			$cont.height(opts.height);

		if (opts.startingSlide) opts.startingSlide = parseInt(opts.startingSlide);	
			
		if (opts.random) {
			opts.randomMap = [];
			for (var i = 0; i < els.length; i++) 
				opts.randomMap.push(i);
			opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
			opts.randomIndex = 0;
			opts.startingSlide = opts.randomMap[0];
		}
		else if (opts.startingSlide >= els.length)
			opts.startingSlide = 0; // catch bogus input
		var first = opts.startingSlide || 0;
		$slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) { 
			var z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
			$(this).css('z-index', z) 
		});
		
		$(els[first]).css('opacity',1).show(); // opacity bit needed to handle reinit case
		if ($.browser.msie) els[first].style.removeAttribute('filter');

		if (opts.fit && opts.width) 
			$slides.width(opts.width);
		if (opts.fit && opts.height && opts.height != 'auto') 
			$slides.height(opts.height);
			
		if (opts.containerResize) {
			var maxw = 0, maxh = 0;
			for(var i=0; i < els.length; i++) {
				var $e = $(els[i]), w = $e.outerWidth(), h = $e.outerHeight();
				maxw = w > maxw ? w : maxw;
				maxh = h > maxh ? h : maxh;
			}
			$cont.css({width:maxw+'px',height:maxh+'px'});
		}
		
		if (opts.pause) 
			$cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;});

		// run transition init fn
		var init = $.fn.cycle.transitions[opts.fx];
		if ($.isFunction(init))
			init($cont, $slides, opts);
		else if (opts.fx != 'custom')
			log('unknown transition: ' + opts.fx);
		
		$slides.each(function() {
			var $el = $(this);
			this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();
			this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();
		});

		opts.cssBefore = opts.cssBefore || {};
		opts.animIn = opts.animIn || {};
		opts.animOut = opts.animOut || {};

		$slides.not(':eq('+first+')').css(opts.cssBefore);
		if (opts.cssFirst)
			$($slides[first]).css(opts.cssFirst);

		if (opts.timeout) {
			opts.timeout = parseInt(opts.timeout);
			// ensure that timeout and speed settings are sane
			if (opts.speed.constructor == String)
				opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed);
			if (!opts.sync)
				opts.speed = opts.speed / 2;
			while((opts.timeout - opts.speed) < 250)
				opts.timeout += opts.speed;
		}
		if (opts.easing) 
			opts.easeIn = opts.easeOut = opts.easing;
		if (!opts.speedIn) 
			opts.speedIn = opts.speed;
		if (!opts.speedOut) 
			opts.speedOut = opts.speed;

		opts.slideCount = els.length;
		opts.currSlide = first;
		if (opts.random) {
			opts.nextSlide = opts.currSlide;
			if (++opts.randomIndex == els.length) 
				opts.randomIndex = 0;
			opts.nextSlide = opts.randomMap[opts.randomIndex];
		}
		else
			opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;

		// fire artificial events
		var e0 = $slides[first];
		if (opts.before.length)
			opts.before[0].apply(e0, [e0, e0, opts, true]);
		if (opts.after.length > 1)
			opts.after[1].apply(e0, [e0, e0, opts, true]);
		
		if (opts.click && !opts.next)
			opts.next = opts.click;
		if (opts.next)
			$(opts.next).bind('click', function(){return advance(els,opts,opts.rev?-1:1)});
		if (opts.prev)
			$(opts.prev).bind('click', function(){return advance(els,opts,opts.rev?1:-1)});
		if (opts.pager)
			buildPager(els,opts);

		// expose fn for adding slides after the show has started
		opts.addSlide = function(newSlide, prepend) {
			var $s = $(newSlide), s = $s[0];
			if (!opts.autostopCount)
				opts.countdown++;
			els[prepend?'unshift':'push'](s);
			if (opts.els)
				opts.els[prepend?'unshift':'push'](s); // shuffle needs this
			opts.slideCount = els.length;
			
			$s.css('position','absolute');
			$s[prepend?'prependTo':'appendTo']($cont);
			
			if (prepend) {
				opts.currSlide++;
				opts.nextSlide++;
			}
			
			if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
				clearTypeFix($s);

			if (opts.fit && opts.width) 
				$s.width(opts.width);
			if (opts.fit && opts.height && opts.height != 'auto') 
				$slides.height(opts.height);
			s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
			s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();

			$s.css(opts.cssBefore);

			if (opts.pager)
				$.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);
			
			if (typeof opts.onAddSlide == 'function')
				opts.onAddSlide($s);
		};

		if (opts.timeout || opts.continuous)
			this.cycleTimeout = setTimeout(
				function(){go(els,opts,0,!opts.rev)}, 
				opts.continuous ? 10 : opts.timeout + (opts.delay||0));
	});
};

function go(els, opts, manual, fwd) {
	if (opts.busy) return;
	var p = opts.container, curr = els[opts.currSlide], next = els[opts.nextSlide];
	if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) 
		return;

	if (!manual && !p.cyclePause && 
		((opts.autostop && (--opts.countdown <= 0)) ||
		(opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
		if (opts.end)
			opts.end(opts);
		return;
	}

	if (manual || !p.cyclePause) {
		if (opts.before.length)
			$.each(opts.before, function(i,o) { 
				if (p.cycleStop != opts.stopCount) return;
				o.apply(next, [curr, next, opts, fwd]); 
			});
		var after = function() {
			if ($.browser.msie && opts.cleartype)
				this.style.removeAttribute('filter');
			$.each(opts.after, function(i,o) { 
				if (p.cycleStop != opts.stopCount) return;
				o.apply(next, [curr, next, opts, fwd]); 
			});
		};

		if (opts.nextSlide != opts.currSlide) {
			opts.busy = 1;
			if (opts.fxFn)
				opts.fxFn(curr, next, opts, after, fwd);
			else if ($.isFunction($.fn.cycle[opts.fx]))
				$.fn.cycle[opts.fx](curr, next, opts, after);
			else
				$.fn.cycle.custom(curr, next, opts, after, manual && opts.fastOnEvent);
		}
		if (opts.random) {
			opts.currSlide = opts.nextSlide;
			if (++opts.randomIndex == els.length) 
				opts.randomIndex = 0;
			opts.nextSlide = opts.randomMap[opts.randomIndex];
		}
		else { // sequence
			var roll = (opts.nextSlide + 1) == els.length;
			opts.nextSlide = roll ? 0 : opts.nextSlide+1;
			opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
		}
		if (opts.pager)
			$.fn.cycle.updateActivePagerLink(opts.pager, opts.currSlide);
	}
	if (opts.timeout && !opts.continuous)
		p.cycleTimeout = setTimeout(function() { go(els,opts,0,!opts.rev) }, getTimeout(curr,next,opts,fwd));
	else if (opts.continuous && p.cyclePause) 
		p.cycleTimeout = setTimeout(function() { go(els,opts,0,!opts.rev) }, 10);
};

$.fn.cycle.updateActivePagerLink = function(pager, currSlide) {
	$(pager).find('a').removeClass('activeSlide').filter('a:eq('+currSlide+')').addClass('activeSlide');
};

function getTimeout(curr, next, opts, fwd) {
	if (opts.timeoutFn) {
		var t = opts.timeoutFn(curr,next,opts,fwd);
		if (t !== false)
			return t;
	}
	return opts.timeout;
};

// advance slide forward or back
function advance(els, opts, val) {
	var p = opts.container, timeout = p.cycleTimeout;
	if (timeout) {
		clearTimeout(timeout);
		p.cycleTimeout = 0;
	}
	if (opts.random && val < 0) {
		// move back to the previously display slide
		opts.randomIndex--;
		if (--opts.randomIndex == -2)
			opts.randomIndex = els.length-2;
		else if (opts.randomIndex == -1)
			opts.randomIndex = els.length-1;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else if (opts.random) {
		if (++opts.randomIndex == els.length) 
			opts.randomIndex = 0;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else {
		opts.nextSlide = opts.currSlide + val;
		if (opts.nextSlide < 0) {
			if (opts.nowrap) return false;
			opts.nextSlide = els.length - 1;
		}
		else if (opts.nextSlide >= els.length) {
			if (opts.nowrap) return false;
			opts.nextSlide = 0;
		}
	}
	
	if (opts.prevNextClick && typeof opts.prevNextClick == 'function')
		opts.prevNextClick(val > 0, opts.nextSlide, els[opts.nextSlide]);
	go(els, opts, 1, val>=0);
	return false;
};

function buildPager(els, opts) {
	var $p = $(opts.pager);
	$.each(els, function(i,o) {
		$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
	});
   $.fn.cycle.updateActivePagerLink(opts.pager, opts.startingSlide);
};

$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
	var a = (typeof opts.pagerAnchorBuilder == 'function')
		? opts.pagerAnchorBuilder(i,el)
		: '<a href="#">'+(i+1)+'</a>';
	
	if (!a)
		return;
	
	var $a = $(a);
	
	// don't reparent if anchor is in the dom
	if ($a.parents('body').length == 0)
		$a.appendTo($p);
		
	$a.bind(opts.pagerEvent, function() {
		opts.nextSlide = i;
		var p = opts.container, timeout = p.cycleTimeout;
		if (timeout) {
			clearTimeout(timeout);
			p.cycleTimeout = 0;
		}			 
		if (typeof opts.pagerClick == 'function')
			opts.pagerClick(opts.nextSlide, els[opts.nextSlide]);
		go(els,opts,1,opts.currSlide < i);
		return false;
	});
	if (opts.pauseOnPagerHover)
		$a.hover(function() { opts.container.cyclePause++; }, function() { opts.container.cyclePause--; } );
};


// this fixes clearType problems in ie6 by setting an explicit bg color
function clearTypeFix($slides) {
	function hex(s) {
		var s = parseInt(s).toString(16);
		return s.length < 2 ? '0'+s : s;
	};
	function getBg(e) {
		for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
			var v = $.css(e,'background-color');
			if (v.indexOf('rgb') >= 0 ) { 
				var rgb = v.match(/\d+/g); 
				return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
			}
			if (v && v != 'transparent')
				return v;
		}
		return '#ffffff';
	};
	$slides.each(function() { $(this).css('background-color', getBg(this)); });
};


$.fn.cycle.custom = function(curr, next, opts, cb, immediate) {
	var $l = $(curr), $n = $(next);
	$n.css(opts.cssBefore);
	var speedIn = immediate ? 1 : opts.speedIn;
	var speedOut = immediate ? 1 : opts.speedOut;
	var easeIn = immediate ? null : opts.easeIn;
	var easeOut = immediate ? null : opts.easeOut;
	var fn = function() {$n.animate(opts.animIn, speedIn, easeIn, cb)};
	$l.animate(opts.animOut, speedOut, easeOut, function() {
		if (opts.cssAfter) $l.css(opts.cssAfter);
		if (!opts.sync) fn();
	});
	if (opts.sync) fn();
};

$.fn.cycle.transitions = {
	fade: function($cont, $slides, opts) {
		$slides.not(':eq('+opts.startingSlide+')').css('opacity',0);
		opts.before.push(function() { $(this).show() });
		opts.animIn	   = { opacity: 1 };
		opts.animOut   = { opacity: 0 };
		opts.cssBefore = { opacity: 0 };
		opts.cssAfter  = { display: 'none' };
		opts.onAddSlide = function($s) { $s.hide(); };
	}
};

$.fn.cycle.ver = function() { return ver; };

// override these globally if you like (they are all optional)
$.fn.cycle.defaults = {
	fx:			  'fade', // one of: fade, shuffle, zoom, scrollLeft, etc
	timeout:	   4000,  // milliseconds between slide transitions (0 to disable auto advance)
	timeoutFn:     null,  // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
	continuous:	   0,	  // true to start next transition immediately after current one completes
	speed:		   1000,  // speed of the transition (any valid fx speed value)
	speedIn:	   null,  // speed of the 'in' transition
	speedOut:	   null,  // speed of the 'out' transition
	next:		   null,  // selector for element to use as click trigger for next slide
	prev:		   null,  // selector for element to use as click trigger for previous slide
	prevNextClick: null,  // callback fn for prev/next clicks:	function(isNext, zeroBasedSlideIndex, slideElement)
	pager:		   null,  // selector for element to use as pager container
	pagerClick:	   null,  // callback fn for pager clicks:	function(zeroBasedSlideIndex, slideElement)
	pagerEvent:	  'click', // name of event which drives the pager navigation
	pagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)
	before:		   null,  // transition callback (scope set to element to be shown):     function(currSlideElement, nextSlideElement, options, forwardFlag)
	after:		   null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
	end:		   null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
	easing:		   null,  // easing method for both in and out transitions
	easeIn:		   null,  // easing for "in" transition
	easeOut:	   null,  // easing for "out" transition
	shuffle:	   null,  // coords for shuffle animation, ex: { top:15, left: 200 }
	animIn:		   null,  // properties that define how the slide animates in
	animOut:	   null,  // properties that define how the slide animates out
	cssBefore:	   null,  // properties that define the initial state of the slide before transitioning in
	cssAfter:	   null,  // properties that defined the state of the slide after transitioning out
	fxFn:		   null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
	height:		  'auto', // container height
	startingSlide: 0,	  // zero-based index of the first slide to be displayed
	sync:		   1,	  // true if in/out transitions should occur simultaneously
	random:		   0,	  // true for random, false for sequence (not applicable to shuffle fx)
	fit:		   0,	  // force slides to fit container
	containerResize: 1,	  // resize container to fit largest slide
	pause:		   0,	  // true to enable "pause on hover"
	pauseOnPagerHover: 0, // true to pause when hovering over pager link
	autostop:	   0,	  // true to end slideshow after X transitions (where X == slide count)
	autostopCount: 0,	  // number of transitions (optionally used with autostop to define X)
	delay:		   0,	  // additional delay (in ms) for first transition (hint: can be negative)
	slideExpr:	   null,  // expression for selecting slides (if something other than all children is required)
	cleartype:	   0,	  // true if clearType corrections should be applied (for IE)
	nowrap:		   0,	  // true to prevent slideshow from wrapping
	fastOnEvent:   0	  // force immediate transition when triggered manually (via pager or prev/next)
};

})(jQuery);


/*
 * jQuery Cycle Plugin Transition Definitions
 * This script is a plugin for the jQuery Cycle Plugin
 * Examples and documentation at: http://malsup.com/jquery/cycle/
 * Copyright (c) 2007-2008 M. Alsup
 * Version:	 2.22
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
(function($) {

//
// These functions define one-time slide initialization for the named
// transitions. To save file size feel free to remove any of these that you 
// don't need.
//

// scrollUp/Down/Left/Right
$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore.top = next.offsetHeight;
		opts.animOut.top = 0-curr.offsetHeight;
	});
	opts.cssFirst = { top: 0 };
	opts.animIn	  = { top: 0 };
	opts.cssAfter = { display: 'none' };
};
$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore.top = 0-next.offsetHeight;
		opts.animOut.top = curr.offsetHeight;
	});
	opts.cssFirst = { top: 0 };
	opts.animIn	  = { top: 0 };
	opts.cssAfter = { display: 'none' };
};
$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore.left = next.offsetWidth;
		opts.animOut.left = 0-curr.offsetWidth;
	});
	opts.cssFirst = { left: 0 };
	opts.animIn	  = { left: 0 };
};
$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore.left = 0-next.offsetWidth;
		opts.animOut.left = curr.offsetWidth;
	});
	opts.cssFirst = { left: 0 };
	opts.animIn	  = { left: 0 };
};
$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
	$cont.css('overflow','hidden').width();
//	  $slides.show();
	opts.before.push(function(curr, next, opts, fwd) {
		$(this).show();
		var currW = curr.offsetWidth, nextW = next.offsetWidth;
		opts.cssBefore = fwd ? { left: nextW } : { left: -nextW };
		opts.animIn.left = 0;
		opts.animOut.left = fwd ? -currW : currW;
		$slides.not(curr).css(opts.cssBefore);
	});
	opts.cssFirst = { left: 0 };
	opts.cssAfter = { display: 'none' }
};
$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
//	  $slides.show();
	opts.before.push(function(curr, next, opts, fwd) {
		$(this).show();
		var currH = curr.offsetHeight, nextH = next.offsetHeight;
		opts.cssBefore = fwd ? { top: -nextH } : { top: nextH };
		opts.animIn.top = 0;
		opts.animOut.top = fwd ? currH : -currH;
		$slides.not(curr).css(opts.cssBefore);
	});
	opts.cssFirst = { top: 0 };
	opts.cssAfter = { display: 'none' }
};

// slideX/slideY
$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(curr).css('zIndex',1);
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssBefore = { zIndex: 2 };
	opts.animIn	 = { width: 'show' };
	opts.animOut = { width: 'hide' };
};
$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(curr).css('zIndex',1);
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssBefore = { zIndex: 2 };
	opts.animIn	 = { height: 'show' };
	opts.animOut = { height: 'hide' };
};

// shuffle
$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
	var w = $cont.css('overflow', 'visible').width();
	$slides.css({left: 0, top: 0});
	opts.before.push(function() { $(this).show() });
	opts.speed = opts.speed / 2; // shuffle has 2 transitions		 
	opts.random = 0;
	opts.shuffle = opts.shuffle || {left:-w, top:15};
	opts.els = [];
	for (var i=0; i < $slides.length; i++)
		opts.els.push($slides[i]);

	for (var i=0; i < opts.startingSlide; i++)
		opts.els.push(opts.els.shift());

	// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
	opts.fxFn = function(curr, next, opts, cb, fwd) {
		var $el = fwd ? $(curr) : $(next);
		$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
			fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
			if (fwd) 
				for (var i=0, len=opts.els.length; i < len; i++)
					$(opts.els[i]).css('z-index', len-i);
			else {
				var z = $(curr).css('z-index');
				$el.css('z-index', parseInt(z)+1);
			}
			$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
				$(fwd ? this : curr).hide();
				if (cb) cb();
			});
		});
	};
	opts.onAddSlide = function($s) { $s.hide(); };
};

// turnUp/Down/Left/Right
$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore.top = next.cycleH;
		opts.animIn.height = next.cycleH;
	});
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssFirst  = { top: 0 };
	opts.cssBefore = { height: 0 };
	opts.animIn	   = { top: 0 };
	opts.animOut   = { height: 0 };
	opts.cssAfter  = { display: 'none' };
};
$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssFirst  = { top: 0 };
	opts.cssBefore = { top: 0, height: 0 };
	opts.animOut   = { height: 0 };
	opts.cssAfter  = { display: 'none' };
};
$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore.left = next.cycleW;
		opts.animIn.width = next.cycleW;
	});
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssBefore = { width: 0 };
	opts.animIn	   = { left: 0 };
	opts.animOut   = { width: 0 };
	opts.cssAfter  = { display: 'none' };
};
$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.animIn.width = next.cycleW;
		opts.animOut.left = curr.cycleW;
	});
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssBefore = { left: 0, width: 0 };
	opts.animIn	   = { left: 0 };
	opts.animOut   = { width: 0 };
	opts.cssAfter  = { display: 'none' };
};

// zoom
$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
	opts.cssFirst = { top:0, left: 0 }; 
	opts.cssAfter = { display: 'none' };
	
	opts.before.push(function(curr, next, opts) {
		$(this).show();
		opts.cssBefore = { width: 0, height: 0, top: next.cycleH/2, left: next.cycleW/2 };
		opts.cssAfter  = { display: 'none' };
		opts.animIn	   = { top: 0, left: 0, width: next.cycleW, height: next.cycleH };
		opts.animOut   = { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 };
		$(curr).css('zIndex',2);
		$(next).css('zIndex',1);
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
};

// fadeZoom
$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore = { width: 0, height: 0, opacity: 1, left: next.cycleW/2, top: next.cycleH/2, zIndex: 1 };
		opts.animIn	   = { top: 0, left: 0, width: next.cycleW, height: next.cycleH };
	});	   
	opts.animOut  = { opacity: 0 };
	opts.cssAfter = { zIndex: 0 };
};

// blindX
$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
	var w = $cont.css('overflow','hidden').width();
	$slides.show();
	opts.before.push(function(curr, next, opts) {
		$(curr).css('zIndex',1);
	});	   
	opts.cssBefore = { left: w, zIndex: 2 };
	opts.cssAfter = { zIndex: 1 };
	opts.animIn = { left: 0 };
	opts.animOut  = { left: w };
};
// blindY
$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
	var h = $cont.css('overflow','hidden').height();
	$slides.show();
	opts.before.push(function(curr, next, opts) {
		$(curr).css('zIndex',1);
	});	   
	opts.cssBefore = { top: h, zIndex: 2 };
	opts.cssAfter = { zIndex: 1 };
	opts.animIn = { top: 0 };
	opts.animOut  = { top: h };
};
// blindZ
$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
	var h = $cont.css('overflow','hidden').height();
	var w = $cont.width();
	$slides.show();
	opts.before.push(function(curr, next, opts) {
		$(curr).css('zIndex',1);
	});	   
	opts.cssBefore = { top: h, left: w, zIndex: 2 };
	opts.cssAfter = { zIndex: 1 };
	opts.animIn = { top: 0, left: 0 };
	opts.animOut  = { top: h, left: w };
};

// growX - grow horizontally from centered 0 width
$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore = { left: this.cycleW/2, width: 0, zIndex: 2 };
		opts.animIn = { left: 0, width: this.cycleW };
		opts.animOut = { left: 0 };
		$(curr).css('zIndex',1);
	});	   
	opts.onAddSlide = function($s) { $s.hide().css('zIndex',1); };
};
// growY - grow vertically from centered 0 height
$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore = { top: this.cycleH/2, height: 0, zIndex: 2 };
		opts.animIn = { top: 0, height: this.cycleH };
		opts.animOut = { top: 0 };
		$(curr).css('zIndex',1);
	});	   
	opts.onAddSlide = function($s) { $s.hide().css('zIndex',1); };
};

// curtainX - squeeze in both edges horizontally
$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore = { left: next.cycleW/2, width: 0, zIndex: 1, display: 'block' };
		opts.animIn = { left: 0, width: this.cycleW };
		opts.animOut = { left: curr.cycleW/2, width: 0 };
		$(curr).css('zIndex',2);
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssAfter = { zIndex: 1, display: 'none' };
};
// curtainY - squeeze in both edges vertically
$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore = { top: next.cycleH/2, height: 0, zIndex: 1, display: 'block' };
		opts.animIn = { top: 0, height: this.cycleH };
		opts.animOut = { top: curr.cycleH/2, height: 0 };
		$(curr).css('zIndex',2);
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssAfter = { zIndex: 1, display: 'none' };
};

// cover - curr slide covered by next slide
$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
	var d = opts.direction || 'left';
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore = opts.cssBefore || {};
		opts.cssBefore.zIndex = 2;
		opts.cssBefore.display = 'block';
		
		if (d == 'right') 
			opts.cssBefore.left = -w;
		else if (d == 'up')	   
			opts.cssBefore.top = h;
		else if (d == 'down')  
			opts.cssBefore.top = -h;
		else
			opts.cssBefore.left = w;
		$(curr).css('zIndex',1);
	});	   
	if (!opts.animIn)  opts.animIn = { left: 0, top: 0 };
	if (!opts.animOut) opts.animOut = { left: 0, top: 0 };
	opts.cssAfter = opts.cssAfter || {};
	opts.cssAfter.zIndex = 2;
	opts.cssAfter.display = 'none';
};

// uncover - curr slide moves off next slide
$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
	var d = opts.direction || 'left';
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		opts.cssBefore.display = 'block';
		if (d == 'right') 
			opts.animOut.left = w;
		else if (d == 'up')	   
			opts.animOut.top = -h;
		else if (d == 'down')  
			opts.animOut.top = h;
		else
			opts.animOut.left = -w;
		$(curr).css('zIndex',2);
		$(next).css('zIndex',1);
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
	if (!opts.animIn)  opts.animIn = { left: 0, top: 0 };
	opts.cssBefore = opts.cssBefore || {};
	opts.cssBefore.top = 0;
	opts.cssBefore.left = 0;
	
	opts.cssAfter = opts.cssAfter || {};
	opts.cssAfter.zIndex = 1;
	opts.cssAfter.display = 'none';
};

// toss - move top slide and fade away
$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
	var w = $cont.css('overflow','visible').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$(curr).css('zIndex',2);
		opts.cssBefore.display = 'block'; 
		// provide default toss settings if animOut not provided
		if (!opts.animOut.left && !opts.animOut.top)
			opts.animOut = { left: w*2, top: -h/2, opacity: 0 };
		else
			opts.animOut.opacity = 0;
	});	   
	opts.onAddSlide = function($s) { $s.hide(); };
	opts.cssBefore = { left: 0, top: 0, zIndex: 1, opacity: 1 };
	opts.animIn = { left: 0 };
	opts.cssAfter = { zIndex: 2, display: 'none' };
};

// wipe - clip animation
$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.cssBefore = opts.cssBefore || {};
	var clip;
	if (opts.clip) {
		if (/l2r/.test(opts.clip))
			clip = 'rect(0px 0px '+h+'px 0px)';
		else if (/r2l/.test(opts.clip))
			clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
		else if (/t2b/.test(opts.clip))
			clip = 'rect(0px '+w+'px 0px 0px)';
		else if (/b2t/.test(opts.clip))
			clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
		else if (/zoom/.test(opts.clip)) {
			var t = parseInt(h/2);
			var l = parseInt(w/2);
			clip = 'rect('+t+'px '+l+'px '+t+'px '+l+'px)';
		}
	}
	
	opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
	
	var d = opts.cssBefore.clip.match(/(\d+)/g);
	var t = parseInt(d[0]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]);
	
	opts.before.push(function(curr, next, opts) {
		if (curr == next) return;
		var $curr = $(curr).css('zIndex',2);
		var $next = $(next).css({
			zIndex:	 3,
			display: 'block'
		});
		
		var step = 1, count = parseInt((opts.speedIn / 13)) - 1;
		function f() {
			var tt = t ? t - parseInt(step * (t/count)) : 0;
			var ll = l ? l - parseInt(step * (l/count)) : 0;
			var bb = b < h ? b + parseInt(step * ((h-b)/count || 1)) : h;
			var rr = r < w ? r + parseInt(step * ((w-r)/count || 1)) : w;
			$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
			(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
		}
		f();
	});	   
	opts.cssAfter  = { };
	opts.animIn	   = { left: 0 };
	opts.animOut   = { left: 0 };
};

})(jQuery);
