/**
 * @author landon
 */
(function($) {
	var defaults = {
		hoverOffset:64,
		disabledOffset:128,
		returnIfDisabled:true
    };
	$.fn.extend({
		createSprite:function(opts) {
			opts = $.fn.extend(opts || {}, defaults);
			var sprite = $("<div></div>")
				.addClass('sprite')
				.data('opts',opts)
				.css({
					width:opts.size.w+'px',
					height:opts.size.h+'px',
					backgroundImage:"url("+opts.src+")",
					backgroundRepeat:'no-repeat',
					backgroundPosition:opts.position.x+'px '+opts.position.y+'px'
				});
			if(opts.hoverOffset != null) {
				sprite.hover(
					function() {
						if (!$(this).hasClass('disabled')) {
							$.fn.hoverSpriteOn.apply(this);
						}
					},
					function(){
						if (!$(this).hasClass('disabled')) {
							$.fn.enableSprite.apply(this);
						}
					}
				);
			}
			if(opts.action != null) {
				sprite.css('cursor','pointer')
					  .mousedown(function() {
					  	if (!opts.returnIfDisabled || !$(this).hasClass('disabled')) {
							$(this).data('opts').action.apply(sprite);
						}
					  });
			}
			return sprite;
		},
		hoverSpriteOn:function() {
			$(this).css('backgroundPosition',$(this).data('opts').position.x-$(this).data('opts').hoverOffset+'px '+$(this).data('opts').position.y+'px')
		},
		toggleSprite:function() {
			if ($(this).data('disabled') != true) {
				$.fn.disableSprite.apply(this);
			} else {
				$.fn.enableSprite.apply(this);
			}
		},
		disableSprite:function() {
			$(this).css('backgroundPosition',$(this).data('opts').position.x-$(this).data('opts').disabledOffset+'px '+$(this).data('opts').position.y+'px')
				   .css('cursor','default')
				   .addClass('disabled');
		},
		enableSprite:function() {
			$(this).css('backgroundPosition',$(this).data('opts').position.x+'px '+$(this).data('opts').position.y+'px')
				   .css('cursor','pointer')
				   .removeClass('disabled');
		}
	});
})(jQuery);

