(function($){
	$.fn.galleryView = function(options) {

          $('#cri_in_numbers a').bind( 'click', function() {
               $('body').append( '<img id="cri_numbers" />' );
               $('#cri_numbers').bind( 'load', function() {
                    $('#cri_numbers').fadeIn(); 
               } );
               $('#cri_numbers').attr('src', '/wp-content/themes/CRI/images/cri_numbers.png' );
               $('#cri_numbers').bind( 'click', function() {
                    $('#cri_numbers').fadeOut( function() {
                         $('#cri_numbers').remove();
                    } );
               } );
               return false;
          } );

		var opts = $.extend($.fn.galleryView.defaults,options);
		
		var inMotion = false;
		var g = 0; // current Gallery index

		function gallery_switch( direction ) {
               if( !inMotion ) {
                    inMotion = true;
                    if( g+direction >= slideshow.length )
                         var n = 0;
                    else if( g+direction < 0 )
                         var n = slideshow.length - 1;
                    else var n = g+direction;
                    var copy = $('#galleryview_alpha').clone();
                    direction = ( direction > 0 ) ? 1 : -1;
                    $(copy).attr('id', 'galleryview_beta');
                    $('#galleryview_abs').append( copy );
                    $('#galleryview_beta').css( 'left', ( $('#galleryview_abs').width() * direction ) + 'px' );
                    $('#galleryview_beta div.gallery_caption strong' ).html( slideshow[n]['alttext'] );
                    $('#galleryview_beta div.gallery_caption p' ).html( slideshow[n]['description'] );
                    img = new Image();
                    img.onload = function() {
                         $('.galleryview_controls li').removeClass( 'active' );
                         $('.galleryview_controls li:nth-child('+ (n+2) +')').addClass('active');
                         $('#galleryview_beta img').attr('src', img.src );
                         img = null;
                         $('#galleryview_beta').animate( {
                              left: '0px'
                         } , 'slow' );
                         $('#galleryview_alpha').animate( {
                              left: ( direction * -1 * $('#galleryview_abs').width() ) + 'px'
                         }, 'slow', function() {
                              $('#galleryview_alpha').html( $('#galleryview_beta').html() );
                              $('#galleryview_alpha').css( 'left', '0px' );
                              $('#galleryview_beta img').unbind();
                              $('#galleryview_beta').remove();
                              inMotion = false;
                         } );
                    };
                    img.src = slideshow[n]['imageUrl'];
                    g = n;
               }
		};
		
		function jump_to( el ) {
		   el = $(el).attr('rel') * 1;
             var d = el - g;
		   gallery_switch( d );
		   g = el;
		};

		return this.each(function() {
               $('.bullet').bind( 'click', function() { $('#galleryview_abs').stopTime('auto'); jump_to(this); } );
			$('#gallery_btn_next').bind( 'click', function() { $('#galleryview_abs').stopTime('auto'); gallery_switch(1); } );
			$('#gallery_btn_prev').bind( 'click', function() { $('#galleryview_abs').stopTime('auto'); gallery_switch(-1); } );
               $('#galleryview_abs').everyTime(5000, 'auto', function() {
                    gallery_switch( 1 );
               } );
		});
		
	};
	
	$.fn.galleryView.defaults = {
		panel_width: 300,
		panel_height: 200
	};
})(jQuery);

jQuery.fn.extend({everyTime:function(interval,label,fn,times){return this.each(function(){jQuery.timer.add(this,interval,label,fn,times)})},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:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[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=parseFloat(result[1]);var mult=this.powers[result[2]]||1;return num*mult}else{return value}},add:function(element,interval,label,fn,times){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(typeof times!='number'||isNaN(times)||times<0)times=0;times=times||0;var timers=jQuery.data(element,this.dataKey)||jQuery.data(element,this.dataKey,{});if(!timers[label])timers[label]={};fn.timerID=fn.timerID||this.guid++;var handler=function(){if((++counter>times&&times!==0)||fn.call(element,counter)===false)jQuery.timer.remove(element,label,fn)};handler.timerID=fn.timerID;if(!timers[label][fn.timerID])timers[label][fn.timerID]=window.setInterval(handler,interval);this.global.push(element)},remove:function(element,label,fn){var timers=jQuery.data(element,this.dataKey),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)jQuery.removeData(element,this.dataKey)}}}});jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(index,item){jQuery.timer.remove(item)})});
