/*
ABC Home Page slideshow script
Created by: Geoff Pack, Febraury 2008
Last modified: GP,
	September 2011 - skipping stories without titles or links
	November 2011 - added new paths for news and sport
*/

var mobile = false;

var slideshows = [];
var slideshowRequests = [];
var slideshowData = [
	//['news', '/homepage/2008/includes/news.xml', true, true, 8000],
	['news', '/news/ajax/2725978/homepage.xml', true, true, 8000],
	['tv', '/homepage/2008/includes/tv.xml', true, true, 22000],
	['kids', '/homepage/2008/includes/kids.xml', false, false, 10000],
	//['sport', '/homepage/2008/includes/sport.xml', false, false, 12000],
	['sport', '/news/ajax/3599718/homepage.xml', false, true, 12000],
	['healthscience', '/homepage/2008/includes/healthscience.xml', false, true, 11000],
	['open', '/homepage/2008/includes/open.xml', true, false, 9000],
	['local', '/homepage/2008/includes/local.xml', true, false, 14000]
]

function createSlideshows() {
	for (var i=0; i<slideshowData.length; i++) {
		if (mobile) {
			// create slideshow nav
			var parent = document.getElementById(slideshowData[i][0] +'Highlights');
			var nav = document.createElement('P');
			nav.id = slideshowData[i][0] + 'Nav';
			nav.className = 'slideshowNav';
			nav.innerHTML += '<a href="#" onclick="return createSlideshow('+i+');">load more stories...</a>';
			parent.appendChild(nav);
		} else {
			createSlideshow(i);
		}
	}
}

function createSlideshow(i) {
	slideshowRequests[i] = makeHttpObject();
	slideshowRequests[i].open('GET', slideshowData[i][1], true);
	slideshowRequests[i].onreadystatechange = requestStateChange(slideshowRequests[i],i);		
	slideshowRequests[i].send(null);
	return false;
}

function requestStateChange(request,N) {
	return function () {
		if (request.readyState == 4 && (request.status == 200 || request.status == 304)) {
			slideshows[N] = new slideshow('slideshows['+N+']', slideshowData[N][0]+'Highlights', slideshowData[N][0], request.responseXML.documentElement, slideshowData[N][2], slideshowData[N][3], slideshowData[N][4]);
		}
	}
}

addLoadEvent(createSlideshows);

function slideshow(name, parent, nickname, xml, autoPlay, overwrite, delay) {
	this.name = name;
	this.parent = document.getElementById(parent);
	this.nickname = nickname;
	this.xml = xml;
	this.autoPlay = autoPlay;
	this.overwrite = overwrite; // if true, overwrite original include; otherwise make original include the first story	
	this.delay = delay;
	this.isLocal = (nickname=='local')?true:false;	
	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;

	if (N>0) {	
		// remove temp content;
		if ((this.parent != null) && overwrite) {
			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;';
			if (this.isLocal) {
				station = (s[i].getElementsByTagName('station')[0] && s[i].getElementsByTagName('station')[0].firstChild) ? s[i].getElementsByTagName('station')[0].firstChild.nodeValue : 'ABC Radio';
				image = (s[i].getElementsByTagName('image')[0] && s[i].getElementsByTagName('image')[0].firstChild) ? s[i].getElementsByTagName('image')[0].firstChild.nodeValue : null;
			} else {
				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');
			if (overwrite) {
				slide.id = '' + nickname + i;
			} else {
				slide.id = '' + nickname + (i+1);
			}
			slide.className = 'highlight';
			if ((i != 0) || (!overwrite)) slide.style.display = 'none'
			
			linkOpen  = (link) ? '<a href="' + link + '">' : '';
			linkClose = (link) ? '</a>' : '';
			moreLink  = (link) ? ' ' + linkOpen + '&gt;more' + linkClose : '';
			
			if (this.isLocal) {
				if (station) slide.innerHTML += '<h3>' + station + '</h3>';
				if (image) slide.innerHTML += linkOpen + '<img src="' + image + '" class="highlightImage">' + linkClose;		
				slide.innerHTML += '<h4>' + linkOpen + title + linkClose + '</h4>';
			} else {
				slide.innerHTML += linkOpen + '<img src="' + image + '" width="320" height="180" class="highlightImg">' + linkClose;
				slide.innerHTML += '<h3>' + linkOpen + title + linkClose + '</h3>';
			}		
			if (video) slide.innerHTML += '<a href="' + video + '"><img class="watchPreview" src="/homepage/2010/styles/buttons/preview_watch.png" width="99" height="33" 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);
		}
		if (!overwrite) N +=1;
		
		// create slideshow nav			
		nav = document.createElement('P');
		nav.id = '' + nickname + 'Nav';
		nav.className = '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 == 'slideshow[5]') {
			this.show(0);
		} else {
			this.show(Math.floor(Math.random()*N));
		}
	}
	findMediaLinks(this.parent); // 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");
}

