/*gallery_swap.js*/

// this function allows more than one function to be attached
// to the window.onload event

function addLoadEvent(func) {
	var oldOnLoad = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function () {
			oldOnLoad();
			func();
		}
	}
}

//This is to open an external link
function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     anchor.target = "_blank";
 }
}
//end of code to open external link



function insertAfter(newElement, targetElement) {
	var parent = targetElement.parentNode;
	if(parent.lastChild == targetElement) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement, targetElement.nextSibling);
	}
}

function insertInside(newElement, parentElement) {
	var parent = parentElement;
	parent.appendChild(newElement);
}

function hideLoadMessage() {
	if (!document.getElementById("loadMessage")) return false;

	var loadMessage = document.getElementById("loadMessage");
	loadMessage.style.display = 'none';
}


function preLoadImages() {
	var args = preLoadImages.arguments;
	document.imageArray = new Array(args.length);
	for(var i = 0; i < args.length; i++) {
		document.imageArray[i] = new Image;
		document.imageArray[i].src = args[i];
	}
}

function loadImages() {
	var args = loadImages.arguments;
	document.imageArray = new Array(args.length);
	for(var i = 0; i < args.length; i++) {
		document.imageArray[i] = new Image;
		document.imageArray[i].src = args[i];
	}
}

function preparePlaceholder() {
	if (!document.createElement) return false;
	if (!document.createTextNode) return false;
	if (!document.getElementById) return false;
	if (!document.getElementById("imageGallery")) return false;
	if (!document.getElementById("galleryTitle")) return false;
	if (!document.getElementById("photo")) return false;
	
	
	// set up image descriptions
	var galleryTitle = document.getElementById("galleryTitle");
	var description = document.createElement("p");
	var desctext = document.createTextNode("Choose an image");
	
	description.setAttribute("id", "description");
	description.appendChild(desctext);
	
	// set up image placeholder
	var placeholder = document.createElement("img");
	var photoWindow = document.getElementById("photo");
	
	placeholder.setAttribute("id", "placeholder");
	
	placeholder.style.display = 'none';
	
	// make it so
	hideLoadMessage();
	insertAfter(description, galleryTitle);
	insertInside(placeholder, photoWindow);
}

function prepareGallery () {

	// return false if no getElementsByTagName (tests browser objects)
	if (!document.getElementsByTagName) return false;
	
	// return false if no getElementById (tests browser objects)
	if (!document.getElementById) return false;
	
	// return false if no getElementsById with the id "imageGallery"
	if (!document.getElementById("imageGallery")) return false;
	
	// set imageGallery contents to var gallery
	var gallery = document.getElementById("imageGallery");
	
	// set all a links to var links
	var links = gallery.getElementsByTagName("a");
	
	var imageState = false;
	
	
	// count through all a elements in links
	// on click run showPic for a's image
	for (var i=0; i < links.length; i++) {
		links[i].onmouseover = function() { 
			if (imageState == false) {
				imageState = true;
				return showPic(this, 1);
			}
		}
		links[i].onmouseout = function() { 
			if (imageState == true) {
				var blank = document.createElement("img");
				
				imageState = false;
				return showPic(blank, 0);
			}
		}
	}
}

function showPic(whichPic, display) {

	// if no getElementsByTagName with id "placeholder"
	// return true to degrade gracefully
	if (!document.getElementById("placeholder")) return true;
	
	// set current element href to var source
	var source = whichPic.getAttribute("href");
	
	var imageDisplay = display;
	
	// set current element placeholder to var placeholder
	var placeholder = document.getElementById("placeholder");

	if (imageDisplay != 0) {
		placeholder.style.display = 'block';
	} else {
		placeholder.style.display = 'none';
	}
	
	// test if placeholder is not an image
	// return true so that script doesn't break
	if (placeholder.nodeName != "IMG") return true;
	
	// swap placeholder source to new value inside var source
	placeholder.setAttribute("src", source);
	
	// return false if no element descriotion exists
	if (!document.getElementById("description")) return false;
	
	// if there is a title in the image link assign it to var text
	// else set var text to an empty string
	var text = whichPic.getAttribute("title") ? whichPic.getAttribute("title") : "Choose an Image" ;
	
	// assign the element description to var description
	var description = document.getElementById("description");
	
	// if description's first child node type is a node type 3 (text node)
	// see NODE TYPE below
	// assign value of text to description
	if(description.firstChild.nodeType == 3) {
		description.firstChild.nodeValue = text;
	}
	// return false to stop href's default actions.
	return false;
	
}


// call functions to be loaded on window.onload event
addLoadEvent(externalLinks);
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);

