

// Add new string functions
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };


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

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).trim();
}

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, ' ').trim();
}

// Media Player functions

var player = 'player'; // id of in-page player (Flash container)
var bigfeaturePlay = false; // dummy to make work without big feature script

function hideExistingPlayer() {
	if (temp = document.getElementById(player)) {
		if (temp.previousSibling != null) classRemove(temp.previousSibling, 'active');
		temp.parentNode.removeChild(temp);
		delete temp;
	}
}

function playAudio(linkObj) {	
	hideExistingPlayer();
	var div = document.createElement('DIV');
	div.id = player;
	linkObj.parentNode.insertBefore(div, linkObj.nextSibling);
	window.onresize = function () {};
	var swfurl = 'http://www.abc.net.au/news/swf/mp3player.swf';
	var so = new SWFObject(swfurl, player+'Object', 220, 36, '8', '#ececec', true); // orig size: 285x40
	so.addParam('allowFullScreen', 'true');
	so.addVariable('mediaURL', linkObj.href);
	so.addVariable('autoPlay', 'true');
	so.write(player);
	classAdd(linkObj, 'active');
}

function playVideo(linkObj, useLightBox) {
	hideExistingPlayer();
	width=400;
	height=285; // = 225 + 60 for title and controls
	var url = linkObj.href;
	var div = document.createElement('DIV');
	div.id = player;


	if (linkObj.title == "") {
		// find title for video player - crawl up DOM tree to find a heading...
		
		var parent = linkObj.parentNode;
		while ((parent.nodeName != 'DIV') && (parent.nodeName != 'BODY')) {
			// climb up tree until you find the parent Div
			parent = parent.parentNode;
		}
		
		// check siblings to find a heading
		var children = parent.childNodes
		for (var i=0; i<children.length; i++) {
			if ((children[i].nodeName == 'H1') || (children[i].nodeName == 'H2') || (children[i].nodeName == 'H3') || (children[i].nodeName == 'H4')) {
				child = children[i];
				
				// drill down to find the heading text...
				while ((child != null) && (child.nodeType != 3)) {
					child = child.firstChild;
				}				
				if (child != null) linkObj.title = child.nodeValue;
				break;
			}
		}
	}
			
	if (useLightBox) {
		showLightbox(this, width, height);
		lb = document.getElementById('lightbox');
		lb.insertBefore(div, lb.firstChild);
	} else {
		linkObj.parentNode.insertBefore(div, linkObj.nextSibling);
	}

	swfurl = 'http://www.abc.net.au/tv/cinerama/swf/singleclip_player_08.swf';
	var so = new SWFObject(swfurl, player+'Object', width, height, '8', '#000000', true);

	so.addVariable('imageURL', '');
	so.addVariable('videoURL', url);
	so.addVariable('mrssURL', '');	
	so.addVariable('videoTitle', linkObj.title);
	so.addVariable('screenWidth', 400);
	so.addVariable('screenHeight', 225);
	so.addVariable('autoStart', true);
	so.addVariable('stageColor', "#000000");
	so.addVariable('textColor', "#408409");
	so.addParam('allowFullScreen', 'true');
	so.addParam('allowScriptAccess', 'always');
	
	so.write(player);
	classAdd(linkObj, 'active');
}

function playYouTubeVideo(linkObj, useLightBox) {
	hideExistingPlayer();
	width = 425;
	height = 350;
	var div = document.createElement('DIV');
	div.id = player;
	
	if (useLightBox) {
		showLightbox(this, width, height);
		// insert player into lightbox
		lb = document.getElementById('lightbox');
		lb.insertBefore(div, lb.firstChild);
	} else {
		linkObj.parentNode.insertBefore(div, linkObj.nextSibling);
	}
	var so = new SWFObject(linkObj.href, player+'Object', width, height, '8', '#000000', true);
	so.write(player);
	classAdd(linkObj, 'active');
}

function playForaVideo(linkObj, useLightBox) {
	hideExistingPlayer();
	width = 640;
	height = 520;
	var div = document.createElement('DIV');
	div.id = player;
	
	if (useLightBox) {
		showLightbox(this, width, height);
		// insert player into lightbox
		lb = document.getElementById('lightbox');
		lb.insertBefore(div, lb.firstChild);
	} else {
		linkObj.parentNode.insertBefore(div, linkObj.nextSibling);
	}
	// add iframe to div
	var iframe = document.createElement('IFRAME');
	iframe.id = 'foraTvVideo';
	iframe.src = linkObj;
	iframe.scrolling = 'no';

	div.appendChild(iframe);	
	classAdd(linkObj, 'active');
}

