// JavaScript Document

var um = {
	container : null,
	menu : null,
	inner_container : null,
	
	create_elm : function ( tag , attribs , styles , parent ) {
		var el = document.createElement(tag);
		
		if ( attribs )
			$(el).setAttribs(attribs);
		
		if ( styles )
			$(el).setStyles(styles);
		
		if ( parent )
			parent.appendChild(el);	
		
		return el;
	}
};

Menu = function ( ) {
	var menu = $('userMenu'), container = $('userMenuContainer');
	
	if ( !menu || !container )
		return false;

	um.menu = menu;
	um.container = container;
	
	this.init();
};
	
Menu.prototype.init = function() {
	um.container.inner = um.container.getElementsByTagName('td')[0];
	
	var email_container = um.container.inner.getElementsByTagName('b')[0];
	
	um.menu.style.width = (email_container.getWidth()-1)+'px';
	
	var arrow_link = um.container.inner.getElementsByTagName('a')[1];
	
	Event.observe(arrow_link, 'click', function() {user_menu.toggleMenu();});
	
	this.handleDocumentClicks();
};
	
Menu.prototype.handleDocumentClicks = function() {
	Event.observe( document, 'click', function(e) {
		if ( !um.menu.isHidden() ) {
			var ancestors = Event.element(e).ancestors();
				ancestors[ancestors.length] = Event.element(e);

			if ( ancestors.indexOf(um.container) == -1 ) {
				user_menu.hideMenu();
			}
		}
	});
};
	
Menu.prototype.toggleMenu = function() {
	if ( $(um.menu).isHidden() )
		this.showMenu();
	else
		this.hideMenu();
};

Menu.prototype.showMenu = function() {
	um.menu.style.display = 'block';
	
	um.container.inner.className = 'inner_active';
};
	
Menu.prototype.hideMenu = function() {
	um.menu.style.display = 'none';
	
	um.container.inner.className = 'inner';
};

var utilities = {
	posX : function( element ) {
		var curLeft = 0;
		
		if ( !element ) return curLeft;
		
		if ( element.offsetParent )
			while ( element.offsetParent ) {
				curLeft += element.offsetLeft;
				element = element.offsetParent;
			}
		else if ( element.x )
			curLeft += element.x;
		
		return curLeft;
	},

	posY : function( element ) {
		var curTop = 0;
		
		if ( !element ) return curTop;
		
		if ( element.offsetParent )
			while ( element.offsetParent ) {
				curTop += element.offsetTop;
				element = element.offsetParent;
			}
		else if ( element.y )
			curTop += element.y;
		
		return curTop;
	},

	isHidden : function ( element ) {
		element = $(element);
		
		if ( !element )
			return false;
		else
			if ( element.style.display == 'none' || element.style.visibility == 'hidden' )
				return -1;
			else
				return false;
	},
	
	setAttribs : function ( element , attribs ) {
		element = $(element);
		
		for (var x in attribs)
			element[x] = attribs[x];
	},
	
	setStyles : function ( element , styles ) {
		element = $(element);
		
		for (var x in styles) {
			try { element.style[x] = styles[x]; }
			catch (e) {}
		}
	}
};

Element.addMethods(utilities);

Event.observe(window, 'load', function() {
	user_menu = new Menu();
});
