/*VERSION: Drop Shadow jQuery Plugin 1.6  12-13-2007*/
(function($){var dropShadowZindex = 1;$.fn.dropShadow = function(options) { var opt = $.extend({ left: 4, top: 4, blur: 2, opacity: .5, color: "black", swap: false }, options); var jShadows = $([]);this.not(".dropShadow").each(function() { var jthis = $(this); var shadows = []; var blur = (opt.blur <= 0) ? 0 : opt.blur; var opacity = (blur == 0) ? opt.opacity : opt.opacity / (blur * 8); var zOriginal = (opt.swap) ? dropShadowZindex : dropShadowZindex + 1; var zShadow = (opt.swap) ? dropShadowZindex + 1 : dropShadowZindex;var shadowId; if (this.id) { shadowId = this.id + "_dropShadow"; } else { shadowId = "ds" + (1 + Math.floor(9999 * Math.random())); }$.data(this, "shadowId", shadowId); $.data(this, "shadowOptions", options); jthis .attr("shadowId", shadowId) .css("zIndex", zOriginal); if (jthis.css("position") != "absolute") { jthis.css({ position: "relative", zoom: 1 }); }bgColor = jthis.css("backgroundColor"); if (bgColor == "rgba(0, 0, 0, 0)") bgColor = "transparent"; if (bgColor != "transparent" || jthis.css("backgroundImage") != "none" || this.nodeName == "SELECT" || this.nodeName == "INPUT" || this.nodeName == "TEXTAREA") { shadows[0] = $("<div></div>") .css("background", opt.color); } else { shadows[0] = jthis .clone() .removeAttr("id") .removeAttr("name") .removeAttr("shadowId") .css("color", opt.color); } shadows[0] .addClass("dropShadow") .css({ height: jthis.outerHeight(), left: blur, opacity: opacity, position: "absolute", top: blur, width: jthis.outerWidth(), zIndex: zShadow });var layers = (8 * blur) + 1; for (i = 1; i < layers; i++) { shadows[i] = shadows[0].clone(); }var i = 1; var j = blur; while (j > 0) { shadows[i].css({left: j * 2, top: 0}); shadows[i + 1].css({left: j * 4, top: j * 2}); shadows[i + 2].css({left: j * 2, top: j * 4}); shadows[i + 3].css({left: 0, top: j * 2}); shadows[i + 4].css({left: j * 3, top: j}); shadows[i + 5].css({left: j * 3, top: j * 3}); shadows[i + 6].css({left: j, top: j * 3}); shadows[i + 7].css({left: j, top: j}); i += 8; j--; }var divShadow = $("<div></div>") .attr("id", shadowId) .addClass("dropShadow") .css({ left: jthis.position().left + opt.left - blur, marginTop: jthis.css("marginTop"), marginRight: jthis.css("marginRight"), marginBottom: jthis.css("marginBottom"), marginLeft: jthis.css("marginLeft"), position: "absolute", top: jthis.position().top + opt.top - blur, zIndex: zShadow });for (i = 0; i < layers; i++) { divShadow.append(shadows[i]); }jthis.after(divShadow);jShadows = jShadows.add(divShadow);$(window).resize(function() { try { divShadow.css({ left: jthis.position().left + opt.left - blur, top: jthis.position().top + opt.top - blur }); } catch(e){} });dropShadowZindex += 2;});return this.pushStack(jShadows); };$.fn.redrawShadow = function() { this.removeShadow();return this.each(function() { var shadowOptions = $.data(this, "shadowOptions"); $(this).dropShadow(shadowOptions); }); };$.fn.removeShadow = function() { return this.each(function() { var shadowId = $(this).shadowId(); $("div#" + shadowId).remove(); }); };$.fn.shadowId = function() { return $.data(this[0], "shadowId"); };$(function() { var noPrint = "<style type='text/css' media='print'>"; noPrint += ".dropShadow{visibility:hidden;}</style>"; $("head").append(noPrint); });})(jQuery);
