/**
 * Global variables
 */

// Banner animation duration.
var bannerAnimationDuration = 600;

// Timeout until we automatically move to the next image.
var bannerDemoIntervalTimeout = 4000;

// Whether mouse has already left the banner.
var mouseLeftBanner = false;

// Whether banner animation is in progress.
var bannerAnimationInProgress = false;

// iPhone hide address bar.
window.addEventListener('load', function(){
	setTimeout(scrollTo, 0, 0, 1);
	}, false
);

/**
 * Initialization
 */
$(document).ready(function() {
         
	// Page specific values
	var anchor = location.toString().substring(location.toString().indexOf("#") + 1);
	var lang = $('#wrapper').attr('data-lang');

	// Hide navigation entries when not logged in.
	$('.notLoggedIn .navigation ul li ul a[href^="/' + lang + '/pricelist-login/"]').each(function () {
		$(this).parent().hide();
	});

	// print
	$('#print').click(function() {
		window.print();
	});
	
	// Call the new gallery plugin
	$("#gallery-new").gallery();
	
	// language-switcher
	/*$('#language-current').click(function() {
		$('#language-chooser').slideToggle();
	});
	*/

	$('#language-chooser').css('left', $('#language-left').width() + 'px');

	// search
	$('#search-input').live("focus",function() {

		var sInput = $(this);
		$(this).addClass('search-input-active');
		if ($(this).val() == 'Search' || $(this).val() == 'Suche') {
			$(this).val('');
		}
		$(this).parent().addClass("search-active");
		$(this).parent().find("img").attr("src", "/docroot/alpa/images/icon_search_on.png");
	
		if (! $(".search-overlay").length) {	
			var srcWindowWidth = $(window).width();
			var srcWindowHeight = $(document).height();

			var srcWrapLeft = $(".search-wrapper").offset().left;
			var srcWrapTop = $(".search-wrapper").offset().top;

			var srcOverlay = $("<div/>")
				.addClass("search-overlay")
				.insertAfter($(this).parent())
				.css({
					width:  srcWindowWidth,
					height: srcWindowHeight,
					left: -srcWrapLeft,
					top: -srcWrapTop
				})
				.fadeIn(100);
			
			// Resize overlay
			$(window).resize(function() {
				var srcWindowWidth = $(window).width();
				var srcWindowHeight = $(document).height();

				var srcWrapLeft = $(".search-wrapper").offset().left;
				var srcWrapTop = $(".search-wrapper").offset().top;

				srcOverlay.css({
					width:  srcWindowWidth,
					height: srcWindowHeight,
					left: -srcWrapLeft,
					top: -srcWrapTop
				});
			});

			// Hide list
			srcOverlay.click(function() {
				$(this).remove();
				$("#search-field").removeClass("search-active");
				$("#search-field").find("img").attr("src", "/docroot/alpa/images/icon_search_off.png");
				$('#search-dialog').slideUp(200);
		
				var oldInput = $("#search-input.cloned");	
				var oldVal = oldInput.val();

				var clInput = oldInput.clone();
				clInput.val(oldVal);
				clInput.removeClass("cloned");
				oldInput.remove();
				clInput.appendTo($("#search-field"));

			});

		}

		$('#search-dialog').slideDown(200, function() {

			if (!$("#search-field").find(".cloned").length) {
				var clInput = sInput.clone()
				sInput.remove();

				clInput.addClass("cloned");
				clInput.val("");
				clInput.appendTo($("#search-field"));

				setTimeout(function() {
					clInput.focus();
				},500);
			}
		});

	});

	// this yields inevitably an error in iE
	$('#search-input').blur(function() {
		$(this).removeClass('search-input-active');
	});

	$('#search-closer').click(function(){
		$('#search-dialog').slideToggle(200, function(){
			$('#search-result-list').html('').hide();
		});
	});

	$('input[name=search-context]').live("change", function(){
		$('#search-input').keyup();
	});

	$('#search-input').live("keyup", function() {
		var q = $(this).val();
		var searchContext = $('input[name=search-context]:checked').val(); 
		if (q.length < 3) {
			return false;
		}
		$('#search-ajax').show();

		$.post('/' + lang + '/search.html', {'q':q, 'searchContext':searchContext}, function(res) {
			$('#search-result-list').html(res);
			$('#search-result-list').slideDown();
			$('#search-ajax').fadeOut();

			$('#search-result-list').find(".search-result-item-body").each(function() {
				if ($(this).is(":empty")) {
					$(this).hide();
				}
			});

			var srcList = $("#search-result-list");
			var srcListHeight = srcList.height();

			if (srcListHeight > 350) {
				$("#search-dialog").addClass("scroller");
				var srcUp = $("<span/>").addClass("search-up").insertBefore("#search-selection");
				var srcDown = $("<span/>").addClass("search-down").insertAfter(srcList);
				
				srcUp.mouseenter(function() {
					srcList.animate({
						marginTop: 0
					});
				}).mouseleave(function() {
					srcList.stop();
				});

				srcDown.mouseenter(function() {
					var srcMaxHeight = (srcList.height()) - 345;
				
					srcList.animate({
						marginTop: -srcMaxHeight
					}, 5000);

				}).mouseleave(function() {
					srcList.stop();
				});
			}
			else {
				$("#search-dialog").removeClass("scroller");
				$(".search-up").remove();
				$(".search-down").remove();
			}

		}, 'text');
	});

	// i18n breadcrumb
	$('#breadcrumb a').each(function() {
		var location = '/' + lang + $(this).attr('href');
		$(this).attr('href', location);
	});

	// Mini gallery
	var relCount = 0;
	$('.gallery').each(function() {
		var rel = 'gallery' + relCount;
		$(this).find('.gallery-item').each(function() {
			var thumbImage = $(this).find('img.thumb');
			var bigImage = $(this).find('img.big');
			var pre = $(this).attr('rel');
			var src = bigImage.attr('src');
			var tmp = src.split('.');
			var ext = (tmp[(tmp.length-1)]).toLowerCase();
			var txt = $(this).attr('title');
			$(this).attr('rel', rel);
			$(this).attr('href', src);
			
			if (ext == 'jpg') {
				// Check if there's a preview available, else fallback to thumb of image itself.
				if (pre) {
					thumbImage.attr('src', pre);
				}
			}
			else if (ext == 'flv') {
				// TODO: code missing here
			}
			$(this).colorbox({
				transition:'elastic',
				preloading: true
			});
		});
		$(this).click(function(){return false});
		relCount++;
	});
	
	// Product overview
	$('#product-overview .sliderbox').each(function() {
		sliderBox.init(this);
	});

	// Show distributor when page is loaded.
	if (anchor.indexOf('distributor') == 0) {
		showDistributor(anchor);
	}

	// Validate contact form
	$('#contactform').submit(function() {
		return validateForm('contactform');
	});

	// Validate registration form
	$('#registrationform').submit(function() {
		$('#registerFullName').val($('#registerFirstName').val() + ' ' + $('#registerLastName').val());
		$('#registerUsername').val($('#registerEmail').val());
		var isValid = validateForm('registrationform');
		if (isValid && $('#registrationform input[name=newsletterSignup]').is(':checked')) {
			var name = $('#registrationform input[name=firstName]').val() + " " + $('#registrationform input[name=lastName]').val(); 
			var email = $('#registrationform input[name=email]').val();
			// Handle campaign monitor subscription.
			$.ajax({url: "/contact/contact_form.html?action=subscribe&name=" + name + "&email=" + email, async: false});
		}
		return isValid;
	});

	// Validate login form
	$('#loginform').submit(function() {
		return validateForm('loginform');
	});

	// Show/hide registration form
	$('#show-registration').click(function() {
		$('#loginform').toggle();
		$('#registrationform').toggle();
	});

	// Show/hide forgotpassword form
	$('#show-forgotpassword').click(function() {
		$('#registration-loginform-part').toggle();
		$('#forgotpasswordform').toggle();
	});

	// Validate forgot password form
	$('#forgotpasswordform').submit(function() {
		return validateForm('forgotpasswordform');
	});

	// Preselect select value
	$('select.preselect').each(function() {
		var value = $(this).attr('rel');
		if (value && value != '') {
			$(this).find('option[value=\'' + value  + '\']').attr('selected', 'selected');
		}
	});

	// Validate change profile form
	$('#changeprofileform').submit(function() {
		$('#changeprofileFullName').val($('#changeprofileFirstName').val() + ' ' + $('#changeprofileLastName').val());
		// Currently change email (=username) isn't supported.
		//$('#changeprofileUsername').val($('#changeprofileEmail').val());
		return validateForm('#changeprofileform');
	});

	// Validate calculator form
	$('#calculationform').submit(function() {
		$('#emailOffer').val($('#offer').html());
		return validateForm('calculationform');
	});

	// Validate calculator form
	$('#calculationform_f1 input[type=button]').click(function() {
		if (validateForm('calculationform_f1')) {
			$('#emailOffer').val($('#offer').html());
			$('#calculationform input[type=submit]').click();
		} 
	});

	// Synchronize both calculation forms.
	$('#calculationform_f1 input[type=text]').each(function(i){
		$(this).change(function() {
			var field = $(this).attr("name");
			var value = $(this).val();

			$('#calculationform input[name='+field+']').val(value);

		});
	});

	$('#calculationform_f1 input[type=hidden]').each(function(i){
		$(this).change(function() {
			var field = $(this).attr("name");
			var value = $(this).val();

			$('#calculationform input[name='+field+']').val(value);

		});
	});

	$('#calculationform_f1 textarea').each(function(i){
		$(this).change(function() {
			var field = $(this).attr("name");
			var value = $(this).val();

			$('#calculationform textarea[name='+field+']').val(value);

		});
	});

	$('#calculationform_f1 input[type=radio]').each(function(i){
		$(this).change(function() {
			var value = $(this).val();
			var checked = $(this).is(':checked');

			$('#calculationform input[type=radio]').each(function(i){
				if ($(this).val() === value) {
					$(this).attr('checked', checked);
				}			
			});

		});
	});

	$('#calculationform_f1 input[type=checkbox]').each(function(i){
		$(this).change(function() {
			var value = $(this).val();
			var checked = $(this).is(':checked');

			$('#calculationform input[type=checkbox]').each(function(i){
				if ($(this).val() === value) {
					$(this).attr('checked', checked);
				}			
			});

		});
	});

	$('#calculationform input[type=text]').each(function(i){
		$(this).change(function() {
			var field = $(this).attr("name");
			var value = $(this).val();

			$('#calculationform_f1 input[name='+field+']').val(value);

		});
	});

	$('#calculationform input[type=hidden]').each(function(i){
		$(this).change(function() {
			var field = $(this).attr("name");
			var value = $(this).val();

			$('#calculationform_f1 input[name='+field+']').val(value);

		});
	});

	$('#calculationform textarea').each(function(i){
		$(this).change(function() {
			var field = $(this).attr("name");
			var value = $(this).val();

			$('#calculationform_f1 textarea[name='+field+']').val(value);

		});
	});

	$('#calculationform input[type=radio]').each(function(i){
		$(this).change(function() {
			var value = $(this).val();
			var checked = $(this).is(':checked');

			$('#calculationform_f1 input[type=radio]').each(function(i){
				if ($(this).val() === value) {
					$(this).attr('checked', checked);
				}			
			});

		});
	});

	$('#calculationform input[type=checkbox]').each(function(i){
		$(this).change(function() {
			var value = $(this).val();
			var checked = $(this).is(':checked');

			$('#calculationform_f1 input[type=checkbox]').each(function(i){
				if ($(this).val() === value) {
					$(this).attr('checked', checked);
				}			
			});

		});
	});

	// Gallery
	$('.gallery-left .help a').click(function() {
		$('#help-text').slideToggle();
	});

	$('#galleryform select').change(function() {
		if ($(this).attr('name') == 'photographer') {
			$('#galleryform #camera').val('');
			$('#galleryform #lens').val('');
			$('#galleryform #solution').val('');
		}
		$('#galleryform #num').val('');
		$('#galleryform #image').val('');
		// Don't jump to the large image.
		$('#galleryform').attr('action', '#');
		$('#galleryform').submit();
	});

	$('.gallery-left .batchingbar a').click(function() {
		$('#galleryform #num').val($(this).attr('rel'));
		$('#galleryform').submit();
	});

	$('#gallery-thumbnails a').click(function() {
		$('#galleryform #image').val($(this).attr('rel'));
		// Jump to the large image.
		$('#galleryform').attr('action', '#large');
		$('#galleryform').submit();
	});

	$('.small-batchingbar a').click(function() {
		$('#galleryform #image').val($(this).attr('rel'));
		// Jump to the large image.
		$('#galleryform').attr('action', '#large');
		$('#galleryform').submit();
	});


	/**
	 * Glossary
	 */

	$('.glossary-item').each(function() {
		$(this).find('a.title').click(function() {
			$(this).next().slideToggle();
			return false;
		});
	});

	// Intro
	if ($('#intro').length == 1) {
		// Vertically center images
		var bannerHeight = $('#intro .intro-banner').height();
		$('#intro .title-image').each(function () {
			$(this).css('top', ((bannerHeight - $(this).height()) / 2) + 'px');
		});
		$('#intro .content-image').each(function () {
			$(this).css('top', ((bannerHeight - $(this).height()) / 2) + 'px');
		});

		// Remove unused buttons
		$('#intro .paragraph-intro:first .intro-next').remove();
		$('#intro .paragraph-intro:last .intro-previous').remove();

		// Demo mode when mouse is outside of banner.
		bannerDemoInterval = window.setInterval(bannerDemo, bannerDemoIntervalTimeout);

		// Fade-in buttons
		$('#intro .intro-banner').mouseenter(function() {
			// Hide fader overlay
			$('#intro .intro-banner-fader').hide();
			// Prevent that the buttons are shown during the animation.
			if (! bannerAnimationInProgress) {
				$('#intro .intro-navigation').fadeIn("fast");
			}
			window.clearInterval(bannerDemoInterval);
		});
		$('#intro .intro-banner').mouseleave(function(event) {
			// Show fader overlay
			$('#intro .intro-banner-fader').show();
			// Safari triggers mouseleave when the mouse moves from the button onto the banner.
			if ($(event.target).attr('class') != 'intro-banner') {
				mouseLeftBanner = true;
				$('#intro .intro-navigation').fadeOut("fast");
				bannerDemoInterval = window.setInterval(bannerDemo, bannerDemoIntervalTimeout);
			}
		});

		// Move intro strip to the left
		var count = $('#intro .paragraph-intro').size();
		var width = $('#intro .intro-banner:first').width();
		if (count > 0) {
			$('#intro').css('left', -((count * width) - width) + 'px');
		}

		// Button actions
		$('#intro .intro-navigation').click(function() {
			var width = $('#intro .intro-banner:first').width();
			var curLeftPos = parseInt($('#intro').css('left'));
			$('#intro .intro-navigation').hide();
			mouseLeftBanner = false;
			bannerAnimationInProgress = true;

			// Previous
			if ($(this).hasClass('intro-previous')) {
				$('#intro').animate({
					left: curLeftPos - width + 'px'
					}, bannerAnimationDuration, "swing", function() {
						bannerAnimationInProgress = false;
						// Don't show buttons when mouse has alredy left the banner.
						if (! mouseLeftBanner) {
							$('#intro .intro-navigation').mouseenter();
						}
					}
				);
			}

			// Next
			else {
				$('#intro').animate({
					left: curLeftPos + width + 'px'
					}, bannerAnimationDuration, "swing", function() {
						bannerAnimationInProgress = false;
						// Don't show buttons when mouse has alredy left the banner.
						if (! mouseLeftBanner) {
							$('#intro .intro-navigation').mouseenter();
						}
					}
				);
			}
			return false;
		});

	}


	// Accordion	
	// default is closed
	$('.accordion .accContent').addClass('closed');		

	// Toggle open/close node
	$('.accordion h2').click(function() {
		$(this).parent().toggleClass('closed');
		return false;
	});

	// Open/close all 
	$('.switcher a').click(function() {
		switch($(this).attr('name')) {
			case 'open_all':
				$('.accordion .accContent').removeClass('closed');	
			break;
			case 'close_all':
				$('.accordion .accContent').addClass('closed');	
			break;
		}							
	});


	// Calculator
	if ($('#calculator').length == 1) {
		// Recalculate total
		$('#calculator input.amount').change(function() {
			updateCalculation();
		});
		$('#calculator textarea.additional-info').change(function() {
			updateCalculation();
		});
	}

	// Calculator form: deactivate unused input fields
	$('#calculationform input[type=radio], #calculationform_f1 input[type=radio], #calculationform label, #calculationform_f1 label, ').click(function() {
		if ($(this).val() == 'order') {
			$('#calculationform input.order_dependent').attr('disabled', false).removeClass('disabled');
			$('#calculationform label.order_dependent').removeClass('disabled');
			$('#calculationform_f1 input.order_dependent').attr('disabled', false).removeClass('disabled');
			$('#calculationform_f1 label.order_dependent').removeClass('disabled');
			$('#calculationform input.watchlist_dependent').attr('disabled', true).addClass('disabled');
			$('#calculationform label.watchlist_dependent').addClass('disabled');
			$('#calculationform_f1 input.watchlist_dependent').attr('disabled', true).addClass('disabled');
			$('#calculationform_f1 label.watchlist_dependent').addClass('disabled');
		}
		else {
			$('#calculationform input.order_dependent').attr('disabled', true).addClass('disabled');
			$('#calculationform label.order_dependent').addClass('disabled');
			$('#calculationform_f1 input.order_dependent').attr('disabled', true).addClass('disabled');
			$('#calculationform_f1 label.order_dependent').addClass('disabled');
			$('#calculationform input.watchlist_dependent').attr('disabled', false).removeClass('disabled');
			$('#calculationform label.watchlist_dependent').removeClass('disabled');
			$('#calculationform_f1 input.watchlist_dependent').attr('disabled', false).removeClass('disabled');
			$('#calculationform_f1 label.watchlist_dependent').removeClass('disabled');
		}
	});
		
 
	// Write Sound on/off cookie
	$('.sound-toggle').click(function() {
		if ($.cookie("sound") == 'off') {
			$.cookie("sound", "on", { path: '/', expires: 365 });
		}
		else {
			$.cookie("sound", "off", { path: '/', expires: 365 });
		}
	});

	// Write language cookie
	$('#language-chooser a').each(function() {
		$(this).click(function() {
			var language = $(this).text();
			$.cookie("language", language, { path: '/', expires: 365 });
		});
	});
});

