if (typeof AFW_addEvent === "undefined") {
    console.warn("afw_overlay_helper.js dependency failure: AFW_addEvent(jslib.js)");
} else {
	AFW_addEvent(window, "load", function() {
		var deps = [];
		/*
		 * Check dependencies
		 */
		if (typeof afw === 'undefined') {
			deps.push('afw');
		}
		if (typeof afw !== 'undefined' && typeof afw.module.ajax === 'undefined') {
			deps.push('afw.module.ajax');
		}
		if (typeof afw !== 'undefined' && typeof afw.module.overlay === 'undefined') {
			deps.push('afw.module.overlay');
		}
		if (deps.length > 0) {
			if (typeof console !== 'undefined') {
				console.warn("afw_overlay_helper.js dependency failure: "+deps.toString());
			}
		} else {
			/*
			 * Helper methods to pop an afw overlay
			 */
			afw.overlayhelper = {
				/*
				 * @param string URI
				 * @param mixed The element or element id over which we will
				 *        place overlay. Defaults to document.body
				 */
				open: function(uri, placeoverel, modal_bg_opacity) {
					if (typeof placeoverel !== 'object') {
						placeoverel = (e = afw.common.functions.getElement(placeoverel)) ? e : document.body
					}
					if (typeof modal_bg_opacity === 'boolean') {
					   modal_bg_opacity = 0;
					} else if (typeof modal_bg_opacity === 'undefined') {
					   modal_bg_opacity = 20;
					}
					var self = this;
					placeoverel.style.cursor = "wait";
					afw.module.ajax.request(uri, function(result) {
						var overlay = afw.module.overlay.open({
							lock: true,
							lock_opacity: modal_bg_opacity
						});
						var content = document.createElement('div');
						content.innerHTML = result;
						content.className = 'content';
						overlay.appendChild(content);
						self.autofit(overlay, content, placeoverel);
						placeoverel.style.cursor = "default";
					}, null);
				},
				/*
				 * @param object AFW overlay
				 * @param object The element holding the overlay content
				 * @param object The element over which we will
				 *        place overlay
				 */
				autofit: function(overlay, content, placeoverel) {
					var percent_widths = {
						550: 0.95,
						650: 0.875,
						active: 0.8
					};
					var viewport_dimensions = afw.common.functions.getViewportDimensions();
					var placeoverel_dimensions = afw.common.functions.getDimensions(placeoverel);
					var overlay_dimensions = afw.common.functions.getDimensions(overlay);
					var viewport_margin_top = afw.common.functions.getScrollTop()
					var placeoverel_positions = afw.common.functions.getElementPositions(placeoverel);
					for(var x in percent_widths) {
						if(x == 'active' || placeoverel_dimensions.width < x) {
							percent_widths.active = percent_widths[x];
							break;
						}
					}
					var overlay_width = Math.round(placeoverel_dimensions.width * percent_widths.active); // % of share total width
					var overlay_height = Math.round(viewport_dimensions.height * 0.6); // 60% of viewport height
					var overlay_margin_left = placeoverel_positions.left + Math.round((placeoverel_dimensions.width - overlay_width) / 2);
					var overlay_margin_top = viewport_margin_top + 50;
					overlay.style.width = overlay_width+'px';
					if (overlay_dimensions.height > overlay_height) {
						overlay.style.height = overlay_height+'px';
						content.style.height = overlay_height+'px';
					}
					content.style.overflow = 'auto';
					overlay.style.left = overlay_margin_left+'px';
					overlay.style.top = overlay_margin_top+'px';
				}
			};
		}
	});
}

