/** fadeIn **************************************************** **/
var fadeIn_interval = new Array();
var fadeIn_increase = new Array();
function fadeIn(obj, limit, time) {
	if (fadeIn_interval[obj.id] == null) {
		fadeIn_increase[obj.id] = 30 / time;
		fadeIn_interval[obj.id] = window.setInterval(function () { fadeIn(obj, limit) }, 30);
	}
	$(obj).setOpacity($(obj).getStyle("opacity") + fadeIn_increase[obj.id]);
	if ($(obj).getStyle("opacity") >= limit) {
        $(obj).setOpacity(limit);
		window.clearInterval(fadeIn_interval[obj.id]);
		fadeIn_interval[obj.id] = null;
	}
}

/** fadeOut *************************************************** **/
var fadeOut_interval = new Array();
var fadeOut_reduce = new Array();
function fadeOut(obj, orig, time) {
	if (fadeOut_interval[obj.id] == null) {
		fadeOut_reduce[obj.id] = 30 / time;
		fadeOut_interval[obj.id] = window.setInterval(function () { fadeOut(obj, orig) }, 30);
	}
	$(obj).setOpacity($(obj).getStyle("opacity") - fadeOut_reduce[obj.id]);
	if ($(obj).getStyle("opacity") <= 0) {
		window.clearInterval(fadeOut_interval[obj.id]);
		fadeOut_interval[obj.id] = null;
		$(obj).hide();
		$(obj).setOpacity(orig);
	}
}

/** shrink **************************************************** **/
var shrink_interval = new Array();
var shrink_height;
var shrink_reduce;
var shrink_top = 0;
function shrink(obj, time) {
	if (shrink_interval[obj.id] == null) {
		$(obj).setOpacity(0);
        shrink_height = $(obj).getHeight();
        shrink_reduce = shrink_height / (time / 10);
		shrink_interval[obj.id] = window.setInterval(function () { shrink(obj) }, 10);
	}
	shrink_top -= shrink_reduce;
	if (shrink_top + shrink_height <= 0) shrink_top = -shrink_height;
    obj.style.marginTop = shrink_top + "px";
	if (shrink_top == -shrink_height) {
		window.clearInterval(shrink_interval[obj.id]);
	}
}

/** grow ****************************************************** **/
var grow_interval = new Array();
var grow_limit;
var grow_increase;
var grow_height;
function grow(obj, time) {
	if (grow_interval[obj.id] == null) {
        grow_limit = $(obj).getHeight();
        grow_height = 0;
        $(obj).setStyle({ height: "0px", display: "block" });
        grow_increase = grow_limit / (time / 30);
		grow_interval[obj.id] = window.setInterval(function () { grow(obj) }, 30);
	}
	if (grow_height < grow_limit) {
		if (grow_limit - grow_height < grow_increase) {
			grow_increase = grow_limit - grow_height;
		}
		grow_height += grow_increase;
		$(obj).setStyle({ height: grow_height + "px" });
	}
	if (grow_height == grow_limit) {
		window.clearInterval(grow_interval[obj.id]);
		grow_interval[obj.id] = null;
	}
}

/** fly ******************************************************* **/
var fly_interval = new Array();
var fly_x = new Array();
var fly_y = new Array();
var fly_x_diff = new Array();
var fly_y_diff = new Array();
var fly_index = new Array();
function fly(obj, x, y, time) {
    offsetC = $(obj).cumulativeOffset();
	offsetP = $(obj).positionedOffset();
	if (fly_interval[obj.id] == null) {
		fly_x[obj.id] = offsetP[0];
		fly_y[obj.id] = offsetP[1];
		fly_x_diff[obj.id] = (x - offsetC[0]) / time * 10;
		fly_y_diff[obj.id] = (y - offsetC[1]) / time * 10;
		fly_interval[obj.id] = window.setInterval(function () { fly(obj, x, y, time) }, 10);
		fly_index[obj.id] = 0;
	}
	if (fly_index[obj.id] < (time / 10)) {
  		fly_x[obj.id] += fly_x_diff[obj.id];
		fly_y[obj.id] += fly_y_diff[obj.id];
		$(obj).setStyle({ left: fly_x[obj.id] + "px", top: fly_y[obj.id] + "px" });
	} else {
		offsetC = $(obj).cumulativeOffset();
		offsetP = $(obj).positionedOffset();
        $(obj).setStyle({ left: (x - offsetC[0] + offsetP[0]) + "px", top: (y - offsetC[1] + offsetP[1]) + "px" })
		window.clearInterval(fly_interval[obj.id]);
		fly_interval[obj.id] = null;
	}
	fly_index[obj.id]++;
}

