$.fn.expandSlider = function() {
    click = function() {
        var expanded = true;
        if ($(this).parent("." + defaults.css).is("." + defaults.contractedCss))
            expanded = false;

        if (expanded)
            contract(this);
        else
            expand(this);

        return false;
    };
    finished = function() {
        eval(defaults.finishedEvent);

        var expanded = true;
        if ($(this).parent("." + defaults.css).is("." + defaults.contractedCss))
            expanded = false;

        var a = $(this).parent("." + defaults.css).children('.' + defaults.linkCss);

        if (expanded) {
            a[0].innerHTML = defaults.contractText;
        }
        else {
            a[0].innerHTML = defaults.expandText;
        }
    }
    expand = function(s) {
        var j = $(s).siblings('.' + defaults.windowCss);
        var el = j[0];

        $.queue(el, "anim", function() {
            var el = j.children('.' + defaults.windowContentCss);

            var h = el.height();

            $(this).animate({ height: h }, defaults.animationDuration, finished);
        });

        j.parents('.' + defaults.css).removeClass(defaults.contractedCss);
        j.parents('.' + defaults.css).addClass(defaults.expandedCss);

        $.dequeue(el, 'anim');

    }
    contract = function(s) {
        var j = $(s).siblings('.' + defaults.windowCss);
        var el = j[0];
        $.queue(el, "anim", function() {
            $(this).animate({ height: j.css("min-height") }, defaults.animationDuration, finished);
        });

        j.parents('.' + defaults.css).removeClass(defaults.expandedCss);
        j.parents('.' + defaults.css).addClass(defaults.contractedCss);

        $.dequeue(el, 'anim');
    }

    var defaults =
	{
	    css: "SliderContainer",
	    contractedCss: "Contracted",
	    expandedCss: "Expanded",
	    windowCss: "ContentWindow",
	    windowContentCss: "Seminar",
	    faderCss: "ContainerFade",
	    linkCss: "ExpansionLink",
	    finishedEvent: "resizeBody();",
	    animationDuration: 500,
	    expandText: "More",
	    contractText: "Less"
	};

    var jSender = $(this);
    $.each(jSender, function(i, v) {
        var jSender = $(v);

        jSender.addClass(defaults.windowContentCss);

        var c = document.createElement("div");
        c.className = defaults.css;
        c.className += " " + defaults.contractedCss;

        var w = document.createElement("div");
        w.className = defaults.windowCss;

        var f = document.createElement("div");
        f.className = defaults.faderCss;

        var a = document.createElement("a");
        a.href = "#";
        $(a).click(click);
        a.innerHTML = defaults.expandText;
        a.className = defaults.linkCss;

        var co = jSender[0].cloneNode(true);

        var par = jSender.parent()[0];

        w.appendChild(co);


        c.appendChild(w);
        c.appendChild(f);
        c.appendChild(a);

        par.replaceChild(c, jSender[0]);
    });
};
