var pagers = [];

$(document).ready(function () {
    initArtistGallery();
});

function initArtistGallery() {

    $("#block-views-ArtistEvent-block_2 .right").each(function(){
       	var images = $(this).find("img");
    	
    	if(images.length > 1){
    	
    		// Copy first two images to end, and last image to start
        	
    		$(this).css({'height': '336px'});
    		
    	   	$(this).prepend('<div class="pager-container"></div>');
        	
        	makePager(images, $(this).find(".pager-container"), "artistGallery", $(this));
        }
    });

}

function makePager(targets, pagerContainer, pagerType, mutualParent) {
    // galleryType: The type of gallery - differnt galleies have different transitions / controls etc
	// mutualParent is where extra images are added;

    if (targets.length > 1) {

        var count = 0;
        var pager = {};

        // defaults
        pager.pagerHtml = "";
        pager.controlNumbers = true;
        pager.controlNumbersText = true;
        pager.controlSteps = true;
        pager.controlStepsText = true;
        pager.controlEnds = true;
        pager.controlEndsText = true;
        pager.controlsCenter = false;
        pager.timeout = 8000;
        pager.speedidle = 1000;
        pager.speedactive = 500;

        // basics
        pager.index = pagers.length
        pager.targets = targets;
        pager.current = 0;
        pager.transition = "fade";

        // pagerType settings
        pager.type = pagerType;
        if (pager.type == "standardgallery") {
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
            pager.controlEnds = false;
            pager.transition = "fade";
            pager.timeout = 5000;
        } else if (pager.type == "homegallery") {
        	pager.controlNumbers = true;
        	pager.controlSteps = true;
            pager.controlEnds = false;
            pager.transition = "fade";
            pager.timeout = 5000;
        } else if (pager.type == "gridPager") {
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
        	pager.controlStepsText = true;
        	pager.controlEnds = false;
            pager.transition = "slide";
            pager.timeout = 0;
        } else if (pager.type == "artistGallery"){
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
            pager.controlEnds = false;
            pager.transition = "continuous-slide";
        	pager.speedidle = 2000;
            pager.timeout = 4000;
        }

        if (pager.controlSteps && pager.type != "homegallery") {
            pager.pagerHtml += '<a class="pager-control pager-control-step pager-prev" command="prev" >';
            if (pager.controlStepsText) {
                pager.pagerHtml += '&lt;';
            }
            pager.pagerHtml += '</a>';
        }

        if (pager.controlNumbers) {
            for (var i = 0; i < pager.targets.length; i++) {
                var classes = "pager-control pager-control-number ";
                classes += " pager-control-number-" + i + " ";
                if (i == 0) { classes += " pager-control-first "; }
                if (count == pager.targets.length - 1) { classes += " pager-control-last "; }
                pager.pagerHtml += '<a class="' + classes + '" command="' + i + '" >';
                if (pager.controlNumbersText) {
                    pager.pagerHtml += (i + 1) ;
                }
                pager.pagerHtml += '</a>';
            }
        }

        if (pager.controlSteps && pager.type == "homegallery") {
            pager.pagerHtml += '<a class="pager-control pager-control-step pager-prev" command="prev" >';
            if (pager.controlStepsText) {
                pager.pagerHtml += '&lt;';
            }
            pager.pagerHtml += '</a>';
        }
        if (pager.controlSteps) {
            pager.pagerHtml += '<a class="pager-control pager-control-step pager-next" command="next" >';
            if (pager.controlStepsText) {
                pager.pagerHtml += '&gt;';
            }
            pager.pagerHtml += '</a>';
        }

        // finish pager
        if (pager.controlsCenter) {
            pager.pagerHtml = '<div class="c1"><div class="c2"><div class="c3">' + pager.pagerHtml + '</div></div></div>';
        }
        pager.pagerHtml = '<div class="pager pager-' + pager.index + ' pager-' + pager.type + '" command="' + pager.index + '">' + pager.pagerHtml + '</div>';
        pagerContainer.append(pager.pagerHtml);
        pager.controls = $(".pager-" + pager.index + " .pager-control");

        // pager events
        // page by numbers
        pager.controls.filter(".pager-control-number").click(function () {

            var pager = toPager($(this).parents(".pager").attr("command"))
            var targetIndex = parseInt($(this).attr("command"));

            showPage(pager, targetIndex, pager.speedactive);
        });

        // page by steps
        pager.controls.filter(".pager-control-step").click(function () {

            var pager = toPager($(this).parents(".pager").attr("command"));

            if ($(this).attr("command") == "prev") {
                prevPage(pager, pager.speedactive);
            } else {
                nextPage(pager, pager.speedactive);
            }
        });

        if (pager.timeout > 0) {
            pager.timer = setTimeout("nextPage(" + pager.index + ")", pager.timeout);
        }

        if (pager.transition == "fade") {
       		pager.targets.css({ 'z-index': 50, 'opacity': 0, 'display':'inline' });
        }else if(pager.transition == "continuous-slide"){
        
        	// temp 
        	pager.targets.each(function(){
        		$(this).after($(this).clone().addClass('img-first-copy'));
        		$(this).after($(this).clone().addClass('img-last-copy'));
        	});
        	
        	pager.firstcopy = mutualParent.find('.img-first-copy');
        	pager.lastcopy = mutualParent.find('.img-last-copy');
        	
        	pager.allimages = mutualParent.find('img');
        
        	pager.allimages.css({ 'position': 'absolute', 'top': '30px' });
        	//pager.firstcopy.filter(".img-first-copy").css({ 'position': 'absolute', 'top': '20px' });
        	//pager.lastcopy.filter(".img-last-copy").css({ 'position': 'absolute', 'top': '40px' });
        	
        	pager.centerOffset = 694/2;
        	
        	var imagePosistion = pager.centerOffset -$(pager.targets.get(0)).width()/2-2;
        	var targetsWidth = 0;
        	
        	// Set position of pages, relative to previous page
	    	pager.targets.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    		targetsWidth += $(this).width()-2;
	    	});
	    	
	    	imagePosistion = pager.centerOffset -$(pager.targets.get(0)).width()/2 - targetsWidth + 2;
	    	pager.firstcopy.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
	    	
	    	imagePosistion = pager.centerOffset -$(pager.targets.get(0)).width()/2 + targetsWidth - 2;
	    	pager.lastcopy.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
	    	
	    	//pager.current = 1;
        	
        }else{
       		pager.targets.css({ 'z-index': 50, 'position': 'absolute', 'left': 0, 'opacity': 0 });
        }


        pager.targets.filter(':first').addClass("active");
        pager.targets.filter(':first').css({ 'z-index': 51, 'opacity': 1 });
        pager.controls.filter('.pager-control-first').addClass("active").addClass("pager-control-number-active");

        pagers.push(pager);

        return pager;
    } 
    return false;
}

