var jsOverviewManager = Class.create ();
jsOverviewManager.prototype = {

	url_tickIcon: '',
	url_noticeIcon: '',
	url_deleteIcon: '',
	url_loading: '',

	currentPopoverDomIds: new Array (),
	popoverTimeouts: new Array (),
	nameSpaces: new Array (),
	popOverNameSpaces: new Array (),

	// constructor
	initialize: function (url_tickIcon, url_noticeIcon, url_deleteIcon, url_loading) {
		this.url_tickIcon = url_tickIcon;
		this.url_noticeIcon = url_noticeIcon;
		this.url_deleteIcon = url_deleteIcon;
		this.url_loading = url_loading;

		setTimeout ("jsOverviewManager.check_enable_page ();", 4000);
		this.cancel_popover_hide_timeout ('helo');
		return true;
	},

	register_name_space: function (nameSpace, disablePage, hideOnMouseOut, clearNameSpacesOnShow, clearNameSpacesOnHide) {
		if (clearNameSpacesOnShow == undefined)
			clearNameSpacesOnShow = nameSpace;
		if (!this.is_array (clearNameSpacesOnShow))
			clearNameSpacesOnShow = [clearNameSpacesOnShow];

		if (clearNameSpacesOnHide == undefined)
			clearNameSpacesOnHide = nameSpace;
		if (!this.is_array (clearNameSpacesOnHide))
			clearNameSpacesOnHide = [clearNameSpacesOnHide];

		this.nameSpaces[nameSpace] = {	nameSpace: nameSpace,
										disablePage: disablePage,
										hideOnMouseOut: hideOnMouseOut,
										clearNameSpacesOnShow: clearNameSpacesOnShow,
										clearNameSpacesOnHide: clearNameSpacesOnHide};
	},

	remember_dom_id_name_space: function (linkDomId, nameSpace) {
		this.popOverNameSpaces[linkDomId] = nameSpace;
		return true;
	},

	get_name_space: function (nameSpace) {
		if (this.nameSpaces[nameSpace] != undefined)
			return this.nameSpaces[nameSpace];
		else
			return {	nameSpace: 'default',
						disablePage: true,
						hideOnMouseOut: false,
						clearNameSpacesOnShow: [nameSpace],
						clearNameSpacesOnHide: [nameSpace] };
	},









	watch_popover_link: function (linkDomId, placeHolderDomId, popoverDomId, popoverUri, positionInfo, popoverWidth, popoverTitle, nameSpace) {
		nameSpaceInfo = this.get_name_space (nameSpace);
		nameSpace = nameSpaceInfo.nameSpace;
		this.remember_dom_id_name_space (popoverDomId, nameSpace);

		if (($(linkDomId) != null) && ($(placeHolderDomId) != null)) {
			$(linkDomId).observe ('click', function (event) {

				for (count = 0; count < nameSpaceInfo.clearNameSpacesOnShow.length; count++) {
					tempNameSpace = nameSpaceInfo.clearNameSpacesOnShow[count];
					if (jsOverviewManager.currentPopoverDomIds[tempNameSpace] != popoverDomId) {
						jsMessageManager.hide_message_block (jsOverviewManager.currentPopoverDomIds[tempNameSpace]);
						jsOverviewManager.currentPopoverDomIds[tempNameSpace] = 0;
					}
				}
				jsOverviewManager.currentPopoverDomIds[nameSpace] = popoverDomId;

				if (nameSpaceInfo.disablePage)
					jsOverviewManager.disable_page ();


				var popOverHtml = '';
				popOverHtml = popOverHtml + '<div id="' + popoverDomId + '" class="popOver" style="width: ' + popoverWidth + ';">';
				if (popoverTitle != '')
					popOverHtml = popOverHtml + '<div id="' + popoverDomId + '_title" class="title">' + popoverTitle + '</div>';
				popOverHtml = popOverHtml + '<img src="' + jsOverviewManager.url_deleteIcon + '" title="Close" onClick="jsOverviewManager.hide_popover (\'' + popoverDomId + '\');" class="close">';
				popOverHtml = popOverHtml + '<div class="contentEnd"></div>';
				popOverHtml = popOverHtml + '<div id="' + popoverDomId + '_content"><span class="formSubtitle">Please wait</span><br /><br /><img id="' + popoverDomId + '_pleaseWait" src="' + jsOverviewManager.url_loading + '"></div>';
				popOverHtml = popOverHtml + '</div>';

				jsMessageManager.set_place_holder (popoverDomId, placeHolderDomId, positionInfo);
				jsMessageManager.set_display_effects (popoverDomId, "Appear", { duration: 0.4 }, "DropOut", { duration: 0.5 });
//				jsMessageManager.reset_messages (popoverDomId);
				jsMessageManager.show_message (popoverDomId, popOverHtml);

				if (nameSpaceInfo.hideOnMouseOut) {
					eval ('var temp = function () { jsOverviewManager.cancel_popover_hide_timeout ("' + popoverDomId + '");};');
					$(popoverDomId).onmouseover = temp;
					eval ('var temp = function () { jsOverviewManager.hide_popover_delayed ("' + popoverDomId + '");};');
					$(popoverDomId).onmouseout = temp;
				}

				$(popoverDomId + "_pleaseWait").src = jsOverviewManager.url_loading;

				gc_ajaxManager.request (popoverUri,
					{	method: 'get'}
					, 'popover');
			});
		}

		var linkDomId2 = linkDomId + '_left';
		var placeHolderDomId2 = linkDomId2;
		var positionInfo2 = { xSourcePoint: "right", xDestPoint: "left", xPixelOffset: -10, yPixelOffset: -5 };
		if (($(linkDomId2) != null) && ($(placeHolderDomId2) != null)) {
			$(linkDomId2).observe ('click', function (event) {

				for (count = 0; count < nameSpaceInfo.clearNameSpacesOnShow.length; count++) {
					tempNameSpace = nameSpaceInfo.clearNameSpacesOnShow[count];
					if (jsOverviewManager.currentPopoverDomIds[tempNameSpace] != popoverDomId) {
						jsMessageManager.hide_message_block (jsOverviewManager.currentPopoverDomIds[tempNameSpace]);
						jsOverviewManager.currentPopoverDomIds[tempNameSpace] = 0;
					}
				}
				jsOverviewManager.currentPopoverDomIds[nameSpace] = popoverDomId;

				if (nameSpaceInfo.disablePage)
					jsOverviewManager.disable_page ();


				var popOverHtml = '';
				popOverHtml = popOverHtml + '<div id="' + popoverDomId + '" class="popOver" style="width: ' + popoverWidth + ';">';
				if (popoverTitle != '')
					popOverHtml = popOverHtml + '<div id="' + popoverDomId + '_title" class="title">' + popoverTitle + '</div>';
				popOverHtml = popOverHtml + '<img src="' + jsOverviewManager.url_deleteIcon + '" title="Close" onClick="jsOverviewManager.hide_popover (\'' + popoverDomId + '\');" class="close">';
				popOverHtml = popOverHtml + '<div class="contentEnd"></div>';
				popOverHtml = popOverHtml + '<div id="' + popoverDomId + '_content"><span class="formSubtitle">Please wait</span><br /><br /><img id="' + popoverDomId + '_pleaseWait" src="' + jsOverviewManager.url_loading + '"></div>';
				popOverHtml = popOverHtml + '</div>';

				jsMessageManager.set_place_holder (popoverDomId, placeHolderDomId2, positionInfo2);
				jsMessageManager.set_display_effects (popoverDomId, "Appear", { duration: 0.4 }, "DropOut", { duration: 0.5 });
//				jsMessageManager.reset_messages (popoverDomId);
				jsMessageManager.show_message (popoverDomId, popOverHtml);

				if (nameSpaceInfo.hideOnMouseOut) {
					eval ('var temp = function () { jsOverviewManager.cancel_popover_hide_timeout ("' + popoverDomId + '");};');
					$(popoverDomId).onmouseover = temp;
					eval ('var temp = function () { jsOverviewManager.hide_popover_delayed ("' + popoverDomId + '");};');
					$(popoverDomId).onmouseout = temp;
				}

				$(popoverDomId + "_pleaseWait").src = jsOverviewManager.url_loading;

				gc_ajaxManager.request (popoverUri,
					{	method: 'get'}
					, 'popover');
			});
		}
	},

	watch_popover_link_non_ajax: function (linkDomId, placeHolderDomId, popoverDomId, positionInfo, popoverWidth, popoverTitle, content, nameSpace) {
		var nameSpaceInfo = this.get_name_space (nameSpace);
		nameSpace = nameSpaceInfo.nameSpace;
		this.remember_dom_id_name_space (popoverDomId, nameSpace);

		if (($(linkDomId) != null) && ($(placeHolderDomId) != null)) {
			$(linkDomId).observe ('click', function (event) {

				for (count = 0; count < nameSpaceInfo.clearNameSpacesOnShow.length; count++) {
					tempNameSpace = nameSpaceInfo.clearNameSpacesOnShow[count];
					if (jsOverviewManager.currentPopoverDomIds[tempNameSpace] != popoverDomId) {
						jsMessageManager.hide_message_block (jsOverviewManager.currentPopoverDomIds[tempNameSpace]);
						jsOverviewManager.currentPopoverDomIds[tempNameSpace] = 0;
					}
				}
				jsOverviewManager.currentPopoverDomIds[nameSpace] = popoverDomId;

				if (nameSpaceInfo.disablePage)
					jsOverviewManager.disable_page ();

				var popOverHtml = '';
//				popOverHtml = popOverHtml + '<div id="' + popoverDomId + '" class="popOver" style="width: ' + popoverWidth + ';" onMouseOver="jsOverviewManager.cancel_popover_hide_timeout (\'' + popoverDomId + '\');" onMouseOut="jsOverviewManager.hide_popover_delayed (\'' + popoverDomId + '\');">';
				popOverHtml = popOverHtml + '<div id="' + popoverDomId + '" class="popOver" style="width: ' + popoverWidth + ';">';
				if (popoverTitle != '')
					popOverHtml = popOverHtml + '<div id="' + popoverDomId + '_title" class="title">' + popoverTitle + '</div>';
				popOverHtml = popOverHtml + '<img src="' + jsOverviewManager.url_deleteIcon + '" title="Close" onClick="jsOverviewManager.hide_popover (\'' + popoverDomId + '\');" class="close">';
				popOverHtml = popOverHtml + '<div class="contentEnd"></div>';
				popOverHtml = popOverHtml + '<div style="text-align: left;">' + content + '</div>';
				popOverHtml = popOverHtml + '</div>';

				jsMessageManager.set_place_holder (popoverDomId, placeHolderDomId, positionInfo);
				jsMessageManager.set_display_effects (popoverDomId, "Appear", { duration: 0.4 }, "DropOut", { duration: 0.5 });
//				jsMessageManager.reset_messages (popoverDomId);
				jsMessageManager.show_message (popoverDomId, popOverHtml);

				if (nameSpaceInfo.hideOnMouseOut) {
					eval ('var temp = function () { jsOverviewManager.cancel_popover_hide_timeout ("' + popoverDomId + '");};');
					$(popoverDomId).onmouseover = temp;
					eval ('var temp = function () { jsOverviewManager.hide_popover_delayed ("' + popoverDomId + '");};');
					$(popoverDomId).onmouseout = temp;
				}
			});
		}
	},

	watch_link: function (linkDomId, linkUri) {
		if ($(linkDomId) != null) {
			$(linkDomId).observe ('click', function (event) {
				document.location.href = linkUri;
			});
		}

		var linkDomId2 = linkDomId + '_left';
		if ($(linkDomId2) != null) {
			$(linkDomId2).observe ('click', function (event) {
				document.location.href = linkUri;
			});
		}
	},

	cancel_popover_hide_timeout: function (popoverDomId) {
		if (typeof (this.popoverTimeouts[popoverDomId]) != undefined)
			clearTimeout (this.popoverTimeouts[popoverDomId]);
		this.popoverTimeouts[popoverDomId] = undefined;
	},

	hide_popover_delayed: function (popoverDomId) {
		this.popoverTimeouts[popoverDomId] = setTimeout ("jsOverviewManager.hide_popover ('" + popoverDomId + "');", 400);
	},

	hide_popover: function (popoverDomId) {
		nameSpace = this.popOverNameSpaces[popoverDomId];
		nameSpaceInfo = this.get_name_space (nameSpace);

		for (count = 0; count < nameSpaceInfo.clearNameSpacesOnHide.length; count++) {
			tempNameSpace = nameSpaceInfo.clearNameSpacesOnHide[count];
			this.cancel_popover_hide_timeout (jsOverviewManager.currentPopoverDomIds[tempNameSpace]);
			jsMessageManager.hide_message_block (jsOverviewManager.currentPopoverDomIds[tempNameSpace]);
			jsOverviewManager.currentPopoverDomIds[tempNameSpace] = 0;
		}

		if (nameSpaceInfo.disablePage)
			jsOverviewManager.enable_page ();
	},






















	disable_page: function () {
		if ($("pageDimmer") == undefined) {
			var element_div = document.createElement ("div");
			element_div.setAttribute ("id", "pageDimmer");
			element_div.style.position = "absolute";
			element_div.style.left = "0px";
			element_div.style.top = "0px";
			element_div.style.zIndex = 50;
			element_div.style.display = "none";
			element_div.style.backgroundColor = "black";
			element_div.style.opacity = "0.23";
			element_div.style.filter = "alpha(opacity=25)";
			$("toolsDiv").appendChild (element_div);
		}
		pageDimensions = gc_geometry.find_total_page_dimensions ();
		$("pageDimmer").style.width = pageDimensions.width;
		$("pageDimmer").style.height = pageDimensions.height;
		$("pageDimmer").show ();
	},

	enable_page: function () {
		if ($("pageDimmer") != null)
			$("pageDimmer").hide ();
	},

	check_enable_page: function (nameSpace) {
/**
		nameSpaceInfo = this.get_name_space (nameSpace);
		nameSpace = nameSpaceInfo.nameSpace;

		if ($("pageDimmer") != undefined) {
			if ((this.currentPopoverDomIds[nameSpace] == 0) && ($("pageDimmer").visible ()))
				this.enable_page ();
			else if ((this.currentPopoverDomIds[nameSpace] != 0) && (!$("pageDimmer").visible ()))
				this.disable_page ();
		}
		setTimeout ("jsOverviewManager.check_enable_page (" + nameSpace + ");", 4000);
/**/
	},



	is_array: function (obj) {
		if ((obj != undefined) && (obj.constructor.toString ().indexOf ("Array") == -1))
			return false;
		else
			return true;
	}
}
