function WindowOverlay() {
	this.defaults = {
		css			: '',
		width		: 805,
		height		: 545,
		classname	: '',
		iframe		: false,
		content		: '',
		expires		: 1,
		events 		: function(){}
	};
	
	this.$bg = $('<div id="window-overlay-background" />');
	this.$overlay = $('<div id="window-overlay" />');
	this.$close = $('<div id="window-overlay-close" />').attr('title', 'Close Window').text('Close').appendTo(this.$overlay);
	this.$content = $('<div id="window-overlay-content" />').appendTo(this.$overlay);
}

$.extend(WindowOverlay.prototype, {
	init: function(option, el) {
		this.opts = $.extend({},this.defaults,option);	
		
		this.el  = el;
		this.$el = $(el);

		this._createCookie();
		this._create();
	},
	checkCookie: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while(c.charAt(0) == ' ') 
				c = c.substring(1, c.length);
			
			if (c.indexOf(nameEQ) == 0) 
				return true;
		}
		return false;
	},
	_createCookie: function() {
		var date = new Date(), expires = "";
		
		if(this.opts.expires > 0) {
			date.setTime(date.getTime()+(this.opts.expires*24*60*60*1000));
			expires = "; expires="+date.toGMTString();
		}
		
		document.cookie = "__windowOverlay=shown"+expires+"; path=/";
	},
	_create: function() {
		if(this.opts.css != '')
			$('<link />').attr({type: 'text/css', href: this.opts.css, rel: 'stylesheet', media: 'screen'}).appendTo($('head')[0]);
		
		this.$overlay.width(this.opts.width).height(this.opts.height).css({marginLeft: -(this.opts.width/2), marginTop: -(this.opts.height/2)});
		if(this.opts.classname != '')
			this.$overlay.addClass(this.opts.classname);
		
		if(this.opts.content != '') {
			var obj = this;
			if(this.opts.iframe) {
				var c = '<iframe width="100%" height="100%" scrolling="auto" frameborder="0" src="'+this.opts.content+'"></iframe>';
				obj.$content.append(c);
				obj._place();
			} else
				obj.$content.load(obj.opts.content, function() { obj._place(); });
		} else	
			this._place();			
	},
	_place: function() {
		var obj = this;
		
		if($.browser.msie && $.browser.version.indexOf('6.0') != -1) {
			$('form select').css('visibility', 'hidden');
			$('body').css('position', 'relative').width('100%').height('100%').z-index('100');
		}
		
		obj.$el.append(obj.$bg);
		obj.$el.append(obj.$overlay);
		
		obj.$close.click(function() { obj.close(); });
		obj.opts.events();
	},
	close: function() {
		this.$bg.remove();
		this.$overlay.remove();
		if($.browser.msie && $.browser.version.indexOf('6.0') != -1)
			$('form select').css('visibility', 'visible');
	}
});

(function($){
	$.fn.overlay = function(options) {
		if(this.length) {
			return this.each(function(){
				var popup = new WindowOverlay();
				
				if(!popup.checkCookie('__windowOverlay')) {
					popup.init(options, this);
					$.data(this, 'overlay', popup);	
				}
			});
		}
	};
})(jQuery);
