function AddEventListener(obj, type, action)
{
	if(typeof window.addEventListener != 'undefined')
	{
		//.. gecko, safari, konqueror and standard
		obj.addEventListener(type, action, false);
	}
	else if(typeof document.addEventListener != 'undefined')
	{
		//.. opera 7
		obj.addEventListener(type, action, false);
	}
	else if(typeof window.attachEvent != 'undefined')
	{
		//.. win/ie
		obj.attachEvent('on' + type, action);
	}
}

// global timer object for mediaswapper & mediaduration
var msTimer;
var msDuration;
var msSpeed;


function pauseCycle(e) {
	clearTimeout(msTimer);
}

function resumeCycle(e) {
	if (isNaN(msDuration)) {
		msTimer = setTimeout(cycleMedia,2500);
	}
	else {
		msTimer = setTimeout(cycleMedia,msDuration);
	}
}

function cycleMedia(e) {
	clearTimeout(msTimer);
	var uls = document.getElementsByTagName('ul');
	var bStartTimer = 0;
	for (var k=0; k<uls.length; k++) {
		if (uls[k].className.indexOf('galControls') > -1 && uls[k].className.indexOf('slideShow') > -1) {
			if (isNaN(msDuration)) {
				msDuration = uls[k].className.slice(uls[k].className.indexOf('slideShow') + 9);
				if (isNaN(msDuration) || msDuration < 1000) {
					msDuration = 2500;
				}
			}
			bStartTimer = 1;
			var gcls = uls[k].getElementsByTagName('li');
			var iNum = 0;
			for (var i=0; i<gcls.length; i++) {
				if (gcls[i].className.indexOf('current') > -1) {
					iNum = i + 1;
					if (iNum === gcls.length) {
						iNum = 0;
					}
					i = gcls.length;
				}
			}
			for (var i=0; i<gcls.length; i++) {
				if (i === iNum) {
					gcls[i].className = gcls[i].className + 'current';
				}
				else {
					gcls[i].className = gcls[i].className.replace('current', '');
				}
			}
			var gis = findAncestorNode(uls[k], 'div', 'ctl_Media').getElementsByTagName('div');
			var j = 0;
			for (var i=0; i<gis.length; i++) {
				if (gis[i].className.indexOf('galItem') > -1) {
					if (j === iNum) {
						gis[i].className = gis[i].className.replace(' hide', '');
					}
					else {
						if (gis[i].className.indexOf('hide') < 0) {
							gis[i].className = gis[i].className + ' hide';
						}
					}
					j++;
				}
			}
		}
	}
	if (bStartTimer === 1) {
		msTimer = setTimeout(cycleMedia,msDuration);
	}
}


function switchMedia(e) {
	var ev = e || window.event;
	if (ev.preventDefault) {
	    ev.preventDefault();
	} else {
	    ev.returnValue = false;
	}
	var obj = GetEventSource(this);
	var iNum = Number(obj.firstChild.data);
	var gcls = findAncestorNode(obj, 'ul', 'galControls').getElementsByTagName('li');
	for (var i=0; i<gcls.length; i++) {
		if (i + 1 === iNum) {
			gcls[i].className = gcls[i].className + 'current';
		}
		else {
			gcls[i].className = gcls[i].className.replace('current', '');
		}
	}
	var gis = findAncestorNode(obj, 'div', 'ctl_Media').getElementsByTagName('div');
	var j = 1;
	for (var i=0; i<gis.length; i++) {
		if (gis[i].className.indexOf('galItem') > -1) {
			if (j === iNum) {
				gis[i].className = gis[i].className.replace(' hide', '');
			}
			else {
				if (gis[i].className.indexOf('hide') < 0) {
					gis[i].className = gis[i].className + ' hide';
				}
			}
			j++;
		}
	}
}

function mediaSwitcherInit() {

	//loop through all media containers and attach event to each galControl link
	if (!document.getElementsByTagName) return;
	var gcs = document.getElementsByTagName('ul');
	for (var i=0; i<gcs.length; i++) {
		var gc = gcs[i];
		if (gc.className.indexOf('galControls') > -1) {
			var gcas = gc.getElementsByTagName('a');
			for (var j=0; j<gcas.length; j++) {
				var gca = gcas[j];
				AddEventListener(gca, 'click', switchMedia);
				AddEventListener(gca, 'mouseover', pauseCycle);
				AddEventListener(gca, 'mouseout', resumeCycle);
			}
			var gis = findAncestorNode(gc, 'div', 'ctl_Media').getElementsByTagName('div');
			for (var i=0; i<gis.length; i++) {
				if (gis[i].className.indexOf('galItem') > -1) {
					AddEventListener(gis[i], 'mouseover', pauseCycle);
					AddEventListener(gis[i], 'mouseout', resumeCycle);
				}
			}
		}
	}
}

function findAncestorNode(el, strAncestorNode, strAncestorClassName) {
	var ancestorNode = el;
	do {
		ancestorNode = ancestorNode.parentNode;
	}
	while (ancestorNode.nodeName.toLowerCase() != strAncestorNode.toLowerCase() && ancestorNode.className != strAncestorClassName)
	return ancestorNode;
}

AddEventListener(window, 'load', mediaSwitcherInit);

AddEventListener(window, 'load', resumeCycle);