var now = new Date().getTime();

function slideshow(name, parent, nickname,slideData, autoPlay, delay,imageWidth,imageHeight) {
	this.name = name;
	this.parent = document.getElementById(parent);
	this.nickname = nickname;
	this.slideData = slideData;
	this.autoPlay = autoPlay;
	this.delay = delay;

	var timer;
	// most browsers fail (gracefully) here if error in XML - firefox keeps going and fails halfway through building slideshow:
	var count = slideData.length;
	var currentSlide = 0;

	// remove temp content;
	if (this.parent != null) {
		this.parent.innerHTML = '';
		this.parent.style.height=''+imageHeight+"px";
	}
	
	for (i=0; i<count; i++) {
		_title = slideData[i][0];
		_imageURL = slideData[i][1];
		_copy  = slideData[i][2];
		_link  = slideData[i][3];
		
		slide = document.createElement('DIV');
		slide.id = '' + this.nickname + i;
		slide.className = 'highlight slide';
		if (i != 0) slide.style.display = 'none';

		linkOpen  = (_link) ? '<a href="' + _link + '">' : '';
		linkClose = (_link) ? '</a>' : '';
		moreLink  = (_link) ? ' ' + linkOpen + '&gt;more' + linkClose : '';

		if (_imageURL) slide.innerHTML += linkOpen + '<img border=0 src="' + _imageURL + '" width="'+imageWidth+'px" height="'+imageHeight+'px" class="highlightImg">' + linkClose;
		
		if (_title) 	slide.innerHTML += '<div id="floatImage"><img src="'+_title+'"></div>';
	
		this.parent.appendChild(slide);
	}

	// create slideshow nav			
	nav = document.createElement('div');
	
	nav.id = '' + nickname + 'Nav';

	var navControl ='<table>';
	//nav.innerHTML += '<a href="#" class="back" onclick="return '+name+'.back();">&nbsp;&nbsp;&nbsp;&nbsp;</a>';
	
	for (i=0; i<count; i++) {
		navControl += '<tr><td><a id="'+nickname+'Nav'+i+'" class="number" href="#" onclick="return '+name+'.show1('+i+');">' + (i+1) + '</a></td></tr>';
	}
	navControl +='</table>';
	nav.innerHTML +=navControl;
//	nav.innerHTML += '<a href="#" class="next" onclick="return '+name+'.next();">&nbsp;&nbsp;&nbsp;&nbsp;</a>';
//	nav.innerHTML += '<a href="#" class="play" onclick="return '+name+'.play();" id="'+name+'Play">&nbsp;&nbsp;&nbsp;&nbsp;</a>';
//	nav.innerHTML += '<a href="#" class="pause" onclick="return '+name+'.pause();" id="'+name+'Pause" style="display:none;">&nbsp;&nbsp;&nbsp;&nbsp;</a>';
	this.parent.appendChild(nav);
	classAdd(nav,'slideshowNav');
	classAdd(document.getElementById(nickname+'Nav0'),'on');

	// slide controls	
	this.show = function(n) {
		if (n!=currentSlide) {		
			// hide current slide	
			currentSlideID = '' + nickname + currentSlide;
			animateOpacity(currentSlideID, 100, 0, 800);			
			setTimeout("hide('"+currentSlideID+"')",800);

			// show new slide
			newSlideID = '' + nickname + n;
			animateOpacity(newSlideID, 0, 100, 800);
			setTimeout("show('"+newSlideID+"')",100); // delay to reduce flicker	

			// update nav highlight states
			classRemove(document.getElementById(nickname+'Nav'+currentSlide),'on');
			classAdd(document.getElementById(nickname+'Nav'+n),'on');
			
			currentSlide = n;
		}
		return false;
	}
	this.show1 = function(n) {
		this.show(n);
		this.pause();
		return false;
	}	
	this.back = function() {
		x = currentSlide -1;
		if (x < 0) x = count-1;
		this.show(x);
		return false;
	}
	this.next = function() {
		x = currentSlide + 1;
		if (x >= count) x = 0;
		this.show(x);
		return false;
	}
	this.play = function() {
		str = name + '.next()';
		timer = setInterval(str,delay);
		//document.getElementById(name+'Play').style.display = 'none';
		//document.getElementById(name+'Pause').style.display = 'inline';
		return false;
	}
	this.pause = function() {
		clearInterval(timer);
		//document.getElementById(name+'Play').style.display = 'inline';
		//document.getElementById(name+'Pause').style.display = 'none';
		return false;
	}
	
	if (autoPlay) {
		this.play();
	} else {
		// randomise positions of bottom slideshows
		if (this.name == 'sitesSlideshow') {
			this.show(0);
		} else {
			this.show(Math.floor(Math.random()*count));
		}
	}
	 
}


/* ------------------------------------ */
// Opacity functions

// Fade from one opacity setting to another
function animateOpacity(id, opacStart, opacEnd, millisec) {
	var skip = 5;
    var speed = Math.round((millisec / 100) * skip);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if (opacStart > opacEnd) {
        for (i = opacStart; i >= opacEnd; i-=skip) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for (i = opacStart; i <= opacEnd; i+=skip) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id);
    object.style.opacity = (opacity / 100);
    object.style.MozOpacity = (opacity / 100);
    object.style.KhtmlOpacity = (opacity / 100);
    object.style.filter = (opacity < 100 ? "alpha(opacity=" + opacity + ")" : "none");
}

function classAdd(element, theclass) {
	// Add a CSS class to the specified element (will not add the class if it already exists)
	if (!element) return;
	if (!element.className) element.className = '';
	var reg = new RegExp('(^| )'+theclass+'( |$)', 'g');
	if (element.className.search(reg) == -1) 
	{	
		element.className = element.className + ' ' + theclass;
	}
}

function classRemove(element, theclass) {
	// Remove a CSS class from the specified element
	if (!element) return;
	if (!element.className) return;
	var reg = new RegExp('(^| )'+theclass+'( |$)', 'g');
	element.className = element.className.replace(reg, ' ');
}

// Show/Hide functions clean up later...
function show(id) {
	document.getElementById(id).style.display = 'block';
}
function hide(id) {
	document.getElementById(id).style.display = 'none';
}



