/**
 * javascript used for rollover effect.
 *
 * The rollover behavior for "What is this" titles:
 *
 * - when mouse move over titles, popup shows after half second delay
 * - when mouse move out titles, popup disappear after 0.1 second delay
 * - popup will stay if the mouse moved over it.
 *
 * this script requires jQuery library
 *
 */
var selectedTitleHeader = null;
var settimeMouseOn = null;
var settimeMouseOff = null;
var settimeZIndexOff1 = null;
var settimeZIndexOff2 = null;

// reposition the popup
var docRoot = 'document.body';
var o3_frame=self;
var holderOffSet = null;
var defaultPopupLeft = '0px';
var defaultPopupTop = '-10px';


// {{{ rollover

jQuery(document).ready(function() {
        // {{{ title hover
        /**
         * function for mouse over and off
         *
         */
        jQuery('h4 a.title_link_rollover').hover(function() {
                // width of current link, used for display popup
                var lineWidth = jQuery(this).width();

                // hide any opened popup
                jQuery('div.popup_holder div.popup').hide();

                // the title holder block
                selectedTitleHeader = jQuery(this).parent();

                // set parent holder z-index. This is a work around for IE6, IE7
                // which render position::relative blocks in a different way.
                
                // if we have scheduled mouse off action, cancel it. otherwise user
                // may see the disappear of popup when mouse over the title.
                clearTimeout(settimeMouseOff);
                clearTimeout(settimeZIndexOff2);

                // section z-index rised, for IE
                jQuery(this).parent().parent().parent().css('z-index', '15');

                // reset position first
                resetPosition(jQuery('div.popup_holder div:first', selectedTitleHeader));                
                placePopLayer(selectedTitleHeader, lineWidth);

                // now display popup with half second delay
                settimeMouseOn = setTimeout("jQuery('div.popup_holder div:first', selectedTitleHeader).show();", 500);
            }, function() {
                // clear any delayed mouse over action
                clearTimeout(settimeMouseOn);

                // the title holder block
                selectedTitleHeader = jQuery(this).parent();

                // hide only if the block is already shown
                if (jQuery('div.popup_holder div:first', selectedTitleHeader).css('display') == 'block') {
                    settimeMouseOff = setTimeout("jQuery('div.popup_holder div:first', selectedTitleHeader).hide();resetPosition(jQuery('div.popup_holder div:first', selectedTitleHeader));", 500);
                }

                // play z-index with IE6 and IE7
                settimeZIndexOff2 = setTimeout("selectedTitleHeader.parent().parent().css('z-index', '');", 500);
            });

        // the popup block mouse on/off event
        jQuery('div.popup_holder div.popup').hover(function() {
            // keep the popup open if the user place mouse over it
            clearTimeout(settimeMouseOff);
            clearTimeout(settimeZIndexOff2);
        }, function() {
            // hide the popup
            jQuery(this).hide();
            jQuery(this).parent().parent().parent().parent().css('z-index', '');
            resetPosition(jQuery(this));
        });
        // }}} 
        // {{{ item hover

        /**
         * function for mouse over and off
         *
         */
        jQuery('a.item_link_rollover').hover(function() {
                // width of current link, used for display popup
                var lineWidth = jQuery(this).width();

                // hide any opened popup
                jQuery('div.popup_holder div.popup').hide();

                // // the title holder block
                selectedTitleHeader = jQuery(this).parent();

                // set parent holder z-index. This is a work around for IE6, IE7
                // which render position::relative blocks in a different way.
                
                // if we have scheduled mouse off action, cancel it. otherwise user
                // may see the disappear of popup when mouse over the title.
                clearTimeout(settimeMouseOff);
                clearTimeout(settimeZIndexOff2);

                // // section z-index rised, for IE
                // jQuery(this).parent().parent().parent().css('z-index', '15');

                // reset position first
                resetPosition(jQuery('div.popup_holder div:first', selectedTitleHeader));                
                placePopLayer(selectedTitleHeader, lineWidth);

                // now display popup with half second delay
                settimeMouseOn = setTimeout("jQuery('div.popup_holder div:first', selectedTitleHeader).show();", 500);
            }, function() {
                // clear any delayed mouse over action
                clearTimeout(settimeMouseOn);

                // the title holder block
                selectedTitleHeader = jQuery(this).parent();

                // hide only if the block is already shown
                if (jQuery('div.popup_holder div:first', selectedTitleHeader).css('display') == 'block') {
					settimeMouseOff = setTimeout("jQuery('div.popup_holder div:first', selectedTitleHeader).hide();resetPosition(jQuery('div.popup_holder div:first', selectedTitleHeader));", 500);
                }

                // // play z-index with IE6 and IE7
                settimeZIndexOff2 = setTimeout("selectedTitleHeader.parent().parent().css('z-index', '');", 500);
            });

        // }}}
        // {{{ title_link_rollover onclick, cancel popup

        jQuery('h4 a.title_link_rollover').click(function() {

            if (jQuery(this).attr('href').indexOf('javascript') == -1) {
            
                // keep the popup open if the user place mouse over it
                clearTimeout(settimeMouseOn);
                clearTimeout(settimeMouseOff);
                clearTimeout(settimeZIndexOff2);
                // hide any opened popup
                jQuery('h4 div.popup_holder div.popup').hide();
                resetPosition(jQuery(this));
            }
        });

        // }}}
        // {{{ item_link_rollover onclick, cancel popup

        jQuery('a.item_link_rollover').click(function() {

            if (jQuery(this).attr('href').indexOf('javascript') == -1) {
            
                // keep the popup open if the user place mouse over it
                clearTimeout(settimeMouseOn);
                clearTimeout(settimeMouseOff);
                clearTimeout(settimeZIndexOff2);
                // hide any opened popup
                jQuery('div.popup_holder div.popup').hide();
                resetPosition(jQuery(this));
            }
        });

        // }}}
});

