  var cdArr = new Array();
  //var loadingHTML = "<h3>Loading...</h3>";
  //var loadingHTML = "<img width='220' height='19' src='images/loading.gif' style='vertical-align: bottom; margin:2px 0; '>";
  if(!loadingHTML) var loadingHTML = "<img id='imgLoading' width='220' height='19' src='' style='vertical-align: bottom; margin:2px 0; '>";
  
function loadCourseDescription(cid, locn)
  {
    var today = new Date();
    var t0 = today.getTime();
    if(cdArr[cid] != null)
    {
      if(getVal('hCIDCD')==cid && isCDDlgVisible())
      {
        hideCourseDescriptions();
        return;
      }
      setVal('hCIDCD', cid);
      showCourseDescriptions(cid, false, false);
      return;
    }
    //setVal('hCID', cid);
    //setVal('hLocation', locn);

    var f = initNewForm('formCD');
    addHiddenVar(f, createHiddenVar('hAct', 'hActCD', 1));
    addHiddenVar(f, createHiddenVar('url', 'hURLCD', uURL));
    addHiddenVar(f, createHiddenVar('hCID', 'hCIDCD', cid));
/*
		<input type='hidden' id='hCID' name='hCID' value=''>  
		<input type='hidden' id='hLocation' name='hLocation' value=''>  
		<input type='hidden' name='hAct' value='1'>  
*/ 

    var callback = {
            customevents:{
                onSuccess:function(eventType, args) {
                        
                        var jsonString = args[0].responseText;
                        var ihtml = "";
                        if(jsonString)
                        {
                            // Process the JSON data returned from the server
                            var messages = [];
                            try { messages = YAHOO.lang.JSON.parse(jsonString); }
                            catch (x) {
                                alert("JSON Parse failed!\n"+x.message);
                                return;
                            }
                            if(messages['errmsg'] != null)
                            {
                                alert(messages['errmsg']);
                                return;
                            }
                            var d = new Date();
                            var t1 = d.getTime();
                            var diff = t1 - t0;
                            ihtml= messages['ihtml'];
                            var classNo = messages['classNo'];
                            var id   = getVal('hCIDCD');
                            //var locn = getVal('hLocation');
                            
                            if(ihtml)
                            {
                              cdArr[id] = new Array();
                              cdArr[id]['ihtml'] = ihtml;
                              cdArr[id]['classNo'] = classNo;
                              
                              showCourseDescriptions(id, false, true);
                              
                              //yCDDlg.setHeader("Course Description ["+diff/1000.+"s]");
                            }
                        }
                    },
                    onFailure:function(eventType, args) {
                    // eventType has a string value of "failureEvent".
                    // args[0] is the response object.
                }
            }
    };
    showCourseDescriptions("", true, false);
    var formObject = document.getElementById('formCD'); 
    YAHOO.util.Connect.setForm(formObject); 
    var request = YAHOO.util.Connect.asyncRequest('POST', "loadContent.php", callback);
  }
function setCDPosn(id)
  {
    var br = getBrSize();
    var w = br.width;
    var a = byId(id).getElementsByTagName('a');
    
    //var np = getElementPosition(id);
    var np = getElementPositionObj(a[0]);
    //console.log("[%d][%d][%d]", w, np.left, np.top);
    var fds = byId('dFF1').style;
    var s = getVal('boxPostionCD');
    var v = getVal('boxPostionCDV');
    var dy = 0;
    var dx = 40;
    if(v=='below') { dx = 0; dy = 20; }
    if(s=='left') dx = -520;
    var ep = parseInt(np.left) + parseInt(dx);
    if( ep + 500 > w ) dx = -520;
    if( ep < 0 ) dx = 40;
    //console.log("[%d][%d]", ep, dx);
    fds.left = parseInt(np.left) + dx + "px";
    fds.top = parseInt(np.top) + dy + "px";
    fds.display = "block";
    fds.zIndex= 1000;
  }
