$(function() {
    $.fn.slideMenu = function(options) {

        var defaults = { "maxWidth": 0, "useParentBoundary": true, "openInterval": 400, "closeInterval": 200 },
            o = $.extend({}, defaults, options),
            sliders = this,
            isIE6 = ($.browser.msie && parseInt($.browser.version) <= 6);

        this.hide()
			.css("position", "absolute")
			.parent()
			.hover(function() {
			    var sliderPar = this,
					slider = sliders.filter(function() {
					    return $(this).parent()[0] == sliderPar;
					}),
					outerRight = document.body.offsetWidth;

			    if (!$(this).data("height")) {
			        var slheight = slider.height();
			        $(this).data("height", slheight);

			        if (o.maxWidth == 0) {
			            slider.height(1).show();
			            var lastChild = slider.children(":last"),
							left = slider.offset().left,
							width = lastChild.offset().left + lastChild.outerWidth() - left;

			            slider.width(width);
			        }
			        else {
			            slider.width(o.maxWidth);
			        }

			        //add a iframe to the parent element if IE6
			        if (isIE6) {
			            var iframeChild = slider.children("iframe");
			            if (iframeChild.length)
			                iframeChild.width(slider.width()).height(slider.height());
			        }
			    }

			    var extent = slider.stop().height(1).show().offset().left + slider.outerWidth();

			    if (o.useParentBoundary) {
			        var parelem = $(this).parent();
			        outerRight = Math.min(parelem.offset().left + parelem.outerWidth(), outerRight);
			    }

			    if (extent > outerRight) {
			        var sliderLeft = slider.position().left - extent + outerRight;
			        slider.css("left", sliderLeft);
			    }

			    if (isIE6)
			        slider.animate({ height: $(this).data("height") }, o.openInterval);
			    else
			        slider.css("opacity", 0).animate({ height: $(this).data("height"), opacity: 1 }, o.openInterval);
			},
			function() {
			    var sliderPar = this;
			    sliders.filter(function() {
			        return $(this).parent()[0] == sliderPar;
			    }).stop().slideUp(o.closeInterval);
			});
    };
});