// }}} 
// {{{ placePopLayer

// Decides where we want the popup.
function placePopLayer(selectedTitleHeader, rightOffset) 
{
    var absHolderX, absHolderY;
    var popupWidth, popupHeight;
    var selectTitleWidth, selectTitleHeight;
    var popup;
    var imageHolder;
    var imageArrow;

    // popup holder position
    holderOffSet = jQuery('div.popup_holder', selectedTitleHeader).offset({ scroll: true });
    absHolderScrollTop = getScrollXY().scrollY;
    absHolderScrollLeft = getScrollXY().scrollX;
    absHolderX = holderOffSet.left - absHolderScrollLeft;
    absHolderY = holderOffSet.top - absHolderScrollTop;

    // popup layer 
    popup = jQuery('div.popup_holder div:first', selectedTitleHeader);
    imageArrow = jQuery('div.popup_holder div:first div#whatisthis_rollover_arrow img', selectedTitleHeader);
    imageHolder = jQuery('div.popup_holder div:first div#whatisthis_rollover_arrow', selectedTitleHeader);
    popupWidth = jQuery('div.popup_holder div:first', selectedTitleHeader).width();
    popupHeight = jQuery('div.popup_holder div:first', selectedTitleHeader).height();
    
    // selectTitle
	if (jQuery('a.title_link_rollover', selectedTitleHeader).length > 0) {
		selectTitleWidth		= jQuery('a.title_link_rollover', selectedTitleHeader).width();
		selectTitleHeight		= jQuery('a.title_link_rollover', selectedTitleHeader).height();
	} else if (jQuery('a.item_link_rollover', selectedTitleHeader).length > 0) {
		selectTitleWidth		= jQuery('a.item_link_rollover', selectedTitleHeader).width();
		selectTitleHeight		= 17; // IE8 has inconsistent behavior with height() function.
	} else {
		selectTitleWidth = 0;
		selectTitleHeight = 0;
	}
    
    // HORIZONTAL PLACEMENT, re-arranged to work in Safari
    if (o3_frame.innerWidth) widthFix=18; 
    iwidth = getWindowWidth();

    // VERTICAL PLACEMENT, re-arranged to work in Safari
    if (o3_frame.innerHeight) {
        iheight=o3_frame.innerHeight;
    } else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')) { 
        iheight=eval('o3_frame.'+docRoot+'.clientHeight');
    }           

    if (
            ((iwidth - absHolderX - 40) < popupWidth) &&
            ((absHolderX - selectTitleWidth) > popupWidth) &&
            ((iheight - absHolderY) < popupHeight) &&
            ((absHolderY) > popupHeight)
       ) {
        // move to top left
        newPopupX = popupWidth + selectTitleWidth + 30 - rightOffset + 0;
        jQuery(popup).css('left', '-' + newPopupX + 'px');
        newPopupY = popupHeight - selectTitleHeight - 15;
        jQuery(popup).css('top', '-' + newPopupY + 'px');
        jQuery(imageArrow).attr('src', '/images/arrow_right.gif');
        jQuery(imageHolder).removeClass().addClass('whatisthis_rollover_arrow_lr');
    } else if (
            ((iwidth - absHolderX - 40) < popupWidth) &&
            ((absHolderX - selectTitleWidth) > popupWidth)
       ) {
        // move box to left
        newPopupX = popupWidth + selectTitleWidth + 30 - rightOffset + 0;
        jQuery(popup).css('left', '-' + newPopupX + 'px');
        jQuery(imageArrow).attr('src', '/images/arrow_right.gif');
        jQuery(imageHolder).removeClass().addClass('whatisthis_rollover_arrow_ur');
    } else if (
            ((iheight - absHolderY) < popupHeight) &&
            ((absHolderY) > popupHeight)
       ) {
        // move box to top
        newPopupY = popupHeight - selectTitleHeight - 15;
        newPopupX = rightOffset + 10;
        jQuery(popup).css('left', newPopupX + 'px');
        jQuery(popup).css('top', '-' + newPopupY + 'px');
        jQuery(imageHolder).removeClass().addClass('whatisthis_rollover_arrow_ll');
    } else {
        // default position
        newPopupX = rightOffset + 10;
        newPopupY = 8;
        jQuery(popup).css('top', '-' + newPopupY + 'px');
        jQuery(popup).css('left', newPopupX + 'px');
    }
}

