var cookieOptions = {path: '/'} // Site wide cookies
var gPreviousMainCategory = Cookie.read('PreviousMainCategory');
Cookie.write('PreviousMainCategory', gCurrentMainCategory, cookieOptions);
var gPreviousLanguage = Cookie.read('PreviousLanguage');
Cookie.write('PreviousLanguage', gCurrentLanguage, cookieOptions);

var gLinkBackgroundColor = '#eee';
var gLinkBackgroundColorHover = '#fbfbfb';
var gLinkEnterEffectDuration = 200;

// Milliseconds to wait after domready before doing eye candy animations
var gEyeCandyDelay = 600;

window.addEvent('domready', function() {
	initHeader();
	initTabs();
	initCollapsers();
	initAnchors();
	initFancyLinks();
});

// AlphaImageLoader hack for IE 6
function setIE6ImageWithAlpha(element, imageFile)
{
	element.setStyles({
		'background-image': 'none',
		'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + imageFile + '\', sizingMethod=\'crop\')'
	});
}

function addMorphEffects(element, enterEffect, categoryTabActiveCss, leaveEffect, categoryTabInactiveCss)
{
	element.addEvents({
		'mouseenter': function() {
			if (!window.blockHoverEvents) {
				leaveEffect.cancel();
				enterEffect.start(categoryTabActiveCss);
			}
		},
		'mouseleave': function() {
			if (!window.blockHoverEvents) {
				enterEffect.cancel();
				leaveEffect.start(categoryTabInactiveCss);
			}
		},
		'click': function() {
			window.blockHoverEvents = true;
		}
	});
}

function canChangeStuffBeforeVisible()
// Although using domready to perform some tweaks, the user can see the untweaked
// state for a fraction of a second, on most browser. Ugly. Workaround.
{
	return (Browser.Engine.gecko || Browser.Engine.presto950);
}

function initHeader()
{
	var tabColors = ['#b31515', '#b35f15', '#b3aa15', '#71b315'];
	var headerBackgroundColors = Array(tabColors.length);
	for (var i = 0; i < tabColors.length; i++) {
		var color = new Color(tabColors[i]);
		color = color.setHue(color.hsb[0] + 180);
		color = color.setSaturation(color.hsb[1] - 50);
		headerBackgroundColors[i] = color.rgbToHex();
	}

	var headerDiv = $('header');
	if (!gPreviousMainCategory || gCurrentMainCategory == gPreviousMainCategory) {
		headerDiv.setStyle('background-color', headerBackgroundColors[gCurrentMainCategory]);
	} else {
		headerDiv.setStyle('background-color', headerBackgroundColors[gPreviousMainCategory]);
		var fadeEffect = new Fx.Tween(headerDiv, {'duration': 2000});
		(function(){fadeEffect.start('background-color', headerBackgroundColors[gCurrentMainCategory]);}).delay(gEyeCandyDelay);
	}
}