function getElementPositionObj(elemObj)
  {
    var offsetTrail = elemObj; //byId(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    
    while ( offsetTrail )
    {
      offsetLeft += offsetTrail.offsetLeft;
      offsetTop += offsetTrail.offsetTop;
      offsetTrail = offsetTrail.offsetParent;
    }
    if ( navigator.userAgent.indexOf("Mac") != -1 && typeof document.body.leftMargin != "undefined" )
    {
      offsetLeft += document.body.leftMargin;
      offsetTop += document.body.topMargin;
    }
    return { left:offsetLeft, top:offsetTop }
  }
  
  var yCDDlg, tabViewCD, nCDTabs=0;
  
function isCDDlgVisible() { return yCDDlg.cfg.getProperty("visible"); }
function hideCourseDescriptions() { yCDDlg.hide(); }  
function showCourseDescriptions(idx, loadingFlag, newFlag)
	{
		var content = byId('dCourseDescription');	
		var msg, s;
	    
    if(!yCDDlg)
    {
			yCDDlg = new YAHOO.widget.Panel("cDesc",  
                                      {
                                        width: "600px",
                                        fixedcenter: false,
                                        constraintoviewport: true,
                                        close: true, 
                                        draggable: true, 
                                        zindex:1000000,
                                        modal: false,
                                        visible: false,
                                        effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.50}
                                      } 
                                      );
			//yCDDlg.setHeader("Course Description");
      
      s = "<div id='dCDPaneTabContainer'></div>";
      yCDDlg.setHeader(loadingHTML);
      //yCDDlg.setFooter(sRBtns);
      yCDDlg.setBody(s);
			yCDDlg.render(document.body);
      byId('imgLoading').src = activeCommsImg.src;
      yCDDlg.show();
			showHelpBubbles('dCDPaneTabContainer');

      yCDDlg.center();
    }
      else
    {
      if(loadingFlag)
      {
        yCDDlg.setHeader(loadingHTML);
        byId('imgLoading').src = activeCommsImg.src;
        //yCDDlg.setFooter(sRBtns);
        //yCDDlg.setBody("");
      }
        else
      {
        yCDDlg.setHeader("Course Descriptions");
        if(newFlag)
        {
          if(!tabViewCD)
          {
            tabViewCD = new YAHOO.widget.TabView();
            tabViewCD.appendTo('dCDPaneTabContainer');
          }
          var newLabel = cdArr[idx]['classNo'];
          cdArr[idx]['tabIdx'] = nCDTabs;
          //s  = "<div id='dCDTab"+nCDTabs+"' style='min-height:475px; padding:5px;'>";
          //s += cdArr[idx]['ihtml'];
          //s += "</div>";
          s = cdArr[idx]['ihtml'];
          tabViewCD.addTab( new YAHOO.widget.Tab({ label: newLabel, title:'', content: s, active: true }));
          
          nCDTabs++;
          //tabViewCD.appendTo('dCDPaneTabContainer');
        }
          else
        {
          tabViewCD.selectTab(cdArr[idx]['tabIdx']);
        }
      }
      yCDDlg.show();
			showHelpBubbles('dCDPaneTabContainer');
    }
	}

  var yBioDlg, yBioDlgNTabs, tabViewBio;
  var yBioDlgTabs = new Array( 1, 0, 0, 0 );
  var bioArr = new Array();
  
function loadBio(pid)
  {
    var today = new Date();
    var t0 = today.getTime();
    //console.log(t0);
    if(bioArr[pid] != null)
    {
      if(getVal('hPIDBio')==pid && isBioDlgVisible())
      {
        hideBioDlg();
        return;
      }
      setVal('hPIDBio', pid);
      tabViewBio.selectTab(0);
      showBioDlg(pid, bioArr[pid], false, true);
      return;
    }
    var f = initNewForm('formBio');
    addHiddenVar(f, createHiddenVar('hAct', 'hActBio', 2));
    addHiddenVar(f, createHiddenVar('url', 'hURLBio', uURL));
    addHiddenVar(f, createHiddenVar('hPID', 'hPIDBio', pid));

    //setVal('hPIDBio', pid);
    
    var callback = {
            customevents:{
                onSuccess:function(eventType, args) {
                        var jsonString = args[0].responseText;
                        var ihtml = new Array();
                        if(jsonString)
                        {
                            // Process the JSON data returned from the server
                            var messages = [];
                            try { messages = YAHOO.lang.JSON.parse(jsonString); }
                            catch (x) {
                                alert("JSON Parse failed!\n"+x.message);
                                return;
                            }
                            if(messages['errmsg'] != null)
                            {
                                alert(messages['errmsg']);
                                return;
                            }
                            var d = new Date();
                            var t1 = d.getTime();
                            var diff = t1 - t0;
                            //alert(diff/1000.);
                            //var dt0 = messages['dt0'];
                            //alert(dt0);
                            ihtml= messages['ihtml'];
                            var id   = getVal('hPIDBio');
                            
                            if(ihtml)
                            {
                              bioArr[id] = ihtml;
                              showBioDlg(id, ihtml, false, false);
                              
                              //yBioDlg.setHeader("Biographical Information ["+diff/1000.+"s]");
                            }
                        }
                    },
                    onFailure:function(eventType, args) {
                    // eventType has a string value of "failureEvent".
                    // args[0] is the response object.
                }
            }
    };
    showBioDlg(pid, '', true, false);
    YAHOO.util.Connect.setForm(f); 
    var request = YAHOO.util.Connect.asyncRequest('POST', "loadContent.php", callback);
  }
  
