jQuery.fn.delay = function(time, callback){
    // Empty function:
    jQuery.fx.step.delay = function(){};
    // Return meaningless animation, (will be added to queue)
    return this.animate({delay:1}, time, callback);
}

// Spotlight scroller plugin
// v 1.0 - James Edmonds, james@threeamdesign.com.au 20/01/2010
// Usage $('.spotlight').spotlight(options);
// Returns a jQuery object

jQuery.fn.spotlight = function(options) {
	var settings = jQuery.extend({
		wrapper: '.spotlight-items',
		items: '.item',
		duration: 100,
		cycle: true,
		constant: false,
		jump: false,
		force: false,
		margin: true
	}, options);
	
	return this.each(function() {
		var target = $(this);
		var parent = target.parent();
		var wrapper = target.find(settings.wrapper).addClass('spotlight-items-wrapper');
		var items = target.find(settings.items);
		var total = items.length;
		
		settings.prev = settings.prev || parent.find('a.previous');
		settings.next = settings.next || parent.find('a.next');
		
		var first = $(items[0]).addClass('first');
		var last = $(items[total - 1]).addClass('last');
		
		target.trigger('onInit', [items]);
		
		var width = 0;
		items.each(function() { width += $(this).outerWidth(); });
		
		target.find(settings.wrapper).width(width);
		target.serialScroll(settings).addClass('spotlight-processed');
	});
};

// Texta text replacement plugin
// v 1.0 James Edmonds, james@threeamdesign.com.au 16/02/2010
// Usage $('.texta').texta(options)
// Returns a jQuery object

jQuery.fn.texta = function(options) {
	var settings = jQuery.extend({
		textaURL: '/texta.php?t='
	}, options);
	return this.each(function() {
		
		var target = $(this);
		var width = target.width();
		var height = target.height();
		var size = target.css('fontSize');
		var colour = colorToHex(target.css('color'));
		var text = target.text() || target.val();
		var texta = settings.textaURL + escape(encodeURIComponent(text)) + '&w=' + width + '&size=' + size + '&colour=' + colour;
		
		target.fadeTo(0, 0);
		
		var preload = new Image();
		preload.src = texta;
		preload.onload = function() {
			var background = "url('" + texta + "')";
			target.css({
				textIndent:'-9999em',
				width: preload.width,
				height: preload.height,
				display: 'block',
				backgroundImage: background,
				backgroundPosition: '0 0',
				backgroundRepeat: 'no-repeat'
			}).attr('title', text).addClass('texta-processed');
			target.fadeTo('normal', 1);
		}
	});
};

function colorToHex(color) {
    if (color.substr(0, 1) === '#') {
        return color.substr(1);
    }
    var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
    
    var red = parseInt(digits[2]);
    var green = parseInt(digits[3]);
    var blue = parseInt(digits[4]);
    
    var rgb = blue | (green << 8) | (red << 16);
    return digits[1] + rgb.toString(16);
};



// Fading elements plugin
// v 1.0 James Edmonds, james@threeamdesign.com.au 16/02/2010
// Usage $('.fading').fading(options)
// Returns a jQuery object

jQuery.fn.fading = function(options) {

	var settings = jQuery.extend({
		startOpacity: 1,
		endOpacity: 0.5,
		speed: 'normal'
	}, options);
	
	return this.each(function() {
		var target = $(this).fadeTo(0, settings.startOpacity);
		target.hover(
			function() { $(this).fadeTo(settings.speed, settings.endOpacity); },
			function() { $(this).fadeTo(settings.speed, settings.startOpacity); }
		);
	});
};