/**
 * Banner demo
 */

function bannerDemo() {
	var width = $('#intro .intro-banner:first').width();
	var curLeftPos = parseInt($('#intro').css('left'));

	if (curLeftPos > -width) {
		// Stop the animation and fade the banner out.
		window.clearInterval(bannerDemoInterval);
		$('#intro .intro-banner-fader:first').animate({
			opacity: '1'
		}, 500, function() {

			// Show the fader of the first frame.
			$('#intro .intro-banner-fader:last').css('opacity', '1');

			// Move intro strip to the left
			var count = $('#intro .paragraph-intro').size();
			var width = $('#intro .intro-banner:first').width();
			if (count > 0) {
				$('#intro').css('left', -((count * width) - width) + 'px');
			}

			// Hide the fader of the last frame for the next rotation.
			$('#intro .intro-banner-fader:first').css('opacity', '0');

			// Fade the banner in and restart the animation.
			$('#intro .intro-banner-fader:last').animate({
				opacity: '0'
			}, 500, function() {
				bannerDemoInterval = window.setInterval(bannerDemo, bannerDemoIntervalTimeout);
			});
		});

	}
	else {
		$('#intro').animate({
			left: curLeftPos + width + 'px'
		}, bannerAnimationDuration, "swing" );
	}
}

