(function($) {
	/**
	 * $ is an alias to jQuery object
	 *
	 */
	$.fn.overlay = function(callersettings) {

		var settings = $.extend({
			// Configuration related to overlay
			opacity_color: 		'#000000',
			opacity:			0.5,		// 
			content:     'loading',
			contenturl:  '',
			boxwidth: 600,
			boxheight: 300,
			boxtop: 250,
			boxbackgroundcolor:  '#FFFFFF',
			boxopacity: 2.0,
			closeimage: 'http://www.rocks-n-rivers.nl/new/site/images/close.gif',
			loadingimage: 'http://www.rocks-n-rivers.nl/new/site/cms/cms_images/ajax-loader.gif',
			center:true,
			onloadhandler: function(){},
			onclosehandler: function(){}
		},callersettings || {});
			
		
		var wrapped_set = this;
		var ie6 = $.browser.msie && $.browser.version.substr(0,1) < 7;
		
		//timer to resize box when content was changed (lack of observer for changes in DOM in jquery)
		var resize_interval = 0;

	  function init() {
	  	var height = wrapped_set.outerHeight();
			var width = wrapped_set.outerWidth();
			
			
			//build html
			var closeimg = $("<img>").attr("src",settings.closeimage).attr("id","closeimg");
			var loadingimg = $("<img>").attr("src",settings.loadingimage);
		  wrapped_set.append('<div id=\'overlay\'></div>');
		  position();
			$("#overlay").css({'display':'none','background-color' : settings.opacity_color, 'opacity' : settings.opacity});
			
			if(settings.center)
				wrapped_set.append('<div id="box" align=\"center\"><div id="closeimg1" align="right"></div><div id="boxcontent"><p>'+ settings.content +'</p></div></div>');
		 else
				wrapped_set.append('<div id="box"><div id="closeimg1" align="right"></div><div id="boxcontent"><p>'+ settings.content +'</p></div></div>');
			$("#box").css({'opacity' : settings.boxopacity,'left' : Math.floor((width - settings.boxwidth) / 2),'top':settings.boxtop + $(window).scrollTop(), 'height' : settings.boxheight,'width' : settings.boxwidth});
			$("#closeimg1").append(closeimg);

			
			
			//attach event handlers
			$('#closeimg').bind('click',function() {hide();}).hover(function() {
					$(this).css('cursor','pointer');
					}, function() {

					$(this).css('cursor','auto');
			});

			
			load();
	  }
	  
	  function show() {
	  	if (ie6)
	  		$(wrapped_set).find('embed, select, object').css({ 'visibility' : 'hidden' });

			$("#overlay").css("display", 'block');
			
			
			/*$(window).scroll(function() {
					position();
			});
			*/
			
			$(document).keydown(function(objEvent) {
				
				keycode = objEvent.keyCode;
				if(!(escapeKey = objEvent.DOM_VK_ESCAPE))
						escapeKey = 27;

				// Get the key in lower case form
				//key = String.fromCharCode(keycode).toLowerCase();
				// Verify the keys to close the ligthBox
				if ( keycode == escapeKey ) {
					hide();
				}
			});
			
			if(!resize_interval)
 			{
						resize_interval = setInterval(function() {
								position();
							},200);
			}
			
		}
		
		function hide() {
			
			if(resize_interval)
 			{
 					clearInterval(resize_interval);
 					resize_interval = 0;
 			}
 						
			settings.onclosehandler();
			$("#overlay").remove();
			$("#box").remove();
			
			
			
			if (ie6)
				$(wrapped_set).find('embed, select, object').css({ 'visibility' : 'visible' });
		
			$(window).unbind('resize').unbind('scroll');
			$(document).unbind('keydown');
		}
		
		function getleft() {
			
			var wrapped_elt = $(wrapped_set).get(0); 
			
			if(!ie6 && wrapped_elt.tagName.toLowerCase() == "body")
				return $(window).scrollLeft();
			else
				return 0;
		}
		
		function position() {
			
			var width = wrapped_set.outerWidth();
			//$("#box").css({'left' : Math.floor((width - settings.boxwidth) / 2),'top':settings.boxtop + $(window).scrollTop(), 'height' : $("#boxcontent").outerHeight() + $("#closeimg").outerHeight() + 20,'width' : settings.boxwidth});
			
			$("#box").css({'height' : $("#boxcontent").outerHeight() + $("#closeimg1").outerHeight() + 20,'width' : settings.boxwidth});
			
			var height = Math.max($(window).scrollTop() + settings.boxtop + $("#box").outerHeight(),wrapped_set.outerHeight());
			$("#overlay").css({'top' : 0,'left':getleft(), 'height' : height,'width' : width});
			
		}
		
		function position1() {
			
			var width = wrapped_set.outerWidth();
			//$("#box").css({'left' : Math.floor((width - settings.boxwidth) / 2),'top':settings.boxtop + $(window).scrollTop(), 'height' : $("#boxcontent").outerHeight() + $("#closeimg").outerHeight() + 20,'width' : settings.boxwidth});
			
			$("#box").css({'height' : $("#boxcontent").outerHeight() + $("#closeimg1").outerHeight() + 20,'width' : settings.boxwidth});
			
			var height = Math.max($(window).scrollTop() + settings.boxtop + $("#box").outerHeight(),wrapped_set.outerHeight());
			$("#overlay").css({'top' : 0,'left':getleft(), 'height' : height,'width' : width});
			
		}
		
		function load(){
			if(settings.contenturl)
			{
				var loadingimg = $("<img>").attr("src",settings.loadingimage);
				$("#boxcontent").append(loadingimg);
				
				var uniq = getuniqueparam();
				var gourl = settings.contenturl +'?'+ uniq;
				if(settings.contenturl.indexOf('?') > -1)
							gourl = settings.contenturl +'&'+ uniq;

				$.get(gourl,{},function(data) {
					 $("#boxcontent").empty().append(data);
					 position1(); 
					 
					 var submithandler = function(){
					 	  var uniq = getuniqueparam();
					 		var gourl = settings.contenturl +'?'+ uniq;
							if(settings.contenturl.indexOf('?') > -1)
								gourl = settings.contenturl +'&'+ uniq;

							$("body").addClass("wait");
					 		$('#overlayform').ajaxSubmit({url:gourl,success: function(response){
											$("#boxcontent").empty().append(response);
											position();
											$('#overlaysubmit').click(submithandler);
											$("body").removeClass("wait");
						}});
					 };
					 		
					 //set up submission of form
					 $('#overlaysubmit').click(submithandler);
					 
					 settings.onloadhandler();
					 }
				);
			}
		}
		
		function getuniqueparam(){
			var ranNum = Math.floor(Math.random()*100000000);
			return ranNum;
		}
		
		
	
		init();
		show();
	};	
		
})(jQuery); // Call and execute the function immediately passing the jQuery object
