var MIN_CONTENT_WIDTH = 320;
var MAIN_COL_LEFT_MARGIN = null;
var MAIN_COL_RIGHT_MARGIN = null;

function setHeightsToAuto(oArrElems) {
  for (var i = 0; i < oArrElems.length; i++) {
    if (oArrElems[i]) {
        oArrElems[i].css('height', 'auto');
    }
  }
}

function adjustCols() {
  if (document.getElementById) {

    var main = $('#main');

    if (main) {

      var conts = new Array();
      var cols = new Array()

      var mainIndex = -1;
      var mainCol = null;
      var mainCont = null;

      var colElems = $(main).children('[id$="_col"]');
      for (var i = 0; i < colElems.size(); i++) {
        var col = $(colElems[i]);
        var cont = null;
        if ($(col).css('display') == 'none') {
          col = null;
        }
        else {
          var cont = $(col).find('[id$="_content"]').first();
          if (cont.length == 0 || $(col).css('display') == 'none') {
            cont = null;
          }
          else {
            if (cont.attr('id') == 'main_content') {
              mainCol = col;
              mainCont = cont;
              mainIndex = conts.length;
            }
          }
        }
        cols.push(col);
        conts.push(cont);
      }

      setHeightsToAuto(conts);
      setHeightsToAuto(cols);

      if (mainCol) {
        if (!MAIN_COL_LEFT_MARGIN || !MAIN_COL_RIGHT_MARGIN) {
            MAIN_COL_LEFT_MARGIN = mainCol.css('margin-left');
            MAIN_COL_RIGHT_MARGIN = mainCol.css('margin-right');
        }
      }

      for (var i = 0; i < cols.length; i++) {
        if (cols[i]) {
          cols[i].css('clear', 'none');
          if (cols[i].attr('id').match(/left/)) {
            cols[i].css('float','left');
          }
          if (cols[i].attr('id').match(/right/)) {
            cols[i].css('float', 'right');
          }
        }
      }
      if (mainCol) {
        mainCol.css('marginLeft', MAIN_COL_LEFT_MARGIN);
        mainCol.css('marginRight', MAIN_COL_RIGHT_MARGIN);
      }

      var mainColWidth = document.body.clientWidth;
      for (var i = 0; i < cols.length; i++) {
        if (cols[i]) {
          if ((conts[i] == null) || (conts[i] != mainCont)) {
            mainColWidth = mainColWidth - cols[i].outerWidth(true);
          }
        }
      }

      if (mainColWidth >= MIN_CONTENT_WIDTH) {

        var maxColHeight = 0;
        for (var i = 0; i < cols.length; i++) {
          if (cols[i]) {
            var height = cols[i].outerHeight(true);
            if (height > maxColHeight) {
              maxColHeight = height;
            }
          }
        }

        for (var i = 0; i < cols.length; i++) {
          if (cols[i]) {
            var colHeight = cols[i].outerHeight(true);
            var diff = maxColHeight - colHeight;
            var colInnerHeight = cols[i].height();
            var newInnerHeight = colInnerHeight + diff;
            cols[i].height(newInnerHeight);

            if (conts[i]) {
              var contInnerHeight = conts[i].height();
              var newInnerHeight = contInnerHeight + diff;
              conts[i].height(newInnerHeight);
            }
          }
        }
      }
      else {

        var maxSideColWidth = 0;
        for (var i = 0; i < cols.length; i++) {
          if (cols[i] && cols[i] != mainCol) {
            if (cols[i].outerWidth(true)  > maxSideColWidth) {
              maxSideColWidth = cols[i].outerWidth(true);
            }
          }
        }

        if (document.body.clientWidth - maxSideColWidth >= MIN_CONTENT_WIDTH) {
          for (var i = 0; i < cols.length; i++) {
            if (cols[i] && cols[i] == mainCol) {
              cols[i].css('margin-left', maxSideColWidth);
              cols[i].css('margin-right', 0);
            }
            else {
              cols[i].css('float', 'left');
              cols[i].css('clear', 'both');
            }
          }
        }
        else {
          for (var i = 0; i < cols.length; i++) {
            if (cols[i] && cols[i] == mainCol) {
              cols[i].css('margin-left', 0);
              cols[i].css('margin-right', 0);
            }
            else {
              cols[i].css('float', 'none');
            }
          }
        }
      }
    }
  }
}

$(document).ready(function(){
  adjustCols();
});
$(window).resize(function(){
  adjustCols();
});