function initTabs()
{
	window.blockHoverEvents = false;

	var categoryAnchors = $('navigation').getElements('a');
	var categoryTabActiveCss = categoryAnchors[gCurrentMainCategory].getStyles('top', 'padding-top');
	var categoryTabInactiveCss = categoryAnchors[gCurrentMainCategory == 0?1:0].getStyles('top', 'padding-top');
	categoryAnchors.each(function(element, index){
		if (index != gCurrentMainCategory) {
			var enterEffect = new Fx.Morph(element, {'link': 'cancel', 'duration': 150, transition: Fx.Transitions.Expo.easeOut});
			var leaveEffect = new Fx.Morph(element, {'link': 'cancel', 'duration': 650, transition: Fx.Transitions.Bounce.easeOut});
			addMorphEffects(element, enterEffect, categoryTabActiveCss, leaveEffect, categoryTabInactiveCss);
			if (canChangeStuffBeforeVisible() && gPreviousMainCategory == index) {
				element.setStyles(categoryTabActiveCss);
				(function(){leaveEffect.start(categoryTabInactiveCss);}).delay(gEyeCandyDelay);
			}
		}
	});

	var languageAnchors = $('languagechoice').getElements('a');
	var languageTabActiveCss = languageAnchors[gCurrentLanguage].getStyles('top', 'padding-top', 'height');
	var languageTabInactiveCss = languageAnchors[gCurrentLanguage == 0?1:0].getStyles('top', 'padding-top', 'height');
	languageAnchors.each(function(element, index){
		if (index != gCurrentLanguage) {
			var enterEffect = new Fx.Morph(element, {'link': 'cancel', 'duration': 150, transition: Fx.Transitions.Expo.easeOut});
			var leaveEffect = new Fx.Morph(element, {'link': 'cancel', 'duration': 350, transition: Fx.Transitions.Expo.easeOut});
			addMorphEffects(element, enterEffect, languageTabActiveCss, leaveEffect, languageTabInactiveCss);
			if (canChangeStuffBeforeVisible() && gPreviousLanguage == index) {
				element.setStyles(languageTabActiveCss);
				(function(){leaveEffect.start(languageTabInactiveCss);}).delay(gEyeCandyDelay);
			}
		}
	});
}

function initCollapsers()
{
	$$('.collapser').each( function(element) {
		element.setStyles({
			'cursor': 'pointer',
			'padding-left': 23,
			'background': '#eee url(files/expand.png) no-repeat scroll 6px center'
		});
		element.addEvents({
			'mouseenter': function() {
				element.highlight(gLinkBackgroundColorHover);
			}
		});
	});
	var collapserAccordion = new Accordion('.collapser', '.collapsible', {
		show: 0,
		opacity: false,
		alwaysHide: true,
		onActive: function(toggler, element) {
			toggler.setStyle('background-image', 'url(files/collapse.png)');
		},
		onBackground: function(toggler, element) {
			toggler.setStyle('background-image', 'url(files/expand.png)');
		}
	});
}

function initAnchors()
{
	$('content').getElements('a').each( function(element) {
		var enterEffect = new Fx.Tween(element, {'link': 'cancel', 'duration': gLinkEnterEffectDuration});
		var leaveEffect = new Fx.Tween(element, {'link': 'cancel', 'duration': 900});
		element.addEvents({
			'mouseenter': function() {
				leaveEffect.cancel();
				enterEffect.start('background-color', gLinkBackgroundColorHover);
			},
			'mouseleave': function() {
				enterEffect.cancel();
				leaveEffect.start('background-color', gLinkBackgroundColor);
			}
		});
	});
}

function initFancyLinks()
{
	$$('.fancylink span').each( function(element) {
		var size = element.getSize();
		var parent = element.getParent();
		var position = parent.getPosition('content');
		element.setStyles({
			'position': 'absolute',
			'background-color': gLinkBackgroundColor,
			'border-width': 1,
			'border-style': 'solid',
			'border-top-style': 'none',
			'border-color': parent.getStyle('border-color'),
			'padding': parent.getStyle('padding'),
			'padding-top': 4,
			'padding-bottom': 5,
			'cursor': 'pointer',
			'overflow': 'hidden',
			'left': position.x,
			'width': size.x,
			'visibility': 'hidden'
		});
		var effect = new Fx.Morph(element, {'link': 'cancel', 'duration': gLinkEnterEffectDuration});

		parent.addEvents({
			'mouseenter': function() {
				effect.cancel();
				element.setStyles({
					'visibility': 'visible',
					'height': 0
				});
				effect.start({
					'height': size.y,
					'background-color': gLinkBackgroundColorHover
				});
			},
			'mouseleave': function() {
				effect.cancel();
				effect.start({
					'height': 0
				}).chain( function() {
					element.setStyles({
						'visibility': 'hidden',
						'background-color': gLinkBackgroundColor
					});
				});
			}
		});
	});
}

