(function(jQuery) {
	jQuery.fn.openOverlay = function(options) {
		debug(this);
		if (options === 'close'){
			jQuery.fn.openOverlay.closeOverlay();
			return
		}
 
		// build main options before element iteration
		var opts = jQuery.extend({}, jQuery.fn.openOverlay.defaults, options);
		if (!jQuery('#overlayLayer').length){
			
			
			var w = jQuery(window);
			var h = w.height();
			var w = w.width();
			var docbody = jQuery('body');
			
			
			if (!h) h=10000;
			docbody.append(
				'<div id="overlayLayer" style="'+
				'text-align:center; z-index:1000; position:absolute; top:0px; bottom:0px; left:0px; right:0px;'+
				'opacity: 0.'+opts.iOpacity+';'+
				'-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity='+opts.iOpacity+');'+ 
				'filter: alpha(opacity='+opts.iOpacity+');'+
				'background:'+opts.sColor+';'+
				'height:'+h+'px"></div>'); 
			
			fillrUp();
			jQuery(window)
				.scroll(fillrUp)
				.resize(fillrUp);
			
			//docbody.append('<div id="overlayContentContainer" style="float:left;  position:absolute; top:0; left:0;"></div>');
		 	
		}
		var occ = jQuery('#overlayContentContainer');
		// append each matched element to the overlayContentContainer
		var iLength = this.length;
		return this.each(function(i) {
			occ.append(this);
			if (i===iLength-1) positionOverlayContent();
 
		});
	};
 
	// private functions
 
	function positionOverlayContent(){
		var o = jQuery('#overlayContentContainer');
		var h = jQuery(window).height();
		var w = jQuery(window).width();
		//alert(h);
		if(!h) h=300;
		o.css({
			marginTop: h/2 - o.outerHeight()/2 + jQuery(window).scrollTop() + 'px',
			marginLeft: w/2  - o.outerWidth()/2 + jQuery(window).scrollLeft()+'px',
			left:'0',
			position:'absolute',
			zIndex:'1001'
		});
	}
	function fillrUp(){
		var h = jQuery(window).height();
		var w = jQuery(window).width();
		if (h){
			jQuery('#overlayLayer').height(h + jQuery(window).scrollTop());
			jQuery('#overlayLayer').width(w+jQuery(window).scrollLeft());
		}else{
			window.jQuery('#overlayLayer').css({
				top:jQuery(window).scrollTop()+'px',
				left:jQuery(window).scrollLeft()+'px'
			});
		}
		positionOverlayContent();
	}
 
	function debug(jQueryobj) {
		if (window.console && window.console.log)
			window.console.log('openoverlay selection count: ' + jQueryobj.size());
	};
	// define and expose public  functions
 
	jQuery.fn.openOverlay.closeOverlay = function(){
		jQuery(window)
			.unbind('scroll',fillrUp)
			.unbind('resize',fillrUp);
			jQuery('#overlayLayer,#overlayContentContainer').remove();
	};
 
	// plugin defaults
	jQuery.fn.openOverlay.defaults = {
			iOpacity:60,
			sColor:'#444444'
	};
	//end of closure
})(jQuery);

