﻿/*
Tasmanian Skills Institute slide show script
Anthony Fleming
Created on:29 july 2009
*/
var ool = window.onload;
var delay = 10000  // millisecs;
var xmlurl = 'includes/';
var now = new Date().getTime();
var querystring = Math.floor(now/(1000*60*15)); // forces a fresh update of the XML file after 15 minutes



function slideShowInt()
{
       // alert("started"); 
   		var myAjax = new Ajax.Request(
			xmlurl+"news.xml", 
			{
				method: 'get', 
				parameters: querystring, 
				onComplete: createNewsSlideshow
			});	
}
addLoadEvent(slideShowInt);
function createNewsSlideshow(originalRequest)
{
		if (originalRequest.readyState == 4 && (originalRequest.status == 200 || originalRequest.status == 304)) {
	        var xml = originalRequest.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 = 'highlightSlide';
		if (i != 0) slide.style.display = 'none'

		linkOpen = isExternalLink(link);
		linkClose = (link) ? '</a>' : '';
		moreLink  = (link) ? ' ' + linkOpen + '&gt;more' + linkClose : '';
		
		if (image) 	slide.innerHTML += linkOpen + '<img src="' + image + '" width="611" height="316" class="highlightImg">' + linkClose;
		//if (title) 	slide.innerHTML += '<h3>' + linkOpen + title + linkClose + '</h3>';
		//if (video) 	slide.innerHTML += '<p class="video"><a href="' + video + '"><img src="includes/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);
	}
    //alert("i'm here 1");
	// create slideshow nav			
	nav = document.createElement('P');
	nav.id = '' + nickname + 'Nav';
	//nav.class = 'slideshowNav';
	nav.innerHTML += '<a href="#" onclick="return '+name+'.back();"><img src="includes/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="includes/next.gif"></a>';
	nav.innerHTML += '<a href="#" onclick="return '+name+'.play();" id="'+name+'Play"><img src="includes/play.gif"></a>';
	nav.innerHTML += '<a href="#" onclick="return '+name+'.pause();" id="'+name+'Pause" style="display:none;"><img src="includes/pause.gif"></a>';
	this.parent.appendChild(nav);  //alert("i'm here 2"); 
	classAdd(nav.id,'slideshowNav');//alert("i'm here 3");  
	classAdd(nickname+'Nav0','number on');
    //alert("i'm here 4");  
	// slide controls	
	this.show = function(n) {
	   // alert("show n:" +n)
		if (n!=currentSlide) {		
			// hide current slide	
			currentSlideID = '' + nickname + currentSlide;
			newSlideID = '' + nickname + n;
			
			animateOpacity(currentSlideID, 100, 0, 800);			
			setTimeout("hide('"+currentSlideID+"')",800);

			// show new slide
			
			animateOpacity(newSlideID, 0, 100, 800);
			setTimeout("show('"+newSlideID+"')",100); // delay to reduce flicker	
           
			// update nav highlight states
			classAdd(nickname+'Nav'+currentSlide,'number');
			classAdd(nickname+'Nav'+n,'number on');

			currentSlide = n;
		} 
		return false;
	}
	this.show1 = function(n) {
		this.show(n);
		//alert("show1 n:" +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));
		}
	}
}
// 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++;
        }
    }
    //alert("animateOpacity id:"+id+" opacStart:"+opacStart+" opacEnd:"+opacEnd);

}

//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");
    //alert("changeOpac id:"+id+" opacity:"+opacity);
    if(100>opacity>0)
    {
    nextStyleDisplay(id,"block");
    }
    if(opacity == 100)
    {
        nextStyleDisplay(id,"block");    
    }
  
    if(opacity == 0)
    {
        nextStyleDisplay(id,"none");
    }
}
function blockDisplay(slideID)
{
    var object = document.getElementById(slideID).style;
    object.display = "block"
}
function nextStyleDisplay(currentID,newstyle)
{
    var object = document.getElementById(currentID).style;
    object.display = newstyle;
   
}
function classAdd(id,style)
{
    document.getElementById(id).className=style;
 
}
function classRemove(id,style)
{
    document.getElementById(id).className="";

}
function isExternalLink(link) {
    var strReturn = '';

    if (link) {
        if (link.match("http:")) {
            strReturn = '<a rel="external" target="_blank" href="' + link + '">';
        }
        else {
            strReturn = '<a href="' + link + '">';
        }
    }
    return strReturn;
}