function isBioDlgVisible() { return yBioDlg.cfg.getProperty("visible"); }
function hideBioDlg() { yBioDlg.hide(); }
function bioTabChange(e)
  {
    if(e.prevValue!= null) setDisplayStatus('dBioTab'+e.prevValue, 'none');
    setDisplayStatus('dBioTab'+e.newValue, 'block');
  }
function showBioDlg(pid, ihtml, loadingFlag, oldFlag)
	{
    var s;
    if(!yBioDlg)
    {
			yBioDlg = new YAHOO.widget.Panel("bioDisp",  
	                                            {
                                                width: "520px",
	                                              fixedcenter: false,
	                                              constraintoviewport: true,
	                                              close: true, 
	                                              draggable: true, 
	                                              zindex:100000,
	                                              modal: false,
	                                              visible: false,
                                                effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.50}
	                                            } 
	                                        );
      yBioDlg.setHeader(loadingHTML);
      s = "<div id='dBioPaneTabContainer' ></div>";
			//yBioDlg.setFooter(sRBtns);
			yBioDlg.setBody(s);
      if(byId('dPreHead')) { yBioDlg.render('dPreHead'); } else { yBioDlg.render(document.body); }
      if(byId('imgLoading')) byId('imgLoading').src = activeCommsImg.src;
      
            //var resize = new YAHOO.util.Resize("bioDisp", {
            //    handles: ["b"],
            //    autoRatio: false,
            //    minWidth: 520,
            //    minHeight: 300,
            //    status: false 
            //});
            //resize.on("startResize", function(args) {
            //
            //    if (this.cfg.getProperty("constraintoviewport")) {
            //        var D = YAHOO.util.Dom;
            //
            //        var clientRegion = D.getClientRegion();
            //        var elRegion = D.getRegion(this.element);
            //
            //        resize.set("maxWidth", clientRegion.right - elRegion.left - YAHOO.widget.Overlay.VIEWPORT_OFFSET);
            //        resize.set("maxHeight", clientRegion.bottom - elRegion.top - YAHOO.widget.Overlay.VIEWPORT_OFFSET);
            //    } else {
            //        resize.set("maxWidth", 520);
            //        resize.set("maxHeight", null);
            //    }
            //
            //}, yBioDlg, true);
            //
            //resize.on("resize", function(args) {
            //    var panelHeight = args.height;
            //    this.cfg.setProperty("height", panelHeight + "px");
            //}, yBioDlg, true);      

      
      
      tabViewBio = new YAHOO.widget.TabView();

      s = "<div id='dBioTab0' style='padding:5px;'></div>";
      tabViewBio.addTab( new YAHOO.widget.Tab({ label: 'General', title:'', content: s, active: true }));

      tabViewBio.appendTo('dBioPaneTabContainer');
      tabViewBio.addListener( 'activeIndexChange', bioTabChange);

      yBioDlgNTabs = 1;
      
      yBioDlg.show();
			showHelpBubbles('dBioPaneTabContainer');
			
      //yBioDlg.center();
      return;
    }
      else
    {
      //if(ihtml=='')
      if(oldFlag)
      {
        for(i=yBioDlgNTabs-1; i>0; i--)
        {
          tabViewBio.selectTab(i);
          tabViewBio.removeTab(tabViewBio.get('activeTab')); 
        }
        tabViewBio.selectTab(0);
        yBioDlgNTabs = 1;
      }
      if(loadingFlag)
      {
        yBioDlg.setHeader(loadingHTML);
        byId('imgLoading').src = activeCommsImg.src;
        setinnerHTML('dBioTab0', '');
        
        for(i=yBioDlgNTabs-1; i>0; i--)
        {
          tabViewBio.selectTab(i);
          tabViewBio.removeTab(tabViewBio.get('activeTab')); 
        }
        tabViewBio.selectTab(0);
        yBioDlgNTabs = 1;
      }
        else
      {
        var w = 340;
        s = "<div style='width:250px; margin:0 auto; padding:10px; text-align:center; background:#fff; border-left:1px solid #ccc; border-right:1px solid #ccc; '>"+ihtml['pictureSection']+"</div>";
        setinnerHTML('dBioTab0', s);
        
        var bioTabIdx = 1;
        var tabId = new Array(0, -1, -1, -1);
        
        if(ihtml['mainSection']) // && !yBioDlgTabs[1])
        {
          yBioDlgTabs[1] = 1;
          //s = "<div id='dBioTab1' style='min-height:200px; max-height:475px; overflow:auto; padding:5px; text-align:justify; line-height:1.5em;'></div>";
          s = "<div id='dBioTab"+bioTabIdx+"' style='display:none; min-height:200px; max-height:475px; overflow:auto; padding:5px; text-align:justify; line-height:1.5em;'></div>";
          tabViewBio.addTab( new YAHOO.widget.Tab({ label: 'Bio', title:'', content: s }));
          tabId[1] = bioTabIdx;
          yBioDlgNTabs++;
          bioTabIdx++;
          w = 520;
        }
        //  else if(!ihtml['mainSection'] && yBioDlgTabs[1])
        //{
        //  yBioDlgTabs[1] = 0;
        //  // remove tab
        //}
        if(ihtml['teachingSection'][0] || ihtml['teachingSection'][1])
        {
          yBioDlgTabs[2] = 1;
          //s = "<div id='dBioTab2' style='min-height:200px; max-height:475px; overflow:auto; padding:5px;'></div>";
          s = "<div id='dBioTab"+bioTabIdx+"' style='display:none; max-height:475px; overflow:auto; padding:5px;'></div>";
          tabViewBio.addTab( new YAHOO.widget.Tab({ label: 'Teaching', title:'', content: s }));
          tabId[2] = bioTabIdx;
          yBioDlgNTabs++;
          bioTabIdx++;
          if(w < 480) w = 480;
        }
        if(ihtml['researchSection']['general'])
        {
          yBioDlgTabs[3] = 1;
          //s = "<div id='dBioTab3' style='min-height:200px; max-height:475px; overflow:auto; padding:5px;'></div>";
          s = "<div id='dBioTab"+bioTabIdx+"' style='display:none; overflow:auto; padding:5px;'></div>";
          tabViewBio.addTab( new YAHOO.widget.Tab({ label: 'Reseach', title:'', content: s }));
          tabId[3] = bioTabIdx;
          yBioDlgNTabs++;
          bioTabIdx++;
          if(w < 340) w = 340;
        }

        if(ihtml['mainSection']) setinnerHTML('dBioTab'+tabId[1], ihtml['mainSection']);
        s = "";
        if(ihtml['teachingSection'][0] || ihtml['teachingSection'][1])
        {
          s  = "<div class='lcol' style='width:48%;'>"+ihtml['teachingSection'][0]+"</div>";
          s += "<div class='lcol' style='width:50%;'>"+ihtml['teachingSection'][1]+"</div>";
          s += "<div class='lbr'></div>";
          setinnerHTML('dBioTab'+tabId[2], s);
        }
        s = "";
        if(ihtml['researchSection']['general'])
        {
          if(ihtml['researchSection']['pubsFlag'] || ihtml['researchSection']['talksFlag'])
          {
            if(w < 700) w = 700;
            
            var tabViewResearch = new YAHOO.widget.TabView();
            
            s  = "<div id='dResearchTabGeneral' style='padding:5px;'>";
            s += "<div style='padding:10px; margin:10px auto; width:250px; background:#fff; border-left:1px solid #ccc; border-right:1px solid #ccc; '>"+ihtml['researchSection']['general']+"</div>";
            s += "</div>";
            tabViewResearch.addTab( new YAHOO.widget.Tab({ label: 'General', title:'', content: s, active: true }));
            var pDat = new Array();
            pDat['pid'] = pid;
            pDat['flg'] = 0;
            if(ihtml['researchSection']['pubsFlag'])
            {
              pDat['flg'] = 1;
              s  = "<div id='dResearchTabPubs0' style='padding:5px;'></div><div id='dResearchTabPubs' style='padding:5px;'></div>";
              tabViewResearch.addTab( new YAHOO.widget.Tab({ label: 'Publications', title:'', content: s }));
            }
            if(ihtml['researchSection']['talksFlag'])
            {
              pDat['flg'] |= 2;
              s  = "<div id='dResearchTabTalks0' style='padding:5px;'></div><div id='dResearchTabTalks' style='padding:5px;'></div>";
              tabViewResearch.addTab( new YAHOO.widget.Tab({ label: 'Talks', title:'', content: s }));
            }
            if(ihtml['researchSection']['grantsFlag'])
            {
              pDat['flg'] |= 4;
              s = "<div id='dResearchTabGrants0' style='padding:5px;'></div><div id='dResearchTabGrants' style='padding:5px;'></div>";
              tabViewResearch.addTab( new YAHOO.widget.Tab({ label: 'Grants', title:'', content: s }));
            }
            tabViewResearch.appendTo('dBioTab'+tabId[3]);
            tabViewResearch.addListener( 'activeIndexChange', researchTabChange,  pDat);
            
            if(!oldFlag && byId('ulResearchBits'))
            {
              var sbit, aObj = byId('ulResearchBits').getElementsByTagName('a');
              for(i=0; i<aObj.length; i++)
              {
              //  // ResearchExtra.php?PG=1&SC={$this->uid}
              //  // ResearchPubs.php?PG=1&SC={$this->uid}
                sbit = aObj[i].href;
                if(sbit.indexOf('ResearchPubs.php') != -1)
                {
                  aObj[i].href = '#';
                  aObj[i].className = 'noT';
                  aObj[i].title = 'View publications list';
                  YAHOO.util.Event.addListener(aObj[i], "click", function() { tabViewResearch.selectTab(1); } );
                }
                  else if(sbit.indexOf('ResearchExtra.php') != -1 )
                {
                  var p1 = sbit.indexOf('PG=');
                  sbit = sbit.substring(p1+3);
                  p1 = sbit.indexOf('&');
                  if(p1!= -1) sbit = sbit.substring(0, p1);
                  var p2 = parseInt(sbit);
                  if(p2==1)
                  {
                    aObj[i].href = '#';
                    aObj[i].className = 'noT';
                    aObj[i].title = 'View talks history';
                    YAHOO.util.Event.addListener(aObj[i], "click", function(e, pDat) {
                                                                      var idx = 1;
                                                                      if(pDat['flg'] & 1) idx++;
                                                                      tabViewResearch.selectTab(idx);
                                                                  }, pDat );
                  }
                  if(p2==3)
                  {
                    aObj[i].href = '#';
                    aObj[i].className = 'noT';
                    aObj[i].title = 'View grants history';
                    YAHOO.util.Event.addListener(aObj[i], "click", function(e, pDat) {
                                                                      var idx = 1;
                                                                      if(pDat['flg'] & 1) idx++;
                                                                      if(pDat['flg'] & 2) idx++;
                                                                      tabViewResearch.selectTab(idx);
                                                                  }, pDat );
                  }
                }
              }
            }          
          }
            else
          {
            s  = "<div style='width:250px; margin:0 auto; padding:10px; text-align:center; background:#fff; border-left:1px solid #ccc; border-right:1px solid #ccc; '>";
            s += ihtml['researchSection']['general'];
            s += "</div>";
            //yBioDlg.setBody();
            setinnerHTML('dBioTab'+tabId[3], s);
          }
        }
        yBioDlg.setHeader("Biographical Information for "+ihtml['fullName']);
        yBioDlg.cfg.setProperty("width", w+"px");
        if(byId('dResearchTabGeneral'))
        {
          var blDat =  { divId:'dResearchTabGeneral', ifFlag:0 };
          initBioLinks('', blDat);
        }
      }
      tabViewBio.selectTab(0);
      yBioDlg.show();
			showHelpBubbles('dBioPaneTabContainer');
    }
	}