/**
 * Update calculation form
 */

function updateCalculation() {
	var offerHtml = $('#calculationTitle').html();
	offerHtml += '<table class="calculator" cellspacing="0" border="0">';
	offerHtml += '<tr>' + $('#calculator .header').html() + '</tr>';
	var totalAmount = 0;
	var totalPriceProfessional = 0;
	var totalPriceDealer = 0;
	var totalPriceDistributor = 0;
	var alt = 0;
	$('#calculator input.amount').each(function() {
		if ($(this).val() != ''&& isNumber($(this).val()) && $(this).val() != '0') {
			var amount = parseInt($(this).val());
			totalAmount += amount;
			var columnId = '#' + $(this).attr('rel');
			var column = $(columnId);
			var priceProfessional = $(column).find('.priceProfessional').text();
			if (priceProfessional != '' && isFloat(priceProfessional)) {
				priceProfessional = priceProfessional.replace(/,/g, '.');
				totalPriceProfessional += amount * priceProfessional; 
			}
			var priceDealer = $(column).find('.priceDealer').text();
			priceDealer = priceDealer.replace(/,/g, '.');
			if (priceDealer != '' && isFloat(priceDealer)) {
				totalPriceDealer += amount * priceDealer; 
			}
			var priceDistributor = $(column).find('.priceDistributor').text();
			priceDistributor = priceDistributor.replace(/,/g, '.');
			if (priceDistributor != '' && isFloat(priceDistributor)) {
				totalPriceDistributor += amount * priceDistributor; 
			}
			var rowClass = alt == 0 ? 'even' : 'odd';
			offerHtml += '<tr class="row-' + rowClass + '"><td>' + amount  + '</td>';
			offerHtml += column.html();
			offerHtml += '<td>' + $(column).find('.additional-info').val().replace(/\n/g, '<br />') + '</td></tr>';
			alt = ((alt + 1) %2);
		}
		else {
			$(this).val('');
		}
	});
	offerHtml += '</table>';

	// If rates don't exist the currency shouldn't be shown.
	var eurRate = $('#eurRate').val();
	var usdRate = $('#usdRate').val();

	var totalPriceProfessionalString = 'CHF ' + totalPriceProfessional.toFixed(2) + '<br/>';
	if (eurRate) {
		totalPriceProfessionalString += 'EUR ' + (totalPriceProfessional * eurRate).toFixed(2) + '<br/>';
	}
	if (usdRate) {
		totalPriceProfessionalString += 'USD ' + (totalPriceProfessional * usdRate).toFixed(2) + '<br/>';
	}

	var totalPriceDealerString = 'CHF ' + totalPriceDealer.toFixed(2) + '<br/>';
	if (eurRate) {
		totalPriceDealerString += 'EUR ' + (totalPriceDealer * eurRate).toFixed(2) + '<br/>';
	}
	if (usdRate) {
		totalPriceDealerString += 'USD ' + (totalPriceDealer * usdRate).toFixed(2) + '<br/>';
	}

	var totalPriceDistributorString = 'CHF ' + totalPriceDistributor.toFixed(2) + '<br/>';
	if (eurRate) {
		totalPriceDistributorString += 'EUR ' + (totalPriceDistributor * eurRate).toFixed(2) + '<br/>';
	}
	if (usdRate) {
		totalPriceDistributorString += 'USD ' + (totalPriceDistributor * usdRate).toFixed(2) + '<br/>';
	}

	$('#calculatorTotalAmount').text(totalAmount);
	$('#calculatorTotalPriceProfessional').html(totalPriceProfessionalString);
	$('#calculatorTotalPriceDealer').html(totalPriceDealerString);
	$('#calculatorTotalPriceDistributor').html(totalPriceDistributorString);
	offerHtml += $('#calculationTotalTitle').html();
	offerHtml += '<br/><table class="calculator" cellspacing="0" border="0">';
	offerHtml += $('#calculatorTotal').html();
	offerHtml += '</table>';
	offerHtml += $('#important-notice').html();
	$('#offer').html(offerHtml);
	$('#offer .offerRequest-remove').each(function() {
		$(this).remove();
	});
	var baseUrl = $('#baseUrl').val();
	$('#offer img').each(function() {
		// in IE8 the src starts with http://
		if ($(this).attr('src').indexOf('http://') == 0) {
			$(this).attr('src', $(this).attr('src'));
		}
		else {
			$(this).attr('src', baseUrl + $(this).attr('src'));
		}
	});
	$('#offer a').each(function() {
		// in IE8 the src starts with http://
		if ($(this).attr('href').indexOf('http://') == 0) {
			$(this).attr('href', $(this).attr('href'));
		}
		else {
			$(this).attr('href', baseUrl + $(this).attr('href'));
		}
	});
}

