﻿var EqualCols = Class.create();
EqualCols.prototype = {
    columns: [],
    heighestColumn: null,
    
    initialize: function(columns) {
        this.columns = columns;
        
        this.getColumnHeights();
        this.getLastContentBoxInColumns();
        this.equalizeColumns();
    },
    
    getColumnHeights: function() {
        var maxHeight = 0;
        for ( i=0; i<this.columns.length; i++) {
            var columnInstance = p$(this.columns[i].columnId);
            if ( columnInstance ) {
                this.columns[i]["columnInstance"] = columnInstance;
                this.columns[i]["columnHeight"] = Element.getHeight(columnInstance);
                if ( this.columns[i].columnHeight > maxHeight ) {
                    maxHeight = this.columns[i].columnHeight;
                    this.heighestColumn = this.columns[i];
                }
            } else {
                this.columns[i] = null;
            }
        }
        this.columns = this.columns.compact();
    },
    
    getLastContentBoxInColumns: function() {
        this.columns.each( function(column, index) {
            if ( column.columnInstance ) {
                var boxes = document.getElementsByClassName(column.spotClasses.join("|"), column.columnInstance);
                if ( boxes.length > 0 ) {
                    column["lastColumnSpot"] = boxes[boxes.length-1];
                }
            }
        });
    },
    
    equalizeColumns: function() {
        this.columns.each( function(column, index) {
            if ( column.columnId != this.heighestColumn.columnId ) {
                var spotContent = document.getElementsByClassName(column.spotContentClass, column.lastColumnSpot)[0];
                if ( spotContent ) {
                    var colDelta = this.heighestColumn.columnHeight - column.columnHeight;
                    var currentSpotHeight = Element.getHeight(spotContent);
                    var topPadding = this.convertStyleNumber(Element.getStyle(spotContent, 'padding-top'));
                    var bottomPadding = this.convertStyleNumber(Element.getStyle(spotContent, 'padding-bottom'));
                    
                    var newHeight = (currentSpotHeight-topPadding-bottomPadding)+colDelta;
                    
                    if ( Browser.isIE && Browser.versionMajor<7 ) {
                        Element.setStyle(spotContent, {height: newHeight+'px'});
                    } else {
                        Element.setStyle(spotContent, {minHeight: newHeight+'px'});
                    }
                }
            }
        }.bind(this));
    },
    
    convertStyleNumber: function(stylenumber) {
        if ( !stylenumber ) return 0;
        if ( stylenumber.indexOf('px')>-1 ) stylenumber = stylenumber.replace('px','');
        
        return parseInt(stylenumber);
    }
}
