var TextCols = new Class({
    Implements: Options,
    options: {
        cols: 2,
        margin: 18
    },
	initialize: function(el, options)
    {
        this.setOptions(options);
        var main = new Element('div', {
            'html': el.get('html'),
            'styles': {
                'position': 'relative',
                'top': 0,
                'left': 0
            }
        });

        el.set('html', '');
        el.grab(main);
        var divX = main.getSize().x;
        var colX = Math.floor((divX - (this.options.margin * (this.options.cols - 1))) / this.options.cols);
        main.setStyle('width', colX);
        var colY = Math.ceil(main.getSize().y / this.options.cols);
        main.setStyle('width', divX);
        var text = main.get('html').replace(/<([^\ >]+)[^>]*>[^\1]+<\/\1>/gi, this.strFix);
        var words = text.split(' ');
        main.set('html', '');
        for (var i = 1; i <= this.options.cols; i++) {

            eval("var col" + i + " = new Element('div');");
            eval("var col = col" + i + ";");
            col.setStyles({
                'width': colX,
                'position': 'absolute',
                'top': 0,
                'left': (colX * (i - 1)) + (i == 1 ? 0 : this.options.margin * (i - 1))
            });

            main.grab(col, 'bottom');
        }

        var k = 1;
        var endctrl1 = 0;
        var divheights = new Array();
        var wordslen = words.length;
        for (i = 0; i < wordslen; i++) {

            words[i] = words[i].replace(/__-__\.\|\.__-__/g, ' ');
            eval("col = col" + k + ";");
            var gethtml = col.get('html');
            col.set('html', gethtml + (i == 0 ? '' : ' ') + words[i]);
            if (endctrl1 == 0 && col.getSize().y > colY && this.options.cols >= k + 1) endctrl1 = col.getSize().y;
            var endctrl2 = endctrl1 > 0 && col.getSize().y > endctrl1;
            if (endctrl2) {

                endctrl1 = 0;
                col.set('html', gethtml);
                i--;
                k++;
            }

            if (endctrl2 || i == wordslen - 1) divheights[divheights.length] = col.getSize().y;
        }

        main.setStyle('height', Math.max.apply(Math, divheights));
    },
    strFix: function(match)
    {
        return match.replace(/\ /g, '__-__.|.__-__');
    }
});

window.addEvent('domready',
    function()
    {
        $$('.getCols').each(
            function(el, i)
            {
                new TextCols(el, {margin: 50});
            }
        );
    }
);