function showMedia(linkObj) {
	if (!linkObj) return true;
	
	var url = linkObj.href;
	
	

	if (linkObj.nextSibling != null && linkObj.nextSibling.id == player) {

		// collapse media player if already open
		
		hideExistingPlayer();
	} else if (url.indexOf('.mp3') != -1) {
		// mp3 audio
		playAudio(linkObj);
	
	} else if ((url.indexOf('.mp4') != -1) || (url.indexOf('.flv') != -1) || (url.indexOf('.f4v') != -1)) {
	
	// video
		var useLightBox = true;
		playVideo(linkObj, useLightBox);
	} else if (url.indexOf('youtube.com/v/') != -1) {
		// youTube video
		var useLightBox = true;
		playYouTubeVideo(linkObj, useLightBox);
	} else if (url.indexOf('fora.tv/fora/fora_player.php') != -1){
		// fora.tv video
		var useLightBox = true;
		playForaVideo(linkObj, useLightBox);
	} else {
		// assume we are directly linking to another type of media file (e.g. asx, ram)
		location = url;
	}

	if (linkObj.blur) linkObj.blur();  // removes dotted outline from link in Mozilla browsers
	return false;

}

function findMediaLinks(obj) {
	// Add an onclick event to all links to audio, video and image files
	// searches whole document if no argument received
	
	var links;
	
	if (obj) {
		links = obj.getElementsByTagName('A');	
		//alert('Links added by ' + obj.id + ': ' + links.length);
	} else {
		links = document.getElementsByTagName('A');
		//alert('Links in page: ' + links.length);
	}
	
	for (var i=0, j=links.length; i<j; i++) {
		var link = links[i];
		if ((link.href.indexOf('.mp3') != -1) || (link.href.indexOf('.mp4') != -1) || (link.href.indexOf('.flv') != -1) || (link.href.indexOf('.f4v') != -1) || (link.href.indexOf('youtube.com/v/') != -1)) {
			// audio, video
			link.onclick = function(){return showMedia(this)}
			link.onmouseup = function(){return trackMediaLinks(this);}
		} else if (link.href.indexOf('fora.tv/fora/fora_player.php') != -1){
			// fora.tv video
			link.onclick = function(){return showMedia(this)}
		} else if ((link.href.indexOf('.jpeg') != -1) || (link.href.indexOf('.jpg') != -1) || (link.href.indexOf('.gif') != -1) || (link.href.indexOf('.png') != -1)) {
			// images
			link.onclick = function (){showLightbox(this); return false;}
			var imgText = ((link.innerHTML.indexOf('<img') == 0)||(link.innerHTML.indexOf('<IMG') == 0))? link.firstChild.getAttribute('alt') : link.innerHTML;
			link.setAttribute('title',imgText);
		} else {
			// track other links (on homepage only)
			if (document.getElementsByTagName('body')[0].id == 'home') {
				link.onmouseup = function(){return trackLinks(this);}	
			}
		}
	}
	
}

function trackMediaLinks(linkObj) {
	var linkText = ((linkObj.innerHTML.indexOf('<img') == 0)||(linkObj.innerHTML.indexOf('<IMG') == 0))? linkObj.firstChild.getAttribute('alt') : linkObj.innerHTML;
	var location = document.location.href;
	
	var parent = linkObj.parentNode;
	var parentId = parent.id;

	while (parentId == '') {
		// climb up tree until you find a parent with an id
		parent = parent.parentNode;
		parentId = parent.id;
	}
	
	//alert(linkText + '\n' + location + '\n' + parentId);
	if (typeof(DCS)!="undefined") dcsMultiTrack('DCS.uri', location, 'WT.ti', linkText, 'WT.cg_n', parentId, 'WT.cg_s', linkText);

	return false;
}

function trackLinks(linkObj) {
	// add webtrends page section tracking
	// webtrends smart view requires '&WT.svl=SectionID' on each link	

	var parent = linkObj.parentNode;
	var parentId = parent.id;

	while (parentId == '') {
		// climb up tree until you find a parent with an id
		parent = parent.parentNode;
		parentId = parent.id;
	}
	
	if ((parentId == 'explore') || (parentId == 'services')) {
		if ((linkObj.href.indexOf('WT.svl') == -1)) {
			// does not work in Safari ?
			if (linkObj.search == '') {
				linkObj.search = '?WT.svl=' + parentId;	
			} else {
				linkObj.search += '&WT.svl=' + parentId;				
			}
		}
		return true;
	}
}

addLoadEvent(findMediaLinks);

