var ColumnsHandler = {
  init: function() {
    ColumnsHandler.onDomReady(ColumnsHandler.startup);
    //ColumnsHandler.addEvent(window, 'load', ColumnsHandler.startup, false);
  },
  startup: function() {
    var els = ColumnsHandler.getElementsByClassName(document, 'two-cols');
    
    var i,j, nodesToDo = [];
    
    for (i=0; i<els.length; i++) {
      // Check if the column holder already has columns
      nodesToDo = [];
      for (j = 0; j<els[i].childNodes.length; j++) {
        if ((' ' + els[i].childNodes[j].className + ' ').indexOf(' left-col ') > -1) {
          nodesToDo = [];
          break;
        }
        switch (els[i].childNodes[j].nodeName.toLowerCase()) {
        case 'dl':
        case 'ul':
        case 'ol':
          nodesToDo[nodesToDo.length] = els[i].childNodes[j];
          break;
        }
      }
      for (j = 0; j<nodesToDo.length; j++) {
        switch (nodesToDo[i].nodeName.toLowerCase()) {
            case 'dl':
              ColumnsHandler.doDL(nodesToDo[i]);
              break;
            case 'ul':
            case 'ol':
              ColumnsHandler.doList(nodesToDo[i]);
              break;
        }
      }
    }
  },
  doDL : function(list) {
    var i, j, h;
    var entries = [];
    
    for (i=0, j=-1; i<list.childNodes.length; i++) {
      if (list.childNodes[i].nodeName.toLowerCase() == 'dt') {
        j = entries.length;
        entries[j] = {
          'items' : [list.childNodes[i]]
        };
      }
      else if (list.childNodes[i].nodeName.toLowerCase() == 'dd') {
        if (j > -1) {
          entries[j].items[entries[j].items.length] = list.childNodes[i];
        }
      }
    }
    
    for(i=0; i<entries.length; i++) {
      h = 0.0;
      for (j=0; j<entries[i].items.length; j++) {
        h += entries[i].items[j].offsetHeight;
      }
      entries[i].height = h;
      if (i == 0) {
        entries[i].cumlHeight = 0;
      }
      else {
        entries[i].cumlHeight = entries[i-1].cumlHeight + entries[i-1].height;
      }
    }
    
    var totalHeight = entries[entries.length-1].cumlHeight;
    var leftList = document.createElement('dl');
    var rightList = document.createElement('dl');
    
    for (i=0; i<entries.length; i++) {
      entries[i].percentHeight = entries[i].cumlHeight / totalHeight;
      //alert(entries[i].percentHeight);
      if (entries[i].percentHeight <= 0.5) {
        for (var j=0; j<entries[i].items.length; j++) {
          leftList.appendChild(entries[i].items[j]);
        }
      }
      else {
        for (var j=0; j<entries[i].items.length; j++) {
          rightList.appendChild(entries[i].items[j]);
        }
      }
    }
    
    var leftCol  = document.createElement('div'); leftCol.className  = 'left-col';
    var rightCol = document.createElement('div'); rightCol.className = 'right-col';
    leftCol.appendChild(leftList);
    rightCol.appendChild(rightList);
    
    var parent = list.parentNode;
    parent.removeChild(list);
    parent.appendChild(leftCol);
    parent.appendChild(rightCol);
  },
  doList : function(list) {
  },
  getElementsByClassName : function(el, cls) {
    var els = el.getElementsByTagName('*');
    var out_els = [];
    var match_cls = ' ' + cls + ' ';
    for (var i=0; i<els.length; i++) {
      if ((' ' + els[i].className + ' ').indexOf(match_cls) > -1) {
        out_els[out_els.length] = els[i];
      }
    }
    return out_els;
  },
	addEvent: function(elm, evType, fn, useCapture){
		if (elm.addEventListener)
		{
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},

	_domReady: function() {
    if (ColumnsHandler._readyDone) {
      return;
    }
    ColumnsHandler._readyDone = true;

    if (ColumnsHandler._timer) { clearInterval(ColumnsHandler._timer); ColumnsHandler._timer = false; }

    for (var i=0; i<ColumnsHandler._readyCallbacks.length; i++) {
      (function(f) { f(); })(ColumnsHandler._readyCallbacks[i]);
    }
	},

	onDomReady: function(fn) {
    if (!this._readyCallbacks) {
      this._readyDone = false;
      this._readyCallbacks = [];

      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", ColumnsHandler._domReady, false);

        /*@cc_on @*/
        /*@if (@_win32)
            document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") ColumnsHandler._domReady();
            };
        /*@end @*/

        if (/WebKit/i.test(navigator.userAgent)) {
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) { ColumnsHandler._domReady(); };
          }, 10);
        }

        ColumnsHandler.addEvent(window, 'load', ColumnsHandler._domReady, false);
    }
    this._readyCallbacks[this._readyCallbacks.length] = fn;
	}
};
ColumnsHandler.init();