﻿(function($) {
	$.fn.notifyLotAdded = function(o) {
		return this.each(function() {
			(new $ltmf(this, o)).displayNotification();
		});
	};

	var defaults = {
		message: '',
		closeCaption: 'Close'
	};

	$ltmf = function(e, o) {
		this.options = $.extend({}, defaults, o || {});
		this.image = e;
		this.blockerDiv = null;
		this.notifBlock = null;
		this.setup();
	};

	$ltmf.prototype.extend = $.extend;

	$ltmf.getWindowDimensions = function() {
		var h = $(window).height();
		var w = $(window).width();
		return { height: h, width: w };
	};

	$ltmf.getWindowOffset = function() {
		var t = $(window).scrollTop();
		var l = $(window).scrollLeft();
		return { top: t, left: l };
	};

	$ltmf.setDimensions = function(item, dim) {
		$(item).width(dim.width);
		$(item).height(dim.height);
	}

	$ltmf.setOffset = function(item, offset) {
		$(item).css('top', offset.top + 'px');
		$(item).css('left', offset.left + 'px');
	}

	$ltmf.prototype.extend({
		setup: function() {
			this.createBlockerDiv();
			this.createNotificationBlock();
		},

		displayNotification: function() {
			this.turnOnEventBindings();
			this.blockerDiv.show();
			this.notifBlock.show();
		},

		onWindowResize: function(e) {
			var context = e.data;
			context.centerMessageBox();
		},

		onCloseClick: function(e) {
			var context = e.data;
			context.turnOffEventBindings();
			context.notifBlock.remove();
			context.notifBlock = null;
			context.blockerDiv.hide();
			context.blockerDiv.unbind('click', context.onCloseClick);
			context.blockerDiv = null;
		},

		onIEScrollResize: function(e) {
			var blockDiv = e.data;

			var offset = $ltmf.getWindowOffset();
			$ltmf.setOffset(blockDiv, offset);

			var dim = $ltmf.getWindowDimensions();
			$ltmf.setDimensions(blockDiv, dim);
		},

		turnOnEventBindings: function() {
			this.blockerDiv.bind('click', this, this.onCloseClick);
			$(window).bind('resize', this, this.onWindowResize);
			if (jQuery.browser.msie) {
				$(window).bind('resize scroll', this.blockerDiv, this.onIEScrollResize);
				this.onIEScrollResize({ data: this.blockerDiv });
			}
		},

		turnOffEventBindings: function() {
			this.notifBlock.unbind('click', this.onCloseClick);
			$(window).unbind('resize', this.onWindowResize);
			if (jQuery.browser.msie) {
				$(window).unbind('scroll', this.onIEScrollResize);
				$(window).unbind('resize', this.onIEScrollResize);
			}
		},

		createNotificationBlock: function() {
			var content = $(this.image).clone();
			var divCloseHeader = $('<div/>')
                .addClass('notification-header')
                .text(this.options.closeCaption)
                .bind('click', this, this.onCloseClick);
			var divMessage = $('<div/>')
                .addClass('notification-message')
                .html(this.options.message);
			var divContent = $('<div/>')
                .addClass('notification-content')
                .append(content);
			var divBlock = $('<div/>')
                .addClass('notification-block')
                .css({
                	'position': 'absolute',
                	'z-index': '180',
                	'top': '85px'
                })
                .append(divCloseHeader)
                .append(divMessage)
                .append(divContent);
			this.notifBlock = divBlock;
			this.notifBlock.hide();
			var body = $(document).find('body');
			$(body).prepend(this.notifBlock);
			this.centerMessageBox();
			return divBlock;
		},

		createBlockerDiv: function() {
			this.blockerDiv = $('div#blocker');
			if (this.blockerDiv.size() > 0) {
				return;
			}

			this.blockerDiv = $(this.getBlockerDivHtml())
                .addClass('blocker')
                .css({
                	'background-color': 'white',
                	'filter': 'alpha(opacity=0)',
                	'opacity': '0',
                	'z-index': '90'
                });

			// if IE - use event-based overlay floating
			if (jQuery.browser.msie) {
				$(this.blockerDiv).css({
					'top': '0px',
					'left': '0px',
					'position': 'absolute'
				});
			}
			// otherwise use static giant overlay
			else {
				$(this.blockerDiv).css({
					'position': 'fixed',
					'width': '20000px',
					'height': '20000px'
				});
			}

			var docDim = $ltmf.getWindowDimensions();
			$ltmf.setDimensions(this.blockerDiv, docDim);
			var body = $(document).find('body');
			$(body).prepend(this.blockerDiv);
			return this.blockerDiv;
		},

		getBlockerDivHtml: function() {
			return '<div id="blocker"></div>';
		},

		centerMessageBox: function() {
			var windowWidth = $(window).width();
			var block = this.notifBlock;
			var blockWidth = block.width();
			var left = (windowWidth - blockWidth) / 2;
			block.css({ 'left': left + 'px' });
		}
	});
})(jQuery);
