    var currentIndex = 0,
        list = [],
        currentTimeout = false,
        locked = false,
        lastIndex;
    var Switch = function() {
    	if(arguments.length > 0 && currentIndex == (parseInt(arguments[0]) - 1))
    	{
    		locked = false;
    		return;
    	}
        $(list[currentIndex]).fadeOut(1000);
        if (arguments.length == 1) {
        	lastIndex = currentIndex + 1;
            currentIndex = parseInt(arguments[0]) - 1;
        } else {
            currentIndex = (currentIndex >= list.length - 1) ? 0 : currentIndex + 1;
        	lastIndex = currentIndex;
        }
        setTimeout(function() {
            $('.galleryButtons div').removeClass('active');
            $('.galleryButtons div:nth-child(' + (currentIndex + 1) + ')').toggleClass('active');
            
            $(list[currentIndex]).fadeIn(1000, function() {
            	if(locked == false)
                	Delay();
                	
            	locked = false;
            });
        }, 200);
    };
    
    var Delay = function() {
        currentTimeout = setTimeout(function() {
            Switch();
        }, 6000);
    };
    
    var Start = function(images) {
        list = images;
        Delay();
    };
    
    function startGallery() {
        if ($('.galleryButtons #1').length > 0) {
            $('.galleryButtons div').css('cursor', 'pointer');
            $('.galleryButtons div').click(function() {
            	if (locked)
            		return false;
            
            	locked = true;
                if (currentTimeout) clearTimeout(currentTimeout);
                Switch($(this).attr('id'));
                
				return false;
            });
            Start($('.gallery div.image'));
        }
    }

(function($) {
    
    function loadRestOfArray() {
	  $(arrayOfFiles).each(function(index) {
			var object = '<img class ="shadow rounded" src="' + this + '" />';
		$(".gallery").append('<div style="z-index: ' + (arrayOfFiles.length - index) + '; display: none;" class="image">' + object + '</div>');
		$(".galleryButtons").append('<div class="galleryButton" id="' + (index + 2) + '"></div>');
	  });
		
		$('.stoppable').parent().click(function(){
			clearTimeout(currentTimeout);
		});
	    	
	    startGallery();
    }
    
    function injectElement(element) {
    	var div = $('<div></div>');
    	div.addClass('image');
    	div.css('z-index', arrayOfFiles.length + 1);
    	div.append(element);
    	$('.gallery').append(div);
    	if(arrayOfFiles.length != 0)
			$(".galleryButtons").append('<div class="galleryButton active" id="1"></div>');
    	
    }
    
    function setupGallery() {
    	if (typeof arrayOfFiles == 'undefined' || arrayOfFiles.length == 0)
    		return;
    	
    	var element = arrayOfFiles.shift(),
    		object,
    		loadCallback = function() {};
    	
    	if (arrayOfFiles.length > 0)
    		loadCallback = loadRestOfArray;
    	
    	switch (element.substring(element.length - 3)) {
    		case 'jpg':
    		case 'peg':
    		case 'gif':
    		case 'bmp':
    		case 'png':
    			object = $('<img />');
    			object.attr('src', element);
    			object.bind('load', loadCallback);
    			injectElement(object);
    			break;
    	}
    }
    $(document).ready(function() {
        setupGallery();
    });
})(jQuery);
