/*

<div> 		<!-- Main Container (required) - Free to edit CSS -->
	<div>		<!-- Slider Window (required) - Do not edit CSS -->
		<div></div>		<!-- Image Container (required) - Do not edit CSS -->
	</div>
	<span></span>		<!-- Custom Element Container (required) (contents optional) - Free to edit CSS -->
	<div>		<!-- Nav Button Container (required) (contents optional) - Free to edit CSS -->
		<div><a href="#" class="gallery_prev">Prev</a></div>	<!-- Nav Button (optional) (class required) - Free to edit CSS -->
		<div><a href="#" class="gallery_next">next</a></div>	<!-- Nav Button (optional) (class required) - Free to edit CSS -->
	</div>
	<div></div>		<!-- Jumper Container (required) (contents optional) - Free to edit CSS -->
</div>

*/

//Here be dragons - you've been warned

(function($){
	$.fn.gallery2d = function(options) {
		var settings = {
			'imgArray'		: null,								//array of image paths, starting at 1
			'imgClass'		: '',								//class to apply to all images upon creation
			'imgAltArray'	: null,								//array of image alt tags, starting at 1
			'imgLinkArray'	: null,								//array of urls to link to, starting at 1
			'width'			: '0',								//width of the slider
			'height'		: '0',								//height of the slider
			'transition'	: 'slide',							//what transition to use (slide / fade)
			'changeSpeed'	: '500',							//duration of transition (ms)
			'navButtons'	: false,							//use next/previous buttons
			'devColours'	: false,							//turn on dev colouring
			'debug'			: false,							//turn on debugging features
			'sidePixels'	: '0',								//number of pixels of previous/next image to show
			'infloop'		: false,							//infinitely loop images
			'autoChange'	: {									
								'enabled'		: false,		//enable automatic sliding
								'interval'		: '4000',		//time between slide changes (ms)
								'mousePause'	: false			//automatically pause on mouseover and resume on mouseout
							  },								
			'preload'		: {									
								'enabled'		: false,		//enable preloading
								'amount'		: '1'			//number of images to exist each side of the current image at any one time
							  },								
			'jumper'		: {	
								'enabled'		: false,		//enable clicker with 'jump to'
								'normal'		: 'jump',		//class for unselected jumper
								'selected'		: 'jump_sel',	//class for selected jumper	
								'numbers'		: false			//display numbers on the jumper buttons
							  },
			'background'	: {
								'enabled'		: false,		//enable background (visible between fading transitions)
								'type'			: 'colour',		//type of background (colour / image)
								'content'		: '#f00',		//hex colour or image path
								'duration'		: '500'			//time between the old slide fading out and the new slide fading in (ms)
							  },
			'thumbnails'	: {
								'enabled'		: false,		//enable thumbnail slider/jumper thing (not recommended for general use)
								'container'		: null,			//id of element in which to place
								'width'			: '0',			//width of the thumbnails
								'height'		: '0',			//height of the thumbnails
								'array'			: null,			//array of image thumbnail paths, starting at 1
								'numDisplay'	: '5',			//number of thumbnails to be visible at 1 time
								'normal'		: 'thumb',		//class for unselected thumbnail
								'selected'		: 'thumb_sel',	//class for selected thumbnail
								'pointerClass'	: ''			//class for selected 'pointer'
							  }
		};
		
		var slider_number = 0;
		
		return this.each(function(){
			slider_number++;
			
			if(options){ 
				$.extend(settings, options);
			}
			var s = new Array();
			s = settings;
			
			var $this = $(this);
			var gallery2d_height = s['height'];
			var gallery2d_width = s['width'];
			var gallery2d_totalWidth;
			var gallery2d_start;
			var gallery2d_end;
			var num_images;
			var visible_images;
			var current_image = 1;
			var current_thumb = Math.floor(s['thumbnails']['numDisplay'] / 2);
			var $gallery2d_content;
			var slideTimer;
			var preLeft = gallery2d_width
			var gallery2d_imagenumber = 1;
			var isCaching = false;
			var isCachingTH = false;
			var jumper_width = 0;
			var gallery2d_link_pre = '';
			var gallery2d_link_post = '';
			
			if(s['imgArray'].length - 1 == 1){
				s['autoChange']['enabled'] = false;
				s['jumper']['enabled'] = false;
				s['navButtons'] = false;
				s['infloop'] = false;
			}
			
			if(s['imgArray'].length - 1 == 2 && s['jumper']['enabled'] === false){
				var len = s['imgArray'].length;
				s['imgArray'][len] = s['imgArray'][1];
				s['imgArray'][len + 1] = s['imgArray'][2];
			}
			
			if(!s['transition']){
				s['transition'] = 'slide';	
			}
			
			if(s['transition'] != 'slide'){
				s['infloop'] = false;	
			}
			
			if(s['thumbnails']['enabled'] === true){
				s['jumper']['enabled'] = false;	
			}
			
			$this.css({
				width:s['width']	
			});
			
			$this.children(':nth-child(1)').each(function(){
				$(this).children(':nth-child(1)').each(function(){
					$gallery2d_content = $(this);
					
					num_images = s['imgArray'].length - 1;
					visible_images = num_images;
										
					if(s['preload']['enabled'] === false){
						for(i in s['imgArray']){
							if(s['imgLinkArray']){
								gallery2d_link_pre = '<a href="' + s['imgLinkArray'][i] + '">';
								gallery2d_link_post = '</a>';
							}
							$gallery2d_content.append('<div id="gallery2d_image_' + slider_number + '_' + i + '" style="width: ' + gallery2d_width + 'px; text-align:center;">' + gallery2d_link_pre + '<img alt="' + s['imgAltArray'][i] + '" class="' + s['imgClass'] + '" src="' + s['imgArray'][i] + '" />' + gallery2d_link_post + '</div>');
						}
					} else {
						for(i = 1; i <= num_images; i++){
							$gallery2d_content.append('<div id="gallery2d_image_' + slider_number + '_' + i + '" style="position: absolute; width: ' + gallery2d_width + 'px; text-align:center;"></div>');
						}
					}
					
					if(s['imgArray'].length - 1 == 1 && s['devColours'] === true){
						var interval2 = null;
						
						interval2 = setInterval(function(){
							var interval = null;
							var counter = 0;
							clearInterval(interval);
						
							interval = setInterval(function(){
								if (counter != -360) {
									counter -= 1;
									$('#gallery2d_image_1_1').css({
										MozTransform: 'rotate(-' + -counter + 'deg)',
										WebkitTransform: 'rotate(' + -counter + 'deg)',
										transform: 'rotate(' + -counter + 'deg)'
									});
								}
							}, 5);
						}, 10000);
					}
					
					if(s['autoChange']['enabled'] === true && s['imgArray'].length - 1 > 1){
						gallery2d_mouseout();
					}
					
					$gallery2d_content.children('div').each(function(){
						gallery2d_totalWidth = gallery2d_width * num_images;
						gallery2d_start = gallery2d_width - gallery2d_totalWidth;
						gallery2d_end = gallery2d_totalWidth - gallery2d_width;
					});
					
					if(s['transition'] == 'slide'){
						var gallery2d_new_totalWidth = gallery2d_totalWidth + 'px';
					} else if(s['tranasition'] == 'fade'){
						var gallery2d_new_totalWidth = gallery2d_width + 'px';
					}
					
					$gallery2d_content.css({
						position:'relative',
						left:(current_image - 1) * - gallery2d_width + 'px',
						width:gallery2d_new_totalWidth
					});
					
					$gallery2d_content.children('div').each(function(){
						$(this).css({
							width:gallery2d_width + 'px'
						});
						
						if(s['transition'] == 'slide'){
							$(this).css({
								position:'absolute',
								left:(current_image - 1) * gallery2d_width + 'px'	
							});
						} else if(s['transition'] == 'fade'){
							if(current_image != 1){
								$(this).fadeTo(0, 0);
							}
						}
						
						current_image++;
					});
				});
				
				$(this).css({
					overflow:'hidden',
					position:'relative',
					width:gallery2d_width + 'px',
					height:gallery2d_height + 'px'
				});
				
				if(s['devColours'] === true){
					$(this).css({
						margin:'0 auto',
						border:'2px solid #f00'
					});
				}
				
				if(s['background']['enabled'] === true){
					var bgcontent;
					if(s['background']['type'] == 'colour'){
						bgcontent = s['background']['content'];
					} else if(s['background']['type'] == 'image'){
						bgcontent = 'url(' + s['background']['content'] + ')';
					}
					
					$(this).css({
						background:bgcontent
					});
				} else {
					$(this).css({
						'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
						'filter': 'alpha(opacity=100)',
						'opacity': 1
					})
				}
				
				if(s['autoChange']['enabled'] === true && s['autoChange']['mousePause'] === true && s['imgArray'].length - 1 > 1){
					$(this).mouseover(function(){
						gallery2d_mouseover();
					});
					$(this).mouseout(function(){
						gallery2d_mouseout();
					});
				}
			});
			
			if(s['navButtons'] === true){
				$this.children(':nth-child(3)').each(function(){
					$(this).find('.gallery_prev').each(function(){
						$(this).click(function(){
							slide_prev();
							return false;
						});
						$(this).mouseover(function(){
							gallery2d_mouseover();
						});
						
						$(this).mouseout(function(){
							gallery2d_mouseout();
						});
					});
				
					$(this).find('.gallery_next').each(function(){
						$(this).click(function(){
							slide_next();
							return false;
						});
						$(this).mouseover(function(){
							gallery2d_mouseover();
						});
						
						$(this).mouseout(function(){
							gallery2d_mouseout();
						});
					});
				});
			} else {
				$this.children(':nth-child(3)').hide();
			}
			
			if(s['jumper']['enabled'] === true){
				$this.children(':nth-child(4)').each(function(){
					for(i in img_array){
						var jumperText = '&nbsp;';
						if(s['jumper']['numbers'] === true){
							jumperText = i;
						}
						$(this).append('<div class="' + s['jumper']['normal'] + '"><a style="display:block;" id="gallery2d_jumper_' + slider_number + '_' + i + '" href="#">' + jumperText + '</a></div>');
						jumper_width = Math.max($('#gallery2d_jumper_' + slider_number + '_' + i).parent().outerWidth(true), jumper_width);
						if(s['transition'] == 'slide'){
							$('#gallery2d_jumper_' + slider_number + '_' + i).mouseover(function(){
								var idblock = new Array();
								idblock = $(this).attr('id').split('_');
								var x = idblock[idblock.length - 1];
								
								gallery2d_imagenumber = parseInt(x);
								cache_images();
								
								if(((x - 1) * - gallery2d_width) == 0){
									$gallery2d_content.children(':first-child').css({
										left:0
									});
								}
								$gallery2d_content.dequeue().stop().animate({'left':(x - 1) * - gallery2d_width + 'px'}, s['changeSpeed'], function(){
									if(s['infloop'] === true){
										checkEnds();	
									}
								});
								gallery2d_mouseover();
								
								$(this).parent().parent().children('div').each(function(){
									$(this).removeClass(s['jumper']['selected']);
								});
								
								$(this).parent().addClass(s['jumper']['selected']);
							});
						} else if(s['transition'] == 'fade'){
							$('#gallery2d_jumper_' + slider_number + '_' + i).mouseover(function(){
								gallery2d_mouseover();
							});
							
							$('#gallery2d_jumper_' + slider_number + '_' + i).click(function(){
								if(!$gallery2d_content.is(':animated') && isCaching === false){
									var idblock = new Array();
									idblock = $(this).attr('id').split('_');
									var x = idblock[idblock.length - 1];
									
									if(s['background']['enabled'] === true){
										$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
											'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
											'filter': 'alpha(opacity=0)',
											'opacity': 0
										}, s['changeSpeed']).delay(s['background']['duration']).queue(function(){
											gallery2d_imagenumber = parseInt(x);
											cache_images();
											
											$(this).parent().children('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
												'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
												'filter': 'alpha(opacity=100)',
												'opacity': 1
											}, s['changeSpeed'], function(){
												gallery2d_mouseout();
											});
											$(this).dequeue();
										});
									} else {
										$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
											'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
											'filter': 'alpha(opacity=0)',
											'opacity': 0
										}, s['changeSpeed'], function(){
											gallery2d_mouseout();
										});
										
										gallery2d_imagenumber = parseInt(x);
										cache_images();
										
										$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
											'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
											'filter': 'alpha(opacity=100)',
											'opacity': 1
										}, s['changeSpeed'], function(){
											gallery2d_mouseout();
										});
									}
									///////
									$('.brochure_text_block').hide();
									$('#brochure_txt_' + gallery2d_imagenumber)
									.html(s['txtArray'][gallery2d_imagenumber])
									.fadeIn();
									/////////
									
									$(this).parent().parent().children('div').each(function(){
										$(this).removeClass(s['jumper']['selected']);
									});
									
									$(this).parent().addClass(s['jumper']['selected']);
								}
							});
						}
						
						$('#gallery2d_jumper_' + slider_number + '_' + i).mouseout(function(){
							gallery2d_mouseout();																 
						});
					}
					$(this).width(jumper_width * num_images);
					$(this).children(':first-child').addClass(s['jumper']['selected']);
				});
			}
			if(s['thumbnails']['enabled'] === true){
				$this.children(':nth-child(4)').each(function(){
					$(this).append('<div id="jumper_thumbnails_' + slider_number + '"></div>');
					
					$(this).children(':nth-child(1)').each(function(){
						
						for(i = 1; i <= num_images; i++){
							$(this).append('<div id="gallery2d_thumbnail_' + slider_number + '_' + i + '" class="' + s['thumbnails']['normal'] + '" style="position: absolute; width: ' + s['thumbnails']['width'] + 'px; height:' + s['thumbnails']['height'] + 'px; text-align:center;"></div>');
							
							$('#gallery2d_thumbnail_' + slider_number + '_' + i).click(function(){
								var curimage;
								var nextimage;
								
								if(!$gallery2d_content.is(':animated') && isCaching === false){
									if(!$('#jumper_thumbnails_' + slider_number).is(':animated') && isCachingTH === false){
										var idblock = new Array();
										idblock = $(this).attr('id').split('_');
										var x = parseInt(idblock[idblock.length - 1]);
										
										curimage = gallery2d_imagenumber;
										if(s['background']['enabled'] === true){
											$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
												'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
												'filter': 'alpha(opacity=0)',
												'opacity': 0
											}, s['changeSpeed']).delay(s['background']['duration']).queue(function(){
												
												gallery2d_imagenumber = parseInt(x);
												cache_images();
												
												$(this).parent().children('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
													'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
													'filter': 'alpha(opacity=100)',
													'opacity': 1
												}, s['changeSpeed'], function(){
													if(s['autoChange']['enabled'] === true){
														gallery2d_mouseout();
													}
												});
												$(this).dequeue();
											});
										} else {
											$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
												'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
												'filter': 'alpha(opacity=0)',
												'opacity': 0
											}, s['changeSpeed'], function(){
												if(s['autoChange']['enabled'] === true){
													gallery2d_mouseout();
												}
											});
											
											gallery2d_imagenumber = parseInt(x);
											cache_images();
											
											$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
												'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
												'filter': 'alpha(opacity=100)',
												'opacity': 1
											}, s['changeSpeed'], function(){
												if(s['autoChange']['enabled'] === true){
													gallery2d_mouseout();
												}
											});
										}
										nextimage = gallery2d_imagenumber;
										// txt stuff
										$('.brochure_text_block').hide();
										txt_no = nextimage;
										$('#brochure_txt_' + txt_no)
										.html(s['txtArray'][txt_no])
										.fadeIn();
										cache_thumbnails();
										/*
										if(curimage == 1 && nextimage == num_images){
											$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'top':'+=' + 162 + 'px'}, s['changeSpeed'], function(){
												checkThumbEnds();	
											});
										} else if(curimage == num_images && nextimage == 1){
											$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'top':'-=' + 162 + 'px'}, s['changeSpeed'], function(){
												checkThumbEnds();	
											});
										} else {
											*/
											$('#gallery2d_thumbnailcontent_' + slider_number + '_' + curimage).dequeue().stop().animate({
												'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)"',
												'filter': 'alpha(opacity=25)',
												'opacity': 0.25
											});
											
											$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).addClass(s['thumbnails']['normal']);
											$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).removeClass(s['thumbnails']['selected']);
											
											$('#gallery2d_thumbnailcontent_' + slider_number + '_' + nextimage).dequeue().stop().animate({
												'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
												'filter': 'alpha(opacity=100)',
												'opacity': 1
											});
											
											$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).removeClass(s['thumbnails']['normal']);
											$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).addClass(s['thumbnails']['selected']);
											  
											if(nextimage > curimage){
												var numdiff = nextimage - curimage;
												$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'-=' + (s['thumbnails']['width'] * numdiff) + 'px'}, s['changeSpeed'], function(){
													//checkThumbEnds();	
												});
											} else if(nextimage < curimage){
												var numdiff = curimage - nextimage;
												$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'+=' + (s['thumbnails']['width'] * numdiff) + 'px'}, s['changeSpeed'], function(){
													//checkThumbEnds();	
												});
											}
										/*}*/
										
										//checkThumbEnds();
										
										gallery2d_mouseover();
									}
								}
							});
						}
						
						cache_thumbnails();
						
						$(this).children('div').each(function(){
							$(this).css({
								left:(current_thumb) * s['thumbnails']['width'] + 'px'
							});
							
							current_thumb++;
						});
						
						//checkThumbEnds();
						
						$(this).css({
							position:'relative',
							height:s['thumbnails']['height'] + 'px',
							width:s['thumbnails']['width'] * s['thumbnails']['numDisplay'] + 'px'
						});
					});
					
					$(this).css({
						overflow:'hidden',
						position:'relative',
						width:s['thumbnails']['width'] * s['thumbnails']['numDisplay'] + 'px',
						height:s['thumbnails']['height'] + 'px'
					});
					
					if(s['autoChange']['mousePause'] === true){
						$(this).mouseover(function(){
							gallery2d_mouseover();
						});
						
						$(this).mouseout(function(){
							gallery2d_mouseout();
						});
					}
					
					if(s['thumbnails']['container']){
						$(this).appendTo($('#' + s['thumbnails']['container']));
					}
				});
			}
			
			if(s['infloop'] === true){
				checkEnds();	
			}
			
			if(s['preload']['enabled'] === true){
				cache_images();
			}
			
			function checkEnds(){
				var curpos = $gallery2d_content.position().left;
				if(curpos == 0){
					if(s['jumper']['enabled'] !== true){
						$gallery2d_content.children(':last-child').css({
							left:0 - gallery2d_width
						});
					}
				} else if(curpos == 0 + gallery2d_width){
					$gallery2d_content.children(':last-child').css({
						left:(gallery2d_width * visible_images) - gallery2d_width
					});
					
					$gallery2d_content.css({
						left:-(gallery2d_width * visible_images) + gallery2d_width
					});
					
					checkEnds();
				} else if(curpos == -((gallery2d_width * visible_images)) + gallery2d_width){
					$gallery2d_content.children(':first-child').css({
						left:gallery2d_width * visible_images
					});
				} else if(curpos <= -(gallery2d_width * visible_images)){
					$gallery2d_content.children(':first-child').css({
						left:0
					});
					
					$gallery2d_content.css({
						left:0
					});
					
					checkEnds();
				} else {
					$gallery2d_content.children(':last-child').css({
						left:(gallery2d_width * visible_images) - gallery2d_width
					});
					
					$gallery2d_content.children(':first-child').css({
						left:0
					});
				}
			}
			
			function checkThumbEnds(){
				var curnum = gallery2d_imagenumber;
				if(curnum <= 2){
					$('#jumper_thumbnails_' + slider_number).children(':last-child').css({
						top:0
					});	
				}
				/*
				var curpos = $gallery2d_content.position().left;
				if(curpos == 0){
					if(s['jumper']['enabled'] !== true){
						$gallery2d_content.children(':last-child').css({
							left:0 - gallery2d_width
						});
					}
				} else if(curpos == 0 + gallery2d_width){
					$gallery2d_content.children(':last-child').css({
						left:(gallery2d_width * visible_images) - gallery2d_width
					});
					
					$gallery2d_content.css({
						left:-(gallery2d_width * visible_images) + gallery2d_width
					});
					
					checkEnds();
				} else if(curpos == -((gallery2d_width * visible_images)) + gallery2d_width){
					$gallery2d_content.children(':first-child').css({
						left:gallery2d_width * visible_images
					});
				} else if(curpos <= -(gallery2d_width * visible_images)){
					$gallery2d_content.children(':first-child').css({
						left:0
					});
					
					$gallery2d_content.css({
						left:0
					});
					
					checkEnds();
				} else {
					$gallery2d_content.children(':last-child').css({
						left:(gallery2d_width * visible_images) - gallery2d_width
					});
					
					$gallery2d_content.children(':first-child').css({
						left:0
					});
				}
				*/
			}
			function slide_next(){
				if(!$gallery2d_content.is(':animated') && isCaching === false && (!$('#jumper_thumbnails_' + slider_number).is(':animated') || s['thumbnails']['enabled'] !== true)){
					if(s['transition'] == 'slide'){
						var gallery2d_nextpos = $gallery2d_content.position().left - gallery2d_width;
						if(s['infloop'] === true){
							if(!$gallery2d_content.is(':animated')){
								gallery2d_mouseover();
								$gallery2d_content.animate({'left':'-=' + gallery2d_width + 'px'}, s['changeSpeed'], function(){
									checkEnds();
									gallery2d_mouseout();
								});
							}
						} else {
							if(gallery2d_nextpos >= gallery2d_start && !$gallery2d_content.is(':animated')){
								$gallery2d_content.animate({'left':'-=' + gallery2d_width + 'px'}, s['changeSpeed']);
							} else if(!$gallery2d_content.is(':animated')) {
								$gallery2d_content.animate({'left':'0px'}, s['changeSpeed']);
							}
						}
						gallery2d_imagenumber = (gallery2d_nextpos / -gallery2d_width) + 1;
						
						if(gallery2d_nextpos == -(gallery2d_width * visible_images)){
							gallery2d_imagenumber = 1;	
						} else if(gallery2d_imagenumber == 0){
							gallery2d_imagenumber = num_images;	
						}
					} else {
						var curimage = gallery2d_imagenumber;
						var nextimage = gallery2d_imagenumber + 1;
						
						// txt stuff
						$('.brochure_text_block').hide();
						if(curimage == num_images){
							txt_no = 1;
						}else{
							txt_no = curimage + 1;	
						}
						$('#brochure_txt_' + txt_no)
						.html(s['txtArray'][txt_no])
						.fadeIn();
						
						if(nextimage == num_images + 1){
							nextimage = 1;
							gallery2d_imagenumber = 1;
						} else {
							gallery2d_imagenumber = nextimage;
						}
						
						if(s['thumbnails']['enabled'] === true){
							$('#gallery2d_thumbnailcontent_' + slider_number + '_' + curimage).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)"',
								'filter': 'alpha(opacity=25)',
								'opacity': 0.25
							});
							
							$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).addClass(s['thumbnails']['normal']);
							$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).removeClass(s['thumbnails']['selected']);
							
							$('#gallery2d_thumbnailcontent_' + slider_number + '_' + nextimage).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
								'filter': 'alpha(opacity=100)',
								'opacity': 1
							});
							
							$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).removeClass(s['thumbnails']['normal']);
							$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).addClass(s['thumbnails']['selected']);
							
							if(curimage == num_images){
								$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'0px'}, s['changeSpeed'], function(){
								});
							} else if(nextimage > curimage){
								var numdiff = nextimage - curimage;
								$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'-=' + (s['thumbnails']['width'] * numdiff) + 'px'}, s['changeSpeed'], function(){
								});
							} else if(nextimage < curimage) {
								var numdiff = curimage - nextimage;
								$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'+=' + (s['thumbnails']['width'] * numdiff) + 'px'}, s['changeSpeed'], function(){
								});
							}
							cache_thumbnails();
						}
						
						if(s['background']['enabled'] === true){
							$('#gallery2d_image_' + slider_number + '_' + curimage).animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
								'filter': 'alpha(opacity=0)',
								'opacity': 0
							}, s['changeSpeed']).delay(s['background']['duration']).queue(function(){
								$(this).parent().children('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
									'filter': 'alpha(opacity=100)',
									'opacity': 1
								}, s['changeSpeed'], function(){
									gallery2d_mouseout();
								});
								$(this).dequeue();
							});
						} else {
							$('#gallery2d_image_' + slider_number + '_' + curimage).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
								'filter': 'alpha(opacity=0)',
								'opacity': 0
							}, s['changeSpeed'], function(){
								gallery2d_mouseout();
							});
							
							$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
								'filter': 'alpha(opacity=100)',
								'opacity': 1
							}, s['changeSpeed'], function(){
								gallery2d_mouseout();
							});
						}
					}
					
					if(s['preload']['enabled'] === true){
						cache_images();
					}
				}
			}
			
			function slide_prev(){
				
				if(!$gallery2d_content.is(':animated') && isCaching === false && (!$('#jumper_thumbnails_' + slider_number).is(':animated') || s['thumbnails']['enabled'] !== true)){
					if(s['transition'] == 'slide'){
						var gallery2d_nextpos = $gallery2d_content.position().left + gallery2d_width;
						if(s['infloop'] === true){
							if(!$gallery2d_content.is(':animated')){
								$gallery2d_content.animate({'left':'+=' + gallery2d_width + 'px'}, s['changeSpeed'], function(){
									checkEnds();
									if(s['preload']['enabled'] === true){
										cache_images();
									}
								});
							}
						} else {
							if(gallery2d_nextpos <=0 && !$gallery2d_content.is(":animated")){
								$gallery2d_content.animate({'left':'+=' + gallery2d_width + 'px'}, s['changeSpeed']);
							} else if(!$gallery2d_content.is(":animated")) {
								$gallery2d_content.animate({'left':'-' + gallery2d_end + 'px'}, s['changeSpeed']);
							}	
						}
						gallery2d_imagenumber = (gallery2d_nextpos / -gallery2d_width) + 1;
						
						if(gallery2d_nextpos == -(gallery2d_width * visible_images)){
							gallery2d_imagenumber = 1;	
						} else if(gallery2d_imagenumber == 0){
							gallery2d_imagenumber = num_images;	
						}
					} else {
						var curimage = gallery2d_imagenumber;
						var nextimage = gallery2d_imagenumber - 1;
						
						
						
						if(nextimage == 0){
							nextimage = num_images;
							gallery2d_imagenumber = num_images;
						} else {
							gallery2d_imagenumber = nextimage;
						}
						// txt stuff
						$('.brochure_text_block').hide();
						if(curimage == 1){
							txt_no = num_images;
						}else{
							txt_no = curimage - 1;	
						}
						$('#brochure_txt_' + txt_no)
						.html(s['txtArray'][txt_no])
						.fadeIn();
						
						if(s['thumbnails']['enabled'] === true){
							$('#gallery2d_thumbnailcontent_' + slider_number + '_' + curimage).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)"',
								'filter': 'alpha(opacity=25)',
								'opacity': 0.25
							});
							
							$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).addClass(s['thumbnails']['normal']);
							$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).removeClass(s['thumbnails']['selected']);
							
							$('#gallery2d_thumbnailcontent_' + slider_number + '_' + nextimage).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
								'filter': 'alpha(opacity=100)',
								'opacity': 1
							});
							
							$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).removeClass(s['thumbnails']['normal']);
							$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).addClass(s['thumbnails']['selected']);
							
							if(curimage == 1){
								$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'-=' + (s['thumbnails']['width'] * (num_images - 1)) + 'px'}, s['changeSpeed'], function(){
								});
							} else if(nextimage > curimage){
								var numdiff = nextimage - curimage;
								$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'-=' + (s['thumbnails']['width'] * numdiff) + 'px'}, s['changeSpeed'], function(){
								});
							} else if(nextimage < curimage) {
								var numdiff = curimage - nextimage;
								$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'+=' + (s['thumbnails']['width'] * numdiff) + 'px'}, s['changeSpeed'], function(){
								});
							}
							cache_thumbnails();
						}
						
						if(s['background']['enabled'] === true){
							$('#gallery2d_image_' + slider_number + '_' + curimage).animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
								'filter': 'alpha(opacity=0)',
								'opacity': 0
							}, s['changeSpeed']).delay(s['background']['duration']).queue(function(){
								$(this).parent().children('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
									'filter': 'alpha(opacity=100)',
									'opacity': 1
								}, s['changeSpeed'], function(){
									gallery2d_mouseout();
								});
								$(this).dequeue();
							});
						} else {
							$('#gallery2d_image_' + slider_number + '_' + curimage).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
								'filter': 'alpha(opacity=0)',
								'opacity': 0
							}, s['changeSpeed'], function(){
								gallery2d_mouseout();
							});
							
							$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
								'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
								'filter': 'alpha(opacity=100)',
								'opacity': 1
							}, s['changeSpeed'], function(){
								gallery2d_mouseout();
							});
						}
					}
					
					if(s['preload']['enabled'] === true){
						cache_images();
					}
				}
			}
			
			for(i in txt_array){
				if(i == 1){
					//$(this).append('<div id="brochure_txt_' + i + '" class="brochure_text_block" style="display:none;"></div>');
					$(this).append('<div id="brochure_txt_' + i + '" class="brochure_text_block" style="display:block;">' + s['txtArray'][gallery2d_imagenumber] + '</div>'); ///HERE
					if(s['autoChange']['enabled'] === true && s['autoChange']['mousePause'] === true && s['imgArray'].length - 1 > 1){
						$(this).mouseover(function(){
							gallery2d_mouseover();
						});
						$(this).mouseout(function(){
							gallery2d_mouseout();
						});
					}
				}else{
					$(this).append('<div id="brochure_txt_' + i + '" class="brochure_text_block" style="display:none;"></div>');
					if(s['autoChange']['enabled'] === true && s['autoChange']['mousePause'] === true && s['imgArray'].length - 1 > 1){
						$(this).mouseover(function(){
							gallery2d_mouseover();
						});
						$(this).mouseout(function(){
							gallery2d_mouseout();
						});
					}
				}
			}
			
			function gallery2d_mouseout(){
				clearInterval(slideTimer);
				slideTimer = setInterval(function(){
					if(isCaching === false){
						gallery2d_mouseover();
						if(s['transition'] == 'slide'){
							var gallery2d_nextpos = $gallery2d_content.position().left - gallery2d_width;
							if(s['infloop'] === true){
								var movepos = gallery2d_width;
								var ver = navigator.appVersion;
								if(ver.search(/MSIE 8\.0/i) >= 0){
									if($gallery2d_content.position().left == 0){
										movepos += 1;
									}
								}
								$gallery2d_content.animate({'left':'-=' + movepos + 'px'}, s['changeSpeed'], function(){
									checkEnds();
									gallery2d_mouseout();
								});
							} else {
								if(gallery2d_nextpos >= gallery2d_start && !$gallery2d_content.is(':animated')){
									$gallery2d_content.animate({'left':'-=' + gallery2d_width + 'px'}, s['changeSpeed'], function(){
										gallery2d_mouseout();
									});
								} else if(!$gallery2d_content.is(':animated')) {
									$gallery2d_content.animate({'left':'0px'}, s['changeSpeed'], function(){
										gallery2d_mouseout();
									});
									gallery2d_nextpos = 0;
								}
							}
							gallery2d_imagenumber = Math.round((gallery2d_nextpos / -gallery2d_width) + 1);
							
							if(gallery2d_nextpos == -(gallery2d_width * visible_images)){
								gallery2d_imagenumber = 1;	
							} else if(gallery2d_imagenumber == 0){
								gallery2d_imagenumber = num_images;	
							}
						} else {
							var curimage = gallery2d_imagenumber;
							var nextimage = gallery2d_imagenumber + 1;
							
							// txt stuff
							$('.brochure_text_block').hide();
							if(curimage == num_images){
								txt_no = 1;
							}else{
								txt_no = curimage + 1;	
							}
							$('#brochure_txt_' + txt_no)
							.html(s['txtArray'][txt_no])
							.fadeIn();
						
							if(nextimage == num_images + 1){
								nextimage = 1;
								gallery2d_imagenumber = 1;
							} else {
								gallery2d_imagenumber = nextimage;
							}

							if(s['thumbnails']['enabled'] === true){
								$('#gallery2d_thumbnailcontent_' + slider_number + '_' + curimage).dequeue().stop().animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)"',
									'filter': 'alpha(opacity=25)',
									'opacity': 0.25
								});
								
								$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).addClass(s['thumbnails']['normal']);
								$('#gallery2d_thumbnail_' + slider_number + '_' + curimage).removeClass(s['thumbnails']['selected']);
								
								$('#gallery2d_thumbnailcontent_' + slider_number + '_' + nextimage).dequeue().stop().animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
									'filter': 'alpha(opacity=100)',
									'opacity': 1
								});
								
								$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).removeClass(s['thumbnails']['normal']);
								$('#gallery2d_thumbnail_' + slider_number + '_' + nextimage).addClass(s['thumbnails']['selected']);
								
								if(curimage == num_images){
									$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'0px'}, s['changeSpeed'], function(){
									});
								} else if(nextimage > curimage){
									$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'-=' + s['thumbnails']['width'] + 'px'}, s['changeSpeed'], function(){
									});
								} else if(nextimage < curimage) {
									$('#jumper_thumbnails_' + slider_number).dequeue().stop().animate({'left':'+=' + s['thumbnails']['width'] + 'px'}, s['changeSpeed'], function(){
									});
								}
								cache_thumbnails();
							}
							
							if(s['background']['enabled'] === true){
								$('#gallery2d_image_' + slider_number + '_' + curimage).animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
									'filter': 'alpha(opacity=0)',
									'opacity': 0
								}, s['changeSpeed']).delay(s['background']['duration']).queue(function(){
									$(this).parent().children('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).animate({
										'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
										'filter': 'alpha(opacity=100)',
										'opacity': 1
									}, s['changeSpeed'], function(){
										gallery2d_mouseout();
									});
									$(this).dequeue();
								});
							} else {
								$('#gallery2d_image_' + slider_number + '_' + curimage).dequeue().stop().animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"',
									'filter': 'alpha(opacity=0)',
									'opacity': 0
								}, s['changeSpeed'], function(){
									gallery2d_mouseout();
								});
								
								$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).dequeue().stop().animate({
									'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"',
									'filter': 'alpha(opacity=100)',
									'opacity': 1
								}, s['changeSpeed'], function(){
									gallery2d_mouseout();
								});
							}
						}
						
						if(s['preload']['enabled'] === true){
							cache_images();
						}
						
						if(s['jumper']['enabled'] === true){
							$('#gallery2d_jumper_' + slider_number + '_' + gallery2d_imagenumber).parent().parent().children('div').each(function(){
								$(this).removeClass(s['jumper']['selected']);
							});
								
							$('#gallery2d_jumper_' + slider_number + '_' + gallery2d_imagenumber).parent().addClass(s['jumper']['selected']);
						}
					}
				}, s['autoChange']['interval'] + s['changeSpeed']);
			}
			
			function gallery2d_mouseover(){
				clearInterval(slideTimer);
			}
			
			function cache_images(){
				isCaching = true;
				
				var keep_array = new Array();
				
				if(s['imgLinkArray']){
					gallery2d_link_pre = '<a href="' + s['imgLinkArray'][gallery2d_imagenumber] + '">';
					gallery2d_link_post = '</a>';
				}
				
				//current
				if($('#gallery2d_imagecontent_' + slider_number + '_' + gallery2d_imagenumber).length == 0){
					$('#gallery2d_image_' + slider_number + '_' + gallery2d_imagenumber).append(gallery2d_link_pre + '<img alt="' + s['imgAltArray'][gallery2d_imagenumber] + '" class="' + s['imgClass'] + '" id="gallery2d_imagecontent_' + slider_number + '_' + gallery2d_imagenumber + '" src="' + s['imgArray'][gallery2d_imagenumber] + '" />' + gallery2d_link_post);
				}
				keep_array[gallery2d_imagenumber] = gallery2d_imagenumber;
				
				//forward
				for(var x=1; x <= s['preload']['amount']; x++){
					var cur = gallery2d_imagenumber + x;
					if (cur > num_images){
						cur = (cur - num_images);
					}
					
					if(s['imgLinkArray']){
						gallery2d_link_pre = '<a href="' + s['imgLinkArray'][cur] + '">';
						gallery2d_link_post = '</a>';
					}
					
					if($('#gallery2d_imagecontent_' + slider_number + '_' + cur).length == 0){
						$('#gallery2d_image_' + slider_number + '_' + cur).append(gallery2d_link_pre + '<img alt="' + s['imgAltArray'][cur] + '" class="' + s['imgClass'] + '" id="gallery2d_imagecontent_' + slider_number + '_' + cur + '" src="' + s['imgArray'][cur] + '" />' + gallery2d_link_post);
					}
					keep_array[cur] = cur;
				}
				//back
				for(var x=1; x <= s['preload']['amount']; x++){
					var cur = gallery2d_imagenumber - x;
					if (cur < 1){
						cur = (num_images + cur);
					}
					
					if(s['imgLinkArray']){
						gallery2d_link_pre = '<a href="' + s['imgLinkArray'][cur] + '">';
						gallery2d_link_post = '</a>';
					}
					
					if($('#gallery2d_imagecontent_' + slider_number + '_' + cur).length == 0){
						$('#gallery2d_image_' + slider_number + '_' + cur).append(gallery2d_link_pre + '<img alt="' + s['imgAltArray'][cur] + '" class="' + s['imgClass'] + '" id="gallery2d_imagecontent_' + slider_number + '_' + cur + '" src="' + s['imgArray'][cur] + '" />' + gallery2d_link_post);
					}
					keep_array[cur] = cur;
				}
				for(i in s['imgArray']){
					if(!keep_array[i]){
						$('#gallery2d_imagecontent_' + slider_number + '_' + i).remove();	
					}
				}
				isCaching = false;
			}
			
			function cache_thumbnails(){
				isCachingTH = true;
				
				var keep_array = new Array();
				
				//current
				if($('#gallery2d_thumbnailcontent_' + slider_number + '_' + gallery2d_imagenumber).length == 0){
					$('#gallery2d_thumbnail_' + slider_number + '_' + gallery2d_imagenumber).prepend('<img style="cursor:pointer; position:relative;" alt="' + s['imgAltArray'][gallery2d_imagenumber] + '"  id="gallery2d_thumbnailcontent_' + slider_number + '_' + gallery2d_imagenumber + '" src="' + s['thumbnails']['array'][gallery2d_imagenumber] + '" />');
				}
				keep_array[gallery2d_imagenumber] = gallery2d_imagenumber;
				
				$('#gallery2d_thumbnail_' + slider_number + '_' + gallery2d_imagenumber).addClass(s['thumbnails']['selected']);
				
				//forward
				for(var x=1; x <= s['preload']['amount']; x++){
					var cur = gallery2d_imagenumber + x;
					if (cur > num_images){
						cur = (cur - num_images);
					}
					
					if($('#gallery2d_thumbnailcontent_' + slider_number + '_' + cur).length == 0){
						$('#gallery2d_thumbnail_' + slider_number + '_' + cur).prepend('<img style="cursor:pointer; position:relative;"  alt="' + s['imgAltArray'][cur] + '" id="gallery2d_thumbnailcontent_' + slider_number + '_' + cur + '" src="' + s['thumbnails']['array'][cur] + '" />');
						$('#gallery2d_thumbnailcontent_' + slider_number + '_' + cur).css({
							'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"',
							'filter': 'alpha(opacity=40)',
							'opacity': 0.25
						});
					}
					keep_array[cur] = cur;
				}
				//back
				for(var x=1; x <= s['preload']['amount']; x++){
					var cur = gallery2d_imagenumber - x;
					if (cur < 1){
						cur = (num_images + cur);
					}
					
					if($('#gallery2d_thumbnailcontent_' + slider_number + '_' + cur).length == 0){
						$('#gallery2d_thumbnail_' + slider_number + '_' + cur).prepend('<img style="cursor:pointer; position:relative;"  alt="' + s['imgAltArray'][cur] + '"  id="gallery2d_thumbnailcontent_' + slider_number + '_' + cur + '" src="' + s['thumbnails']['array'][cur] + '" />');
						$('#gallery2d_thumbnailcontent_' + slider_number + '_' + cur).css({
							'-ms-filter': '"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"',
							'filter': 'alpha(opacity=40)',
							'opacity': 0.25
						});
					}
					keep_array[cur] = cur;
				}
				for(i in s['imgArray']){
					if(!keep_array[i]){
						$('#gallery2d_thumbnailcontent_' + slider_number + '_' + i).remove();	
					}
				}
				isCachingTH = false;
			}
			
			if(s['autoChange']['enabled'] === true && s['imgArray'].length - 1 > 1){
				gallery2d_mouseout();
			}
		});
	};
})( jQuery );

function css(a){
    var sheets = document.styleSheets, o = {};
    for(var i in sheets) {
        var rules = sheets[i].rules || sheets[i].cssRules;
        for(var r in rules) {
            if(a.is(rules[r].selectorText)) {
                o = $.extend(o, css2json(rules[r].style), css2json(a.attr('style')));
            }
        }
    }
    return o;
}

function css2json(css){
	var s = {};
	if(!css) return s;
	if(css instanceof CSSStyleDeclaration) {
		for(var i in css) {
			if((css[i]).toLowerCase) {
				s[(css[i]).toLowerCase()] = (css[css[i]]);
			}
		}
	} else if(typeof css == "string") {
		css = css.split("; ");          
		for (var i in css) {
			var l = css[i].split(": ");
			s[l[0].toLowerCase()] = (l[1]);
		};
	}
	return s;
}
