// adding event listeners for menu items cross-fading and home pictures cross-fading
window.addEventListener ? window.addEventListener("load", xfade_init, false) : window.attachEvent("onload", xfade_init);

// global variables
var start = true; // start in home or not
var items = new Array(); // menu items
var slides = new Array(); // slides
var current; // current slide
var content = false; // shows which content is being shown now 
var time = 5; // time in seconds between auto slides and for fading off actual area slide
var timeout = 1; // time in seconds before the site returns to original state
var xfading = false; // area we doing a cross fade now?
var home = false; // timer variable for going back to home animation
var ie = (/MSIE (\d+\.\d+);/.test(navigator.userAgent)); // it's IE?

// generic functions for cross-fading
function setOpacity(obj) {
	// normalizing opacity
	if (obj.opacity <= 0) obj.opacity = 0;
	if (obj.opacity >= 1) obj.opacity = 1;
	
	if (ie) {
		obj.style.filter = 'alpha(opacity=' + (obj.opacity*100) + ')';
	}
	else {
		obj.style.opacity = obj.opacity;
		obj.style.MozOpacity = obj.opacity;
	}
}


function xfade_init() {
	// setting menu items start opacity
	var imgs = document.getElementById('menu').getElementsByTagName('IMG');
	var j = 0;
	for (var i = 0; i < imgs.length; i++) {
		if ((i % 2) == 0) continue;
		items[j] = imgs[i];
		items[j].opacity = 0;
		items[j].dest = 0;
		j++;
	}
	
	// setting slides opacity
	var images = document.getElementById('home').getElementsByTagName('IMG');
	for (var i = 0; i < images.length; i++) {
		slides[i] = images[i];
		slides[i].opacity = 0;
		slides[i].dest = 0;
		slides[i].style.display = 'none';
	}
	
	// content slide
	var last = slides.length;
	slides[last] = document.getElementById('content');
	if (start) {
		slides[last].opacity = 0;
		slides[last].dest = 0;
		slides[last].style.display = 'none';
	}
	else {
		slides[last].opacity = 1;
		slides[last].dest = 1;
		slides[last].style.display = 'block';
	}
	
	// making first slide appear
	current = items.length;
	if (start) {
		slides[current].opacity = 1;
		slides[current].dest = 1;
		slides[current].style.display = 'block';
		setOpacity(slides[current]);
		
		// start auto animation
		home = setTimeout('xfade_to_home()', time*1000);
	}	
}


function xfade_to(num) {
	if (num !== content) {
		for (var i = 0; i < slides.length; i++) {
			 if (items[i]) {
				items[i].dest = 0;
			}
			slides[i].dest = 0;
		}
	
		if (num < items.length) {
			items[num].dest = 1;
		}
		slides[num].dest = 1;
		slides[num].style.display = 'block';
		
		if (num < slides.length-1) {
			document.getElementById('home').style.display = 'block';
		}
		
		if (current == slides.length-1 && content !== false) {
			items[content].dest = 0;
		}
		
		if (num == slides.length-1 && content !== false) {
			items[content].dest = 1;
		}
			
		xfade_do(num);
	}
}


function xfade_do(num) {
	var step = (items[num] || num == slides.length-1 ? .25 : .05);
	
	for (var i = 0; i < slides.length; i++) {
		if (items[i]) {
			if (items[i].opacity != items[i].dest) {
				items[i].opacity += (items[i].opacity < items[i].dest ? step : -step);
				setOpacity(items[i]);
			}
		}
		if (slides[i].opacity != slides[i].dest) {
			slides[i].opacity += (slides[i].opacity < slides[i].dest ? step : -step);
			if (i < slides.length-1) setOpacity(slides[i]);
		}
	}
	
	// deciding if we are finished or not
	if (Math.abs(slides[num].opacity - slides[num].dest) < .01) {
		// finished, cleaning up
		for (var i = 0; i < slides.length; i++) {
			if (items[i]) {	
				items[i].opacity = items[i].dest; setOpacity(items[i]);
			}
			slides[i].opacity = slides[i].dest; if (i < slides.length-1) setOpacity(slides[i]);
			if (slides[i].opacity <= 0) slides[i].style.display = 'none';
		}
		
		current = num;
		if (current == slides.length-1) {
			document.getElementById('home').style.display = 'none';
		}
		xfading = false;
	}
	else { // not finished yet, continue
		xfading = setTimeout('xfade_do(' + num + ')', 1);
	}
	
//	window.status = slides[0].style.display + '|' + slides[1].style.display + '|' + slides[2].style.display + '|' + slides[3].style.display + '|' + slides[4].style.display + '|' + slides[5].style.display + '|' + slides[6].style.display + ' -- ' + slides[7].style.display + '|' + slides[8].style.display + '|' + slides[9].style.display + '|' + slides[10].style.display + '|' + slides[11].style.display + ' -- ' + slides[12].style.display;
}


// show slide of an area
function xfade_to_area(n) {
	clearTimeout(home);
	if (xfading !== false) {
	//	xfade_interrupt(n);
	}
	
	xfade_to(n);
}

// mouseout action
function xfade_back() {
	var destiny = items.length; // default: first slide home
	if (content !== false) { // if there is content
		if (current !== slides.length-1) { // if we are already in content, this does not apply
			destiny = slides.length-1; // back to the content slide
			clearTimeout(home);
			home = setTimeout('xfade_to(' + destiny + ')', timeout*1000);
		}
	}
	else {
		home = setTimeout('xfade_to_home()', timeout*1000);
	}
}

// home animation
function xfade_to_home() {
	var next = (current < items.length ? items.length : current);
	next = (slides[next+2] ? next+1 : items.length);
	xfade_to(next);
	home = setTimeout('xfade_to_home()', time*1000);
}

// clicking in a area
function xfade_to_content(n, url) {
	content = n;
	return get_content(url, 'content');
}

// interrupts current animation, completing it so we can do another one
function xfade_interrupt(num) {
	if (xfading !== false) {
		clearTimeout(xfading);
		xfading = false;
		
		if (items[current]) {	
			items[current].opacity = items[current].dest; setOpacity(items[current]);
		}
		slides[current].opacity = slides[current].dest; if (current < slides.length-1) setOpacity(slides[current]);
		
		if (items[num]) {	
			items[num].opacity = items[num].dest; setOpacity(items[num]);
		}
		slides[num].opacity = slides[num].dest;  if (num < slides.length-1) setOpacity(slides[num]);

		current = num;
	}
}
