

var delay = 10000  // millisecs;
var xmlurl = 'http://www.diemsolutions.com/wp-content/themes/diem/js/';


var now = new Date().getTime();
var querystring = Math.floor(now/(1000*60*15)); // forces a fresh update of the XML file after 15 minutes
// var querystring = now;
// use above line to de-cache in an emergency

var newsRequest = makeHttpObject();

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

function show(id) {
	document.getElementById(id).style.display = 'block';
}
function hide(id) {
	document.getElementById(id).style.display = 'none';
}

function waitUntilLoaded() {
	
	newsRequest.open('GET', xmlurl+'slideshow.xml?'+querystring, true);
	newsRequest.onreadystatechange = createNewsSlideshow;
	newsRequest.send(null);

	
}
addLoadEvent(waitUntilLoaded);



function createNewsSlideshow() {
	if (newsRequest.readyState == 4 && (newsRequest.status == 200 || newsRequest.status == 304)) {
		var xml = newsRequest.responseXML.documentElement;
		newsSlideshow = new slideshow('newsSlideshow','newsHighlights','news',xml,true,8000);
	}
}


function slideshow(name, parent, nickname, xml, autoPlay, delay) {
	this.name = name;
	this.parent = document.getElementById(parent);
	this.nickname = nickname;
	this.xml = xml;
	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 s = xml.getElementsByTagName('highlight');
	var N = s.length;
	var currentSlide = 0;
	//var video='';
	
	// remove temp content;
	if (this.parent != null) {
		this.parent.innerHTML = '';
	}
	
	// build document tree from XML file	
	for (i=0; i<N; i++) {
		title = (s[i].getElementsByTagName('title')[0] && s[i].getElementsByTagName('title')[0].firstChild) ? s[i].getElementsByTagName('title')[0].firstChild.nodeValue : '&nbsp;';
		image = (s[i].getElementsByTagName('image')[0] && s[i].getElementsByTagName('image')[0].firstChild) ? s[i].getElementsByTagName('image')[0].firstChild.nodeValue : '/homepage/2008/styles/blank.gif';
		date  = (s[i].getElementsByTagName('time')[0] && s[i].getElementsByTagName('time')[0].firstChild) ? s[i].getElementsByTagName('time')[0].firstChild.nodeValue : '';
		copy  = (s[i].getElementsByTagName('description')[0] && s[i].getElementsByTagName('description')[0].firstChild) ? s[i].getElementsByTagName('description')[0].firstChild.nodeValue : '&nbsp;';
		link  = (s[i].getElementsByTagName('link')[0] && s[i].getElementsByTagName('link')[0].firstChild) ? s[i].getElementsByTagName('link')[0].firstChild.nodeValue : '';
		video = (s[i].getElementsByTagName('video')[0] && s[i].getElementsByTagName('video')[0].firstChild) ? s[i].getElementsByTagName('video')[0].firstChild.nodeValue : '';

		slide = document.createElement('DIV');
		slide.id = '' + 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 (image) 	slide.innerHTML += linkOpen + '<img src="' + image + '" width="315" height="180" class="highlightImg">' + linkClose;
		//if (title) 	slide.innerHTML += '<h3>' + linkOpen + title + linkClose + '</h3>';
		//if (video) 	slide.innerHTML += '<p class="video"><a href="' + video + '"><img src="/homepage/2008/styles/preview_button.gif" width="75" height="21" alt="watch preview"></a>';
		//if ((nickname=='news')||(nickname=='tv')) {
		//	if (date) 	slide.innerHTML += '<p class="updated"><small>' + date + '</small></p>';
		//}
		//if (copy) 	slide.innerHTML += '<p>' + copy + moreLink + '</p>';

		this.parent.appendChild(slide);
	}

	// create slideshow nav			
	nav = document.createElement('P');
	nav.id = '' + nickname + 'Nav';
	//nav.class = 'slideshowNav';
	//nav.innerHTML += '<a href="#" onclick="return '+name+'.back();"><img src="/homepage/2008/styles/slideshow/back.gif"></a>';
	for (i=0; i<N; i++) {
		nav.innerHTML += '<a id="'+nickname+'Nav'+i+'" class="number" href="#" onclick="return '+name+'.show1('+i+');">' + (i+1) + '</a>';
	}
	//nav.innerHTML += '<a href="#" onclick="return '+name+'.next();"><img src="/homepage/2008/styles/slideshow/next.gif"></a>';
	//nav.innerHTML += '<a href="#" onclick="return '+name+'.play();" id="'+name+'Play"><img src="/homepage/2008/styles/slideshow/play.gif"></a>';
	//nav.innerHTML += '<a href="#" onclick="return '+name+'.pause();" id="'+name+'Pause" style="display:none;"><img src="/homepage/2008/styles/slideshow/pause.gif"></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 = N-1;
		this.show(x);
		return false;
	}
	this.next = function() {
		x = currentSlide + 1;
		if (x >= N) 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()*N));
		}
	}
	findMediaLinks(); // call findMedia script again to find new video links
	 
}

/* ------------------------------------ */

// Create an XMLHttpRequest object (or the ActiveX equivalent for IE)
function makeHttpObject() {
	var xmlHttpObj;
	// branch for Activex version (Microsoft IE)
	/*@cc_on
	@if (@_jscript_version >= 5)
		try {
			xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlHttpObj = false;
			}
		}
	@else
		xmlHttpObj = false;
	@end @*/
	// branch for native XMLHttpRequest object (Mozilla & Safari)
	if (!xmlHttpObj && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlHttpObj = new XMLHttpRequest();
		} catch (e) {
			xmlHttpObj = false;
		}
	}
	return xmlHttpObj;
}

/* ------------------------------------ */
// Opacity functions
// (source: http://www.brainerror.net/scripts_js_blendtrans.php)

// 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).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = (opacity < 100 ? "alpha(opacity=" + opacity + ")" : "none");
}