var pagers = [];

$(document).ready(function () {
    initHomeThisWeekPager();
    initHomeComingSoonPager();
    initHomePressPager();
    initHomeGallery();
    //initArtistGallery();
});

function groupEvery(jparent, jItems, wrapClass, itemLimit){
	
	var itemCount = itemLimit;
	
	jItems.each(function(){
    		
    	itemCount += 1;
    	if(itemCount >= itemLimit){
    			
    		$(this).parent().append('<div class="'+wrapClass+'"></div>');
    		itemCount = 0;
    				
    	}
    	jparent.find("."+wrapClass+":last").append($(this));
    			
    });

}

function initHomeThisWeekPager() {

    $("#block-views-Grids-block_2").each(function () {
    
    	groupEvery($(this), $(this).find(".views-row"), 'row-group', 8)
    
	    var items = $(this).find(".row-group");
    	
    	if(items.length > 1){
    	   	$(this).prepend('<div class="pager-container"></div>')
        	makePager(items, $(this).find(".pager-container"), "gridPager");
        }
    });
    
}

function initHomeComingSoonPager() {

    $("#block-views-Grids-block_1").each(function () {
    
    	groupEvery($(this), $(this).find(".views-row"), 'row-group', 8)
    
	    var items = $(this).find(".row-group");
    	
    	if(items.length > 1){
    	   	$(this).prepend('<div class="pager-container"></div>')
        	makePager(items, $(this).find(".pager-container"), "gridPager");
        }
    });
    
}



function initHomePressPager() {

    $("#block-views-Press_Releases-block_7").each(function () {
    
    	// take the heading out of block 7 and in to the top of the column 
    	// also create a container for the heading and the press pager.
    	
    	$('.panel-left-thin').prepend('<div class="press-pager-container"><div class="press-heading"><div class="pager-container"></div></div><div class="page-this"></div></div>');
   		$('.panel-left-thin .press-heading').prepend($("#block-views-Press_Releases-block_7 h2"));
   		
   		
   		$("#block-views-Press_Releases-block_6 .views-row").addClass('press-small')
   		// create the row-groups
   		
   		// the first row-group has the large panel and the first two small panels
   		$('.panel-left-thin .page-this').append('<div class="row-group row-group-first"></div>');
   		$('.panel-left-thin .page-this .row-group-first').append($("#block-views-Press_Releases-block_7"));
   		$('.panel-left-thin .page-this .row-group-first').append($("#block-views-Press_Releases-block_6 .views-row:first"));
   		$('.panel-left-thin .page-this .row-group-first').append($("#block-views-Press_Releases-block_6 .views-row:first"));
   		
   		var rowsPerGroup = 4;
   		var rowCount = rowsPerGroup;
   		$("#block-views-Press_Releases-block_6 .views-row").each(function(){
   			rowCount++;
   			if(rowCount >= rowsPerGroup){
   				rowCount = 0;
   				$('.panel-left-thin .page-this').append('<div class="row-group row-group-normal" style="display:none;"></div>');
   			}
   			$('.panel-left-thin .page-this .row-group:last').append($(this));
   		});
   		$("#block-views-Press_Releases-block_6").remove();
   		
   		
   		
    	var images = $(".panel-left-thin .page-this .row-group");
    	
    	if(images.length > 1){
        	makePager(images, $('.panel-left-thin .pager-container'), "gridPager");
        }
        
    });

}

function initHomeGallery() {

    $("#block-views-Promotions-block_1").each(function () {
    	var images = $(this).find(".views-row");
    	
    	if(images.length > 1){
    	   	$(this).prepend('<div class="pager-container"></div>')
        	makePager(images, $(this).find(".pager-container"), "homegallery");
        }
    });

}

function initArtistGallery() {

    $("#block-views-ArtistEvent-block_2 .right").each(function () {
    	var images = $(this).find("img");
    	
    	if(images.length > 1){
    	   	$(this).prepend('<div class="pager-container"></div>')
        	makePager(images, $(this).find(".pager-container"), "standardgallery");
        }
    });

}

function makePager(targets, pagerContainer, pagerType) {
    // galleryType: The type of gallery - differnt galleies have different transitions / controls etc

    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 = false;
            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;
        }

        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 {
       		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);
    }

    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;
}
