var PythonImageOpener = {
	"a.image-popup" : function(element) {
		PythonEvent.observe(element, "click", ImagePopup.popupImage);
		element = null;
	},
	"a.image-popup-link" : function(element) {
		PythonEvent.observe(element, "click", ImagePopup.popupImageLink);
		element = null;
	}
};

var ImagePopup = {
	"popupImageLink" : function(event) {
	  var link = PythonEvent.element(event);
	  
	  if (link.href){
		  ImagePopup.openImage(event, link.href);
		 }
  },
	
	"popupImage" : function(event) {
    var image = PythonEvent.element(event);
    var link = image.parentNode;
    if (link.href){
		  ImagePopup.openImage(event, link.href);
		}
	},
	
	"openImage" : function(event, link) {
    var popupImage = new Image();
    
		PythonEvent.observe(popupImage, "load", function() {
		    var popup = PythonElement.get("image-popup");
		    
		    var theImage = null;
		    if (popup == null) {
		    	popup = document.createElement("div");
		    	popup.setAttribute("id", "image-popup");
		    	popup.innerHTML = "<div id='image-popup-title'>Click image to close</div><img id='image-popup-image' src='" + popupImage.src + "'/>";
			    document.body.appendChild(popup);
					theImage = PythonElement.get("image-popup-image");
			    PythonEvent.observe(popup, "click", ImagePopup.closeImage);
		    }
		    else {
					theImage = PythonElement.get("image-popup-image");
					theImage.src = popupImage.src;
				}
		    		    
		    var height = PythonWindow.viewportHeight();
		    var scrollY = PythonWindow.scrollPosition()[1];
		    var offset = ((height - popupImage.height)/2) < 10 ? 10 : ((height - popupImage.height)/2);
		    
		    popup.style.left = ((document.body.scrollWidth - popupImage.width - 2) / 2) + "px";
		    popup.style.top = (scrollY + offset) + "px";
				popup.style.display = "block";
				ImagePopup.addIEIFrame(popup);
		});

		popupImage.src = link;
    
		PythonEvent.stop(event);
	},
	
	"closeImage" : function (event) {
		var popup = PythonElement.get("image-popup");
		popup.style.display = "none";
		ImagePopup.removeIEIFrame();
	},
	
	/**
	 * Support for covering selects with iframes for IE < 7
	 */
	"addIEIFrame" : function(popup) {
		if (document.all && document.getElementById && !window.Opera){
			// Add a shim to hide select items for drop down menus.
			if (navigator.appVersion.substr(22,3) != "5.0"){
				var popupIFrame = PythonElement.get("image-popup-iframe");
				
				if (popupIFrame == null){
					popupIFrame = document.createElement('iframe');
					popupIFrame.setAttribute("id", "image-popup-iframe");
					popupIFrame.scrolling = "no";
					// a dummy file, so we don't https warning messages
					popupIFrame.src = "blank.htm";
					popupIFrame.frameBorder = "0";
				}

				popupIFrame.style.width = popup.clientWidth + 2;
				popupIFrame.style.height = popup.clientHeight + 2;				
				popupIFrame.style.top = popup.style.top;
				popupIFrame.style.left = popup.style.left;
				popupIFrame.style.zIndex=10;
				popup.parentNode.insertBefore(popupIFrame,popup);
				
				popup.style.zIndex=100;
			}
		}
	},
	
	"removeIEIFrame" : function() {
		var popupIFrame = PythonElement.get("image-popup-iframe");
		if (popupIFrame != null){
			popupIFrame.parentNode.removeChild(popupIFrame);
		}
	}
};

Behaviour.register(PythonImageOpener);

