/*////////////////////////////////////////////////////////////
JavaScript Code Library
Developed by GrafX Design Division Pty Ltd
http://www.grafx.com.au

Last Checked In By : Richard Czeiger
Public Revision No : 1.0

The software and related user documentation are
protected under copyright laws and remain the sole
property of GrafX Design Division. Full license is
available on the GrafX Design Division web site or
in the original download.

Technical support is available via the GrafX web site at
http://www.grafx.com.au
////////////////////////////////////////////////////////////*/



// Get the hacked stylesheet
document.write('<style type="text/css">@import url("styles/hacks.css");</style>');



// Suppress JavaScript Errors
window.onerror=new Function("return true")



// Break out of Frames
if (top.location != self.location) {
	top.location.replace(self.location); 
}



// Set the Status Bar Message
var statusMsg = 'Pacom Systems Pty Ltd';
window.defaultStatus=statusMsg;



// Search Engine Tracking Script v.1.0
var ns_data,ns_hp,ns_tz,ns_rf,ns_sr,ns_img,ns_pageName;
ns_pageName= this.location;
document.cookie='__support_check=1';ns_hp='http';
ns_rf=document.referrer;ns_sr=window.location.search;
ns_tz=new Date();if(location.href.substr(0,6).toLowerCase() == 'http:')
ns_hp='http';ns_data='&an='+escape(navigator.appName)+ 
'&sr='+escape(ns_sr)+'&ck='+document.cookie.length+
'&rf='+escape(ns_rf)+'&sl='+escape(navigator.systemLanguage)+
'&av='+escape(navigator.appVersion)+'&l='+escape(navigator.language)+
'&pf='+escape(navigator.platform)+'&pg='+escape(ns_pageName);
ns_data=ns_data+'&cd='+screen.colorDepth+'&rs='+escape(screen.width+ ' x '+screen.height)+
'&tz='+ns_tz.getTimezoneOffset()+'&je='+ navigator.javaEnabled();
ns_img=new Image();ns_img.src=ns_hp+'://tracker.statgauge.com/statistics.aspx'+
'?v=1&s=213&acct=225206'+ns_data+'&tks='+ns_tz.getTime();



// Fixes IE6 CSS Rendering Bug
if (document.all && window.attachEvent) window.attachEvent("onload", fixWinIE);
function fixWinIE() {
	if (document.body.scrollHeight < document.body.offsetHeight) { document.body.style.display = 'block'; }
}



// Spam Suppression for Emails
function stopSpam(name, domain, subject) {
	var symbol = '@';
	// Took out the Subject due to MS fault in Outlook Express (Source - http://support.microsoft.com/kb/q182985/ )
	// document.write('<a href="mailto:' + name + symbol + domain + '&subject=' + subject + '">' + name + symbol + domain + '</a>');
	document.write('<a href="mailto:' + name + symbol + domain + '">' + name + symbol + domain + '</a>');
}



// Roll Over Nav
sfHover = function() {
	var sfEls = document.getElementById("navigation").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp("sfhover\\b"), "");
		}
	}

	/*
	var sfEls = document.getElementById("related").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp("sfhover\\b"), "");
		}
	}
	*/
}
// Initiated below
// if (window.attachEvent) window.attachEvent("onload", sfHover);



