/*
 * nr_global.js
 * ABC NewsRadio global functionality
 * Created by: Mark Simpson, June 2008
 * http://mrkistic.com/
 */

/*
Script: Browser.Extras.js
	Extends the Window native object to include methods useful in managing the window location and urls.

License:
	http://clientside.cnet.com/wiki/cnet-libraries#license
*/
Browser.getHost = function(url){
	url = $pick(url, window.location.href);
	var host = url;
	if(url.test('http://')){
		url = url.substring(url.indexOf('http://')+7,url.length);
		if(url.test(':')) url = url.substring(0, url.indexOf(":"));
		if(url.test('/')) return url.substring(0,url.indexOf('/'));
		return url;
	}
	return false;
}
Browser.ie6 = Browser.Engine.name == 'trident' && Browser.Engine.version == 4;

/*
Script: Popup.js
	Defines the Popup class useful for making popup windows.

License:
	http://clientside.cnet.com/wiki/cnet-libraries#license
*/

Browser.set("Popup", new Class({
	Implements:[Options, Events],
	options: {
		width: 500,
		height: 330,
		x: 50,
		y: 50,
		toolbar: 0,
		location: 0,
		directories: 0,
		status: 0,
		scrollbars: 'auto',
		resizable: 1,
		name: 'popup'
//	onBlock: $empty
	},
	initialize: function(url, options){
		this.url = url || false;
		this.setOptions(options);
		if(this.url) this.openWin();
	},
	openWin: function(url){
		url = url || this.url;
		var options = 'toolbar='+this.options.toolbar+
			',location='+this.options.location+
			',directories='+this.options.directories+
			',status='+this.options.status+
			',scrollbars='+this.options.scrollbars+
			',resizable='+this.options.resizable+
			',width='+this.options.width+
			',height='+this.options.height+
			',top='+this.options.y+
			',left='+this.options.x;
		this.window = window.open(url,
			this.options.name, options);
		this.focus.delay(100, this);
		return this;
	},
	focus: function(){
		if (this.window) this.window.focus();
		else if (this.focusTries<10) this.focus.delay(100, this); //try again
		else {
			this.blocked = true;
			this.fireEvent('onBlock');
		}
		return this;
	},
	focusTries: 0,
	blocked: null,
	close: function(){
		this.window.close();
		return this;
	}
}));

/*
 * extra natives for HTML elements
 */
Element.implement({
	read: function(s){
		var o = this.getElement(s);
		if (o)
			return o.innerText?o.innerText:o.textContent;
		else
			return '';
	},
	subItems: function() {
		bChecked = false;
		this.getElements('li input').each(function(li) {
			bChecked = bChecked || li.checked;
		});
		return bChecked;
	}
});

/* end extras */

/* blur function for javascript clicks */
function noClick(el) {
	if (el.blur)
		el.blur();
	return false;
}

/* x-browser read xml node from xhttp req */
function readXMLNode(xml, node) {
	if (xml.getElementsByTagName(node) && xml.getElementsByTagName(node)[0])
		return xml.getElementsByTagName(node)[0].firstChild.nodeValue;
}

/* hover functions to replicate main menu CSS in IE */
sfHover = function() {
	var nav = $('mainNav');
	if (nav) {
		list = nav.getElements('li');
		list.each(function(li){
			li.addEvent('mouseover', function(){
				this.addClass('sfHover');
			});
			li.addEvent('mouseout', function(){
				this.removeClass('sfHover');
			});
		});
	}
}

/* sent to a friend popup */
var popEmail;
sendToFriend = function(url) {
	popEmail = new Browser.Popup('http://www.abc.net.au/cgi-bin/common/mailto/mailto-nojs_query.pl?'+url, {
	  width: 900,
	  height: 800,
	  toolbar: 0,
		location: 0,
		scrollbars: 1,
		name: 'popEmail'
	});
}

/* Listen Now global function - required for Ajax loading of schedule */
function listenNow() {
	if (popStream && popStream.focus)
		popStream.focus();
	else
		var popStream = new Browser.Popup('/newsradio/audio/streaming.htm', {
	    width: 600,
	    height: 760,
	    toolbar: 0,
			location: 0,
			name: 'popStream'
		});
	return false;
};

window.addEvent('domready', function() {
	
	// add sitemap slideouts
	if ($('sitemap')) {
		// sitemap
		$('sitemap').set('slide');
		$('sitemap').slide('hide');
		$('sitemap').setStyle('display', 'block');
		$('aSiteMap').addEvent('click', function(e){
			$('sitemap').slide('toggle');

			el = this.getElement('img');
			var expanded = el.get('expanded') == 'true';
			if (expanded) {
				el.src = '/newsradio/images/framework/arrUp.png';
				el.set('expanded', 'false');
			} else {
				// collapsed
	  		el.src = '/newsradio/images/framework/arrDown.png'
				el.set('expanded', 'true');
			}

			return noClick(this);
		});
	}

	// menus for IE 6
	if (Browser.Engine.trident && Browser.Engine.version < 5)
		sfHover();

	// page sub footer links
	if ($('subAnc')) {
		$('subAnc').addEvent('click', function(){
			new Fx.Scroll(window).toElement('main_box').start();
			return noClick(this);
		});
	}
	
	// Listen Now link
	var popStream;
	$$('.ancLN').each(function(anc){
		anc.addEvent('click', listenNow);
	});
	
});
