/*!
reflection.js for jQuery v1.02
(c) 2006-2008 Christophe Beyls <http://www.digitalia.be>
MIT-style license.
*/
(function($) {
$.fn.extend({
reflect: function(options) {
	options = $.extend({
	height: 0.33,
	opacity: 0.5
	}, options);
	return this.unreflect().each(function() {
	var img = this;
	if (/^img$/i.test(img.tagName)) {
		function doReflect() {
		var reflection, reflectionHeight = Math.floor(img.height * options.height), wrapper, context, gradient;
		if ($.browser.msie) {
			reflection = $("<img />").attr("src", img.src).css({
			width: img.width,
			height: img.height,
			marginBottom: -img.height + reflectionHeight,
			filter: "flipv progid:DXImageTransform.Microsoft.Alpha(opacity=" + (options.opacity * 100) + ", style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy=" + (options.height * 100) + ")"
			})[0];
		} else {
			reflection = $("<canvas />")[0];
			if (!reflection.getContext) return;
			context = reflection.getContext("2d");
			try {
			$(reflection).attr({width: img.width, height: reflectionHeight});
			context.save();
			context.translate(0, img.height-1);
			context.scale(1, -1);
			context.drawImage(img, 0, 0, img.width, img.height);
			context.restore();
			context.globalCompositeOperation = "destination-out";
			gradient = context.createLinearGradient(0, 0, 0, reflectionHeight);
			gradient.addColorStop(0, "rgba(255, 255, 255, " + (1 - options.opacity) + ")");
			gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
			context.fillStyle = gradient;
			context.rect(0, 0, img.width, reflectionHeight);
			context.fill();
			} catch(e) {
			return;
			}
		}
		$(reflection).css({display: "block", border: 0});
		wrapper = $(/^a$/i.test(img.parentNode.tagName) ? "<span />" : "<div />").insertAfter(img).append([img, reflection])[0];
		wrapper.className = img.className;
		$.data(img, "reflected", wrapper.style.cssText = img.style.cssText);
		// $(wrapper).css({width: img.width, height: img.height + reflectionHeight, overflow: "hidden"});
		$(wrapper).css({width: img.width, height: img.height + reflectionHeight});
		//img.style.cssText = "display: block; border: 0px";
		img.style.cssText = "display: block;";
		img.className = "reflected";
		}
		if (img.complete) doReflect();
		else $(img).load(doReflect);
	}
	});
},
unreflect: function() {
	return this.unbind("load").each(function() {
	var img = this, reflected = $.data(this, "reflected"), wrapper;
	if (reflected !== undefined) {
		wrapper = img.parentNode;
		img.className = wrapper.className;
		img.style.cssText = reflected;
		$.removeData(img, "reflected");
		wrapper.parentNode.replaceChild(img, wrapper);
	}
	});
}
});
})(jQuery);
