var Browser = Class.create({
	initialize: function() {
	    	var userAgent = navigator.userAgent.toLowerCase();
	    	this.version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
	    	this.safari = /webkit/.test( userAgent );
	    	this.opera = /opera/.test( userAgent );
	    	this.msie = /msie/.test( userAgent ) && !/opera/.test( userAgent );
	    	this.mozilla = /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent );
  	}
});

var browser = new Browser();
var preloadingImages = [];
var galleryWidestImage = [];
var loaded = [];
var loadedCount = 0;
var imgPreloadCount = 0;

function galleryPreloader() {
	gallerydata.each(function(pair) {
		var images = pair.value;
		var gal = pair.key;
		galleryWidestImage[galleryWidestImage.size()] = new Hash({"gallery": gal, "width": 0});
		images.each(function(img) {
			var hash2 = new Hash({"gallery": gal, "image": new Image()});
			hash2.get("image").src = "img/content/"+img;
			preloadingImages[preloadingImages.size()] = hash2; 
			loaded[loaded.size()] = false;
		});	
	});
	checkPreloader();
}

function checkPreloader() {
	if (loadedCount == preloadingImages.size()) {
		preloadingImages.each(function(hash) {
			galleryWidestImage.each(function(hash2) {
				if (hash2.get("gallery") == hash.get("gallery"))
					if (hash2.get("width") < hash.get("image").width)
						hash2.set("width", hash.get("image").width);
			});
		});
		start();
		return;
	}
	for(i=0; i<preloadingImages.size(); i++) {
		if (loaded[i] == false && preloadingImages[i].get("image").complete) {		
			loaded[i] = true;
			loadedCount++;
		}
	}
	setTimeout("checkPreloader()", 50);
}

function start() {
	$('logo').setStyle({display: 'block'});
	$('logo').setStyle({cursor: 'pointer'});
	Event.observe(window, 'scroll', scrollLogoEvent);
}

function initGallery() {
	galleryWidestImage.each(function(hash) {
		var ancestors = $(hash.get("gallery")).ancestors();
		$(ancestors[0]).setStyle({width: hash.get("width")+'px'});		
		var childeren = $(ancestors[0]).childElements();
		if (childeren[0].width < hash.get("width")) {
			var padding = ((($(ancestors[0]).getWidth()-25)-childeren[0].width)/2).round();
			childeren[0].setStyle({marginLeft: padding+'px'});
		}
	});
}

function initLayout() {
	initGallery();
	var containerWidth = document.viewport.getWidth();
	$('splash').setStyle({width: containerWidth+'px'});
	var padding = ((containerWidth-425)/2).round();
	$('home_container').setStyle('padding-left: '+padding+'px');
	$('home_container').setStyle({width: (containerWidth-(padding+50))+'px'});
	var content = $$('.content');
	content.each(function(item) { containerWidth += item.getWidth(); });
	$('content_container').setStyle({width: (containerWidth+2)+'px'});
	$('disclaimer').setStyle({left: ((containerWidth+2)-160)+'px'});
	content.each(function(item) { item.setStyle({display: 'block'}); });
	$('disclaimer').setStyle({display: 'block'});
	$$('.home_content').each(function(element) {
		if ($('home_content_container').getHeight() < $(element).getHeight())
			$('home_content_container').setStyle({height: $(element).getHeight()+'px'});
	});
	$('splash').scrollTo();
}

function centerLogo() {
	var x = 16+((document.viewport.getWidth()-425)/2).round();
	new Effect.Move($('logo'), { x: x, 
		y: '30', 
		mode: 'absolute',
		afterFinish: stayLogo});
}

var maxScrollOffset = 0;

function stayLogo() {
	$('home_logo_spacer').setStyle({display: 'none'});
	$('home_logo').setStyle({display: 'block'});
	$('logo').setStyle({display: 'none'});
	maxScrollOffset = document.viewport.getScrollOffsets().left;
}

function leftLogo() {
	$('logo').setStyle({display: 'block'});
	$('home_logo_spacer').setStyle({display: 'block'});
	$('home_logo').setStyle({display: 'none'});
	if (!(browser.msie && browser.version == "6.0"))
		new Effect.Move($('logo'), { x: '50', y: '30', mode: 'absolute' });
}