function researchTabChange(e, pDat)
    {
      var flg = pDat['flg'];
      var pid = pDat['pid'];
      switch(e.newValue)
      {
        case 1:
          if(flg & 1)
          {
            // pubs
            if(!getinnerHTML('dResearchTabPubs'))
            {
              loadResearchData(pid, 0);
            }
          }
            else if(flg & 2)
          {
            // talks
            if(!getinnerHTML('dResearchTabTalks'))
            {
              loadResearchData(pid, 1);
            }
          }
            else if(flg & 4)
          {
            // grants
            if(!getinnerHTML('dResearchTabGrants'))
            {
              loadResearchData(pid, 2);
            }
          }
          break;
        case 2:
          if(flg & 2)
          {
            // talks
            if(!getinnerHTML('dResearchTabTalks'))
            {
              loadResearchData(pid, 1);
            }
          }
            else if(flg & 4)
          {
            // grants
            if(!getinnerHTML('dResearchTabGrants'))
            {
              loadResearchData(pid, 2);
            }
          }
          break;
        case 3:
          // grants
            if(!getinnerHTML('dResearchTabGrants'))
            {
              loadResearchData(pid, 2);
            }
          break;
      }
    }
function ifLoadFinished(idx)
  {
    if(idx==0) { setDisplayStatus('dResearchTabPubs0','none'); setinnerHTML('dResearchTabPubs0', ''); }
    if(idx==1) { setDisplayStatus('dResearchTabTalks0','none'); setinnerHTML('dResearchTabTalks0', ''); }
    if(idx==2) { setDisplayStatus('dResearchTabGrants0','none'); setinnerHTML('dResearchTabGrants0', ''); }
  }
