<PUBLIC:COMPONENT>
    <PUBLIC:ATTACH EVENT="oncontentready"       ONEVENT="fnInit()"   />
    <PUBLIC:ATTACH EVENT="onmousedown"          ONEVENT="fnGrab()"   />
    <PUBLIC:ATTACH EVENT="ondragstart"          ONEVENT="fnCancel()" />
    <PUBLIC:ATTACH EVENT="ondocumentready"      ONEVENT="fnDocumentReady()" />
    <PUBLIC:METHOD NAME="fnReposition" />
    <SCRIPT LANGUAGE="JScript">
        var m_iSpacingTop   = 10;
        var m_iSpaceBetween = 5;
        var m_iTop          = 15;
        var bUserData = false;
        var bVisited  = false;
        var oElements;
        var sContentID = "CS_ILMenuBar";     
        function SetNewGif(imgElement, newGif)
        {
            if (imgElement == null)
            {
                return;
            }
            if (imgElement.tagName.toLowerCase() != "img")
            {
                return;
            }
            var imgSrc = imgElement.src;
            var pattern = /[^\/]*\.gif$/i;
            imgElement.src = imgSrc.replace(pattern, newGif);
        }
        function GetGifName(imgElement)
        {
            if (imgElement == null)
                return "";
            if (imgElement.tagName.toLowerCase() != "img")
                return "";
            var imgSrc = imgElement.src;
            var pattern = /[^\/]*\.gif$/i;
            r = imgSrc.match(pattern);
            if (r != null)
            {
                return r;
            }
            else
                return "";
        }
       function fnDocumentReady()       
       {
           fnSaveState();
           fnReposition();
       }
       function fnLoad()
       {
           if( "object" != typeof( parentElement.oElements ) || parentElement.oElements.length != parentElement.children.length )
           {
               oElements = fnGetUserDataList();
                if( oElements != null )
                {
                    try
                    {   
                        var strElements         = String(oElements);
                        strElements             = strElements.split(";");
                        parentElement.oElements = new Array( parentElement.children.length );
                        fnCheckWebPartIDs( strElements);
                        if(bUserData == true)
                        {
                            for( i=0;i<parentElement.children.length;i++)
                            {
                               parentElement.oElements[i]   = new oConstruct(strElements[i].split("=")[0], strElements[i].split("=")[1]);
                            }
                           fnLoadContent(); 
                        }
                    }
                    catch(e)
                    {
                        oElements = null;
                    }
                }
                if( oElements == null )
                {
                    parentElement.oElements = new Array( parentElement.children.length );
                    for( i = 0; i < parentElement.children.length; i++ )
                    {
                        parentElement.oElements[i]   = new oConstruct(parentElement.children[i].id,"open");                       
                    }
                    fnLoadContent();
                }
            }
        }
    function fnInit()
    {
        runtimeStyle.position = "absolute";
        fnLoad();
        fnReposition();       
    }
    function fnCheckWebPartIDs(strElements)
    {
        for( i=0;i<parentElement.children.length;i++)
        {
              fnInternalLoop(i,strElements);
              if (bUserData == false)
              {
                oElements = null;
                return;
              }
        }
    }
    function fnFormatFileName(sFileName)
    {
        if( "string" == typeof( sFileName ) )
        {
            sFileName = sFileName.replace( /[\W]/gi , "" );
            return sFileName;
        }
    }
     function fnInternalLoop(i,strElements)
     {
        for(j=0;j<strElements.length;j++)
        {
            if ( parentElement.children[i].id == strElements[j].split("=")[0] )
            {
                bUserData = true;
                return;
            }
            else
            {
                bUserData = false;
            }
        }
     }
    function fnGetUserDataList()
    {
        var oUserData = window.document.all("oLayout");
        if (!oUserData && "undefined" != oUserData)
        {
            return;
        }
        else
        {
            oUserData.load(sContentID);      
            return(oUserData.getAttribute("userdata"));
        }
    }
    function oConstruct(oPart, bState)
    {
        this.name   = oPart;
        this.state  = bState;
    }
    function fnLoadContent()
    {
        for (var i = 0; i < parentElement.oElements.length; i++)
        {
            if (parentElement.oElements[i].state == "open")
            {
               fnShowHideContent(parentElement.children[i], true);
            }
            else if (parentElement.oElements[i].state =="close")
            {
               fnShowHideContent(parentElement.children[i], false);
            }
        }
    }
    function fnShowHideContent(tblObj, bCollapsed)
    {
        if (tblObj == null || tblObj.tagName.toLowerCase() != "table")
        {
            alert(tblObj.tagName);
            return false;
        }
        var oTableRow0  = tblObj.rows[0];
        var oTableRow1  = tblObj.rows[1];
        var oTab1       = oTableRow0.cells[0];
        var oTab2       = oTableRow0.cells[1];
        var oTab3       = oTableRow0.cells[2];
        var oSwapImg    = oTab1.children[0];
        var oEl         = oTab3.children[0];
        if( GetGifName(oEl) == "downlvel.gif" && bCollapsed == false)
        {
            SetNewGif(oEl, "chevUp.gif");
        }
        else if ( GetGifName(oEl) == "downlvel.gif" && bCollapsed == true)
        {
            SetNewGif(oEl, "chevDown.gif");
        }
        if (bCollapsed && bCollapsed == true)
        {
            oTableRow1.style.display = "";
            SetNewGif(oEl, "chevUp.gif");
            oTab1.style.backgroundColor="#6699cc";
            oTab1.style.borderBottom='1px solid #6699cc';
            oTab2.style.backgroundColor="#6699cc";
            oTab2.style.borderTop='1px solid #6699cc';
            oTab2.style.borderBottom='1px solid #6699cc';
            oTab2.parentElement.cells[1].children[0].style.backgroundColor= "#6699cc";
            oTab2.parentElement.cells[1].children[0].style.color = "#ffffff"
            oTab3.style.backgroundColor="#6699cc";
            oTab3.style.borderBottom='1px solid #6699cc';
            SetNewGif(oSwapImg, "gripBlue.gif");
            for ( i=0; i< parentElement.oElements.length;i++)
            {
                if ( parentElement.children[i].id == tblObj.id)
                {
                    parentElement.oElements[i].state = "open";
                    return;
                }
            }
        }
        else
        {
            oTableRow1.style.display = "none";
            SetNewGif(oEl, "chevDown.gif");
            oTab1.style.backgroundColor="#cccccc";
            oTab1.style.borderBottom='1px solid #aaaaaa';
            oTab2.style.backgroundColor="#cccccc";
            oTab2.style.borderTop='1px solid #aaaaaa';
            oTab2.style.borderBottom='1px solid #aaaaaa';
            oTab2.parentElement.cells[1].children[0].style.backgroundColor= "#cccccc";
            oTab2.parentElement.cells[1].children[0].style.color = "#003399"
            oTab3.style.backgroundColor="#cccccc";
            oTab3.style.borderBottom='1px solid #aaaaaa';
            SetNewGif(oSwapImg, "gripGray.gif");
            for ( i=0; i< parentElement.oElements.length;i++)
            {
                if ( parentElement.children[i].id == tblObj.id)
                {
                    parentElement.oElements[i].state = "close";
                    return;
                }
            }
        }
    }
    function fnReposition()
    {
        if (parentElement.oElements == null)
            return;
        for( var i = 0; i < parentElement.oElements.length; i++ )
        {
            for( var j = 0; j < parentElement.children.length; j++ )
            {
                if (parentElement.oElements[i].name == parentElement.children[j].id)
                {
                    parentElement.children[j].runtimeStyle.top = fnTop( parentElement.oElements[i].name);
                }
            }
        }
        element.style.zIndex = "0";
        parentElement.style.setExpression( "height" , fnTop( null ) );
        document.recalc();       
    }
    function fnCancel()
    {
        if(  event.srcElement.className == "ms-menuparthead" )
        {
            window.event.returnValue = false;
        }
        else if (  event.srcElement.parentElement.className == "ms-menuparthead" )
        {
            window.event.returnValue = false;
        }
    }
    function fnGrab()
    {
        var oEl = event.srcElement;
        var bCollapsed;
        if( oEl.className == "clsMinimize" )
        {
            var oTableRow1  = oEl.parentElement.parentElement.parentElement.rows[1];
            var bCollapsed = ( (oTableRow1.style.display == "none") ? true : false);
            fnShowHideContent(oEl.parentElement.parentElement.parentElement.parentElement, bCollapsed);         
            fnSaveState();
            fnReposition();                      
        }
        else if( oEl.className == "ms-menuparthead" || oEl.parentElement.className == "ms-menuparthead" )
        {
            m_iTop = event.clientY;
            parentElement.current = element;
            parentElement.offsetY = event.offsetY;
            element.style.zIndex = "100";
            parentElement.attachEvent( "onmousemove"  , fnMove );
            window.document.attachEvent( "onmousemove" , fnCheckState );
            window.document.attachEvent( "onmouseup"    , fnRelease );
            window.document.attachEvent( "onselectstart", fnSelect );
        }
    }
    function fnSaveState()
    {
        var oUserData = window.document.all["oLayout"];
        var sUserData = "";
        for (i=0;i<parentElement.oElements.length;i++)
        {
            sUserData += (parentElement.oElements[i].name + "=" + parentElement.oElements[i].state + ";");
        }
        sUserData  = sUserData.substr(0,sUserData.length-1);
        oUserData.setAttribute("userdata",sUserData);
        oUserData.save(sContentID);
        oUserData.load(sContentID);
        var str = oUserData.getAttribute("userdata");
   }
    function fnRelease()
    {
        var oEl = event.srcElement;
        fnSaveState();
        parentElement.detachEvent( "onmousemove" , fnMove );
        window.document.detachEvent( "onmousemove" , fnCheckState );
        window.document.detachEvent( "onmouseup" , fnRelease );
        window.document.detachEvent( "onselectstart", fnSelect );
        if( "object" == typeof(parentElement.current) );
        {
            if ("undefined" != typeof(parentElement.current.id) )
            {
                fnSetPosition( parentElement.current.id );
                fnReposition();
            }
            else
            {
                  return false;
            }
        }
    }
    function fnCheckState()
    {
        if( event.button != 1 ) fnRelease();
    }
    function fnPush(oArray,oElement)
    {
        oArray.length = oArray.length + 1;
        oArray[oArray.length-1] = oElement;        
        return oArray;
    }
    function fnSetPosition( sCurrentId )
    {
        var iLenEl  = parentElement.oElements.length;
        var bFoundPos = false;
        var oTmpArray = new Array();
        var iTop = parentElement.all( sCurrentId ).offsetTop;
        for( var i = 0; i < iLenEl; i++ )
        {
             if (!bFoundPos && ( iTop < parentElement.all( parentElement.oElements[i].name ).offsetTop ) )
             {
               oTmpArray = fnPush(oTmpArray, sCurrentId );
               oTmpArray = fnPush(oTmpArray, parentElement.oElements[i].name );
               bFoundPos = true;
             }
             else if( parentElement.oElements[i].name != sCurrentId )
             {
                oTmpArray = fnPush(oTmpArray, parentElement.oElements[i].name );
             }
         }
         if( bFoundPos == false )
         {
              oTmpArray = fnPush(oTmpArray, sCurrentId );
         }
        for (var i=0; i<oTmpArray.length; i++)
        {
              parentElement.oElements[i].name =  oTmpArray[i]
        }     
       fnSaveState();
    }
    function fnMove()
    {
       if (event.clientY > (window.screen.height - 200))
       {
            window.scrollBy(event.clientX, 10);
            runtimeStyle.top = event.y - parentElement.offsetY;            
       }
       else if (event.clientY < 10)
       {
            window.scrollBy(event.clientX, -10);
            runtimeStyle.top = event.y - parentElement.offsetY; 
       }
       else
       {
            runtimeStyle.top = event.y  - parentElement.offsetY;  
       }
           if (event.button != 1) fnRelease();
    }
    function fnSelect()
    {
        return false;
    }
    function fnTop( id )
    {
        var iTop = m_iSpacingTop;
        for( var i = 0; i < parentElement.oElements.length && parentElement.oElements[i].name != id; i++ )
        {
            iTop += window.document.all(parentElement.oElements[i].name).offsetHeight + m_iSpaceBetween;
        }
        return iTop;
    }    
    </SCRIPT>
</PUBLIC:COMPONENT>
