var fraggedTabs = new Class({
    options: {
        crossFade: true,
        container: $empty()
    },
    initialize: function(options) {
        this.setOptions(options);
        if (!$(this.options.container))
            return false;

        // set tab events...
        var tabControls = $(this.options.container).getElements("li"), tabContents = $(this.options.container).getElements("div.tabContent"), _this = this;

        $$("div.none").setOpacity(0).setStyle("display", "none");
        var first = tabContents[0];
        $(options.container).setStyle("height", first.getStyle("height"));

        //tabControls.
        tabControls.addEvents({
            click: function(e) {
                var e = new Event(e).stop();

                if (this.hasClass("selected"))
                    return false;

                Watermark.hide();

                tabControls.removeClass("selected");
                this.addClass("selected");




                var old = $E("div.liveTab");
                old.removeClass("liveTab").setOpacity(0).setStyle("display", "none");

                var cn = this.getFirst().getProperty("class");
                $(cn).setStyles({
                    display: "block"
                }).fade(0,1, {remove: false, reclaim: false, duration: 300}).addClass("liveTab");
                $(options.container).setStyle("height", $(cn).getStyle("height"));

                Watermark.move();
                Watermark.unhide();
            }
        }).addClass("cur");
    },
    set: function() {
        // internal setter for options that can take a json or a simple pair
        switch ($type(arguments[0])) {
            case "object":
                this.setOptions(arguments[0]);
            break;
            default:
                if (arguments.length == 2) {
                    var newo = {}
                        newo[arguments[0]] = arguments[1];

                    this.setOptions(newo);
                } else {
                    C.log("incorrect number of arguments");
                }
            break;
            case "false":
                return false;
            break;
        }
    },
    get: function(key) {
        // this.options getter, 1.2 stylee...
        return this.options[key];
    }
});

fraggedTabs.implement(new Events, new Options); // for 1.11
