
var getPageOffset = function () {
	var offsetX = window.pageXOffset ? window.pageXOffset : document.documentElement ? document.documentElement.scrollLeft : document.body.scrollLeft;
	var offsetY = window.pageYOffset ? window.pageYOffset : document.documentElement ? document.documentElement.scrollTop : document.body.scrollTop;
	return { x : offsetX, y : offsetY };
}

var AjaxMessageDiv = Class.create();

AjaxMessageDiv.prototype = {

	moveTime: 50,
	messageTime: 5000,
	effectDuration: 500,
	effect: null,
	
	
		
	
	initialize : function () {
		this.element = document.createElement('div');
		
		Element.addClassName(this.element, 'ajaxMessageDiv');
		document.body.appendChild(this.element);
		Element.hide(this.element);
		this.element.count = 0;
		
		this.image = document.createElement('div');
		this.image.count = 0;	
		Element.hide(this.image);
		Element.addClassName(this.image, 'ajaxImage');
		this.element.appendChild(this.image);
		
		this.move();
		this.update();
	},


	removeMessage : function (elementId) {
		this.element.count = Math.max(0, this.element.count - 1);
		this.update();
		setTimeout('Element.remove(\'' + elementId + '\')', this.effectDuration);
	},
	
	showImage : function () {
		this.image.count++;
		if (!Element.visible(this.image)) {
			Element.show(this.image);
		}
		this.update();
	},
	
	hideImage : function () {
		this.image.count = Math.max(0, this.image.count - 1);
		if (this.image.count == 0 && Element.visible(this.image)) {
			Element.hide(this.image);
		}
		this.update();
	},
	
	update : function () {
		if (this.image.count > 0 || this.element.count > 0) {
			if (this.effect && new Date().getTime() < this.effect.finishOn) {
				this.effect.cancel();
				Element.setOpacity(this.element, 1);
			}
			if (!Element.visible(this.element)) {
				Element.show(this.element);
			}
		}
		else {
			if (Element.visible(this.element)) {
				if (!this.effect || new Date().getTime() > this.effect.finishOn) {
					this.effect = new Effect.Fade(this.element, {duration : this.effectDuration / 1000})
				}
			}
		}
	},
		
	move : function () {
		if (Element.visible(this.element)) {
			var element = document.createElement('div');
			element.style.position = 'absolute';
			element.style.right = '0px';
			element.style.width = '0px';
			document.body.appendChild(element);
			var p = Position.page(element);
			document.body.removeChild(element);
			offset = getPageOffset();
			this.element.style.top = offset.y + 'px';
			this.element.style.left = offset.x + 'px';
			this.element.style.width = (offset.x + p[0]) + 'px';
		}
		setTimeout('ajaxMessageDiv.move()', this.moveTime); 
	}
	
};

var ajaxMessageDiv = new AjaxMessageDiv();