function scrollLogo(event) {
	if (document.viewport.getScrollOffsets().left < maxScrollOffset-15)
		leftLogo();
	Event.stop(event);
}

scrollLogoEvent = scrollLogo.bindAsEventListener(window);

function scrollPage(p, top) {
	if (browser.msie && browser.version == "6.0")
		$('logo').setStyle({left: (document.viewport.getScrollOffsets().left+50)});
	
	scrollTo(p, top);
}

function enableNavEvents() {
	Event.observe($('logo'), 'click', navHomeEvent);
	$$('.nav_gallery').each(function(element) {
		Event.observe(element, 'click', navGalleryEvent);
	});
	Event.observe(window, 'scroll', scrollLogoEvent);
}

function disableNavEvents() {
	Event.stopObserving($('logo'), 'click', navHomeEvent);
	$$('.nav_gallery').each(function(element) {
		Event.stopObserving(element, 'click', navGalleryEvent);
	});
	Event.stopObserving(window, 'scroll', scrollLogoEvent);
}

function navHome(event) {
	if ($('home_container').getStyle('display') == "none")
		initLayout();

	new Effect.ScrollToX('home_container',
		{beforeStart: disableNavEvents,
		afterFinish: enableNavEvents},
		centerLogo());
	Event.stop(event);
}

navHomeEvent = navHome.bindAsEventListener($('logo'));

Event.observe(window, 'load', function() {
	Event.observe($('logo'), 'click', navHomeEvent);
});

var content = null;

function showContent(event) {
	if (content != null && content != Event.element(event).readAttribute('title'))
		$(content).setStyle({display: 'none'});
	$(Event.element(event).readAttribute('title')).setStyle({display: 'block'});
	Event.stop(event);
}

showContentEvent = showContent.bindAsEventListener($$('.displaycontent'));

function hideContent(event) {
	if (content != Event.element(event).readAttribute('title')) {
		$(Event.element(event).readAttribute('title')).setStyle({display: 'none'});
		if (content != null)
			$(content).setStyle({display: 'block'});
	}
	Event.stop(event);
}

hideContentEvent = hideContent.bindAsEventListener($$('.displaycontent'));

function stayContent(event) {
	content = Event.element(event).readAttribute('title');
	$$('.displaycontent').each(function(element) {
		$(element).setStyle('text-decoration: none');
	});
	$(Event.element(event)).setStyle('text-decoration: underline');
	Event.stop(event);
}

stayContentEvent = stayContent.bindAsEventListener($$('.displaycontent'));

Event.observe(window, 'load', function() {
	$$('.displaycontent').each(function(element) {
		Event.observe(element, 'mouseover', showContentEvent);
		Event.observe(element, 'mouseout', hideContentEvent);
		Event.observe(element, 'click', stayContentEvent);
	})
});

disclaimerState = false;

function toggleDisclaimer(event) {
	if (!disclaimerState) {
		$('disc_text').setStyle({display: 'block'});
		disclaimerState = true;
	} else {
		$('disc_text').setStyle({display: 'none'});
		disclaimerState = false;
	}
}

toggleDisclaimerEvent = toggleDisclaimer.bindAsEventListener($('displaydisclaimer'));

Event.observe(window, 'load', function() {
	Event.observe($('displaydisclaimer'), 'click', toggleDisclaimerEvent);
});

function showNLContent(event) {
	contentNL.each(function(pair) {
		$(pair.key).innerHTML = pair.value;
	});
	changeGalleryLanguage("nl");
	bindEventsOnLanguageChange();
}

showNLContentEvent = showNLContent.bindAsEventListener($('language_nl'));

Event.observe(window, 'load', function() {
	Event.observe($('language_nl'), 'click', showNLContentEvent);
});

function showENContent(event) {
	contentEN.each(function(pair) {
		$(pair.key).innerHTML = pair.value;
	});
	changeGalleryLanguage("en");
	bindEventsOnLanguageChange();
}

showENContentEvent = showENContent.bindAsEventListener($('language_en'));

Event.observe(window, 'load', function() {
	Event.observe($('language_en'), 'click', showENContentEvent);
});

function changeGalleryLanguage(lang) {
	var content;
	if (lang == "nl") {
		content = galleryContentNL;
	} else {
		content = galleryContentEN;
	}
	content.each(function(pair) {
		$(pair.key).next("p").innerHTML = pair.value;
	});	
}

