var timer = null;

function loadMetadata(dir, metadata, callback) {
    $.get("listImages.php?dir=" + dir, function(xml) {
    	$("image", xml).each(function() {
    		var i = metadata.length;
    		var obj = new Object;
    		obj.url = $("url", this).text();
    		obj.title = $("title", this).text();
    		obj.description = $("description", this).text();
    		obj.width = $("width", this).text();
    		obj.height = $("height", this).text();
    		obj.mtime = $("mtime", this).text();
    		if (obj.description == "") obj.description = ".";
    		metadata.push(obj);
    	});
	    callback(metadata);
    });
}

function loadImages(images, metadata) {
	var len = metadata.length;
	for (var i = 0; i < len; ++i) {
		var obj = metadata[i];
	    img = new Image();
	    img.src = "renderImage.php?img=" + obj.url + "&amp;h=360";
	    images[i] = img;
	}
}

function indexImage(metadata, selector) {
	var src = $(selector + " img").attr("src");
	var match = /img=([^&]*)/i.exec(src);
	if (match != null && match.length > 1) {
		var url = match[1];
		for (var i = 0; i < metadata.length; ++i) {
		    if (metadata[i].url == url)
		    	return i;
		}
	}
	
	return -1;
}

function transitionImage(images, metadata, selector, secs) {
	
    if (timer != null) {
    	clearTimeout(timer);
    	timer = null;
    }

    var i = indexImage(metadata, selector);
    
    if (i < 0) return;
    
    i = (i + 1) % metadata.length;
	$(selector + " img").fadeOut("slow", function() {
	    renderImage(images[i], metadata[i], selector);
		$(selector + " img").fadeIn("slow", function() {
			timer = setTimeout(function() {
				transitionImage(images, metadata, selector, 5);
			}, secs * 1000);
		});
	});
}

function changeImage(images, metadata, absoluteURL, imageSelector, buttonSelector) {
	
    if (timer != null) {
    	clearTimeout(timer);
    	timer = null;
    }
    
	var match = /img=([^&]*)/i.exec(absoluteURL);
	var relativeURL = (match != null && match.length > 1) ? match[1] : absoluteURL;
	for (var i = 0; i < metadata.length; ++i) {
	    if (metadata[i].url == relativeURL) {
	    	$(imageSelector + " img").fadeOut("slow", function() {
	    	    renderImage(images[i], metadata[i], imageSelector);
	    		$(imageSelector + " img").fadeIn("slow", function() {
	    			var button = $(buttonSelector);
	    			button.text("Start Slide Show");
	    		});
	    	});
	    	break;
	    }
	}
}

function startStopTimer(buttonSelector, images, imageMetadata, imageSelector) {
	if (timer != null) {
		clearTimeout(timer);
		timer = null;
		$(buttonSelector).text("Start Slide Show");
	}
	else {
		$(buttonSelector).text("Pause Slide Show");
		transitionImage(images, imageMetadata, imageSelector, 5);
	}
}
  
function renderImage(image, metadata, selector) {
	$(selector + " div.imageTitle").text(metadata.title);
	document.images[$(selector + " img").attr("name")].src = image.src;
	$(selector + " div.imageDescription").text(metadata.description);
}
  
function renderThumbnails(metadata, first, limit, selector) {
	  
	var rowWidth = 0;
	var html = "";
	var parent = $(selector);

	for (var i = first; i < limit; ++i) {

	    var obj = metadata[i];
		var url = "renderImage.php?img=" + obj.url + "&amp;h=50";
		var title = obj.title;
		var factor = obj.height / 50;
		var width = (obj.width / factor) + 4;

		if (rowWidth + width > 750 ) {
		    parent.append("<br/>");
			rowWidth = 0;
		}
		  
		parent.append("<img src=\"" + url + "\" height=\"50\" title=\"" + title
		    + "\" class=\"thumbnail\"/>");
		rowWidth += width;
	}
}