/*
	Multifaceted Lightbox
	by Greg Neustaetter - http://www.gregphoto.net

	INSPIRED BY (AND CODE TAKEN FROM)
	==================================
	The Lightbox Effect without Lightbox
	PJ Hyett
	http://pjhyett.com/articles/2006/02/09/the-lightbox-effect-without-lightbox


	Lightbox JS: Fullsize Image Overlays
	by Lokesh Dhakar - http://www.huddletogether.com

	For more information on this script, visit:
	http://huddletogether.com/projects/lightbox/

	Licensend under:
	Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
	(basically, do anything you want, just leave my name and link)

*/

var Lightbox = {
	lightboxType : null,
	lightboxCurrentContentID : null,
	lightboxInnerHTMLElement : null,
	lightboxInnerHTMLElementId : null,
	lightboxInnerHTMLElementParentNode : null,
	lightboxHiddenIframe:null,
	boxIframe:null,
	boxIframeId: 'lightbox_iframe_id',
	showBoxString : function(content, boxWidth, boxHeight){
		this.setLightboxDimensions(boxWidth, boxHeight);
		this.lightboxType = 'string';
		var contents = $('boxContents');
		contents.innerHTML = content;
		this.showBox();
		return false;
	},


	showBoxImage : function(href) {
		this.lightboxType = 'image';
		var contents = $('boxContents');
		var objImage = document.createElement("img");
		objImage.setAttribute('id','lightboxImage');
		contents.appendChild(objImage);
		imgPreload = new Image();
		imgPreload.onload=function(){
			objImage.src = href;
			Lightbox.showBox();
		}
		imgPreload.src = href;
		return false;
	},
	hideAllScroll: function()
	{
	},
	restoreAllScroll: function()
	{
	},
	hideAllObject:function()
	{
	   if(Prototype.Browser.IE) return;
	   
	   var allObjs = document.getElementsByTagName('embed');
	   
	   for(var i=0,size=allObjs.length;i<size;i++)
	   {
	      //allObjs[i].setAttribute('wmode','transparent');
	      allObjs[i].parentNode.style.display = 'none';
	   }
	},
	showAllObject:function()
	{
	   if(Prototype.Browser.IE) return;
	   
	   var allObjs = document.getElementsByTagName('embed');
	   
	   for(var i=0,size=allObjs.length;i<size;i++)
	   {
	      //allObjs[i].setAttribute('wmode','window');
	      allObjs[i].parentNode.style.display = 'block';
	   }
	},
	showBoxByID : function(id, boxWidth, boxHeight) {
	   /*
	   document.body.oldXOverflow = document.body.style.overflowX;
	   document.body.oldYOverflow = document.body.style.overflowY;
	   */
	   window.scrollTo(0, 0);
		this.lightboxType = 'id';
		this.lightboxCurrentContentID = id;
		this.setLightboxDimensions(boxWidth, boxHeight);
		var element = $(id);
		var contents = $('boxContents');
		contents.appendChild(element);
		
		$('overlay').style.zIndex = (typeof(dhtmlwindow)=='undefined') ? 1 : dhtmlwindow.zIndexvalue+1;
	   $(id).style.position = "absolute";		
				
		Element.show(id);
		this.showBox();		
		$(id).style.display = "block";
		contents.setAttribute('align','');
		this.center('box');
		
		$('box').style.left = (parseInt($('box').style.left,10) - ($(id).offsetWidth/2))+'px';
		//$('box').style.top  = (parseInt($('box').style.top,10) - ($(id).offsetHeight/2))+'px';
		//anything better than this?
		$('box').style.top  = 20+'px';
		$('box').style.width = $(id).offsetWidth + 'px';
		$('box').style.height = $(id).offsetHeight + 'px';
		$('box').style.zIndex = 100000025;
		
		if(!Lightbox.lightboxHiddenIframe)
		{
		   //create iframe and assign all initial properties
		   var iframe = document.createElement('IFRAME');
		   iframe.id = Lightbox.boxIframeId;
	      iframe.className = 'blank_iframe';
	      iframe.style.position = 'absolute';
	      iframe.style.width  = $('overlay').offsetWidth+'px';
         iframe.style.height = $('overlay').offsetHeight+'px';
         iframe.style.left = '0px';
         iframe.style.top = '0px';
	      document.body.appendChild(iframe);
	      Element.setStyle(iframe,{opacity:0});
	      Element.setStyle($('overlay'),{opacity:0.8});
	      iframe.style.zIndex = (typeof(dhtmlwindow)=='undefined') ? 100000024 : dhtmlwindow.zIndexvalue+2;
         Lightbox.lightboxHiddenIframe = iframe;
         //iframe.style.display = 'none';
		}
		
		//display
		Lightbox.lightboxHiddenIframe.style.display = 'block';
		
		Lightbox.hideAllObject();
		
		if(Prototype.Browser.Gecko) $(id).style.position = 'fixed';
		
		return false;
	},

	showBoxByAJAX : function(href, boxWidth, boxHeight) {
		this.lightboxType = 'ajax';
		this.setLightboxDimensions(boxWidth, boxHeight);
		var contents = $('boxContents');
		var myAjax = new Ajax.Updater(contents, href, {method: 'get'});
		this.showBox();
		return false;
	},
	//new func added by tareq
	showInnerHTML : function(sourceId,left,top){	  
     window.scrollTo(0, 0);
	  this.lightboxInnerHTMLElementId = sourceId;
	  Element.show('overlay');
	  this.center(sourceId);
     
     $(sourceId).style.left = (parseInt($(sourceId).offsetWidth/2),10)+'px';
		//anything better than this?
		$(sourceId).style.top  = 20+'px';
		
	  $('overlay').style.zIndex = (typeof(dhtmlwindow)=='undefined') ? 1 : dhtmlwindow.zIndexvalue+1;
     
		
	 if(!Lightbox.lightboxHiddenIframe)
		{
	     var iframe = document.createElement('IFRAME');
	     iframe.className = 'blank_iframe';
	     this.lightboxHiddenIframe = iframe;	     
	     document.body.appendChild(this.lightboxHiddenIframe);
	  }
	  
	  this.lightboxHiddenIframe.style.position = 'absolute';
	  this.lightboxHiddenIframe.style.width  = $('overlay').offsetWidth+'px';
     this.lightboxHiddenIframe.style.height = $('overlay').offsetHeight+'px';	  
	  Element.setStyle(this.lightboxHiddenIframe,{opacity:0,left:0,top:0,display:'block'});
	  Element.setStyle($('overlay'),{opacity:0.8});
	  this.lightboxHiddenIframe.style.zIndex = (typeof(dhtmlwindow)=='undefined') ? 100000024 : dhtmlwindow.zIndexvalue+2;
     
        
	  $(sourceId).style.zIndex  = (typeof(dhtmlwindow)=='undefined') ? 3 : dhtmlwindow.zIndexvalue+3;
	  $(sourceId).style.position = "absolute";
	  $(sourceId).style.display = "block";

	  if(arguments[1] && arguments[2]){
	     $(sourceId).style.left = arguments[1]+'px';
	     $(sourceId).style.top  = arguments[2]+'px';
	  }
	  
	  Lightbox.hideAllObject();
     
     if(Prototype.Browser.Gecko) $(sourceId).style.position = 'fixed';
     
	  return false;
   },
   //new func added by tareq
   hideInnerHTML:function(){
     Element.hide(this.lightboxInnerHTMLElementId);
     Element.hide('overlay');

     if(this.lightboxHiddenIframe){
        //this.lightboxHiddenIframe.parentNode.removeChild(this.lightboxHiddenIframe);
        //this.lightboxHiddenIframe = null;
        this.lightboxHiddenIframe.style.display = 'none';
     }
     
     //Element.hide(this.lightboxInnerHTMLElementId);
	  this.lightboxInnerHTMLElementId = null;
	  
	  Lightbox.showAllObject();
   },

	setLightboxDimensions : function(width, height) {
		var windowSize = this.getPageDimensions();
		if(width) {
			if(width < windowSize[0]) {
				$('box').style.width = width + 'px';
			} else {
				$('box').style.width = (windowSize[0] - 50) + 'px';
			}
		}
		if(height) {
			if(height < windowSize[1]) {
				$('box').style.height = height + 'px';
			} else {
				$('box').style.height = (windowSize[1] - 50) + 'px';
			}
		}
	},


	showBox : function() {
      $('overlay').style.zIndex  = (typeof(dhtmlwindow)=='undefined') ? 1 : dhtmlwindow.zIndexvalue+1;
		this.center('box');
		$('box').style.zIndex      = (typeof(dhtmlwindow)=='undefined') ? 3 : dhtmlwindow.zIndexvalue+3;
		//document.body.style.overflow = 'hidden';
		Element.show('overlay');
		
		if(!this.lightboxHiddenIframe){
	     var iframe = document.createElement('IFRAME');
	     iframe.className = 'blank_iframe';	     
	     this.lightboxHiddenIframe = iframe;
	   }
	   
	   this.lightboxHiddenIframe.style.position = 'absolute';
	   this.lightboxHiddenIframe.style.width  = $('overlay').offsetWidth+'px';
      this.lightboxHiddenIframe.style.height = $('overlay').offsetHeight+'px';
      this.lightboxHiddenIframe.style.overflow = 'hidden';
      
	   document.body.appendChild(this.lightboxHiddenIframe);
	   Element.setStyle(this.lightboxHiddenIframe,{opacity:0.5,left:0,top:0,display:'block'});
	   Element.setStyle($('overlay'),{opacity:0.8});
	   this.lightboxHiddenIframe.style.zIndex = (typeof(dhtmlwindow)=='undefined') ? 100000024 : dhtmlwindow.zIndexvalue+2;      
      
		return false;
	},


	hideBox : function(){
		var contents = $('boxContents');
		if(this.lightboxType == 'id') {
			var body = document.getElementsByTagName("body").item(0);
			Element.hide(this.lightboxCurrentContentID);
			body.appendChild($(this.lightboxCurrentContentID));
		}
		contents.innerHTML = '';
		$('box').style.width = null;
		$('box').style.height = null;
		Element.hide('box');
		Element.hide('overlay');
		
		/*
		if(document.body.oldXOverflow)
	      document.body.style.overflowX = document.body.oldXOverflow;
	   if(document.body.oldYOverflow)   
	      document.body.style.overflowY = document.body.oldYOverflow;
	   */
		
		if(Lightbox.lightboxHiddenIframe) Lightbox.lightboxHiddenIframe.style.display = 'none';
			  
	   Lightbox.showAllObject();
      return false;
	},

	// taken from lightbox js, modified argument return order
	getPageDimensions : function(){
		var xScroll, yScroll;

		if (window.innerHeight && window.scrollMaxY) {
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}

		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}

		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else {
			pageHeight = yScroll;
		}

		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){
			pageWidth = windowWidth;
		} else {
			pageWidth = xScroll;
		}
		arrayPageSize = new Array(windowWidth,windowHeight,pageWidth,pageHeight)
		return arrayPageSize;
	},

	center : function(element){
		try{
			element = document.getElementById(element);
		}catch(e){
			return;
		}
		var windowSize = this.getPageDimensions();
		var window_width  = windowSize[0];
		var window_height = windowSize[1];

		$('overlay').style.height = windowSize[3] + 'px';

		element.style.position = 'absolute';
		//element.style.zIndex   = 99;

		var scrollY = 0;

		if ( document.documentElement && document.documentElement.scrollTop ){
			scrollY = document.documentElement.scrollTop;
		}else if ( document.body && document.body.scrollTop ){
			scrollY = document.body.scrollTop;
		}else if ( window.pageYOffset ){
			scrollY = window.pageYOffset;
		}else if ( window.scrollY ){
			scrollY = window.scrollY;
		}

		var elementDimensions = Element.getDimensions(element);
		var setX = ( window_width  - elementDimensions.width  ) / 2;
		if(Prototype.Browser.Gecko) var setY = ( window_height - elementDimensions.height ) / 2;
      else var setY = ( window_height - elementDimensions.height ) / 2 + scrollY;
         
		setX = ( setX < 0 ) ? 0 : setX;
		setY = ( setY < 0 ) ? 0 : setY;

		element.style.left = setX + "px";
		element.style.top  = setY + "px";
		Element.show(element);
	},

	init : function(arg) {
		var lightboxtext = '<div id="overlay" style="display:none"></div>';
		lightboxtext += '<div id="box" style="display:none">';
		//lightboxtext += '<img id="close" src="close.gif" onClick="Lightbox.hideBox()" alt="Close" title="Close this window" />';
		if(typeof(arg)!='undefined')
		lightboxtext += arg;

		//lightboxtext += '<a class="closeLink" href="JavaScript:void(0);" onClick="Lightbox.hideBox();">CLOSE</a>';
		lightboxtext += '<div id="boxContents" align="center"></div>';
		lightboxtext += '</div>';
		var body = document.getElementsByTagName("body").item(0);
		new Insertion.Bottom(body, lightboxtext);
	}
}