function bindEventsOnLanguageChange() {

	$$('.displaycontent').each(function(element) {
		Event.observe(element, 'mouseover', showContentEvent);
		Event.observe(element, 'mouseout', hideContentEvent);
		Event.observe(element, 'click', stayContentEvent);
	});
	$$('.displaycontact').each(function(element) {
		Event.observe(element, 'mouseover', showContactEvent);
		Event.observe(element, 'mouseout', hideContactEvent);
		Event.observe(element, 'click', stayContactEvent)
	});
	$$('a').each(function(element) {
		if (element.readAttribute('href') != "" && element.readAttribute('rel') == 'external')
			element.target = "_blank";
	});
	enableNavEvents();
}

var galleryItem = null;
var imagenr = null;

function navGallery(event) {
	var target = $(Event.element(event).readAttribute('title'));
	if (target == null)
		target = $(Event.element(event));
	
	if(galleryItem == $(target).identify() && $(Event.element(event).hasClassName('gallery'))) {
		var images = gallerydata.get(galleryItem);
		imagenr = (imagenr == images.size()-1) ? 0 : imagenr+1;
		var src = "img/content/"+images[imagenr];
		$(galleryItem).src = src;
		var ancestors = $(galleryItem).ancestors();
		if (browser.msie && browser.version == "6.0")
			$(ancestors[0]).setStyle({'width': '0px'});
			
		if ($(galleryItem).getWidth() < $(ancestors[0]).getWidth()-25) {
			var padding = ((($(ancestors[0]).getWidth()-25)-$(galleryItem).getWidth())/2).round();
			$(galleryItem).setStyle({marginLeft: padding+'px'});
		} else {
			$(galleryItem).setStyle({marginLeft: '0px'});
		}
	} else {
		$$('.nav_gallery').each(function(element) {
			element.setStyle({cursor: 'pointer'});
		});
		var offset = ((document.viewport.getWidth()-$(target).getWidth())/2).round();
		new Effect.ScrollToX(target,
			{offset: -offset,
			beforeStart: disableNavEvents,
			afterFinish: enableNavEvents},
			leftLogo());
		galleryItem = $(target).identify();
		if (gallerydata.get(galleryItem).size() == 1)
			$(galleryItem).setStyle({cursor: 'default'});
		imagenr = 0;		
		$$('.gallery_text').each(function(element) {
			element.setStyle({display: 'none'});
		});
		var ancestors = $(galleryItem).ancestors();
		var childeren = $(ancestors[0]).childElements();
		if (childeren.size() > 1) {
			childeren[1].setStyle({display: 'block'});
		}
	}
	Event.stop(event);
}

navGalleryEvent = navGallery.bindAsEventListener($$('.nav_gallery'));

var contact = "<br />&nbsp;";

function showContact(event) {
	$('contact_info').innerHTML = contactdata.get(Event.element(event).readAttribute('title'));
	Event.stop(event);
}

showContactEvent = showContact.bindAsEventListener($$('.displaycontact'));

function hideContact(event) {
	$('contact_info').innerHTML = contact;
	Event.stop(event);
}

hideContactEvent = hideContact.bindAsEventListener($$('.displayContact'));

function stayContact(event) {
	contact = contactdata.get(Event.element(event).readAttribute('title'));
	$$('.displaycontact').each(function(element) {
		$(element).setStyle('text-decoration: none');
	});
	$(Event.element(event)).setStyle('text-decoration: underline');
	$('contact_info').innerHTML = contact;
	Event.stop(event);
}

stayContactEvent = stayContact.bindAsEventListener($$('.displayContact'));

Event.observe(window, 'load', function() {
	$$('.displaycontact').each(function(element) {
		Event.observe(element, 'mouseover', showContactEvent);
		Event.observe(element, 'mouseout', hideContactEvent);
		Event.observe(element, 'click', stayContactEvent)
	})
});

Event.observe(window, 'load', function() {
	$$('a').each(function(element) {
		if (element.readAttribute('href') != "" && element.readAttribute('rel') == 'external')
			element.target = "_blank";
	})
});

Event.observe(window, 'load', function() {
	galleryPreloader();
});