// }}}
// {{{ reset position

function resetPosition(obj)
{
    obj.css('left', defaultPopupLeft);
    obj.css('top', defaultPopupTop);
    jQuery('div#whatisthis_rollover_arrow img', obj).attr('src', '/img/arrow_left.gif');
    imageHolder = jQuery('div#whatisthis_rollover_arrow', obj);
    jQuery(imageHolder).removeClass().addClass('whatisthis_rollover_arrow_ul');
}

// }}}
// {{{ window width

// get Browser window width
function getWindowWidth() {
    var w;
    if (o3_frame.innerWidth) w=o3_frame.innerWidth;
    else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth')) 
        w=eval('o3_frame.'+docRoot+'.clientWidth');
    return w;           
}

// }}}
// {{{ getScrollXY

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return { scrollX: scrOfX, scrollY: scrOfY };
}

// }}}
// {{{ overlib


//\/////
//\  overLIB 4.21 - You may not remove or change this notice.
//\  Copyright Erik Bosrup 1998-2004. All rights reserved.
//\
//\  Contributors are listed on the homepage.
//\  This file might be old, always check for the latest version at:
//\  http://www.bosrup.com/web/overlib/
//\
//\  Please read the license agreement (available through the link above)
//\  before using overLIB. Direct any licensing questions to erik@bosrup.com.
//\
//\  Do not sell this as your own work or remove this copyright notice. 
//\  For full details on copying or changing this script please read the
//\  license agreement at the link above. Please give credit on sites that
//\  use overLIB and submit changes of the script so other people can use
//\  them as well.
//   $Revision: 1.5 $                $Date: 2009/10/26 13:34:08 $
//\/////
//\mini

