/* 
-----------------------------------------------------------------
	BRANZ
	shared.js
	
	Shared include file for managing global javascript configuration
-----------------------------------------------------------------
*/

/*	Bypass DOM onload in IE5 (DS):
	MR's DOM onload script seems to break horribly in IE5,
	so here I've pulled the relevant lines out of browserdetect.js, 
	to identify IE5 and stop it running anything it doesn't like.
	
	This may affect IE5 on both platforms (Mac IE5 is not a target browser).
*/
	
	var ua = navigator.userAgent.toLowerCase(); 
	
	var browser = new Object();
	
	browser.isOpera       = (ua.indexOf('opera') != -1);
	browser.isIE          = (ua.indexOf('msie') != -1 && !browser.isOpera && (ua.indexOf('webtv') == -1) ); 
	browser.versionMinor = 	parseFloat(navigator.appVersion); 	
	
	if (browser.isIE && browser.versionMinor >= 4) {
	  browser.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
	}
	
	browser.versionMajor = 	parseInt(browser.versionMinor); 
	browser.isIE5orBelow = 	(browser.isIE && browser.versionMajor <= 5);

/* 	End IE5 detect */

/**
* @private
* utility functions and language environment patches 
*/

/** 
* imports a .js file from base path:
* /resources/scripts/
*/
function importScript(src) {
    var doc = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');
    js.setAttribute('language', 'javascript');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', Settings.importPath + src);
    doc.appendChild(js);
    return false;
}

/**
* Array.each extends the built-in Array object with a Ruby style block iterator,
*/
Array.prototype.each = function(block) {
	for (var i=0; i<this.length; i++) {
		var elm = this[i];
		block(elm, i);
	}
}

function isString(a) {
    return typeof a == 'string';
}

function isDefined(property)  {
	return (typeof property != 'undefined');
}

/**
* DOM shorthand wrappers
*/

/**
* getElementById
* @return DomElement
*/
function $id(id) {
	return document.getElementById(id);
}

/**
* getElementsByClassName
* @return DomElement if single result, else array of DomElements */ 
function $class(name) 
{
	var result = new Array();
	var target = new RegExp("(^|\\s)" + name + "(\\s|$)");
	var elements = document.getElementsByTagName("*");
	var length = elements.length;
	var current;
	for (var i=0; i<length; i++) 
	{
		current = elements[i];
		if (target.test(current.className))
		{
			result.push(current);
		}
	}
	return (result.length > 1) ? result : result[0]; 
}

/**
* getElementsByTagName
* @return DomElement if single result, else collection of DomElements
*/
function $tag(name) {
	result = document.getElementsByTagName(name);
	return (result.length > 1) ? result : result[0]; 
}

/**
* Provides a global user interface event handler
*/

if (!browser.isIE5orBelow)	
{
	var UI = {
		onloadListeners: new Array(),
		onreadyListeners: new Array(),
		
		onload: function(obj) {
			UI.onloadListeners.push(obj);
		},
		
		fireLoadEvent: function() {
			UI.onloadListeners.each(function(obj) {
				obj.call();
			});
		}
		
	}

	window.onload = UI.fireLoadEvent;
}
