// requires yui.dom, yui.connect

if (typeof(aXX) === 'undefined')
	var aXX = {};


aXX.utils = {
	// generic async request
	fetchPage: function(uri, container, indicator, events) {
		var xhrCallback;
		
		if (!events)
			var events = {};
		
		// append random param
		if (uri.search(/\?/)>=0)
			uri += '&ts='+this.createTimeStamp();
		else
			uri += '?ts='+this.createTimeStamp();

		xhrCallback = {  	
			success: aXX.utils.showPage,
			failure: aXX.utils.fetchFailure,
			scope: aXX.utils,
			argument: [container, indicator, events.onLoad]
		};
		
		if ((events.beforeLoad && events.beforeLoad()) || !events.beforeLoad)
			YAHOO.util.Connect.asyncRequest('GET', uri, xhrCallback);
	},

	// generic async success callback
	showPage: function(o) {
		var container = o.argument[0];
		var indicator = o.argument[1];
		var onLoad = o.argument[2];

		if (indicator)
			aXX.status.stopLoadingStatus(indicator);

		if ((onLoad && onLoad(o)) || !onLoad)
			container.innerHTML = o.responseText;
	},	
	
	// generic async failure callback
	fetchFailure: function(o) {
		var indicator = o.argument[1];
		
		if (indicator)
			aXX.status.stopLoadingStatus(indicator);
		
		// do nothing atm
	},
	
	createTimeStamp: function() {
		var now = new Date();
		return now.getHours()+''+now.getMinutes()+''+now.getSeconds()+''+now.getMilliseconds();
	}
}

aXX.gui = {
	attachOpenInNewWindow: function(classname) {
		if (!classname || classname==null)
			var classname = 'new-window';
		
		var links = YAHOO.util.Dom.getElementsByClassName(classname, 'a');
		
		for (i=0; i<links.length; i++) {
			
			// TODO: how to register 'return false' on click action with addListener ??
			// YAHOO.util.Event.addListener(links[i], 'click', function() {aXX.gui.openInNewWindow(this.href); return false;});
			links[i].onclick = function(){ aXX.gui.openInNewWindow(this.href); return false; };
		}
	},
	
	openInNewWindow: function(uri) {
		window.open(uri);
		
	},
	
	// IE6 support for li:hover
	attachHoverEvents: function(id) {
		if (document.getElementById(id))
	   		var items = document.getElementById(id).getElementsByTagName("li");
		else
			return false;
				
		for (i=0; i<items.length; i++) {
			if (items[i].className.indexOf('parent')!=-1) {
				items[i].onmouseover=function() {
					YAHOO.util.Dom.addClass(this, 'hovered');
				}
				items[i].onmouseout=function() {
					YAHOO.util.Dom.removeClass(this, 'hovered');
				}
			}
		}
	}

}

aXX.status = {
	xhrs: Array,
	
	createStatusObj: function(el, count) {
		id = YAHOO.util.Dom.generateId(el, 'xhr_');
		
		this.xhrs[id] = (count == null) ? 1 : count;
		return id;
	},
	
	startLoadingStatus: function(el, count) {
		if (!this.xhrs[el.id])
			this.createStatusObj(el, count);
		
		YAHOO.util.Dom.addClass(el, 'loading');
	},
	
	stopLoadingStatus: function(el) {
		if (!this.xhrs[el.id])
			return false;
	
		this.xhrs[el.id]--;
		if (this.xhrs[el.id]<=0) {
			this.xhrs[el.id] = null;
			YAHOO.util.Dom.removeClass(el, 'loading');
		}
	}
};