
dB.overlay = {
	init: function() {
		dB.overlay.deactivate();
	},
	deactivate: function() {
		dB.overlay.removeCallback = null;
		dB.overlay.submitCallback = null;
		dB.overlay.successCallback = null;
		dB.overlay.browserRefreshCallback = null;
		dB.overlay.imageClickCallback = null;
		dB.overlay.submitRefreshCallback = null;
		dB.overlay.active = false;
		dB.overlay.submitted = false;
		dB.overlay.browserId = null;
		dB.overlay.browserImageCache = null;
	},

	fixPosition: function() {
		if ($.browser.msie && $.browser.version < 7) {
			// IE6 can't handle fixed overlay window
//			$('#overlayWindow').css({'marginTop':parseInt($(document).scrollTop() - ($('#overlayWindow').outerHeight() / 2)) + 'px' });
			$('#overlayWindow').css({'marginTop':parseInt($(document).scrollTop()) + 'px' });
		} else {
			$('#overlayWindow').css({'position':'fixed'});
		}
	},
	showOverlayWindow: function(header, content, browserId) {
		if (dB.overlay.active == false) {
			$('body').append('<div id="overlay"></div><div id="overlayWindow"></div>');
			var buffer = '<div class="overlayHeader">' + header;
			buffer += '<a id="cancelOverlayWindow" class="cancelButton">Cancel</a>';
			buffer += '<a id="submitOverlayWindow" class="submitButton">Submit</a>';
			buffer += '</div>' + content;
			$('#overlayWindow').append(buffer);
			if ($.browser.msie && $.browser.version < 7) {
				// IE6 issues...
				$('#overlay').css({'position':'absolute', 'height': $(document).height() + 'px', 'width': $(document).width() + 'px'});
			}
			$('#submitOverlayWindow').click(dB.overlay.submitOverlayWindow);
			$('#cancelOverlayWindow').click(dB.overlay.removeOverlayWindow);
			if (dB.overlay.submitRefreshCallback) dB.overlay.submitRefreshCallback();
			if (typeof(browserId) != 'undefined') {
				dB.overlay.browserId = browserId;
				$('#submitOverlayWindow').unbind().replaceWith('<img src="ajaxloading.gif" class="ajaxloading">');
				$.post(dB.indexURL, {'id': dB.overlay.browserId, 'action': 'getBrowserXML', 'value': '100'}, dB.overlay.refreshOverlayWindow);
			}
			$('#overlayWindow').show();
			dB.overlay.active = true;
		}
	},
	removeOverlayWindow: function() {
		$("#overlayWindow").fadeOut("500",function() {
			if (dB.overlay.removeCallback) dB.overlay.removeCallback();
			$('#overlayWindow div.browser a').unbind();
			$('#submitOverlayWindow, #cancelOverlayWindow').unbind();
			$('#overlayWindow,#overlay').remove();
			dB.overlay.deactivate();
		});
	},
	refreshOverlayWindow: function(xml) {
		if ($('browser', xml).length) {
			dB.overlay.browserId = $('browser', xml).get(0).getAttribute('id');
			var jq = $('#overlayWindow div.browser');
			jq.find('a').unbind().end().hide().empty();

			// target
			jq.append('<div id="browserTarget" class="overlayContent"></div>');
			var match = dB.overlay.browserId.match(/^i(\d+)/);
			if (match && match[1]) {
				$('browser target image', xml).each(function() {
					var caption = this.getAttribute('caption');
					var width = 300;
					var jqImage = $(this);
					jq.find('#browserTarget').append('<div class="targetTile">' + dB.page.getTile('', width, jqImage) + '</div>');
					jq.find('#browserTarget').append('<div class="targetInfo"><div class="targetText"></div></div>');
//					jq.find('#browserTarget').append('<div class="targetInfo"><div class="targetName">' + name + '</div><div class="targetText"></div></div>');
					jq.find('#browserTarget').append('<div class="clearboth"></div>');
				});

			} else {
				$('browser target page', xml).each(function() {
					var name = this.getAttribute('name');
					var width = 300;
					var jqImage = $(this).find('image:first');
					jq.find('#browserTarget').append('<div class="targetTile">' + dB.page.getTile('', width, jqImage) + '</div>');
					jq.find('#browserTarget').append('<div class="targetInfo"><div class="targetName">' + name + '</div><div class="targetText"></div></div>');
					jq.find('#browserTarget').append('<div class="clearboth"></div>');
				});
			}
			$('browser target text', xml).each(function() {
				$('#browserTarget div.targetText').append($(this).text());
			});

			// path
			jq.append('<div id="browserPathHeader" class="overlayHeader">Path</div>');
			jq.append('<div id="browserPath" class="overlayContent"><ul class="path"></ul><div class="clear"></div></div>');
			$('browser path page', xml).each(function() {
				jq.find('ul.path').append('<li><a id="browserLink_' + this.getAttribute('id') + '" class="browserLink">' + this.getAttribute('name') + '</a></li>');
			});
			jq.find('ul.path li a').click(dB.overlay.retargetOverlayWindow);

			// contents
			if ($('browser contents', xml).children().length > 0) {
				jq.append('<div id="browserContentsHeader" class="overlayHeader">Contents</div>');
				jq.append('<div id="browserContents" class="overlayContent"><ul class="contents overlayTileList"></ul><div class="clear"></div></div>');
				$('browser contents', xml).children().each(function(tileNum) {
					var id = 'browserLink_' + this.getAttribute('id');
					var name = this.getAttribute('name');
					var width = 100;
					var jqImage = $(this).find('image:first');
					jq.find('ul.contents').append('<li>' + dB.page.getTileLink(id, name, width, jqImage) + '</li>');
					if (((tileNum + 1) % 7) == 1) {
						jq.find('ul.contents li:last').css('clear','left');
					}
				});
				jq.find('ul.contents li a').click(dB.overlay.retargetOverlayWindow);
			}

			// images
			dB.overlay.browserImageCache = {};
			if ($('browser images', xml).children().length > 0) {
				jq.append('<div id="browserImagesHeader" class="overlayHeader">Images</div>');
				jq.append('<div id="browserImages" class="overlayContent"><ul class="images overlayTileList"></ul><div class="clear"></div></div>');
				$('browser images', xml).children().each(function(tileNum) {
					var id = 'browserLink_' + this.getAttribute('id');
					var caption = this.getAttribute('caption');
					var width = 100;
					var jqImage = $(this);
					var tile = dB.overlay.imageClickCallback ? dB.page.getTileLink(id, caption, width, jqImage) : dB.page.getTile(caption, width, jqImage);
					jq.find('ul.images').append('<li>' + tile + '</li>');
					if (((tileNum + 1) % 7) == 1) {
						jq.find('ul.images li:last').css('clear','left');
					}
					dB.overlay.browserImageCache[this.getAttribute('id')] = $(this);
				});
				if (dB.overlay.imageClickCallback) jq.find('ul.images li a').click(dB.overlay.imageClickCallback);
			}

			// get rid of loading animation, hook up submit button, run callback, show browser content
			$('#overlayWindow img.ajaxloading').replaceWith('<a id="submitOverlayWindow" class="submitButton">Submit</a>');
			$('#submitOverlayWindow').click(dB.overlay.submitOverlayWindow);
			if (dB.overlay.submitRefreshCallback) dB.overlay.submitRefreshCallback();
			if (dB.overlay.browserRefreshCallback) dB.overlay.browserRefreshCallback(xml);
			jq.fadeIn(600);
		}
	},
	retargetOverlayWindow: function() {
		var match = this.id.match(/^browserLink_(i?\d+)/);
		if (match && match[1]) {
			$('div.overlayError').remove();
			$('#submitOverlayWindow').unbind().replaceWith('<img src="ajaxloading.gif" class="ajaxloading">');
			$.post(dB.indexURL, {'id': match[1], 'action': 'getBrowserXML', 'value': '100'}, dB.overlay.refreshOverlayWindow);
		}
	},
	submitOverlayWindow: function() {
		if (dB.overlay.submitCallback && !dB.overlay.submitted) {
			$('div.overlayError').remove();
			var submitCallbackResponse = dB.overlay.submitCallback();
			if (submitCallbackResponse && (typeof(submitCallbackResponse) == 'object') && (submitCallbackResponse.constructor == Object) && (submitCallbackResponse.id != undefined) && (submitCallbackResponse.action != undefined)) {
				$('#submitOverlayWindow').unbind().replaceWith('<img src="ajaxloading.gif" class="ajaxloading">');
				$.post(dB.indexURL, submitCallbackResponse, dB.overlay.processOverlayWindow);
				dB.overlay.submitted = true;
			}
		}
	},
	processOverlayWindow: function(xml) {
		dB.overlay.submitted = false;
		$('#overlayWindow img.ajaxloading').remove();
		if ($('success', xml).length) {
			if ($('success message', xml).length) {
				$('#overlayWindow div.overlayHeader:first').after('<div class="overlaySuccess">' + $('success message', xml).text() + '</div>');
			} else {
				$('#overlayWindow div.overlayHeader:first').after('<div class="overlaySuccess">' + $('success', xml).text() + '</div>');
			}
			if (dB.overlay.successCallback) dB.overlay.successCallback(xml);
			setTimeout('dB.overlay.removeOverlayWindow()',1500);
		} else if ($('error', xml).length) {
			$('#overlayWindow div.overlayHeader:first').after('<div class="overlayError">' + $('error', xml).text() + '</div>');
			$('#cancelOverlayWindow').after('<a id="submitOverlayWindow" class="submitButton">Submit</a>');
			$('#submitOverlayWindow').click(dB.overlay.submitOverlayWindow);
			if (dB.overlay.submitRefreshCallback) dB.overlay.submitRefreshCallback();
		}
	}

};

$(dB.overlay.init);

