var pagers = [];

$(document).ready(function () {
	init_leadImages();
	init_latestNews();
	init_recentPhotos();
});

function init_leadImages(){
	var images = $('.home-lead-image-container .views-row');
	if(images.length > 1){
		$('.home-lead-image-container').append('<div class="pager-container" />');
		
		var pager = {};
		pager.targets = images;
		pager.pagerContainer = $('.home-lead-image-container .pager-container');
		pager.type = 'fade';
		pager.parent = $('.latest-news .view-content');
		pager.controlNumbers = false;
		buildPager(pager);
	}
}

function init_latestNews(){
	var articles = $('.latest-news .views-row');
	
	var count = 0;
	for(i=0; i<articles.length; i++){
		count++;
		if(count == 1) $('.latest-news .view-content').append('<div class="slide" />');
		$('.latest-news .slide:last').append($(articles[i]));
		if(count == 2) count = 0;
	}
	
	var slides = $('.latest-news .slide');
	if(slides.length > 1){
		$('.latest-news .views-row').show();

		var height = 0;
		slides.each(function(){
			if($(this).height() > height) height = $(this).height();
		});
		
		$('.latest-news .view-content').css({'height': height});
		$('.latest-news').append('<div class="pager-container" />');
		
		var pager = {};
		pager.targets = slides;
		pager.pagerContainer = $('.latest-news .pager-container');
		pager.type = 'news-slide';
		pager.parent = $('.latest-news .view-content');
		pager.controlNumbers = false;
		buildPager(pager);
	}

}

function init_recentPhotos(){
	var imgs = $('.home-photos .views-row');
	
	var count = 0;
	for(i=0; i<imgs.length; i++){
		count++;
		if(count == 1) $('.home-photos .view-content').append('<div class="slide" />');
		$('.home-photos .slide:last').append($(imgs[i]));
		if(count == 3) count = 0;
	}
	
	var slides = $('.home-photos .slide');
	if(slides.length > 1){
		$('.home-photos .view-content').append('<div class="pager-container" />');
		
		var pager = {};
		pager.targets = slides;
		pager.pagerContainer = $('.home-photos .pager-container');
		pager.type = 'photo-slide';
		pager.parent = $('.home-photos .view-content');
		pager.controlNumbers = false;
		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 = false;
        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 == "news-slide") {
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
        	pager.controlStepsText = true;
        	pager.controlEnds = false;
            pager.transition = "slide";
            pager.timeout = 0;
        }else if (pager.type == "photo-slide") {
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
        	pager.controlStepsText = false;
        	pager.controlEnds = false;
            pager.transition = "slide";
            pager.timeout = 0;
        }else if (pager.type == "fade") {
        	pager.controlNumbers = false;
        	pager.controlSteps = true;
        	pager.controlStepsText = true;
        	pager.controlEnds = false;
            pager.transition = "fade";
            pager.timeout = 7000;
		}
        

        if (pager.controlSteps ) {
            pager.pagerHtml += '<a class="pager-control pager-control-step pager-prev" href="#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 + '" href="#' + i + '" 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" href="#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>';
        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);
            
            return false;
        });

        // 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);
            }
            
            return false;
        });
        

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