var pagers = [];

$(document).ready(function () {
	initProjectsPager();
	initHomeGallery();
});

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 initProjectsPager() {

    $("#block-views-Projects-block_3, #block-views-Services-block_2").each(function () {
        
	    var items = $(this).find(".images .field-item");
    	
    	if(items.length > 1){
    	   	$(this).find(".images-container").prepend('<div class="pager-container"></div>')
    	   	
        	var pager = {};
        	pager.targets = items;
        	pager.pagerContainer = $(this).find(".pager-container");
        	pager.type = "projectsPager";
        	pager.parent = $(this).find(".images:first");
        	buildPager(pager);
        }
    });
    
}

function initHomeGallery(){
	$('#block-views-Home-block_17').each(function(){
		var items = $(this).find('.views-row');
		if(items.length > 1){
			$(this).css({ 'width': 980, 'height': 450 });
			var pager = {};
			pager.targets = items;
			pager.pagerContainer = $(this).append('<div class="pager-container" />').find('.pager-container');
			pager.type = 'fade';
			buildPager(pager);
		}
	})	
}



function buildPager(pager) {
    // galleryType: The type of gallery - differnt galleies have different transitions / controls etc
    
    if (pager.targets.length > 1) {
        var count = 0;

        // 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 = 10000;
        pager.speedidle = 1000;
        pager.speedactive = 500;

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

        // pagerType settings
        if (pager.type == "projectsPager") {
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
        	pager.controlStepsText = true;
        	pager.controlEnds = false;
            pager.transition = "trainslide";
            pager.timeout = 0;
        }
        

        if (pager.controlSteps ) {
            pager.pagerHtml += '<a class="pager-control pager-control-step pager-prev" command="prev">';
            if (pager.controlStepsText) {
                pager.pagerHtml += '&lsaquo; Previous';
            }
            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.pagerHtml += '<a class="pager-control pager-control-step pager-next" command="next">';
            if (pager.controlStepsText) {
                pager.pagerHtml += 'Next &rsaquo;';
            }
            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>';
        pager.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':'block', 'position': 'absolute', 'top': 0, 'left': 0 });
        } else if (pager.transition == "trainslide"){
        	pager.targets.each(function(){
       			$(this).css({ 'z-index': 50, 'position':'relative', 'float':'left'});
        	});
        } 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);
    }
    if (pager.transition == "trainslide"){
    	
        pager.parent.find(".remove").remove();
        pager.parent.find(".field-item").stop(true, true).css({'left':0, 'right':0});
        
        
        if (direction == "backward") {
        	// backwards
        	
        	// shift all images right
        	
        	var last = pager.parent.find(".field-item:last");
    		var shiftX = last.width();
    		
    		var clone = last.clone();
    		pager.parent.prepend(clone);
    		clone.css({'opacity':0});
        	var items = pager.parent.find(".field-item");
        	items.css({'left': -shiftX});
    		
    		last.addClass('remove').animate({ 'left': 0, 'opacity':0}, speed, function(){
    			$(this).remove();
    		});
    		
    		for(var i = 0; i < items.length-1; i++){
        		$(items.get(i)).animate({ 'left': 0, 'opacity':1}, speed,  function(){
    				$(this).css({'left':0, 'right':0});
    			});
    		}
    		
        	        	
        } else {
        	// forwards
        	
        	// shift all images left
        	
        	var first = pager.parent.find(".field-item:first");
    		var shiftX = first.width();
    		
    		var clone = first.clone();
    		pager.parent.append(clone);
    		clone.css({'opacity':0});
    		
        	var items = pager.parent.find(".field-item");
    		
    		first.addClass('remove').animate({ 'left': -shiftX, 'opacity':0}, speed, function(){
    			$(this).remove();
    		});
    		
    		for(var i = 1; i < items.length; i++){
        		$(items.get(i)).animate({ 'left': -shiftX, 'opacity':1}, speed,  function(){
    				$(this).css({'left':0, 'right':0});
    			});
    		}
        	        
        }
    	/*
        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;
}
