/* This function sets all the initial states for a page.
 * It ensures that the page works as expected in a javascript environment, but
 * that everything is still accessible with javascript disabled.
 */
function initialize() {
	var collapsedMenus = $$('*.collapsed');
	for (var i=0; i<collapsedMenus.length; i++)
		collapsedMenus[i].nextSiblings()[0].style.display = "none";
}

//function to toggle the images on the menu structure

function trigger_effect(src_element, div_id, effect, first_class, second_class) {
	Effect.toggle(div_id, effect, {afterFinish:function(){
		src_element.className = src_element.className.match(first_class) ? second_class : first_class;
	}});
	return true;
}

// wrapper for trigger effect to make the menu php more versatile and easier to read
function menu_toggle(src_element, div_id) {
	var div = document.getElementById(div_id);

	var initialHeight = div.offsetHeight;

	if (src_element.className == "collapsed") {
		div.style.display = "";
		var finalHeight = div.offsetHeight;
		div.style.display = "none";

		new Effect.Morph (div, {
			style: {height: finalHeight+"px"},
			beforeStart: function() {
				div.style.overflow = "hidden";
				div.style.height = initialHeight + "px";
				div.style.display = "";
			},
			afterFinish: function() {
				src_element.className = "expanded";
				div.style.overflow = "visible";
				div.style.height = "";
			}
		});
	}
	else {
		div.style.display = "none";
		var finalHeight = div.offsetHeight;
		div.style.display = "";

		new Effect.Morph (div, {
			style: {height: finalHeight+"px"},
			beforeStart: function() {
				div.style.height = initialHeight + "px";
				div.style.overflow = "hidden";
			},
			afterFinish: function() {
				src_element.className = "collapsed";
				div.style.display = "none";
				div.style.overflow = "visible";
				div.style.height = "";
			}
		});
	}

}

function toggle_size(element) {
	if (element.offsetWidth > 90)
		unscale(element);
	else
		scale(element);
}

function highlighter(id) {
	new Effect.Highlight(id, {
		delay:'.2',
		duration:'2.5',
		restorecolor:'#ffffff'
	});
}

function bioOn(element_id) {
	new Effect.Appear('overlay', { to: .7, afterfinish: new Effect.Appear(element_id)});
}

function bioOff(element_id) {
	new Effect.Fade('overlay', {afterfinish: new Effect.Fade(element_id)});
}

// generates a random number of milliseconds between 4 and 5 seconds
function random(start, end) {
	return Math.floor(Math.random()*(end-start+1)+(start));
}

function slideFade(imageId) {
	new Effect.Fade (imageId, {queue: {position: 'end', scope: imageId+'scope'}, duration: .5});
}

function slideAppear(imageId, imgPath) {
	var image = document.getElementById(imageId);
	image.style.display = "none";
	image.src = imgPath;

	new Effect.Appear (imageId, {queue: {position: 'end', scope: imageId+'scope'}, duration: .5});
}

function nextHSlide(imageId, imgNum, imagesDir) {
	var imgPath = imagesDir+hImages[imgNum];
	slideAppear(imageId, imgPath);
}

function nextVSlide(imageId, imgNum, imagesDir) {
	var imgPath = imagesDir+vImages[imgNum];
	slideAppear(imageId, imgPath);
}

function nextSlide (imageId, imgNum, imagesDir, showId) {
	var image = document.getElementById(imageId);
	var imgPath = "";
	var imageInfo = "";
	switch (showId) { // for more slide shows, add more cases
		case "h":
			imgPath = imagesDir+hImages[imgNum];
			numPics = hImages.length;
			break;
		case "v":
			imgPath = imagesDir+vImages[imgNum];
			numPics = vImages.length;
			break;
	}

	slideFade(imageId);

	switch (showId) {
		case "h":
			setTimeout("nextHSlide('"+imageId+"',"+imgNum+",'"+imagesDir+"')", 505);
			break;
		case "v":
			setTimeout("nextVSlide('"+imageId+"',"+imgNum+",'"+imagesDir+"')", 505);
			break;
	}

	var oldImgNum = imgNum;
	while (oldImgNum == imgNum)
		imgNum = (oldImgNum+1)%(numPics);

	setTimeout("nextSlide('"+imageId+"',"+imgNum+",'"+imagesDir+"','"+showId+"')", 4500);
}

function slideShow (imageId, imagesDir, showId) {
	nextSlide(imageId, 0, imagesDir, showId);
}

function defInitialize() {
	var elementsToHide = new Array();
	elementsToHide = elementsToHide.concat(document.getElementsByClassName('jshide'), document.getElementsByTagName('DT'), document.getElementsByTagName('DD'));

	for (var i=0; i < elementsToHide.length; i++)
		for (var j=0; j < elementsToHide[i].length; j++)
			elementsToHide[i].item(j).hide();
}

function definition(word,id) {
	var element = document.getElementById(id);
	element.style.display = "block";
	element.style.position = "absolute";
	element.style.width = "50%";
	element.style.padding = "0.5em";
	element.style.margin = "0";

	var wordOffsetBottom = word.offsetTop + word.offsetHeight;
	var elementOffsetBottom = word.offsetBottom + element.offsetHeight;

	if (elementOffsetBottom > word.offsetParent.offsetHeight)
		var offsetTop = word.offsetTop - element.offsetHeight;
	else
		var offsetTop = wordOffsetBottom;

	var elementOffsetRight = word.offsetLeft + 5 + element.offsetWidth;

	if (elementOffsetRight <= word.offsetParent.offsetWidth)
		var offsetLeft = word.offsetLeft + 5;
	else
		var offsetLeft = word.offsetParent.offsetWidth - element.offsetWidth;

	element.style.top = offsetTop + "px";
	element.style.left = offsetLeft + "px";

	element.style.textAlign = "left";
	element.style.backgroundColor = "white";
	element.style.border = "1px solid #666";


	element.onclick = function() {element.style.display = "none";}
}
