
function FileSystem()
{
    var section = "";
    var addingQueue = new Array();
    var timeLastAdd = new Date( 0 );
    var blockAdd = false;
    
    system.addEventListener("onloadSystem", activate);
    system.registerEvent("oncreateFile");
    system.registerEvent("onwriteFile");
    system.registerEvent("onreadTextFile");
        

    
    function activate()
    {
        system.addEventListener("onwriteFile", add);
        system.addEventListener("onreadTextFile", getContentFile);
        system.addEventListener("onbeforeload", changeSection);
        system.addEventListener("onunload", returnToRoot);
    }
    
    function getContentFile( event )
    {
        var file, content, qs, request;
        try
        {
            if ( section != "" )
            {
               file = "\\data\\" + section + "\\" + event.name;
            }
            else
               file = "\\data\\" + event.name;
            request = getRequest();
            request.onreadystatechange = function ()
                    {
                        if ( request.readyState == 4 )
                        {
                            if ( request.status == 200 )
                            {
                                content = decodeURIComponent( request.responseText );
                                event.handler( content );
                            }
                            else
                            {   
                                event.errorHandler();
                            }
                        }
                    };
            qs ="?file="+file +"&operation=readall";
            request.open("POST", "http://cs.usu.edu.ru/home/v/src/BackEnd/fs.asp" + qs, true);
            request.send(null);                                   
        }
        catch( e )
        {
            event.errorHandler( { "description" : "неудалось считать файл" } );
        }
    }
    
    function add( event )
    {
        addingQueue.push( event );
        if ( blockAdd )
            return;
        var timeout = 60000 - (( new Date() ).getTime() - timeLastAdd.getTime());
        if ( timeout > 0 )
            {
                system.dispatchEvent("onwrite", "\nНе так быстро подождите немного\n");
                system.dispatchEvent("ontitle", "guestbook");
                timeLastAdd = new Date();
                return;
            }
        sendAdd();
    }
    
    function getRequest()
    {
        var request;
        try
        {
            request = new XMLHttpRequest();
        }
        catch( e )
        {

            request = new ActiveXObject("Microsoft.XMLHTTP");
        }        
        return request;
    }
    
    function sendAdd()
    {
        var event;
        var file, content, request, qs;
        request = getRequest();
        try
        {
            event = addingQueue.shift();
            if ( section != "" )
               file = "\\data\\" + section + "\\" + event.name;
            else
               file = "\\data\\" + event.name;
            content = encodeURIComponent( event.data );
            request.onreadystatechange = function ()
                    {
                        if ( request.readyState == 4 )
                        {
                            if ( request.status == 200 )
                            {
                                event.handler();
                            }
                            else
                            {
                                event.errorHandler();
                            }
                        }
                    };
            qs = "?file="+ file + "&operation=add&data="+content; 
            request.open("POST", "http://cs.usu.edu.ru/home/v/src/BackEnd/fs.asp" + qs, true);
            request.send(null);  
        }
        catch( e )
        {
            event.errorHandler( { "description" : "неудалось записать в  файл" } );
        }
        if ( addingQueue.length != 0)
        {
            window.setTimeout(sendAdd, 20000);
            return;
        }
        timeLastAdd = new Date();
    }
    
    function changeSection( event )
    {
//        section = event.name;
    }
    
    function returnToRoot()
    {
        section = "";
    }
}
