/*

 * SlideNote

 * A jQuery Plugin for flexible, customizable sliding notifications.

 *

 * Copyright 2010 Tom McFarlin, http://tommcfarlin.com

 * Released under the MIT License

 * More information: http://slidenote.info

*/



(function($) {



	$.slideNoteCount = 0;

	

	$.fn.slideNote = function(options) {

		

		$.slideNoteCount += this.length;

		

		var opts = $.extend({}, $.fn.slideNote.defaults, $.fn.slideNote.private, options);

		return this.each(function() {

			

			var $note = _init(this, opts);

		

			var oDoc = $.browser.msie === true ? window : document;

			$(oDoc).scroll(function() {

				if($(this).scrollTop() === 0) {

					opts.bIsClosed = false;

				}

				if($(this).scrollTop() > opts.where) {

					if(!$note.is(':visible') && !opts.bIsClosed) {

						$note.trigger('slideIn');

					}

				} else if ($(this).scrollTop() < opts.where && $note.queue('fx')[0] !== 'inprogress') {

					if($note.is(':visible')) {

						$note.trigger('slideOut');

					}

				}

			});

			

		});

		

	};

	

	function _init(obj, opts) {

	

		$(obj).toggle()

			.css(opts.corner, -1 * $(obj).outerWidth())

			.css({

				'position': 'fixed',

				'bottom': 0

			})

			.bind('slideIn', function(evt) {

				_slideIn(evt, obj, opts);

			})	

			.bind('slideOut', function(evt) {

				_slideOut(evt, obj, opts);

			});

		

		_retrieveData(obj, opts);

		_addCloseImage(obj, opts);

		

		return $(obj);

		

	}

	

	function _slideIn(evt, obj, opts) {	

		var direction = opts.corner === 'right' ? { 'right' : 0 } : { 'left' : 0 } ;

		$(obj).show().animate(direction, 1000, 'swing');

	}

	

	function _slideOut(evt, obj, opts) {

		

		var direction = opts.corner === 'right' ? { 'right' : -1 * $(obj).outerWidth() } : { 'left' : -1 * $(obj).outerWidth() };

		$(obj).animate(direction, 1000, 'swing', function() {

			if($.slideNoteCount === 1) {

				$(obj).stop(true).hide();

			} else {

				$(obj).hide();

			}

		});

	

		if(opts.closeImage !== null && evt.target.id === $(obj).attr('id') + '_close') {

			opts.bIsClosed = true;

		}

		

	}

	

	function _retrieveData(obj, opts) {

		if(opts.url !== null) {

			if(opts.container.length !== 0 && opts.container.indexOf('#') === -1) {

				opts.container = '#' + opts.container;

			}

			

			var sUrl = opts.container.length === 0 ? opts.url : opts.url + ' ' + opts.container;

			$(obj).load(sUrl, function() {

				if(opts.closeImage !== null) {

					_addCloseImage(obj, opts);

				}

			});

		}

	}

	

	function _addCloseImage(obj, opts) {

		if(opts.closeImage !== null) {

			var oImg = document.createElement('img');

			$(oImg).attr('src', opts.closeImage)

						 .attr('alt', 'close')

						 .attr('id', $(obj).attr('id') + '_close')

						 .hover(function() {

								$(this).css('cursor', 'pointer');

						 }).click(function(evt) {

								evt.stopPropagation();

								$(this).trigger('slideOut');

						 });

			$(obj).prepend(oImg);

		}

	}



	$.fn.slideNote.defaults = {

		where: 440,

		corner: 'left',

		url: null,

		container: '',

		closeImage: null

	};

	

	$.fn.slideNote.private = {

		_bIsClosed: false

	}

	

})(jQuery);