/**
 * A simple sliderBox emulating the default OS behaviour with a little more spice in a crossbrowser-fun fashion
 * @author Benny Zaminga <benny.zaminga@openinteractive.ch>
 */
window.sliderBox = {
	init: function(box) {
		var slider = $('.slider',box);
		slider.css('overflow-x','hidden');
		$('.product',slider).mouseover(function(){$(this).addClass('active')});
		$('.product',slider).mouseout(function(){$(this).removeClass('active')});
		// show and apply slider-functionality only if there is really something to slide
		var swidth = sliderBox.sliderWidth(slider);
		slider.width(swidth);	// fixed: seems that margin between products is not correctly calculated
		if (swidth > 780) {
			$('.trigger-left',box).click(function() {
				var slider = $(this).parent();
				if (sliderBox.checkPositionLeft(slider)) {
					slider.animate(
						{marginLeft: '+=100px'}, 
						750, 
						'easeOutQuint',
						function(){
							sliderBox.repositionScroller(box);
						}
					);
				}
			});
			$('.trigger-right',box).click(function() {
				var slider = $(this).parent();
				if (sliderBox.checkPositionRight(slider)) {
					slider.animate(
						{marginLeft: "-=100px"}, 
						750, 
						'easeOutQuint',
						function(){
							sliderBox.repositionScroller(box);
						}
					);
				}
			});
			// init scroller (only if necessary)
			$('.scroller-inner',box).draggable({
				axis: 'x',
				containment: 'parent',
				cursor: 'move',
				//grid: [Math.round(700/($('.product',$('.slider',box)).length)),0],
				drag: function(event,ui){					
					var slider = $('.slider',box);
					var scrollpos = ui.position.left;
					var scrollper = scrollpos / (700-40);
					var newpos = Math.round((swidth-780) * scrollper);
					slider.stop();
					slider.animate(
						{marginLeft: newpos*-1+"px"},
						{
							delay: 250,
							duration: 750, 
							easing: 'easeOutQuint'
						}
					);
					// show/hide arrow-buttons
					sliderBox.checkPositionLeft(slider);
					sliderBox.checkPositionRight(slider);
				}
			})
			// ipad touchstart (normal slider)	
			$('.slider',box).bind("touchstart", function(e) {
  				//e.preventDefault();
				var start = e.originalEvent;
				
				var $start_x_tmp = start.changedTouches[0].pageX;
				$start_x = $start_x_tmp - 300;
			});
			// ipad touchmove (normal slider)
			$('.slider',box).bind("touchmove", function(e) {
  				e.preventDefault();
  				
				var $sl = $(this);

				$(".product .label").css("color", "#333 !important");	

				var orig = e.originalEvent;
				
				var x_tmp = orig.changedTouches[0].pageX;
				
				var touch_tmp = x_tmp - 300;

				var touch = $start_x - touch_tmp;
				
				if (touch_tmp > $start_x) {
					var touch = touch_tmp - $start_x;
				}	
	
				//css position
				var pos_left_css = $sl.css("margin-left");

				var pos_left_re = pos_left_css.replace("-","");
				
				if (pos_left_re == "auto") {
					var pos_left = 0;
				}

				else {
					var pos_left = pos_left_re.replace("px","");
				}
			
				//back	
				if (touch_tmp > $start_x) {
					var left = pos_left - touch;

					if (left <= 0) {
						var left = 0;
					}
					
					//scroller
					var max_width = swidth - 700;
					var items = max_width / 100;

					var stat = left / 100;

					var ll = 700 / items;

					var scroll = stat * ll;

					$(".scroller-inner",box).css({left: scroll});
	
				}
				//next
				else {
					var left = touch + parseInt(pos_left);
		
					var max_width = swidth - 700;
		
					if (left >= max_width) {
						var left = max_width;
					}
					
					//scroller
					var items = max_width / 100;

					var stat = left / 100;

					var ll = 700 / items;

					var scroll = stat * ll;

					if (scroll >= 680) {
						var scroll = 680;
					}

					$(".scroller-inner",box).css({left: scroll});
				}
				
				$sl.stop();
				$sl.animate(
					{marginLeft: -left},
					{
						easing: 'linear'
					}
				);

				// show/hide arrow-buttons
				sliderBox.checkPositionLeft(slider);
				sliderBox.checkPositionRight(slider);
				
			});

			// ipad touchmove (small scroller)
			$('.scroller-inner',box).bind("touchmove", function(e) {
  				e.preventDefault();
  				var orig = e.originalEvent;
				
				var x_tmp = orig.changedTouches[0].pageX;
				var x = x_tmp - 300;
				
				if (x <= 670) {
					$(this).css({left: x});
				}

				if (x <= 0) {
					$(this).css({left: 0});
				}
				
				var slider = $('.slider',box);
				var scrollper = x / (700-40);
				var newpos = Math.round((swidth-780) * scrollper);
				var smax = swidth-780;

				if (newpos < 0) {
					newpos = 0;
				}
				
				else if (newpos >= smax) {
					newpos = smax;
				}

				slider.stop();
				slider.animate(
					{marginLeft: newpos*-1+"px"},
					{
						delay: 250,
						duration: 750, 
						easing: 'easeOutQuint'
					}
				);
				// show/hide arrow-buttons
				sliderBox.checkPositionLeft(slider);
				sliderBox.checkPositionRight(slider);
			});

			// init hovers (left and right)
			$('.hover-left',box).hover(
				function(){
					var slider = $('.slider',box);
					this.scrolly = setInterval(function(){
						var offset = slider.css('margin-left').replace('px','');
						var swidth = sliderBox.sliderWidth(slider);
						if (offset>0) return true;
						sliderBox.moveSlider(slider,6);
						return true;
					},25);
				},
				function(){
					clearInterval(this.scrolly);
				}
			);
			$('.hover-right',box).hover(
				function(){
					var slider = $('.slider',box);
					this.scrolly = setInterval(function(){
						var offset = Math.abs(slider.css('margin-left').replace('px',''));
						var swidth = sliderBox.sliderWidth(slider);
						if ((offset+780)>swidth) return true;
						sliderBox.moveSlider(slider,-6);
						return true;
					},25);
				},
				function(){
					clearInterval(this.scrolly);
				}
			);
			// hide left trigger and hover on init, since we're all left
			$('.trigger-left',box).hide();
			$('.hover-left',box).hide();
		} else {
			// remove triggers and scroller (nothing to scroll)
			$('.trigger-left',box).remove();
			$('.trigger-right',box).remove();
			$('.scroller',box).remove();
			$('.hover-left',box).hide();
			$('.hover-right',box).hide();
		}
	},
	
	moveSlider: function(slider,offset){
		var currentPos = $(slider).css('margin-left').replace('px','');
		$(slider).stop(); // must stay here to prevent filling the stack with events (preserve snappiness)
		$(slider).animate(
			{marginLeft: '+='+offset+'px'},
			0,
			function(){
				sliderBox.repositionScroller($(slider).parent());
			}
		);
		return true;
	},
	
	checkPositionLeft: function(slider) {
		var pos = $(slider).css('margin-left').replace('px','');
		var triggers = sliderBox.getTriggers(slider);
		var hovers = sliderBox.getHovers(slider);
		if (Math.abs(pos) < 25) {	// add some tolerance
			triggers.ltrigger.hide();
			hovers.lhover.hide();
			return false;
		} else {
			triggers.ltrigger.show();
			hovers.lhover.show();
			return true;
		}
	},
	
	checkPositionRight: function(slider) {
		var pos = $(slider).css('margin-left').replace('px','');
		var triggers = sliderBox.getTriggers(slider);
		var hovers = sliderBox.getHovers(slider);
		var swidth = sliderBox.sliderWidth(slider);
		if ((swidth - Math.abs(pos)) < (780+25)) {	// add some tolerance
			triggers.rtrigger.hide();
			hovers.rhover.hide();
			return false;
		} else {
			triggers.rtrigger.show();
			hovers.rhover.show();
			return true;
		}
	},
	
	repositionScroller: function(box){
		var scroller = $('.scroller-inner',box);
		var slider = $('.slider',box);
		var swidth = sliderBox.sliderWidth(slider);
				
		var numProducts = $('.product',box).length;
		var sliderOffset = slider.css('margin-left').replace('px','');
		var scrollerOffset = (660*sliderOffset) / (780-swidth); 
		
		var currentPos = scroller.css('left').replace('px','');
		if (scrollerOffset <   0) scrollerOffset = 0;
		if (scrollerOffset > 660) scrollerOffset = 660;
		
		scroller.stop();
		scroller.animate({left: scrollerOffset+"px"},{
			//duration: 500, 
			//easing: 'easeOutElastic',
			complete: function(){
				sliderBox.checkPositionLeft(slider);
				sliderBox.checkPositionRight(slider);
			}
		});
	},
	
	sliderWidth: function(slider) {
		var prods  = $('.product',slider);
		var swidth = (prods.length) * ($(prods[0]).width()+15);
		return swidth;
	},
	
	getTriggers: function(slider) {
		var ltrigger = $('.trigger-left',$(slider).parent());
		var rtrigger = $('.trigger-right',$(slider).parent());
		var triggers = {'ltrigger':ltrigger,'rtrigger':rtrigger};
		return triggers;
	},
	
	getHovers: function(slider){
		var lhover = $('.hover-left',$(slider).parent());
		var rhover = $('.hover-right',$(slider).parent());
		var hovers = {'lhover':lhover,'rhover':rhover};
		return hovers;
	}
}