// Image Replacement for Special Fonts
function executeSIFR() {
	if(typeof sIFR == "function"){
		// This is the preferred "named argument" syntax
		// sIFR.replaceElement(named({sSelector:"body h1", sFlashSrc:"vandenkeere.swf", sColor:"#000000", sLinkColor:"#000000", sBgColor:"#FFFFFF", sHoverColor:"#CCCCCC", nPaddingTop:20, nPaddingBottom:20, sFlashVars:"textalign=center&offsetTop=6"}));

		// This is the older, ordered syntax
		// sIFR.replaceElement("h5#pullquote", "vandenkeere.swf", "#000000", "#000000", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null);

		sIFR.replaceElement("h2", named({sFlashSrc: "/media/font-slicker.swf", sColor: "#007DAF", sCase: "upper", sWmode: "transparent"}));
		sIFR.replaceElement("h3", named({sFlashSrc: "/media/font-slicker.swf", sColor: "#169FD6", sWmode: "transparent"}));
		sIFR.replaceElement("#whatsHot h4", named({sFlashSrc: "/media/font-slicker.swf", sColor: "#FFFFFF", sWmode: "transparent", nPaddingTop:12, nPaddingBottom:12 }));
		sIFR.replaceElement("#explore h4", named({sFlashSrc: "/media/font-slicker.swf", sColor: "#FFFFFF", sWmode: "transparent", nPaddingTop:12, nPaddingBottom:12 }));
		sIFR.replaceElement("#homeNews h4", named({sFlashSrc: "/media/font-slicker.swf", sColor: "#FFFFFF", sWmode: "transparent", nPaddingTop:12, nPaddingBottom:12 }));
		sIFR.replaceElement("#next-event h4", named({sFlashSrc: "/media/font-slicker.swf", sColor: "#FFFFFF", sWmode: "transparent", nPaddingTop:12, nPaddingBottom:12 }));
	};
}



// XHTML External Link Script
function externalLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];

		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
			anchor.target = "_blank";
			anchor.title = (anchor.title=='') ? "Opens in a new window" : anchor.title + " [opens in a new window]";
			anchor.className+=" external";
		}

		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "popup") {
			anchor.onclick = function () {
				window.open(this.href, 'popup', 'resizable=1,scrollbars=1,width=400,height=300,top=20,left=20');
				return false;
			}
		}

		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "VARapplication") {
			anchor.onclick = function () {
				window.open(this.href, 'varapp', 'resizable=1,scrollbars=1,width=700,height=500,top=20,left=20');
				return false;
			}
		}

	}
}



// Footer Right Border
function killFooterBorder() {

	if (!document.getElementsByTagName) return;
	var footer = document.getElementById('footer');
	var lists = footer.getElementsByTagName("ul");
	for (var i=0; i<lists.length; i++) {
		var listItems = lists[i].getElementsByTagName("li");
		listItems[listItems.length-1].style.border = 'none';
	}
}



// Copy Street Address to Postal Address
function copyAddress() {
	if (!document.getElementsByTagName) return;
	document.getElementById('companyPostalAddress1').value 	= document.getElementById('companyAddress1').value;
	document.getElementById('companyPostalAddress2').value 	= document.getElementById('companyAddress2').value;
	document.getElementById('companyPostalSuburb').value 		= document.getElementById('companySuburb').value;
	document.getElementById('companyPostalState').value 		= document.getElementById('companyState').value;
	document.getElementById('companyPostalPostCode').value 	= document.getElementById('companyPostCode').value;
	document.getElementById('companyPostalCountry').value 	= document.getElementById('companyCountry').value;
}



// Converts to Title Case
function capitalizeNames(str) {
	str = str.replace(/ +/g,' ');
	var names = str.split(' ');
	for(var i = 0; i < names.length; i++) {
		if(names[i].length > 1) {
			// Killed because of "BBQ"
			// names[i] = names[i].toLowerCase();
			letters = names[i].split('');
			letters[0] = letters[0].toUpperCase();
			names[i] = letters.join('');
		} else { names[i] = names[i].toUpperCase(); }
	}
	str = names.join(' ');
	return str;
}



// Record Outbound links to Member's Websites
function recordOutbound(target, productID, metricsTypeID) {
	if(encodeURIComponent) {
		var req = new AjaxRequest();
		var params = "src=" + encodeURIComponent(location.href) + "&target=" + encodeURIComponent(target) + "&productID=" + productID + "&metricsTypeID=" + metricsTypeID;
		req.loadXMLDoc('/members-data.php', params);
	}

	return true;
	// window.open(target, 'blank');
	// return false;
}



// Toggle Function
function toggle(obj) {
	obj = document.getElementById(obj);
	if (obj.style.display == "none") {
		obj.style.display = "";
	} else {
		obj.style.display = "none";
	}
}