////////
// PRE-INIT
// Ignore these lines, configuration is below.
////////
var olLoaded = 0;var pmStart = 10000000; var pmUpper = 10001000; var pmCount = pmStart+1; var pmt=''; var pms = new Array(); /* var olInfo = new Info('4.21', 1); */
var FREPLACE = 0; var FBEFORE = 1; var FAFTER = 2; var FALTERNATE = 3; var FCHAIN=4;
var olHideForm=0;  // parameter for hiding SELECT and ActiveX elements in IE5.5+ 
var olHautoFlag = 0;  // flags for over-riding VAUTO and HAUTO if corresponding
var olVautoFlag = 0;  // positioning commands are used on the command line
var hookPts = new Array(), postParse = new Array(), cmdLine = new Array(), runTime = new Array();
// for plugins
registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');

////////
// DEFAULT CONFIGURATION
// Settings you want everywhere are set here. All of this can also be
// changed on your html page or through an overLIB call.
////////
if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#CCCCFF";
if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#333399";
if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";
if (typeof ol_capcolor=='undefined') var ol_capcolor="#FFFFFF";
if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";
if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";
if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";
if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";
if (typeof ol_textsize=='undefined') var ol_textsize="1";
if (typeof ol_captionsize=='undefined') var ol_captionsize="1";
if (typeof ol_closesize=='undefined') var ol_closesize="1";
if (typeof ol_width=='undefined') var ol_width="300";
if (typeof ol_border=='undefined') var ol_border="1";
if (typeof ol_cellpad=='undefined') var ol_cellpad=2;
if (typeof ol_offsetx=='undefined') var ol_offsetx=10;
if (typeof ol_offsety=='undefined') var ol_offsety=1;
if (typeof ol_text=='undefined') var ol_text="Default Text";
if (typeof ol_cap=='undefined') var ol_cap="";
if (typeof ol_sticky=='undefined') var ol_sticky=0;
if (typeof ol_background=='undefined') var ol_background="";
if (typeof ol_close=='undefined') var ol_close="Close";
if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT;
if (typeof ol_status=='undefined') var ol_status="";
if (typeof ol_autostatus=='undefined') var ol_autostatus=0;
if (typeof ol_height=='undefined') var ol_height=-1;
if (typeof ol_snapx=='undefined') var ol_snapx=0;
if (typeof ol_snapy=='undefined') var ol_snapy=0;
if (typeof ol_fixx=='undefined') var ol_fixx=-1;
if (typeof ol_fixy=='undefined') var ol_fixy=-1;
if (typeof ol_relx=='undefined') var ol_relx=null;
if (typeof ol_rely=='undefined') var ol_rely=null;
if (typeof ol_fgbackground=='undefined') var ol_fgbackground="";
if (typeof ol_bgbackground=='undefined') var ol_bgbackground="";
if (typeof ol_padxl=='undefined') var ol_padxl=1;
if (typeof ol_padxr=='undefined') var ol_padxr=1;
if (typeof ol_padyt=='undefined') var ol_padyt=1;
if (typeof ol_padyb=='undefined') var ol_padyb=1;
if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0;
if (typeof ol_vpos=='undefined') var ol_vpos=BELOW;
if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0;
if (typeof ol_capicon=='undefined') var ol_capicon="";
if (typeof ol_frame=='undefined') var ol_frame=self;
if (typeof ol_timeout=='undefined') var ol_timeout=0;
if (typeof ol_function=='undefined') var ol_function=null;
if (typeof ol_delay=='undefined') var ol_delay=0;
if (typeof ol_hauto=='undefined') var ol_hauto=0;
if (typeof ol_vauto=='undefined') var ol_vauto=0;
if (typeof ol_closeclick=='undefined') var ol_closeclick=0;
if (typeof ol_wrap=='undefined') var ol_wrap=0;
if (typeof ol_followmouse=='undefined') var ol_followmouse=1;
if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0;
if (typeof ol_closetitle=='undefined') var ol_closetitle='Close';
if (typeof ol_compatmode=='undefined') var ol_compatmode=0;
if (typeof ol_css=='undefined') var ol_css=CSSOFF;
if (typeof ol_fgclass=='undefined') var ol_fgclass="";
if (typeof ol_bgclass=='undefined') var ol_bgclass="";
if (typeof ol_textfontclass=='undefined') var ol_textfontclass="";
if (typeof ol_captionfontclass=='undefined') var ol_captionfontclass="";
if (typeof ol_closefontclass=='undefined') var ol_closefontclass="";

