if (!katani) var katani = {};

katani.newseventfeatured = function() {

	var event = global.event,
		dom = global.dom,
		featureditemlist = [],
		featureditemregexp = /^featured-(\d+)$/,
		dotweens;

	function tweenfinish(tween) {

		// if tween has fully faded out hide the element totally as to not interfere with the page
		if (tween.value == 0) displayhovernodeset(tween.featurednum);
	}

	function zoneout(e) {

		// get zone anchor and featured item number - if either fail return
		var itemtarget = getitemtarget(e);
		if (!itemtarget) return;

		var featurednum = getfeatureditemnum(itemtarget);
		if (featurednum < 0) return;

		// if already faded down abort - we do this when browser back buttons are used and hover nodes are in an already shown state
		// if we didnt the tween forward/reverse would get out of sync with mouse events
		if (!isfadeup(featurednum)) return;

		if (dotweens) {
			// do the fade down
			featureditemlist[featurednum].tween.start();

		} else {
			// hide the hover node set instantly for browsers that can't do fades (e.g. IE)
			displayhovernodeset(featurednum);
		}

		setfadeup(featurednum);
	}

	function zoneover(e) {

		// get zone anchor and featured item number - if either fail return
		var itemtarget = getitemtarget(e);
		if (!itemtarget) return;

		var featurednum = getfeatureditemnum(itemtarget);
		if (featurednum < 0) return;

		// if already faded up abort - we do this when browser back buttons are used and hover nodes are in an already shown state
		// if we didnt the tween forward/reverse would get out of sync with mouse events
		if (isfadeup(featurednum)) return;

		// has the featured item detail hover node structure & animation been setup yet?
		if (!featureditemlist[featurednum].init) {
			var parentel = itemtarget.parentNode,
				hovernodeset = buildhovernodeset(parentel);

			parentel.appendChild(hovernodeset);

			featureditemlist[featurednum] = {
				init: true,
				el: hovernodeset
			};

			if (dotweens) {
				var tween = new dom.animation.tween(
					{
						el: hovernodeset,
						css: 'opacity',
						finish: tweenfinish
					},
					0,0.8,0.4
				);

				// put tween index number into tween object, used by tweenfinish() method
				tween.featurednum = featurednum;

				// store tween against featured item array
				featureditemlist[featurednum].tween = tween;

				// set initial opacity for the hover node set to zero before animation kicks off (avoid any flashing)
				dom.setopacity(hovernodeset,0);
			}
		}

		if (dotweens) {
			// start the fade up
			featureditemlist[featurednum].tween.start();
		}

		// display the hover node set
		displayhovernodeset(featurednum,true);
		setfadeup(featurednum,true);
	}

	function displayhovernodeset(num,display) {

		featureditemlist[num].el.style.display = (display) ? 'block' : 'none';
	}

	function buildhovernodeset(featureditemel) {

		var headingel = getelementsbytagname(featureditemel,'h5')[0],
			dateel = getelementsbytagname(featureditemel,'p')[0];

		headingel.className = '';
		dateel.className = '';

		return dom.node('div',false,[headingel,dateel]);
	}

	function setfadeup(num,fadeup) {

		featureditemlist[num].fadeup = fadeup;
	}

	function isfadeup(num) {

		return featureditemlist[num].fadeup;
	}

	function getfeatureditemnum(el) {

		var match = featureditemregexp.exec(el.id);
		return (match) ? match[1] : -1;
	}

	function getitemtarget(e) {

		var el = event.gettarget(e);
		return (el && (el.parentNode.className == 'zone')) ? el.parentNode : null;
	}

	function init() {

		var featuredel = $('newseventfeatured');
		if (!dom.isnodecomplete(featuredel)) {
			// reset timeout to try again later
			window.setTimeout(init,20);
			return;
		}

		// attach mouse over/out event handlers to the news/event featured item list element
		event.add(featuredel,'mouseover',zoneover);
		event.add(featuredel,'mouseout',zoneout);

		// work over the item list
		var elitemlist = getelementsbytagname(featuredel,'li');
		for (var i = 0,j = elitemlist.length;i < j;i++) {
			var itemel = elitemlist[i],
				anchorel = getelementsbytagname(itemel,'a')[0],
				imageel = getelementsbytagname(itemel,'img')[0];

			// attach an identifier to anchor
			anchorel.id = 'featured-' + i;

			// move original image out of the anchor parent element
			itemel.appendChild(imageel);

			// give anchor the 'zone' class and insert a transparent image element inside the anchor element
			// transparent image is used to keep IE happy which needs to have content inside the anchor to be linkable
			anchorel.className = 'zone';
			anchorel.appendChild(dom.node('img',{ src: '/img/t.gif', width: 80, height: 80 }));

			// init 'featureditemlist' array elements
			featureditemlist[i] = {};
		}
	}

	function getelementsbytagname(el,tag) { return el.getElementsByTagName(tag); }

	function ie7orlower() {

		var match;
		if (match = /MSIE (\d+)\./.exec(navigator.appVersion)) {
			if (match[1] <= 7) return true;
		}

		return false;
	}

	// if browser is IE 7 or lower disable tween effect and just do hide/show
	dotweens = ie7orlower() ? false : true;

	init();
}();