// Events Functions
function toggleEvents(regionID) {
	var regionLink = document.getElementById('region'+regionID);

	// if (regionLink.getAttribute('class') == 'close') {
	if (regionLink.className == 'close') {
		// regionLink.setAttribute('class', 'open');
		regionLink.className = "open";
		var rows = getElementsByClass('region-0'+regionID);
		for(i=0; i<rows.length; i++) {
			rows[i].style.display = 'none';
		}
	} else {
		// regionLink.setAttribute('class', 'close');
		regionLink.className = "close";
		var rows = getElementsByClass('region-0'+regionID);
		for(i=0; i<rows.length; i++) {
			rows[i].style.display = '';
		}
	}
}
function hideEvents() {
	if (document.getElementById('schedule')) {
		for (p=0; p<16; p++) {
			regionID = (p<10) ? '0'+p : p ;
			var rows = getElementsByClass('region-'+regionID);
			for(v=0; v<rows.length; v++) {
				rows[v].style.display = 'none';
			}
		}
		myCaption = document.getElementById('schedule').getElementsByTagName('caption')[0];
		myCaption.innerHTML = '<a href="javascript:toggleAllEvents(\'show\');">show all events</a>';
		myCaption.style.textAlign = 'right';
	}
}
function toggleAllEvents(todo) {
	displayType = (todo=='show') ? '' : 'none' ;
	instructType = (todo=='show') ? 'close' : 'open' ;
	for (p=0; p<16; p++) {
		regionLink = document.getElementById('region'+p);
		if (regionLink) regionLink.className = instructType;

		regionID = (p<10) ? '0'+p : p ;
		var rows = getElementsByClass('region-'+regionID);
		for(v=0; v<rows.length; v++) {
			rows[v].style.display = displayType;
		}
	}
	myCaption = document.getElementById('schedule').getElementsByTagName('caption')[0];
	if (todo=='show') {
		myCaption.innerHTML = '<a href="javascript:toggleAllEvents(\'hide\');">hide all events</a>';
	} else {
		myCaption.innerHTML = '<a href="javascript:toggleAllEvents(\'show\');">show all events</a>';
	}
}



// Toggle New or Current Member
function toggleNewMember() {
	if (document.getElementById('new-member').style.display=='block') {
		document.getElementById('new-member').style.display='none';
		document.getElementById('current-member').style.display='block';
		document.getElementById('memberExisting').value='1';
		document.getElementById('member-button').innerHTML = 'Can\'t find your Organisation from the list below? <a href="javascript:toggleNewMember();">Click here to add it to our list</a>';
	} else {
		document.getElementById('new-member').style.display='block';
		document.getElementById('current-member').style.display='none';
		document.getElementById('memberExisting').value='0';
		document.getElementById('member-button').innerHTML = 'Changed your mind? <a href="javascript:toggleNewMember();">Try find your Organisation again</a>';
	}
}



// Migrate Fields for Event Registration
function migrateFields() {
	runMigration('memberOrganisation', 'eventOrganisation');
	runMigration('memberEmail', 'contactEmail');
	runMigration('memberPhone', 'eventContactPhone');
	runMigration('memberFax', 'eventContactFax');
	runMigration('memberEmail', 'eventContactEmail');
	runMigration('memberWebsite', 'eventContactWebsite');

	if (document.getElementById('memberState')) {
		var memberState = document.getElementById('memberState');
		memberState.onblur = function() {
			goToOption(document.getElementById('event').eventState, memberState.value);
	}
	}
}
function runMigration(fromField, toField) {
	if (document.getElementById(fromField)) {
		var fromThis = document.getElementById(fromField);
		fromThis.onblur = function() {
			document.getElementById(toField).value = fromThis.value;
		}
	}
}
// Change Select Field based on Value
function goToOption(sel, val) {
	var opt, o = 0;
	while (opt = sel[o++]) if (opt.value == val) sel.selectedIndex = o - 1;
}



// Get Elements By Class Name
function getElementsByClass( searchClass, domNode, tagName) {
	if (domNode == null) domNode = document;
	if (tagName == null) tagName = '*';
	var el = new Array();
	var tags = domNode.getElementsByTagName(tagName);
	var tcl = " "+searchClass+" ";
	for(i=0,j=0; i<tags.length; i++) {
		var test = " " + tags[i].className + " ";
		if (test.indexOf(tcl) != -1)
			el[j++] = tags[i];
	}
	return el;
}



