// JavaScript Document

//////////////////////////////////////////////////////////////////////////////////////////////
//                    MISCELLANEOUS VARIABLE AND FUNCTION DECLARATIONS                      //
//window.onerror = function() {return true;}

if (!window.m_isIE_defined && navigator.userAgent) {
	var agent = navigator.userAgent.toLowerCase();
	window.m_isIE = (agent.indexOf("opera") == -1 && agent.indexOf("msie") != -1);
	window.m_isWin = (agent.indexOf("win") != -1 || agent.indexOf("16bit") != -1);
	window.m_isIE_defined = true;
}

function writeDate(dateObj)
{
	var days = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
	var months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July',
	               'August', 'September', 'October', 'November', 'December' ];
	var dateTimeString = days[dateObj.getDay()] + '&nbsp;' + months[dateObj.getMonth()] + '&nbsp;' +
	                     dateObj.getDate() + ',&nbsp;' + dateObj.getFullYear();
	document.writeln(dateTimeString);
} // writeDate

// Add method to string class.
if (!String.prototype.trim_self) String.prototype.trim_self = __trimString;

function __trimString(delimiters)
{
	var first = 0, last = this.length;
	while (first < last && delimiters.indexOf(this.charAt(first)) != -1) ++first;
	while (first < last && delimiters.indexOf(this.charAt(last-1)) != -1) --last;
	return this.substr(first, last - first);
} // __trimString

function Array_getIndexOfElement(my_array, searchElement)
{
	// Determine the starting index for the search
	var fromIndex = (arguments.length > 2) ? arguments[2] : 0;
	if (fromIndex >= my_array.length)
		return -1;
	if (fromIndex < 0) {
		fromIndex = my_array.length + fromIndex;
		if (fromIndex < 0) fromIndex = 0;
	}
	// Execute the search for searchElement
	for (var pos in my_array)
		if (my_array[pos] == searchElement)
			return pos;

	// Return -1 if element not found
	return -1;
} // Array_getIndexOfElement

function Array_removeItemAtIndex(my_array)
{
	var index = (arguments.length > 1) ? arguments[1] : 0;
	var returnArray = new Array();

	// Check for invalid index.
	if (index < 0 || index >= my_array.length)
		return returnArray;

	// Remove the element at the specified index from this array.
	if (index == 0) {
		returnArray = my_array.slice(0, my_array.length);
		returnArray.shift();
	}
	else if (index == (my_array.length-1)) {
		returnArray = my_array.slice(0, my_array.length);
		returnArray.pop();
	}
	else {
		for (var i = 0; i < my_array.length; i++)
			if (i != index)
				returnArray.push(my_array[i]);
	}
	return returnArray;
} // Array_removeItemAtIndex
//                    MISCELLANEOUS VARIABLE AND FUNCTION DECLARATIONS                      //
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
//                                DOCUMENT OBJECT REFERENCING                               //
if (!document.w3cdom) document.w3cdom = function() {
                         return (document.getElementById) ? true : false;
                      }

if (!window.isOperaWB) {
	var user_agent = navigator.userAgent.toLowerCase();
	window.isOperaWB = (user_agent.indexOf ("opera") != -1);
}

if (!document.getElementRef)
   document.getElementRef = __my_getElementById;

if (!document.getElementById)
   document.getElementById = __my_getElementById;
//                                DOCUMENT OBJECT REFERENCING                               //
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
//                        	DISABLE RIGHT CLICK POPUP CONTEXT MENU                          //
function disableRightClick(e)
{
	var message = "Sorry, this action has been disabled for this site.";

	if (!document.rightClickDisabled)   // initialise
	{
		if (document.all && !window.isOperaWB)
			document.oncontextmenu = disableRightClick;
		else if (document.layers || document.addEventListener) {
			document.onmousedown = disableRightClick;
			document.oncontextmenu = function() {return false;}
		}
		return document.rightClickDisabled = true;
	}
	if (document.all && !window.isOperaWB) {
		window.alert(message);
		return false;
	}
	else if (document.addEventListener || document.layers) {
		if (e.button == 2 || e.button == 3) {
			window.alert(message);
			return false;
		}
	}
} // disableRightClick
//                        	DISABLE RIGHT CLICK POPUP CONTEXT MENU                          //
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
//                                 FORM VALIDATION ROUTINES                                 //
function checkEmailAddress(field, msg, displayError)
{
	var email_addr = field.value.trim_self(" ");   // remove surrounding whitespace
	var error_msg = (msg == null) ? 'Please enter a valid e-mail address in the text field provided' : msg;
	var regExp1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
	var regExp2 = /^[\S]+@(\[?)[A-Za-z0-9\-\.]+\.([A-Za-z0-9]+)(\]?)$/;

	if (email_addr)
	{
		if (!(regExp1.test(email_addr)) && (regExp2.test(email_addr))) {
			field.value = email_addr;
			return true;    // e-mail address has valid format
		}
	}
	if (displayError) window.alert(error_msg);     // display error message
	return false;                // email address does not have valid format
} // checkEmailAddress
//                                 FORM VALIDATION ROUTINES                                 //
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
//                        IMAGE PRELOADING & IMAGE SWAP ROUTINES                            //
if (!document.newImage) document.newImage = __my_newImage;
if (!document.swapImage) document.swapImage = __my_swapImage;
if (!document.preloadImages) document.preloadImages= __my_preloadImages;
//                        IMAGE PRELOADING & IMAGE SWAP ROUTINES                            //
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
//                                 INTERNAL HELPER FUNCTIONS                                //
function __my_newImage(imageUrl)
{
	var result = null;
	if (document.images) { result = new Image(); result.src = imageUrl; }
	return result;
} // __my_newImage

function __my_preloadImages()
{
   var imgArray = new Array();
   for (var i = 0; i < arguments.length; ++i)
      imgArray.push(__my_newImage(arguments[i]));
   return imgArray;
} // __my_preloadImages

function __my_swapImage(element, replacement, imgArray)
{
	// Search for the Image object with the location of the replacement image within
	// the Image array specified by imgArray.
	for (var index = 0; index < imgArray.length; ++index) {
		if (imgArray[index].src.indexOf(replacement) != -1) {
			var tmp, image = null, loop;
			if (element.nodeName.toLowerCase() == "img")
				image = element;
			else {
				if (element.children) {   // IE-compatible web browser
					with (element) {
						for (loop = 0; loop < children.length; ++loop) {
							image = children[loop];
							if (image.tagName && image.tagName.toLowerCase() == "img")
								break;
						}
					} // end with
				}
				else if (document.w3cdom()) {  // W3C DOM compatible browser
					with (element) {
						for (loop = 0; loop < childNodes.length; ++loop) {
							image = childNodes.item(loop);
							if (image.nodeName.toLowerCase() == "img")
								break;
						}
					} // end with
				}
			}
			// Perform the image swap.
			tmp = image.src;
			image.src = imgArray[index].src;
			imgArray[index].src = tmp;
			break;
		}
	}
} // __my_swapImage

function __my_getElementById(id)
{
	if (window.isOperaWB) return document.getElementById(id);
	else if (document.all) return document.all[id];
	else if (document.w3cdom()) return document.getElementById(id);
	else return document[id];
} // __my_getElementById
//                                 INTERNAL HELPER FUNCTIONS                                //
//////////////////////////////////////////////////////////////////////////////////////////////