////////
// ARRAY CONFIGURATION
////////

// You can use these arrays to store popup text here instead of in the html.
if (typeof ol_texts=='undefined') var ol_texts = new Array("Text 0", "Text 1");
if (typeof ol_caps=='undefined') var ol_caps = new Array("Caption 0", "Caption 1");

////////
// END OF CONFIGURATION
// Don't change anything below this line, all configuration is above.
////////





////////
// INIT
////////
// Runtime variables init. Don't change for config!
var o3_text="";
var o3_cap="";
var o3_sticky=0;
var o3_background="";
var o3_close="Close";
var o3_hpos=RIGHT;
var o3_offsetx=2;
var o3_offsety=2;
var o3_fgcolor="";
var o3_bgcolor="";
var o3_textcolor="";
var o3_capcolor="";
var o3_closecolor="";
var o3_width=100;
var o3_border=1;
var o3_cellpad=2;
var o3_status="";
var o3_autostatus=0;
var o3_height=-1;
var o3_snapx=0;
var o3_snapy=0;
var o3_fixx=-1;
var o3_fixy=-1;
var o3_relx=null;
var o3_rely=null;
var o3_fgbackground="";
var o3_bgbackground="";
var o3_padxl=0;
var o3_padxr=0;
var o3_padyt=0;
var o3_padyb=0;
var o3_fullhtml=0;
var o3_vpos=BELOW;
var o3_aboveheight=0;
var o3_capicon="";
var o3_textfont="Verdana,Arial,Helvetica";
var o3_captionfont="Verdana,Arial,Helvetica";
var o3_closefont="Verdana,Arial,Helvetica";
var o3_textsize="1";
var o3_captionsize="1";
var o3_closesize="1";
var o3_frame=self;
var o3_timeout=0;
var o3_timerid=0;
var o3_allowmove=0;
var o3_function=null; 
var o3_delay=0;
var o3_delayid=0;
var o3_hauto=0;
var o3_vauto=0;
var o3_closeclick=0;
var o3_wrap=0;
var o3_followmouse=1;
var o3_mouseoff=0;
var o3_closetitle='';
var o3_compatmode=0;
var o3_css=CSSOFF;
var o3_fgclass="";
var o3_bgclass="";
var o3_textfontclass="";
var o3_captionfontclass="";
var o3_closefontclass="";

// Display state variables
var o3_x = 0;
var o3_y = 0;
var o3_showingsticky = 0;
var o3_removecounter = 0;

// Our layer
var over = null;
var fnRef, hoveringSwitch = false;
var olHideDelay;

// Decide browser version
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var olOp = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode);  // Opera 7
var olNs4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4);
var olNs6 = (document.getElementById) ? true : false;
var olKq = (olNs6 && /konqueror/i.test(navigator.userAgent));
var olIe4 = (document.all) ? true : false;
var olIe5 = false; 
var olIe55 = false; // Added additional variable to identify IE5.5+

