<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
                <title>TestWidget 1.3</title>
                <script type="text/javascript">
                        var mainDiv;
                        var widgetID = "12345678";
                                        
                        function init() {
                                mainDiv = document.getElementById( "main" );
                        
                                if ( window.widget ) {
                                        widget.setCloseBoxOffset( 304, 16 );
                                        window.resizeTo( 640, 480 );
                                        //widgetID = widget.identifier;
                                }
                        }
                                        
                        function getLocalMailIDList() {
                                var storedLocalMailIDList = new Array();
                                var xmlHttp = new XMLHttpRequest();
                                xmlHttp.open("GET", "MessageUidsAlreadyDownloaded2", false);                                
                                xmlHttp.send(null);
                                
                                if (xmlHttp.readyState == 4) {
                                      xmlHttp.responseText;
                                }
                        }
                        
                        function getLocalMailIDList2() {
                                var storedLocalMailIDList = new Array();
                                var xmlHttp = new XMLHttpRequest();
                                xmlHttp.open("GET", "MessageUidsAlreadyDownloaded2", false);                                
                                xmlHttp.send(null);
                                
                                
                                if (xmlHttp.readyState == 4) {
                                      xmlHttp.responseText;
                                }
                        }
                        
                        function clear() {
                                mainDiv.innerText = "C:\\>";
                        }
                        
                        function fillMyRam() {
                                getLocalMailIDList2();
                                setTimeout( "fillMyRam();", 500 );
                        }
                </script>
        </head>
        
        <body onLoad="init();">
             <div><a href="javascript:fillMyRam();">fillMyRam</a></div>
        </body>
</html>
