var $pp_pic_holder;
(function($) {
	$.fn.myModal = function(settings) {	
		// Global elements
		var $caller;
		var $scrollPos = _getScroll();
	
		$(window).scroll(function(){ $scrollPos = _getScroll(); _centerModal(); });
		$(window).resize(function(){ _centerModal(); });
		$(document).keypress(function(e){
			switch(e.keyCode){
				case 27:
					close();
					break;
			};
    });
	
		settings = jQuery.extend({
			opacity: 0.40,
			width: 550,
			height: 380
		}, settings);
	
		$(this).each(function(){			
			$(this).bind('click',function(){
				open(this);
				return false;
			});
		});
	
		function open(el) {
			$caller = $(el);

			// Build the background overlay div
			toInject = "<div class='pp_overlay'></div>";
			// Basic HTML for the picture holder
      toInject+= '<div class="pp_pic_holder"><a class="pp_close" href="#">Close</a><table cellpadding="0" cellspacing="0"><tr class="pp_top"><td class="pp_left"></td><td class="pp_middle"></td><td class="pp_right"></td></tr><tr class="pp_center"><td class="pp_left"></td><td id="pp_full_res"><div class="pp_loaderIcon"></div></td><td class="pp_right"></td></tr><tr class="pp_bottom"><td class="pp_left"></td><td class="pp_middle"></td><td class="pp_right"></td></tr></table></div>'
			$('body').append(toInject);
			
			// Set my global selectors
			$pp_pic_holder = $('.pp_pic_holder');
      
      $pp_pic_holder.css({'opacity': 0});
			
			$('div.pp_overlay').bind('click',function(){
				close();
			});

			$('a.pp_close').bind('click',function(){ 
        close(); 
        return false; 
      });

			// To fix the bug with IE select boxes
			if($.browser.msie && $.browser.version == 6){
				$('select').css('visibility','hidden');
			};

			// Then fade it in
			$('div.pp_overlay').css('opacity', 0).fadeTo(0, settings.opacity, function(){				
        $pp_pic_holder.attr('style','left:'+$pp_pic_holder.css('left')+';top:'+$pp_pic_holder.css('top')+';');
        _preload();
			});

			// Position the picture in the center of the viewing area
			_centerModal();
		};
	
		function close(){
			$pp_pic_holder.find('object, embed').css('visibility', 'hidden');
      $('div.pp_overlay, div.pp_pic_holder').remove();
    
      // To fix the bug with IE select boxes
      if($.browser.msie && $.browser.version == 6){
        $('select').css('visibility','visible');
      };
		};
	
		function _centerModal(){
			if ($pp_pic_holder){ if($pp_pic_holder.size() == 0){ return; }}else{ return; }; //Make sure the gallery is open

			if($.browser.opera) {
				windowHeight = window.innerHeight;
				windowWidth = window.innerWidth;
			}else{
				windowHeight = $(window).height();
				windowWidth = $(window).width();
			};
		
      $pHeight = $pp_pic_holder.height();
      $pWidth = $pp_pic_holder.width();
      
      projectedTop = (windowHeight/2)+$scrollPos['scrollTop']-($pHeight/2);
      if(projectedTop < 0) projectedTop = 0;
      
      $pp_pic_holder.css({
        'top': projectedTop,
        'left': (windowWidth/2)+$scrollPos['scrollLeft']-($pWidth/2)
      });
		};
	
		function _preload(){
      // Get the dimensions
      movie_height = parseFloat(settings.height);
      movie_width = parseFloat(settings.width);

      pp_typeMarkup = '<iframe src ="'+$caller.attr('href')+'" width="'+(movie_width-40)+'" height="'+(movie_height-40)+'" frameborder="no" scolling="no"></iframe>';
      
      // Append HTML
      $pp_pic_holder.find('#pp_full_res')[0].innerHTML = pp_typeMarkup;
      
      if($.browser.opera) {
				windowHeight = window.innerHeight;
				windowWidth = window.innerWidth;
			}else{
				windowHeight = $(window).height();
				windowWidth = $(window).width();
			};

			$pp_pic_holder.find('.pp_content').css({'height':movie_height});

			projectedTop = $scrollPos['scrollTop']+((windowHeight/2)-((movie_height+($pp_pic_holder.find('.pp_top').height()+$pp_pic_holder.find('.pp_bottom').height()))/2));
			if(projectedTop < 0) projectedTop = 0;

			// Resize the holder
			$pp_pic_holder.css({
				'top': projectedTop,
				'left': ((windowWidth/2)-(movie_width/2)),
				'width': movie_width
			});
      
      $pp_pic_holder.width(movie_width);

      // Fade the new image
      $pp_pic_holder.find('#pp_full_res').show(0, function(){
        $(this).find('object,embed').css('visibility','visible');
      });
		};
	
		function _getScroll(){
			if (self.pageYOffset) {
				scrollTop = self.pageYOffset;
				scrollLeft = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
				scrollTop = document.documentElement.scrollTop;
				scrollLeft = document.documentElement.scrollLeft;
			} else if (document.body) {// all other Explorers
				scrollTop = document.body.scrollTop;
				scrollLeft = document.body.scrollLeft;	
			}
			
			return {scrollTop:scrollTop,scrollLeft:scrollLeft};
		};
    
    
	};})(jQuery);
