/*
 *	Jquery regex selector.
 */
jQuery.expr[':'].regex = function(elem, index, match) {
    var matchParams = match[3].split(','),
        validLabels = /^(data|css):/,
        attr = {
            method: matchParams[0].match(validLabels) ? 
                        matchParams[0].split(':')[0] : 'attr',
            property: matchParams.shift().replace(validLabels,'')
        },
        regexFlags = 'ig',
        regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags);
    return regex.test(jQuery(elem)[attr.method](attr.property));
}


/*
 *	Gallery
 */
var gallery_init = false;
var gallery_pause = false;
var gallery_amount_of_pages;
var gallery_height;
var gallery_margin_top;
var gallery_selected_thumb;
var gallery_selected_page;
var gallery_selected_page_span;
var gallery_current_image_on_gallery = 1;
var gallery_current_image_on_page = 1;
var gallery_current_page = 1;
var gallery_config = {
	max_images : 13,
	show_title : true,
	show_pages : true,
	show_overlay : true,
	gallery_loading : ''
};

function galleryInit(gallery_params) {
	for (attr in gallery_params) { 
		gallery_config[attr] = gallery_params[attr]; 
	}
	
	$('body').append('<div id="gallery-container"></div>');
	$('#gallery-container').append('<div id="gallery-overlay" onclick="galleryClose();"></div><div id="gallery-wrapper"><div id="gallery-wrapper-inner"></div></div>');
	$('#gallery-wrapper-inner').append('<div id="gallery-body"></div>');
	$('#gallery-body').append('<div id="gallery-body-inner"></div><div id="gallery-body-info"></div>');

	$('#gallery-body-inner').append('<img id="gallery-main-img" src="'+ gallery_config['gallery_loading'] +'" />');
	
	if(gallery_config['show_overlay']) {
		$('#gallery-body-inner').append('<div id="gallery-overlay-left"></div><div id="gallery-overlay-opacity"></div><div id="gallery-overlay-text"></div><div id="gallery-overlay-right"></div>');	
	}
	
	if(gallery_config['show_pages']) {
		$('#gallery-body-inner').append('<div id="gallery-thumbs"></div>');
	}
	
	$('#gallery-body-info').append('<div id="gallery-page-scroll"></div>');
	
	if(gallery_config['show_title']) {
		$('#gallery-page-scroll').append('<h1 id="gallery-title"></h1>');
	}
	
	$('#gallery-page-scroll').append('<a id="gallery-close">X</a> ');
	
	if(gallery_config['show_pages']) {
		$('#gallery-page-scroll').append('<div id="gallery-pages"></div> ');
		$('#gallery-page-scroll').append('<div id="gallery-simple-navigation"><a id="gallery-prev">> Vorige</a><a id="gallery-next">Volgende</a></div> ');
	}
	
	
	
	var gallery_wrapper = $('#gallery-wrapper');
	gallery_height = gallery_wrapper.height();
	gallery_margin_top = "-"+ (gallery_height / 2) +"px";
	gallery_wrapper.css('margin-top', gallery_margin_top);
	
	$('#gallery-container').css('display','none');
	
	var current_i = 0;
	
	$('a:regex(rel,gallery[0-9])').each(function() {
		var thumb_class = 'gallery_thumb'+current_i;
		$(this).addClass(thumb_class);
		current_i++;
		
		$(this).click(function(e) {
			e.preventDefault();
			galleryOpen($(this).attr('rel'), $(this).attr('title'),thumb_class);
		});
	});
	
	gallery_init = true;
}