/**
 * Show distributors for current country.
 */

function showDistributor(distributorId) {
	var distributorContent = $('#' + distributorId);
	var distributorCountry = $('#' + distributorId + '_country');
	// First hide all but the already open distributors to avoid flickering.
	$('.distributor-content').each(function (hideDistributor) {
		if (this.id != distributorId) {
			$(this).slideUp('slow');
		}
	});
	// Remove the red class from all countries.
	$('.distributor-container .title').each(function (resetCountry) {
		$(this).find('h2').removeClass('red');
	});

	// Add the red class if the country is open.
	if (distributorContent.css('display') == 'none') {
		distributorCountry.find('h2').addClass('red');
	}

	// Toggle the selected distributor.
	distributorContent.slideToggle('slow');

	return false;
}

/**
 * Form validation
 */

function validateForm(formName) {
	var proceed = true;

	// input, textarea
	$('#' + formName + ' :input.mandatory').each(function() {
		if ($(this).val() == '') {
			$(this).addClass('error');
			proceed = false;
		}
		else {
			$(this).removeClass('error');
		}
	});

	// select
	$('#' + formName + ' :select.mandatory').each(function() {
		if ($(this).val() == '') {
			$(this).addClass('error');
			proceed = false;
		}
		else {
			$(this).removeClass('error');
		}
	});

	// radio, checkbox
	$('#' + formName + ' label.rel-mandatory').each(function() {
		var name = $(this).attr('rel');
		if (! $('input[name='+ name  +']:checked').val()) {
			$(this).addClass('error');
			proceed = false;
		}
		else {
			$(this).removeClass('error');
		}
	});

	// email
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	$('#' + formName + ' :text.validate-email').each(function() {
		if (! reg.test($(this).val())) {
			$(this).addClass('error');
			proceed = false;
		}
		else {
			$(this).removeClass('error');
		}
	});

	// password confirmation
	$('#' + formName + ' :input[type=password]').each(function() {
		var name = $(this).attr('rel');
		if (name && $(this).val() != '' && $(this).val() != $('#' + name).val()) {
			$('#' + name).addClass('error');
			proceed = false;
		}
		else {
			$('#' + name).removeClass('error');
		}
	});

	return proceed;
}

