/*
 * jQuery swish
 * copyright 2009 justin talbott - justintalbott.com
 * released under the MIT and GPL licenses
 */

(function($){
/*
 * minified version of jQuery Color Animations (with borderColor + rgba support added)
 * Copyright 2007 John Resig
 * Released under the MIT and GPL licenses.
 * http://plugins.$.com/files/$.color.js.txt
 */
$.each(['backgroundColor','borderColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,attr){$.fx.step[attr]=function(fx){if(fx.state==0){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end);}
fx.elem.style[attr]="rgb("+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(",")+")";}});function getRGB(color){var result;if(color&&color.constructor==Array&&color.length==3)
return color;if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])];if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55];if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)];if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)];if(result=/rgba\(0, 0, 0, 0\)/.exec(color))
return colors['transparent'];return colors[$.trim(color).toLowerCase()];}
function getColor(elem,attr){var color;do{color=$.curCSS(elem,attr);if(color!=''&&color!='transparent'||$.nodeName(elem,"body"))
break;attr="backgroundColor";}while(elem=elem.parentNode);return getRGB(color);};var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};
	
$.fn.swish = function(options) {
	var settings = $.extend({}, $.fn.swish.settings, options);
	$(this).each(function(){
        var $o = $(this),
			hover = $("<div class='"+settings.hoverclass+"' style='display:none;'/>").appendTo(this),
			colorprops = [
				'color',
				'background-color',
				'border-color',
				'border-bottom-color',
				'border-left-color',
				'border-right-color',
				'border-top-color',
				'outline-color'
			],
 			camelprops = [
				'color',
				'backgroundColor',
				'borderColor',
				'borderBottomColor',
				'borderLeftColor',
				'borderRightColor',
				'borderTopColor',
				'outlineColor'
			],
			instyles = {},
			outstyles = {};	
		for (i=0; i<(colorprops.length); i++){
			incolor = hover.css(colorprops[i]);
			outcolor = $o.css(colorprops[i]);
			if (incolor && incolor != '' && incolor != 'transparent' && incolor != 'rgba\(0, 0, 0, 0\)')
				instyles[camelprops[i]] = incolor;
			if (outcolor && outcolor != '' && outcolor != 'transparent' && incolor != 'rgba\(0, 0, 0, 0\)')
				outstyles[camelprops[i]] = outcolor;
		}
		$o.hover(
			function () {
				$o.stop().animate(instyles, settings.speedin, settings.easingin);
			},
			function () {
				$o.stop().animate(outstyles, settings.speedout, settings.easingout);
			}
		);
	});
	return this;
};
    
$.fn.swish.settings = {
	speedin : 150,
	speedout : 300,
	hoverclass : 'hover',
	easingin : 'swing',
	easingout : 'swing'
};
    
})(jQuery);