// Pop Up Generic Window
function Popup(ref, s, w, h) {
	window.open(ref, 'newWin', 'resizable=1,scrollbars=' + s + ',width=' + w + ',height=' + h + '');
}



// Pop Up Image Window
function PopupPic(sPicURL) {
	window.open('image.html?'+sPicURL, 'imagePopUp', 'resizable=1,width=20,height=20');
}



function showMsgDetail() {
	// This script is for debug/admin purposes ONLY.
	// It allows the user to view the XML input and XML output.
	if (document.all.msg_detail.style.visibility == 'hidden') {
		document.all.msg_detail.style.visibility = 'visible';
		document.all.msg_detail.style.position = 'relative';
		document.all.msg_display_text.innerHTML = 'Hide Message Detail';
	} else {
		document.all.msg_detail.style.visibility = 'hidden';
		document.all.msg_detail.style.position = 'absolute';
		document.all.msg_display_text.innerHTML = 'Display Message Detail';
	}
	return;
}



function cssClass(action,object,class1,class2) {
	// swap 		replaces class class1 with class class2 in object.
	// add 			adds class class1 to the object.
	// remove 	removes class class1 from the object.
	// check 		test if class class1 is already applied to object and returns true or false.
	switch (action) {
		case 'swap':
		object.className=!cssClass('check',object,class1)?object.className.replace(class2,class1): object.className.replace(class1,class2);
	break;
	case 'add':
		if(!cssClass('check',object,class1)){object.className+=object.className?' '+class1:class1;}
	break;
	case 'remove':
		var rep=object.className.match(' '+class1)?' '+class1:class1;
		object.className=object.className.replace(rep,'');
	break;
	case 'check':
		return new RegExp('\\b'+class1+'\\b').test(object.className)
	break;
	}
}



// Toggle Object
function toggleDOM(obj, show, hide) {
	obj = document.getElementById(obj);
	if (cssClass('check',obj,hide)) {
		cssClass('swap',obj,hide,show);
	} else {
		cssClass('swap',obj,show,hide);
	}
	return false;
}



// Global Cookie Function
function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	setCookie(name,'',-1);
}



// Event-Manager Script by Keith Gaughan
// For implementations that don't include the push() methods for arrays.
if (!Array.prototype.push) {
	Array.prototype.push = function(elem) {
		this[this.length] = elem;
	}
}

var EventManager = {
	_registry: null,

	Initialise: function() {
		if (this._registry == null) {
			this._registry = [];
			// Register the cleanup handler on page unload.
			EventManager.Add(window, "unload", this.CleanUp);
		}
	},

	// Registers an event and handler with the manager.
	Add: function(obj, type, fn, useCapture) {
		this.Initialise();
		// If a string was passed in, it's an id.
		if (typeof obj == "string")
			obj = document.getElementById(obj);
		if (obj == null || fn == null)
			return false;
		// Mozilla/W3C listeners?
		if (obj.addEventListener) {
			obj.addEventListener(type, fn, useCapture);
			this._registry.push({obj: obj, type: type, fn: fn, useCapture: useCapture});
			return true;
		}
		// IE-style listeners?
		if (obj.attachEvent && obj.attachEvent("on" + type, fn)) {
			this._registry.push({obj: obj, type: type, fn: fn, useCapture: false});
			return true;
		}
		return false;
	},

	// Cleans up all the registered event handlers.
	CleanUp: function() {
		for (var i = 0; i < EventManager._registry.length; i++) {
			with (EventManager._registry[i]) {
				// Mozilla/W3C listeners?
				if (obj.removeEventListener)
					obj.removeEventListener(type, fn, useCapture);
				// IE-style listeners?
				else if (obj.detachEvent)
					obj.detachEvent("on" + type, fn);
			}
		}
		// Kill off the registry itself to get rid of the last remaining references.
		EventManager._registry = null;
	}
};



// Multiple Onload Functions to be called
EventManager.Add(window,'load', executeSIFR);
EventManager.Add(window,'load', hideEvents);
EventManager.Add(window,'load', sfHover);
EventManager.Add(window,'load', killFooterBorder);
EventManager.Add(window,'load', externalLinks);
EventManager.Add(window,'load', migrateFields);