/**
 * Check for a numeric value
 */

function isNumber(value) {
	if (! value.toString().match(/^\d*$/)) {
		return false;
	}
	else {
		return true;
	}
}

function isFloat(value) {
	if (! value.toString().match(/^[-]?\d*\.?,?\d*$/)) {
		return false;
	}
	else {
		return true;
	}
}

/**
 * Gallery new
 */
(function($) {
	$.fn.gallery = function() {
		return this.each(function() {

			var $this = $(this);

			var galHeader = $this.find("#gallery-header");
			var galSelTrigger = galHeader.find(".sel-trigger");
			var galForm = $this.find("#galleryform-new");
			var batchingbar = $this.find(".batchingbar");
			var galThumbsWrap = $this.find("#gallery-new-thumbnails");
			var galThumbs = $this.find("#gallery-new-thumbnails a");
			var galTmp = $("<div/>").appendTo($this).hide();
			var fullscreen = $this.find(".gallery-link-fullscreen");

			var galLoading = $("<div/>").addClass("gallery-loading").appendTo($this).hide();
			$("#wrapper").addClass("gallery-new-wrapper");

			var loadMore = false;
			var intvl = null;
			
			// Thumbs fade in
			var thumbFade = function(objs) {
				var time = 0;

				$(window).unbind();
				clearTimeout(intvl);

				objs.each(function() {
					var thumb = $(this);

					intvl = setTimeout(function() {
						thumb.fadeIn(400);

						if (thumb.attr("data-b-end")) {
							loadMore = true;
							wScroll();
						}
					}, time);
					
					time += 120;
				});
			}

			// Load thumbs
			var thumbLoad = function(req, lastNumber) {

				galTmp.load(actpage + " #gallery-new-thumbnails .gallery-thumb", req, function(data) {
				
					galLoading.hide();

					var newThumbs = $(this).find(".gallery-thumb");
					newThumbs.appendTo(galThumbsWrap);
					
					galThumbsWrap.find(".gallery-thumb:last").attr("data-b-end", lastNumber);

					thumbFade(newThumbs);

					if (! $("#mobile-quicknav").length) {
						newThumbs.mouseover(function() {
							thumbMo($(this));
						});
					}

					bigImg($this.find(".gallery-thumb"));

				});
			}

			// Calculate images according window height	
			var calcWindowImages = function() {	
				var winHeight = $(window).height();
				var loadImages = Math.ceil(winHeight / 148 * 5) - 1;

				return loadImages;
			}
			
			// Calculate images in fullscreen according window height	
			var calcFullscreenWindowImages = function() {	
				var winHeight = $(window).height();
				var loadImages = Math.ceil(winHeight / 148 * 8) - 1;

				return loadImages;
			}

			// Scrolls the window to top
			var scrollToTop = function() {
				$("html, body").stop().animate({
					scrollTop: 0
				}, 1);
			}

			// Initial load
			var init = function(type) {

				if (type == "normal") {
					var loadImages = calcWindowImages();
				}
				else {
					var loadImages = calcFullscreenWindowImages();
				}

				var req = {
					batchingStart: 0,
					batchingEnd: loadImages
				};

				scrollToTop();

				galThumbsWrap.empty();
				thumbLoad(req, loadImages);
			}

			init("normal");

			// Scroll load more thumbs
			var wScroll = function() {

				$(window).scroll(function() {

					if (loadMore) {
						var loadHeight = Math.round(galThumbsWrap.find(".gallery-thumb:last").offset().top) - $(this).height();

						var deviceAgent = navigator.userAgent.toLowerCase();
						var agentID = deviceAgent.match(/(ipad)/);
						if (agentID) {
							loadHeight -= 500;
						}

						if ($(this).scrollTop() > loadHeight) {
							var bStart = parseInt(galThumbsWrap.find(".gallery-thumb:last").attr("data-b-end")) + 1;
							var bEnd = 39;
							
							var imgItems = galThumbsWrap.find(".gallery-thumb").attr("data-items");
						
							if (bStart <= imgItems) {	
								
								var selItems = findSelItems();

								var req = {
									photographer: selItems["photoVal"],
									lens: selItems["lensVal"],
									camera: selItems["cameraVal"],
									solution: selItems["solutionVal"],
									batchingStart: bStart,
									batchingEnd: bEnd 
								};
								
								bStart += 39;

								galLoading.show();
								
								thumbLoad(req, bStart);
							}

							loadMore = false;
						}
					}
				});
			}
			
			// Show or hide selection lists
			galSelTrigger.live("click", function() {

				var actTrigger = $(this);

				var galSel = actTrigger.parent().find(".panel");
				var galUl = galSel.find("ul");

				var showSel = false;

				if (galSel.is(":hidden")) {
					showSel = true;
				}

				$(".gallery-overlay").remove();
				hideSelList();			

				// Show list	
				if (showSel) {
					actTrigger.addClass("gallery-title-active");

					actTrigger.parent().css("position", "relative");

					if ($("#mobile-quicknav").length) {
						actTrigger.parent().css("height", "24px");
					}

					galSel.parent().css({
						position: "relative",
						zIndex: 500
					});

					wWidth = $(window).width();
					wHeight = $(document).height();

					posLeft = actTrigger.offset().left;
					posTop = actTrigger.offset().top;

					var galOverlay = $("<div/>")
						.addClass("gallery-overlay")
						.insertAfter(actTrigger)
						.css({
							width:  wWidth,
							height: wHeight,
							left: -posLeft,
							top: -posTop
						})
						.fadeIn(100);

					var liCount = galSel.find("li").length;

					galUl.css("margin-top", 0);

					// Show scroller
					if (liCount > 16) {
						galSel.addClass("scroller");
						var up = $("<span/>").addClass("sel-up").insertBefore(galSel.find("ul"));
						var down = $("<span/>").addClass("sel-down").insertAfter(galSel.find("ul"));


						up.mouseenter(function() {
							galUl.animate({
								marginTop: 0
							});
						}).mouseleave(function() {
							galUl.stop();
						});

						down.mouseenter(function() {
							liHeight = galSel.find("li:first").height() + 1;
							var maxHeight = (liHeight * liCount) - 377;
						
							galUl.animate({
								marginTop: -maxHeight
							});

						}).mouseleave(function() {
							galUl.stop();
						});
					}

					galSel.show();

					// Resize overlay
					$(window).resize(function() {
						wWidth = $(window).width();
						wHeight = $(document).height();

						posLeft = actTrigger.offset().left;
						posTop = actTrigger.offset().top;

						galOverlay.css({
							width:  wWidth,
							height: wHeight,
							left: -posLeft,
							top: -posTop
						});
					});

					// Hide list
					galOverlay.click(function() {
						$(this).remove();
						hideSelList();
						$(".sel-up").remove();
						$(".sel-down").remove();
					});

					var selItem = galSel.find("li");

					// Selected item
					selItem.click(function() {

						galThumbsWrap.empty();

						galSel.find("li").removeClass("selected");
						$(this).addClass("selected");
						var selKind = $(this).parent().attr("data-kind");

						if (selKind == "photographer") {
							$this.find(".gallery-selection li").removeClass("selected");
							
							var selItems = {
								photoVal: $(this).attr("data-value"),
								lensVal: "",
								cameraVal: "",
								solutionVal: ""
							};
						}
						else {
							var selItems = findSelItems();
						}
						
						var req = {
							photographer: selItems["photoVal"],
							lens: selItems["lensVal"],
							camera: selItems["cameraVal"],
							solution: selItems["solutionVal"]
						};

						// Update select list
						galHeader.load(actpage + " #gallery-header>li", req);

						// Update thumbs
						if ($("#wrapper").hasClass("fullscreen")) {
							var loadImages = calcFullscreenWindowImages();
						}
						else {
							var loadImages = calcWindowImages();
						}

						var reqThumb = {
							photographer: selItems["photoVal"],
							lens: selItems["lensVal"],
							camera: selItems["cameraVal"],
							solution: selItems["solutionVal"],
							batchingStart: 0,
							batchingEnd: loadImages
						};

						scrollToTop();

						thumbLoad(reqThumb, loadImages);

						actTrigger.parent().css("position", "static");
						actTrigger.removeClass("gallery-title-active");

						galOverlay.remove();
						$(".sel-up").remove();
						$(".sel-down").remove();
						
						galSel.hide();

					});
				}		
			});
		
			// Thumb mouseover
			var thumbMo = function(obj) {
				var medImg = obj.find(".medium-image");

				var imgIdx = obj.parent().find("a").index(obj);
				
				medImg.css({
					left: 0,
					top: 0,
					borderTop: 0
				});

				var divider = 5;
				var divResult = 4;

				if ($("#wrapper").hasClass("fullscreen")) {
					divider = 8;
					divResult = 7;
				}

				if (imgIdx % divider == divResult) {
					medImg.css({
						left: "auto",
						right: 0,
						borderWidth: "0 0 10px 10px"
					});
				}

				if (! medImg.is(":animated") && ! medImg.hasClass("sized")) {

					medImg.addClass("sized");

					medImg.css({
						width: 148,
						height: 148
					});
					
					medImg.find("img").css({
						marginLeft: 0,
						marginTop: 0
					});

					obj.css("z-index", "100");
					
					var medImgWidth = medImg.find("img").attr("width");
					var medImgHeight = medImg.find("img").attr("height");

					if (medImgHeight > medImgWidth) {
						medImg.addClass("high");
						var medWidth = 222;
						var medHeight = 306;
					}
					else {
						medImg.addClass("wide");
						var medWidth = 306;
						var medHeight = 222;
					}

					medImgLeft = (medImgWidth - medWidth) / 2;
					medImgTop = (medImgHeight - medHeight) / 2;

					medImg.find("img").css({
						marginLeft: -medImgLeft,
						marginTop: -medImgTop
					});

					var ts = +new Date();
					var moWait = [];

					moWait[ts] = setInterval(function() {
						medImg.show();
						medImg.animate({
							width: medWidth,
							height: medHeight
						}, 200);
					},270);

					obj.mouseleave(function() {
						clearInterval(moWait[ts]);
						$(".medium-image").removeClass("sized");
						medImg.stop().hide();
						$this.find(".gallery-thumb").css("z-index", "1");
					});
				}
			}
			
			// Big Image
			var bigImg = function(objs) {
				objs.each(function() {

					var bigImage = $(this).find(".big-image");

					$(this).attr("href", bigImage.attr("src"));

					var photographer = $(this).attr("data-photographer");
					var camera = $(this).attr("data-camera");
					var lens = $(this).attr("data-lens");
					var back = $(this).attr("data-back");
					var solution = $(this).attr("data-solution");
					var text = $(this).attr("data-text");

					var transCamera = $(this).attr("data-trans-camera");
					var transLens = $(this).attr("data-trans-lens");
					var transBack = $(this).attr("data-trans-back");
					var transSolution = $(this).attr("data-trans-solution");

					var imgText = "";
					var photographerText = "";
					var cameraText = "";
					var lensText = "";
					var backText = "";
					var solutionText = "";

					if (text != "") {
						imgText = '<p>' + text + '</p>';
					}

					if (photographer != "") {
						photographerText = '<span class="image-desc-title">' + photographer + '</span>';
					}

					if (camera != "") {
						cameraText = '<em>' + transCamera + ': </em>' + camera + ' ';
					}

					if (lens != "") {
						var lensText = '<em>' + transLens + ': </em>' + lens + ' ';
					}

					if (back != "") {
						var backText = '<em>' + transBack + ': </em>' + back + ' ';
					}

					if (solution != "") {
						var solutionText = '<em>'  + transSolution + ': </em>' + solution;
					}

					var desc = '<div class="image-description">'
						+ photographerText
						+ '<p>'
						+ cameraText
						+ lensText
						+ backText
						+ solutionText	
						+ '<p/>'
						+ imgText
						+ '</div>';
				
					$("#cboxTitle").css({
						bottom: 22,
						width: "100%",
						margin: 0,
						background: "#fff"
					});

					$(".cBox-desc-tmp").remove();
					var descTmp = $("<div/>").addClass("cBox-desc-tmp").appendTo("body");
					descTmp.html(desc);

					if (! $("#mobile-quicknav").length) {
						var boxHeight = parseInt(bigImage.css("height")) + descTmp.height() + 50;

						$(this).colorbox({
							transition:'elastic',
							preloading: true,
							title: desc,
							height: boxHeight
						});
					}
					else {
						var boxHeight = (parseInt(bigImage.css("height")) / parseInt(bigImage.css("width"))) * 320 + descTmp.height() + 50;
						
						$(this).colorbox({
							transition:'elastic',
							preloading: true,
							title: desc,
							width: 320,
							height: boxHeight
						});
					}
				});
				
				if ($("#mobile-quicknav").length) {
					$("#colorbox").addClass("gallery-mobile-overlay");
				}
			}

			// Hide selection list
			var hideSelList = function() {
				$this.find(".panel").hide();
				$this.find(".gallery-title").removeClass("gallery-title-active");
				$(".gallery-overlay").fadeOut(100, function() {
					$(this).remove();
					$(".sel-up").remove();
					$(".sel-down").remove();
				});
				galHeader.find("li").css("position", "static");
			}

			// Returns selected nav items
			var findSelItems = function() {
				var photoVal = "";
				var lensVal = "";
				var cameraVal = "";
				var solutionVal = "";
				
				$this.find(".gallery-selection li").each(function() {
					if ($(this).hasClass("selected")) {
						var thisSelKind = $(this).parent().attr("data-kind");
						var thisSelVal = $(this).attr("data-value");
						
						switch(thisSelKind) {
							case "photographer": photoVal = thisSelVal;
							break; 
							case "lens": lensVal = thisSelVal;
							break;
							case "camera": cameraVal = thisSelVal;
							break;
							case "solution": solutionVal = thisSelVal;
							break;
						}
				
					}
				});

				var sel = {
					photoVal: photoVal,
					lensVal: lensVal,
					cameraVal: cameraVal,
					solutionVal: solutionVal
				};

				return sel;
			}

			// Fullscreen view	
			fullscreen.live("click", function() {
				
				galThumbsWrap.empty();
				clearTimeout(intvl);

				$("#metanav").hide();
				$("#user").hide();
				$("#breadcrumb").hide();
				$(".navigation").hide();
				$("#footer").hide();
				
				$("#wrapper").addClass("fullscreen");
				$this.css("padding-bottom", "60px");
				galLoading.css("bottom", "10px");
				
				var loadImages = calcFullscreenWindowImages();

				var selItems = findSelItems();

				var reqThumb = {
					photographer: selItems["photoVal"],
					lens: selItems["lensVal"],
					camera: selItems["cameraVal"],
					solution: selItems["solutionVal"],
					batchingStart: 0,
					batchingEnd: loadImages 
				};
						
				thumbLoad(reqThumb, loadImages);
				
				var req = {
					photographer: selItems["photoVal"],
					lens: selItems["lensVal"],
					camera: selItems["cameraVal"],
					solution: selItems["solutionVal"]
				};
				
				// Update select list
				galHeader.load(actpage + " #gallery-header>li", req, function() {
					$(this).find(".gallery-link-fullscreen").removeClass("gallery-link-fullscreen");
				});

				var galClose = $("<div/>")
					.addClass("gallery-close")
					.click(function() {
						$(this).remove();						

						$("#metanav").show();
						$("#user").show();
						$("#breadcrumb").show();
						$(".navigation").show();
						$("#footer").show();
						
						$("#wrapper").removeClass("fullscreen");
						$(".logo").css("margin-left", "0");	
						$this.css("padding-bottom", "0");
						galLoading.css("bottom", "-10px");
						
						galThumbsWrap.empty();
						clearTimeout(intvl);
						
						var loadImages = calcWindowImages();

						var selItems = findSelItems();
						
						var reqThumb = {
							photographer: selItems["photoVal"],
							lens: selItems["lensVal"],
							camera: selItems["cameraVal"],
							solution: selItems["solutionVal"],
							batchingStart: 0,
							batchingEnd: loadImages 
						};
								
						thumbLoad(reqThumb, loadImages);
						
						var req = {
							photographer: selItems["photoVal"],
							lens: selItems["lensVal"],
							camera: selItems["cameraVal"],
							solution: selItems["solutionVal"]
						};

						// Update select list
						galHeader.load(actpage + " #gallery-header>li", req);

					})
					.appendTo($("#header"));

					var deviceAgent = navigator.userAgent.toLowerCase();
					var agentID = deviceAgent.match(/(ipad)/);
					if (agentID) {
						galClose.css("margin-right", "10px");
						$(".logo").css("margin-left", "10px");
						$this.css("padding-bottom", "100px");
						galLoading.css("bottom", "50px");
					}
			});
		});
	}
})(jQuery);

