	// ================================================================================================================
	//
	// Title : bgScript
	// Author : Ben Sekulowicz
	// URL : www.beseku.com
	//
	// Description : Various functions for the besekuGallery pages
	//
	// Created : 13th July, 2005
	// Modified : 
	//
	// ================================================================================================================

	// Configurable options ===========================================================================================
	var widthWrapper = 500;
	var widthPadding = 98;
	var widthStart = 50;

	var speed = 100;

	/* ========================================================================================================================

		gallery.beseku
	
		Author: Ben Sekulowicz
		Web: http://www.beseku.com
		Licence: Creative Commons Attribution Non-commercial
	
	========================================================================================================================= */

	// Leave these alone ==============================================================================================
	
	// For placing images at the start
	var distanceCum = 0;
	var distanceBtwn = widthPadding + widthWrapper;

	var stillMoving;
	var currentWrap = 1;

	var totalWrappers = 0;

	var totalTravelled = 0;
	var totalDistance = 0;

	var ajaxReq;
	var ajaxResponse;
	
	// ================================================================================================================
	
	window.onload = function() {
				
		// get all image links
		var listOfLinks = document.getElementById("image-links").getElementsByTagName("a");

		for (var i = 0; i < listOfLinks.length; i++) {
			prepWrappers(parseFloat(listOfLinks[i].childNodes[0].nodeValue));

			listOfLinks[i].onclick = function() {
				onLinkClick(this);
				return false;		
			}
		}		

		totalWrappers = i;

		getImageData(1, listOfLinks[0])
	}

	// ================================================================================================================

	function prepWrappers(wrapNo) {

		var listOfImgs = document.getElementById("images");
		
		// If the wrapper doesn't exist for this link, (it will already exist for image 1) create it
		if (!document.getElementById("title-" + wrapNo)) {
			var dt = document.createElement("dt");
			dt.setAttribute("id", "title-" + wrapNo);
			listOfImgs.appendChild(dt);
			
			var ddImg = document.createElement("dd");	
			ddImg.setAttribute("id", "image-" + wrapNo);
			ddImg.className = "image";
			listOfImgs.appendChild(ddImg);
			
			var ddDesc = document.createElement("dd");
			ddDesc.setAttribute("id", "desc-" + wrapNo);
			ddDesc.className = "desc";
			listOfImgs.appendChild(ddDesc);
			
		// if it does exist, assign it to variable
		} else {
			var dt = document.getElementById("title-" + wrapNo)
			var ddDesc = document.getElementById("desc-" + wrapNo)
			var ddImg = document.getElementById("image-" + wrapNo)
		}

		if (distanceCum > 0) {
			distanceCum = distanceCum + distanceBtwn;
		} else {
			distanceCum = (distanceBtwn + widthStart) - widthWrapper;
		}
		
		dt.style.left = distanceCum + "px";
		ddDesc.style.left = distanceCum + "px";
		ddImg.style.left = distanceCum + "px";		
	}

	// ================================================================================================================

	// Execute wrapper move
	function onLinkClick(link) {
		if (stillMoving != 1) {
			
			if (document.getElementById("current-link").id) {
				document.getElementById("current-link").id = "";
			}			
			link.id = "current-link";

			targetWrap = parseFloat(link.childNodes[0].nodeValue)
			
			if (currentWrap < targetWrap) {
				totalDistance = intervalDistance = parseFloat((targetWrap * distanceBtwn) - (currentWrap * distanceBtwn));	
				timedMove = setInterval("moveWrappers('l');", speed);
			} 
			
			if (currentWrap > targetWrap) {
				totalDistance = intervalDistance = parseFloat((currentWrap * distanceBtwn) - (targetWrap * distanceBtwn));	
				timedMove = setInterval("moveWrappers('r');", speed);
			}
		
			if (document.getElementById("desc-" + targetWrap).innerHTML == "") {
				getImageData(targetWrap, link)
			}

			// update where the page is at.
			currentWrap = targetWrap;
		}
	}
	
	function moveWrappers(direction) {		
		intervalDistance = getMoveRate(intervalDistance);
		
		if (totalTravelled > totalDistance) {	
		
			totalTravelled = 0;
			totalDistance = 0;	
			stillMoving = 0;
			
			clearInterval(timedMove);	
			
		} else {
			// Flag that movement is occurring
			stillMoving = 1;

			// for all of the wrappers on the page
			for (var i = 1; i <= totalWrappers; i++) {
				// Work out starting point and new point
				if (direction == "l") {					
					var newLeft = parseFloat(document.getElementById("title-" + i).style.left, (document.getElementById("title-" + i).style.left - 2)) - intervalDistance + "px";	
				} else {				
					var newLeft = parseFloat(document.getElementById("title-" + i).style.left, (document.getElementById("title-" + i).style.left - 2)) + intervalDistance + "px";
				}	
				// Apply new style
				document.getElementById("title-" + i).style.left = newLeft;
				document.getElementById("desc-" + i).style.left = newLeft;
				document.getElementById("image-" + i).style.left = newLeft; 		
			}		
			// update cumulative totals	
			totalTravelled = totalTravelled + intervalDistance;
		}
	}

	// Work out easing
	function getMoveRate(currentRate) 	{
		var newRate = Math.round(currentRate/2, 1);
		return newRate;
	}

	// ================================================================================================================

	function getImageData(imageNo, link) {
		// initialise the xmlHttp Object
		initAjax();
		
		var temp = link.href.split("=");
		var xmlPath = "ajax.php?id=" + temp[temp.length-1];	
		
		// alert ("Getting additional data for image no " + imageNo + " (with id " + temp[temp.length-1] + ")");

		ajaxReq.onreadystatechange = function() {
		if (ajaxReq.readyState == 4) {
				// If no data has been retrieved
				if (document.getElementById("title-" + imageNo).childNodes.length < 1) {
					if (ajaxReq.responseXML.getElementsByTagName("title")[0].childNodes.length > 0) {
						var xmlImgTitle = document.createTextNode(ajaxReq.responseXML.getElementsByTagName("title")[0].childNodes[0].nodeValue);
					} else {
						var xmlImgTitle = document.createTextNode("Untitled");
					}					
					document.getElementById("title-" + imageNo).appendChild(xmlImgTitle);
					
					var xmlServer = ajaxReq.responseXML.getElementsByTagName("photo")[0].attributes.getNamedItem("server").value;
					var xmlSecret = ajaxReq.responseXML.getElementsByTagName("photo")[0].attributes.getNamedItem("secret").value;
					var xmlId = ajaxReq.responseXML.getElementsByTagName("photo")[0].attributes.getNamedItem("id").value;
					var xmlImgSrc = "http://photos" + xmlServer + ".flickr.com/" + xmlId + "_" + xmlSecret + ".jpg";

					var xmlImg = document.createElement("img");
					xmlImg.setAttribute("src", xmlImgSrc);
					xmlImg.setAttribute("alt", "Image " + imageNo + ": Generated by Flickr.com and Beseku");

					document.getElementById("image-" + imageNo).appendChild(xmlImg);
				}
				
				// If only basic data has been retrieved
				if (document.getElementById("desc-" + imageNo).childNodes.length < 1) {
					
					if (ajaxReq.responseXML.getElementsByTagName("description")[0].childNodes.length > 0) {
						var xmlImgDesc = document.createTextNode(ajaxReq.responseXML.getElementsByTagName("description")[0].childNodes[0].nodeValue);
					} else {
						var xmlImgDesc = document.createTextNode("");
					}
					document.getElementById("desc-" + imageNo).appendChild(xmlImgDesc);

					// If the image has notes
					for (var i = 0; i < ajaxReq.responseXML.getElementsByTagName("note").length; i++) {
						var noteX = ajaxReq.responseXML.getElementsByTagName("note")[i].attributes.getNamedItem("x").value;
						var noteY = ajaxReq.responseXML.getElementsByTagName("note")[i].attributes.getNamedItem("y").value;
						var noteW = ajaxReq.responseXML.getElementsByTagName("note")[i].attributes.getNamedItem("w").value;
						var noteH = ajaxReq.responseXML.getElementsByTagName("note")[i].attributes.getNamedItem("h").value;

						var noteBody = ajaxReq.responseXML.getElementsByTagName("note")[i].childNodes[0].nodeValue;
						var noteAuthor = ajaxReq.responseXML.getElementsByTagName("note")[i].attributes.getNamedItem("authorname").value; 
						
						var xmlNote = document.createElement("a");
						xmlNote.appendChild(document.createTextNode(" "));
						
						xmlNote.setAttribute("class", "note");
						xmlNote.setAttribute("href", "http://www.flickr.com/photos/" + noteAuthor);
						
						xmlNote.style.left = noteX + "px";
						xmlNote.style.top = noteY + "px";
						xmlNote.style.width = noteW + "px";
						xmlNote.style.height = noteH + "px";						

						var xmlNoteSpan = document.createElement("span");
						xmlNoteSpan.style.left = parseFloat(noteW) + 3 + "px";
						xmlNoteSpan.appendChild(document.createTextNode(noteBody));
						xmlNote.appendChild(xmlNoteSpan);
						
						document.getElementById("image-" + imageNo).appendChild(xmlNote);						
					}
				}
			}
		}
		ajaxReq.open("GET", xmlPath, true);
		ajaxReq.send(null);	
	}

	// ================================================================================================================
	
	function initAjax() {
		ajaxReq = false;	
		// branch for native XMLHttpRequest object
		if(window.XMLHttpRequest) {
			try {
				ajaxReq = new XMLHttpRequest();
			} catch(e) {
				ajaxReq = false;
			}
			// branch for IE/Windows ActiveX version
		} else if(window.ActiveXObject) {
			try {
				ajaxReq = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					ajaxReq = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					ajaxReq = false;
				}
			}
		} else {
			alert ("No Ajax");
		}
	}