/*
    by Paul@YellowPencil.com and Scott@YellowPencil.com
    includes TextResizeDetector by Lawrence Carvalho <carvalho@uk.yahoo-inc.com>
    feel free to delete all comments except for the above credit
*/
// Replace 'center' 'right' and 'left' with the ID names of the columns you want to balance.

// The last one is there to show how you can add more columns.  Just delete the ones you're not using.
var divs = new Array('navColumn', 'contentColumn', 'sidebar');

// Initialize Scripts - is this a browser that understands DOM?
function scriptInit() { if (!document.getElementById) { return; } }

// Set up Event Listener
function addEvent(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; }
}
// Start Column Script
function setTall() {
    if (document.getElementById) { var maxHeight = 0; for (var i = 0; i < divs.length; i++) {
            if (document.getElementById(divs[i]) != null)
            { var div = document.getElementById(divs[i]); div.style.height = null; if (div.offsetHeight > maxHeight) maxHeight = div.offsetHeight; }
        }
    for (var i = 0; i < divs.length; i++) {
            if (document.getElementById(divs[i]) != null)
            { var div = document.getElementById(divs[i]); div.style.height = maxHeight + 'px'; if (div.offsetHeight > maxHeight) { div.style.height = (maxHeight - (div.offsetHeight - maxHeight)) + 'px'; } }
        }
    }
}
// Assign one of the columns to the TextResizeDetector.
function initTall() {
    if (document.getElementById) { for (var i = 0; i < divs.length; i++)
        { if (document.getElementById(divs[i]) != null) { TextResizeDetector.TARGET_ELEMENT_ID = divs[i]; break; } }
    setTall(); } 
}
// Fire Events
addEvent(window, 'load', initTall, false);
addEvent(window, 'resize', setTall, false);
/*    Detects changes to font sizes when user changes browser settings
    Fires a custom event with the following data:
    iBase  : base font size
    iDelta : difference in pixels from previous setting
    iSize  : size in pixel of text
    author Lawrence Carvalho carvalho@uk.yahoo-inc.com */
// @constructor
TextResizeDetector = function() {
    var el  = null;
    var iIntervalDelay  = 200;
    var iInterval = null;
    var iCurrSize = -1;
    var iBase = -1;
     var aListeners = [];
     var createControlElement = function() {
         el = document.createElement('span');
        el.id='textResizeControl';
        el.innerHTML='&nbsp;';
        el.style.position="absolute";
        el.style.left="-9999px";
        var elC = document.getElementById(TextResizeDetector.TARGET_ELEMENT_ID);
        // insert before firstChild
        if (elC)
            elC.insertBefore(el,elC.firstChild);
        iBase = iCurrSize = TextResizeDetector.getSize();
     };
     function _stopDetector() {
        window.clearInterval(iInterval);
        iInterval=null;
    };
    function _startDetector() {
        if (!iInterval) {
            iInterval = window.setInterval('TextResizeDetector.detect()',iIntervalDelay);
        }
    };
      function _detect() {
         var iNewSize = TextResizeDetector.getSize();
         if(iNewSize!== iCurrSize) {
            for (var     i=0;i <aListeners.length;i++) {
                aListnr = aListeners[i];
                var oArgs = {  iBase: iBase,iDelta:((iCurrSize!=-1) ? iNewSize - iCurrSize + 'px' : "0px"),iSize:iCurrSize = iNewSize};
                if (!aListnr.obj) {
                    aListnr.fn('textSizeChanged',[oArgs]);
                }
                else  {
                    aListnr.fn.apply(aListnr.obj,['textSizeChanged',[oArgs]]);
                }
            }
         }
         return iCurrSize;
     };
    var onAvailable = function() {
        if (!TextResizeDetector.onAvailableCount_i ) {
            TextResizeDetector.onAvailableCount_i =0;
        }
        if (document.getElementById(TextResizeDetector.TARGET_ELEMENT_ID)) {
            TextResizeDetector.init();
            if (TextResizeDetector.USER_INIT_FUNC){
                TextResizeDetector.USER_INIT_FUNC();
            }
            TextResizeDetector.onAvailableCount_i = null;
        }
        else {
            if (TextResizeDetector.onAvailableCount_i<600) {
                   TextResizeDetector.onAvailableCount_i++;
                setTimeout(onAvailable,200)
            }
        }
    };
    setTimeout(onAvailable,500);
     return {
             /*
              * Initializes the detector
              *
              * @param {String} sId The id of the element in which to create the control element
              */
             init: function() {
                 createControlElement();
                _startDetector();
             },
            /**
             * Adds listeners to the ontextsizechange event.
             * Returns the base font size
             *
             */
             addEventListener:function(fn,obj,bScope) {
                aListeners[aListeners.length] = {
                    fn: fn,
                    obj: obj
                }
                return iBase;
            },
            /**
             * performs the detection and fires textSizeChanged event
             * @return the current font size
             * @type {integer}
             */
             detect:function() {
                 return _detect();
             },
             /**
              * Returns the height of the control element
              *
             * @return the current height of control element
             * @type {integer}
              */
             getSize:function() {
                     var iSize;
                     return el.offsetHeight;

             },
             /**
              * Stops the detector
              */
             stopDetector:function() {
                return _stopDetector();
            },
            /*
             * Starts the detector
             */
             startDetector:function() {
                return _startDetector();
            }
     }
 }();
/*** end TextResizeDetector */
TextResizeDetector.TARGET_ELEMENT_ID = 'doc';
TextResizeDetector.USER_INIT_FUNC = function() {
    var iBase = TextResizeDetector.addEventListener(setTall, null);
};