function loadResearchData(pid, idx)
  {
    var src, s;
    if(idx==0)
    {
      setinnerHTML('dResearchTabPubs0', loadingHTML);
      byId('imgLoading').src = activeCommsImg.src;
      src = "ifResearchPubs.php?PVT=0&SC="+pid+"&C1=e9e2cf"
      //byId('ifPVP').src = src;
      s = "<iframe id='ifPVP' style='height:350px' marginheight='0' marginwidth='0' src='"+src+"' frameborder='0' scrolling='no' width='100%'></iframe>";
      setinnerHTML('dResearchTabPubs', s);
    }
    if(idx==1)
    {
      setinnerHTML('dResearchTabTalks0', loadingHTML);
      byId('imgLoading').src = activeCommsImg.src;
      src = "ifResearchExtra.php?BP=1&PG=1&SC="+pid+"&C1=e9e2cf"
      //byId('ifPVT').src = src;
      s = "<iframe id='ifPVT' style='height:350px' marginheight='0' marginwidth='0' src='"+src+"' frameborder='0' scrolling='no' width='100%'></iframe>";
      setinnerHTML('dResearchTabTalks', s);
    }
    if(idx==2)
    {
      setinnerHTML('dResearchTabGrants0', loadingHTML);
      byId('imgLoading').src = activeCommsImg.src;
      src = "ifResearchExtra.php?BP=1&PG=3&SC="+pid+"&C1=e9e2cf"
      s = "<iframe id='ifPVG' style='height:350px' marginheight='0' marginwidth='0' src='"+src+"' frameborder='0' scrolling='no' width='100%'></iframe>";
      setinnerHTML('dResearchTabGrants', s);
    }
    //var f = initNewForm('formComms');
    //f.appendChild( createHiddenVar('hAct', '', 3));
    //f.appendChild( createHiddenVar('pid', '', pid));
    //f.appendChild( createHiddenVar('researchDataType', '', idx));
    //YAHOO.util.Connect.setForm(f); 
    //var request = YAHOO.util.Connect.asyncRequest('POST', "loadContent.php", callback);
  }