function galleryOpen(selected_gallery, gallery_title, selected_unique) {
	gallery_current_image_on_gallery = 1;
	gallery_current_image_on_page = 1;
	gallery_current_page = 1;
	gallery_amount_of_pages = 0;
	
	$('#gallery-thumbs').text("");
	$('#gallery-pages').text("");
	$('#gallery-title').text(gallery_title);
	
	$('#gallery-thumbs').append('<div id="gallery-thumb-page-1" class="gallery-page" style="display:none;"></div>');
	$('#gallery-pages').append('<span id="gallery-page-1" class="gallery-page">1</span> ');
	
	gallery_selected_page = $('#gallery-thumb-page-1');
	gallery_selected_page_span = $('#gallery-page-1');
	gallery_selected_thumb = $('#gallery-thumb-1');
	
	$('#gallery-container').fadeIn(420);
	
	$('a:regex(rel,'+ selected_gallery +')').each(function() {
		var href = $(this).attr('href');
		var alt = $(this).attr('alt');
		
		if(typeof alt == "undefined") {
			alt = "";
		}

		if(gallery_config['max_images'] == gallery_current_image_on_page) {
			gallery_current_page++;
			gallery_current_image_on_page = 1;
			$('#gallery-thumbs').append('<div id="gallery-thumb-page-'+ gallery_current_page +'" class="gallery-page" style="display:none;"></div>');
			$('#gallery-pages').append('<span id="gallery-page-'+gallery_current_page+'" class="gallery-page">'+ gallery_current_page +'</span> ');
			$('#gallery-next').show();
		}
		
		$('#gallery-thumb-page-'+ gallery_current_page).append('<img id="gallery-thumb-'+ gallery_current_image_on_gallery +'" src="'+ href +'" alt="'+ alt +'" />');
	
		if($(this).hasClass(selected_unique)) {
			$('#gallery-main-img').attr('src',href);
			galleryChangePage($('#gallery-page-'+gallery_current_page),$('#gallery-thumb-page-'+gallery_current_page));
			galleryChangeThumb($('#gallery-thumb-'+ gallery_current_image_on_gallery));
		}
		
		gallery_current_image_on_page++;
		gallery_current_image_on_gallery++;
	});
	
	gallery_amount_of_pages = gallery_current_page;
		
	$('#gallery-thumbs img').mouseenter(function() {
		galleryChangeThumb($(this));
	});
	
	$('#gallery-overlay-right').click(function() {
		galleryChangeThumb(gallery_selected_thumb.next());
	});
	
	$('#gallery-overlay-left').click(function() {
		galleryChangeThumb(gallery_selected_thumb.prev());
	});
	
	$('#gallery-pages span').click(function() {
		galleryChangePage($(this),$('#gallery-thumb-page-'+$(this).text()));
	});
	
	$('#gallery-prev').click(function() {
		galleryChangePage((gallery_selected_page_span.prev()),(gallery_selected_page.prev()));
	});

	$('#gallery-next').click(function() {
		galleryChangePage((gallery_selected_page_span.next()),(gallery_selected_page.next()));
	});
	
	$('#gallery-close').click(function() {
		galleryClose();
	});
}

function galleryChangeThumb(gallery_new_thumb) {

	if(typeof gallery_new_thumb.attr('id') != "undefined") {
		gallery_selected_thumb = gallery_new_thumb;
		var href = gallery_selected_thumb.attr('src');
		var alt = gallery_selected_thumb.attr('alt');
		$('#gallery-main-img').attr('src', href);
		if(alt != "undefined") {
			$('#gallery-overlay-text').text(alt);
		}
		else {
			$('#gallery-overlay-text').text("");
		}
		
		$('.gallery-active-thumb').removeClass('gallery-active-thumb');
		gallery_selected_thumb.addClass('gallery-active-thumb');
	}
	else if(gallery_selected_page.children().last().attr('id') == gallery_selected_thumb.attr('id')) {
		galleryChangePage((gallery_selected_page_span.next()),(gallery_selected_page.next()));
	}
	else if(gallery_selected_page.children().first().attr('id') == gallery_selected_thumb.attr('id')) {
		galleryChangePage((gallery_selected_page_span.prev()),(gallery_selected_page.prev()));
	}
}

function galleryChangePage(gallery_new_page_span,gallery_new_page) {

	if(!gallery_pause) {
		gallery_pause = true;
		
		if(typeof gallery_new_page_span.attr('id') != "undefined" && typeof gallery_new_page.attr('id') != "undefined") {
			$('.gallery-page').removeClass('active');
			gallery_selected_page.fadeOut();
			
			gallery_new_page_span.addClass('active');
			gallery_new_page.fadeIn();
			
			if(gallery_new_page_span.text() == 1) {
				$('#gallery-prev').hide();
			}
			else {
				$('#gallery-prev').show();
			}
			
			if(gallery_new_page_span.text() == gallery_amount_of_pages) {
				$('#gallery-next').hide();
			}
			else {
				$('#gallery-next').show();
			}
			
			gallery_selected_page_span = gallery_new_page_span;
			gallery_selected_page = gallery_new_page;
					
			galleryChangeThumb(gallery_selected_page.children().first());
		}
		
		gallery_pause = false;
	}
}

function galleryClose() {
	$('#gallery-container').fadeOut(420);
	setTimeout(function() {
		$('#gallery-main-img').attr('src',gallery_config['gallery_loading']);
	}, 420);
	
}
