var styleswitch = {
    init: function(options) {
        var self = this;
        this.places = [];

        var defaultcss = this.cookie.read('style') || options.defaultcss;

        $.each(options.csss, function() {
            var my = this;
            var selector = $(my.selector);
            if (!selector) return;

            my.filename = selector.attr('src');
            self.places.push(my);

            selector.css({ cursor: 'pointer' });
            selector.click(function() {
                self.change(my);
            });
            selector.hover(function() {
                if (self.selected.css == my.css) return;
                $(this).attr({ src: self.appendFn(my.filename, '_hover') });
            }, function() {
                if (self.selected.css == my.css) return;
                $(this).attr({ src: my.filename });
            });

            if (my.css == defaultcss) self.change(my);
        });
    },

    change: function(place) {
        var self = this;
        $.each(this.places, function() {
            var my = $('link[title=' + this.css + ']');
            if (!my) return;
            my.attr({ disabled: true });
            $(this.selector).attr({ src: this.filename });
        });

        var my = $('link[title=' + place.css + ']');
        if (!my) return;

        my.attr({ disabled: false });
        $(place.selector).attr({ src: this.appendFn(place.filename, '_selected') });
        this.selected = place;

        this.cookie.write('style', place.css);
    },

    appendFn: function(fn, append) {
        return fn.replace(/^(.*)\.([^\.]+)$/, '$1' + append + '.$2');
    },

    cookie: {
        read: function(key) {
            var regex = new RegExp(key + '=([^; ]+)');
            if (!document.cookie.match(regex)) return undefined;
            return unescape(RegExp.$1);
        },

        write: function(key, value) {
            var date = new Date();
            date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));

            document.cookie = key + '=' + value + '; expires=' + date.toGMTString() + '; path=/';
        }
    }
};