function getCurrentPage(pager) {
    pager = toPager(pager);

    var current = $(pager.targets.get(pager.current));

    if (!current || current.length == 0) {
        current = pager.targets.filter(":first");
    }
    return current;
}

function nextPage(pager, speed) {
    pager = toPager(pager);

    var current = getCurrentPage(pager);

    var targetIndex = pager.current + 1;
    if (targetIndex >= pager.targets.length) {
        targetIndex = 0;
    }

    showPage(pager, targetIndex, speed, "forward");
}

function prevPage(pager, speed) {
    pager = toPager(pager);

    var current = getCurrentPage(pager);

    var targetIndex = pager.current - 1;
    if (targetIndex < 0) {
        targetIndex = pager.targets.length - 1;
    }

    showPage(pager, targetIndex, speed, "backward");
}

function showPage(pager, targetIndex, speed, direction) {
    pager = toPager(pager);

    if (pager.current == targetIndex) {
        return false;
    }

    if (!speed || speed == "undefined") {
        speed = pager.speedidle;
    }
    if (!direction || direction == "undefined") {
        if (targetIndex < pager.current) {
            direction = "backward";
        }
    }

    var current = getCurrentPage(pager);
    var target = $(pager.targets.get(targetIndex));
    if (!target || target.length == 0) {
        return false;
    }

    pager.current = targetIndex;

    pager.targets.removeClass("active");
    target.addClass("active");

    if (pager.transition == "fade") {

        pager.targets.stop(true, true);
        pager.targets.css({ 'z-index': 50 });

        current.css({ 'z-index': 51 });

        target.css({ 'z-index': 52, 'opacity': 0 });
        target.animate({ 'opacity': 1 }, speed);
    }
    if (pager.transition == "slide" || pager.transition == "slide-h") {
        pager.targets.stop(true, true);

        var startX = target.width();
        var finishX = -startX;
        if (direction == "backward") {
            startX = -startX;
            finishX = -finishX;
        }

        pager.targets.css({ 'z-index': 50, 'position': 'absolute', 'left': startX });

        current.css({ 'z-index': 51, 'left': 0, 'opacity': 1 });
        current.animate({ 'left': finishX, 'opacity': 0 }, speed);

        target.css({ 'z-index': 52, 'left': startX, 'opacity': 0 , 'display':'block'});
        target.animate({ 'left': 0, 'opacity': 1 }, speed, function(){
        	
        });

    }
    if (pager.transition == 'continuous-slide'){
    

		
		pager.allimages.stop(true);
		
        var targetsWidth = 0;
        	
	    pager.targets.each(function(i){
	    	targetsWidth += $(this).width();-1
	    });
	    	
        if (direction != "backward" && targetIndex == 0) {
        	
        	var imagePosistion = pager.centerOffset +$(pager.targets.get(pager.targets.length - 1)).width()/2 -2;
	    	pager.targets.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
	    	imagePosistion = pager.centerOffset +$(pager.targets.get(pager.targets.length - 1)).width()/2 - targetsWidth +2;
	    	pager.firstcopy.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
	    	
	    	imagePosistion = pager.centerOffset +$(pager.targets.get(pager.targets.length - 1)).width()/2 + targetsWidth -2;
	    	pager.lastcopy.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
        } 
        
        if (direction == "backward" && targetIndex == pager.targets.length - 1) {
        
        	var imagePosistion = pager.centerOffset -$(pager.targets.get(0)).width()/2 - targetsWidth -2;
	    	pager.targets.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
	    	imagePosistion = pager.centerOffset  -$(pager.targets.get(0)).width()/2 - targetsWidth*2 +2;
	    	pager.firstcopy.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
	    	
	    	imagePosistion = pager.centerOffset  -$(pager.targets.get(0)).width()/2 -2;
	    	pager.lastcopy.each(function(i){
	    		$(this).css({ 'left': imagePosistion + 'px' });
	    		imagePosistion += $(this).width()-2;
	    	});
        }
        
        
		
		
		var targetImagePosition = 0;
		for(var i=0; i<targetIndex; i++){
			targetImagePosition -= $(pager.targets.get(i)).width();
		}
		
		/*
    	var width = 0;
		for(var i=0; i<targetIndex; i++) width += $(pager.targets.get(i)).width();
		width = (0 - width) + ((694 - target.width()) / 2);
		*/

        var imagePosistion = pager.centerOffset -$(pager.targets.get(targetIndex)).width()/2 + targetImagePosition;
    	pager.targets.each(function(){
    		$(this).animate({ 'left': imagePosistion + 'px' }, speed);
    		imagePosistion += $(this).width();
    	});
    	
	    imagePosistion = pager.centerOffset -$(pager.targets.get(targetIndex)).width()/2  + targetImagePosition - targetsWidth;
	    pager.firstcopy.each(function(i){
	    	$(this).animate({ 'left': imagePosistion + 'px' }, speed);
	    	imagePosistion += $(this).width();
	    });
	    	
	    imagePosistion = pager.centerOffset -$(pager.targets.get(targetIndex)).width()/2  + targetImagePosition + targetsWidth;
	    pager.lastcopy.each(function(i){
	    	$(this).animate({ 'left': imagePosistion + 'px' }, speed);
	    	imagePosistion += $(this).width();
	    });
	    
	    
    }

    pager.controls.removeClass('active').removeClass('pager-control-number-active');
    pager.controls.filter(".pager-control-number-" + targetIndex).addClass("active").addClass("pager-control-number-active");

    if (pager.timeout > 0) {
        clearTimeout(pager.timer);
        pager.timer = setTimeout("nextPage(" + pager.index + ")", pager.timeout);
    }
}

function toPager(pager) {
    //allows function to be passed either the gallery (default) or the galler index (from timeouts)
    if (typeof pager != "object") {
        return pagers[pager];
    }
    return pager;
}
