/**
 * jquery.notifier.js
 * By: Mehrzad Sotoodeh
 * Updated: 11/20/2009
 */

(function($) {
	$.notifier = function(options) {
		var _this = this;
		var _options = null;
		var _overlay = null;
		var _parent_container = null;
		var _window = null;
		var _content_container = null;
		
		this.initialize = function() {
			options = options || {};
			_options = $.extend($.notifier.defaults, options);
				
			_overlay = $('<div></div>').css({
				margin:				'0',
				position:			'absolute',
				left:				'0',
				top:				'0',
				width:				'100%',
				height:				($(document).height() >= $(window).height()? $(document).height() : $(window).height()) + 'px',
				background:			_options.overlayColor,
				filter:				'alpha(opacity=' + (_options.overlayOpacity * 100) + ')',
				'-moz-opacity': 	_options.overlayOpacity,
				'-khtml-opacity': 	_options.overlayOpacity,
				opacity:			_options.overlayOpacity,
				zIndex:				99,
				display:			'none'
			}).click(function() {
				_this.hide();
			});
			
			_window = $('<div></div>').css({
				position: 	'absolute',
				visibility:	'hidden',
				padding:	_options.windowPadding + 'px',
				background:	'#fff',
				zIndex: 	100,
				fontFamily:	'tahoma, arial'
			});
			
			_content_container = $('<div></div>').css({
				position:	'relative',
				background:	'#fff',
				color:		'#333',
				marginTop:	'40px'
			});
			
			var $content = $('<div></div>').css({
				width: _options.defaultWindowWidth,
				height: _options.defaultWindowHeight
			});
			
			var $close_btn = $('<div class="close_upsell_btn" title="close"></div>').css({
				position:	'absolute',
				right:		'15px',
				top:		'15px',
				color:		'#aaa',
				cursor:		'pointer',
				fontSize:	'11px'
			});
			
			$close_btn.html(_options.closeBtn).click(function() {
				_this.hide();
			});
			
			_content_container.append($content);
			_window.append(_content_container);
			_window.append($close_btn);
				
			$(document).ready(function() {
				$('body').append(_overlay);
				
				if(!_options.parentContSelector) {
					_parent_container = $(window);
					$('body').append(_window);
				} else {
					_parent_container = $(_options.parentContSelector);
					_parent_container.append(_window);
				}
				
				_window.css({
					left: 	(_parent_container.scrollLeft() + _parent_container.width()/2 - _window.outerWidth()/2) + 'px',
					top: 	(_parent_container.scrollTop() + _parent_container.height()/2 - _window.outerHeight()/2 ) + 'px'
				});
			});	
		};
		
		this.shutdown = function() {
			if(_this.overlay) _overlay.remove();
			if(_this.content_window) _window.remove();
		};
			
		this.notify = function(content, x, y, callback) {
			var $content = $(content);
			_content_container.empty().append($content);
			_overlay.show();
			
			var w = _window.width()? _window.width() : _options.defaultWindowWidth ;
			var h = _window.height()? _window.height() : _options.defaultWindowHeight;
			
			_window.css({
				visibility: 'visible',
				display: 'none'
			});
			
			_this.resize(w, h, function() { _window.fadeIn(500); });
		};
		
		this.hide = function() {
			_window.fadeOut();
			_overlay.hide();
		};
		
		this.resize = function(width, height, callback) {		
			var left	= _parent_container.scrollLeft() + (_parent_container.width() - width)/2;
			var top		= _parent_container.scrollTop() + (_parent_container.height() - height)/2;
			
			_window.css({
				width: 	width + 'px',
				height: height + 'px',
				left: 	left + 'px',
				top: 	top + 'px'
			});
			
			if(typeof(callback) == 'function') callback();
		};
		
		_this.initialize();
	};
			
	$.notifier.defaults = {
		parentContSelector:		null,
		showOverlay:			true,
		overlayColor:			'#111',
		overlayOpacity:			'0.7',
		defaultWindowWidth:		300,
		defaultWindowHeight:	300,
		windowPadding:			0,
		closeBtn:				'<img src="/images/close_x.png" />'
	};
	
})(jQuery);