// Resize fix for NS4.x to keep track of layer
if (olNs4) {
    var oW = window.innerWidth;
    var oH = window.innerHeight;
    window.onresize = function() { if (oW != window.innerWidth || oH != window.innerHeight) location.reload(); }
}

// Microsoft Stupidity Check(tm).
if (olIe4) {
    var agent = navigator.userAgent;
    if (/MSIE/.test(agent)) {
        var versNum = parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);
        if (versNum >= 5){
            olIe5=true;
            olIe55=(versNum>=5.5&&!olOp) ? true : false;
            if (olNs6) olNs6=false;
        }
    }
    if (olNs6) olIe4 = false;
}

// Check for compatability mode.
if (document.compatMode && document.compatMode == 'CSS1Compat') {
    docRoot= ((olIe4 && !olOp) ? 'document.documentElement' : docRoot);
}

var olShowId=-1;

// {{{ PLUGIN REGISTRATION FUNCTIONS

////////
//  PLUGIN REGISTRATION FUNCTIONS
////////

// Registers commands and creates constants.
function registerCommands(cmdStr) {
    if (typeof cmdStr!='string') return;

    var pM = cmdStr.split(',');
    pms = pms.concat(pM);

    for (var i = 0; i< pM.length; i++) {
        eval(pM[i].toUpperCase()+'='+pmCount++);
    }
}

// Registers no-parameter commands
function registerNoParameterCommands(cmdStr) {
    if (!cmdStr && typeof cmdStr != 'string') return;
    pmt=(!pmt) ? cmdStr : pmt + ',' + cmdStr;
}

// Register a function to hook at a certain point.
function registerHook(fnHookTo, fnRef, hookType, optPm) {
    var hookPt, last = typeof optPm;
    
    if (fnHookTo == 'plgIn'||fnHookTo == 'postParse') return;
    if (typeof hookPts[fnHookTo] == 'undefined') hookPts[fnHookTo] = new FunctionReference();

    hookPt = hookPts[fnHookTo];

    if (hookType != null) {
        if (hookType == FREPLACE) {
            hookPt.ovload = fnRef;  // replace normal overlib routine
            if (fnHookTo.indexOf('ol_content_') > -1) hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef; 

        } else if (hookType == FBEFORE || hookType == FAFTER) {
            var hookPt=(hookType == 1 ? hookPt.before : hookPt.after);

            if (typeof fnRef == 'object') {
                hookPt = hookPt.concat(fnRef);
            } else {
                hookPt[hookPt.length++] = fnRef;
            }

            if (optPm) hookPt = reOrder(hookPt, fnRef, optPm);

        } else if (hookType == FALTERNATE) {
            if (last=='number') hookPt.alt[pms[optPm-1-pmStart]] = fnRef;
        } else if (hookType == FCHAIN) {
            hookPt = hookPt.chain; 
            if (typeof fnRef=='object') hookPt=hookPt.concat(fnRef); // add other functions 
            else hookPt[hookPt.length++]=fnRef;
        }

        return;
    }
}

// Register a function that will set runtime variables.
function registerRunTimeFunction(fn) {
    if (isFunction(fn)) {
        if (typeof fn == 'object') {
            runTime = runTime.concat(fn);
        } else {
            runTime[runTime.length++] = fn;
        }
    }
}

// Register a function that will handle command parsing.
function registerCmdLineFunction(fn){
    if (isFunction(fn)) {
        if (typeof fn == 'object') {
            cmdLine = cmdLine.concat(fn);
        } else {
            cmdLine[cmdLine.length++] = fn;
        }
    }
}

// Register a function that does things after command parsing. 
function registerPostParseFunction(fn){
    if (isFunction(fn)) {
        if (typeof fn == 'object') {
            postParse = postParse.concat(fn);
        } else {
            postParse[postParse.length++] = fn;
        }
    }
}

// }}}


// }}}