/** showAt **************************************************** **/
var showAt_limit = 1;
var showAt_x = null;
var showAt_y = null;
function showAt(event, obj, id, options) {
    var relatedTarget = event.relatedTarget || event.fromElement;
    if (relatedTarget.id != id) {
	    if (fadeOut_interval[id] != null) {
	        window.clearInterval(fadeOut_interval[id]);
			fadeOut_interval[id] = null;
		} else {
	        showAt_limit = $(id).getStyle("opacity");
		}

		$(id).setOpacity(0);
		$(id).show();

		if (options.position == "center") {
			var offsetC = $(obj).cumulativeOffset();
			var offsetP = $(obj).positionedOffset();
			var relativeOffset = new Array((offsetC[0] - offsetP[0]), (offsetC[1] - offsetP[1]));

			var x = offsetC[0] - (($(id).getWidth() - $(obj).getWidth()) / 2);
			var y = offsetC[1] + ($(obj).getHeight() + 5);

			if (x < 0) {
				x = 0;
			}
			if (x + $(id).getWidth() > document.viewport.getScrollOffsets()[0] + document.viewport.getWidth()) {
				x = document.viewport.getScrollOffsets()[0] + document.viewport.getWidth() - $(id).getWidth() - 5;
			}
			if (y + $(id).getHeight() > document.viewport.getScrollOffsets()[1] + document.viewport.getHeight()) {
				y = y - $(id).getHeight() - $(obj).getHeight() - 10;
			}

			if (showAt_x != null) {
	            //$(id).setStyle({ left: showAt_x + "px", top: showAt_y + "px" });
	            $(id).setStyle({ left: (x - relativeOffset[0]) + "px", top: (y - relativeOffset[1]) + "px" });
	            var offset = $(obj).cumulativeOffset();
				//fly($(id), x, y, 100);
			} else {
				$(id).setStyle({ left: (x - relativeOffset[0]) + "px", top: (y - relativeOffset[1]) + "px" });
			}

			showAt_x = (x - relativeOffset[0]);
			showAt_y = (y - relativeOffset[1]);
		}

		fadeIn($(id), showAt_limit, 150);
	}
}

/** hideAt **************************************************** **/
function hideAt(event, id) {
    var relatedTarget = event.relatedTarget || event.fromElement;
	//if (relatedTarget.id != id) {
		if (fadeIn_interval[id] != null) {
	        window.clearInterval(fadeIn_interval[id]);
			fadeIn_interval[id] = null;
		}
	 	fadeOut($(id), showAt_limit, 150);
 	//}
}

function showLayer(id) {
	$(id).style.display = "block";
	$(id).style.visibility = "visible";
}

var backOld = "";
var fontOld = "";
function bg(obj, color, font) {
	if (obj) {
		// If Color Is Undefined, Use backOld
		if (typeof(color) == "undefined") {
			obj.style.backgroundColor = backOld;
			obj.style.color = fontOld;
		} else {
			backOld = obj.style.backgroundColor;
			obj.style.backgroundColor = color;
			fontOld = obj.style.color;
			if (typeof(color) != "undefined") {
				obj.style.color = font;
			}
		}
	}
}

var layerRegistered = null;
function showLayerMouse(id) {
    layerRegistered = id;
	showLayer(id);
}

function pa_hideLayer(id) {
	hideLayer(id);
}

function hideLayer(id) {
	$(id).style.display = "none";
	layerRegistered = null;
}

Event.observe(document, "mousemove", mouseMove);
function mouseMove(e) {
	if (layerRegistered != null) {
		// IE
		if (IE) {
			xOffset = Math.floor((document.body.offsetWidth - 880) / 2);
			if (xOffset < 0) xOffset = 0;

			if (document.documentElement && document.documentElement.scrollTop) {
				scrollX = document.documentElement.scrollLeft;
				scrollY = document.documentElement.scrollTop;
			} else if (document.body) {
				scrollX = document.body.scrollLeft;
				scrollY = document.body.scrollTop;
			}

			x = event.clientX + scrollX - xOffset;
			y = event.clientY + scrollY - 105;

			if ((event.clientX + 215) >= document.body.offsetWidth) x = document.body.offsetWidth + scrollX - xOffset - 215;
		// Gecko
		} else {
			xOffset = Math.floor((window.innerWidth  - 880) / 2);
			if (xOffset < 8) xOffset = 8;

			x = e.pageX - xOffset + 14;
			y = e.pageY - 115;

			if ((e.screenX + 235) >= window.innerWidth) x = window.innerWidth + window.scrollX - xOffset - 225;
			if ((e.screenY + $(layerRegistered).clientHeight - 100) >= window.innerHeight) y = window.innerHeight + window.scrollY - $(layerRegistered).clientHeight - 130;
		}

		$(layerRegistered).style.left = x + "px";
		$(layerRegistered).style.top = y + "px";
		$(layerRegistered).style.cursor = "pointer";
	}
}