
Context=function()
{
    this._requestQueue=new Hashtable();
//    this._requestObject=new Array();
    this._requestId=0;
    this.Timeout=30000;
    
    this.request=function(url,body,obj,rollback)
    {
        //set requestId
       // alert(url);
        var rid;
        if(obj)
        {
            rid=this._getNewId();
            //var tid=window.setTimeout("context._delQueue("+rid+",'"+rollback+"');",this.Timeout);
            this._addQueue(rid,obj);
        }
        else
        {
            rid=0;
        }
        //add requestId to querystring
        if(body)
        {
            body+="&requestID="+rid;
        }
        else
        {
            body="";
            url+="&requestID="+rid;
        }
        
//        //craete request body
//        var request = new Sys.Net.WebRequest();
//        request.set_body(body);
//        request.set_url(url);
//        var fnbackHandler=Function.createDelegate(this,this.response);
//        request.completed.add(fnbackHandler);
//        
//        //send request
//        var xmlRequest = new Sys.Net.XMLHttpExecutor();
//        xmlRequest.set_webRequest( request );
//        xmlRequest.executeRequest();
        var request=new Request(url,body);
        request.onCompleted=Function.createDelegate(this,this.response);
        
        request.send();
        
        
        
        
    }
    this.response=function(results)
    {
        var res=results.responseText;
        var xml=results.responseXML;
        
        // alert(res);
        //chech XML
        if(xml==null)
        {
            if(res!="")
            {
                alert("Response Text is not XML : "+res);
            }
            return ;
        }
        if(xml.xml=="")
        {
            //alert("Response Text is not XML : "+res);
            return ;
        }
        
        //process end , delete from request queue
        try
        {
            var requestid=xml.selectSingleNode("/responseList").attributes.getNamedItem("id").nodeValue;
            this._delQueue(requestid);
        }
        catch(e){}

        var responseList=xml.selectNodes("/responseList/response");
        
        for(var i=0;i<responseList.length;i++)
        {
            var response=responseList[i];
            var type=response.attributes.getNamedItem("type").nodeValue;
            
            if(typeof(uimanager)=="undefined")continue;
            //if(!uimanager)continue;
            if(typeof(uimanager[type])=="function")
            {
                uimanager[type](new XMLDOM(response.xml));
               // alert(userRole);
            }
            else
            {
                alert("Application do not supply this method : " + type);
            }
        }
        
    }
    
    //
    this._addQueue=function(requestId,obj)
    {
        this._requestQueue.add(requestId,obj);
        obj.startProcess();
        window.status="Processing...";
    }
    this._delQueue=function(requestId,rollback)
    {
        if(this._requestQueue.item(requestId))
            this._requestQueue.item(requestId).endProcess();
        this._requestQueue.remove(requestId);

        var l=this._requestQueue.count();
        if(l<1)window.status="";
    }
    this._getNewId=function()
    {
        this._requestId++;
        return this._requestId;
    }
    
    RequestInfo=function(id,Obj)
    {
        this.timeoutId=id;
        this.Object=obj;
    }
}
Request=function(_url,_body)
{
    this._xmlHttpRequest;
    
    this.url=_url;
    this.body=_body;
    this.onCompleted=function(){return false;}
    
    this.send=function()
    {
        this._xmlHttpRequest=new XMLHttpRequest();
        this._xmlHttpRequest.open("POST",this.url,true);
        this._xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        this._xmlHttpRequest.onreadystatechange=Function.createDelegate(this,this._completed);
        //alert("send:"+this.url);
        this._xmlHttpRequest.send(this.body);
    }
    this._completed=function()
    {
        //var i=0;
        //i++;
//        document.all.inner.parentNode.removeChild(document.all.inner);
        //add by jingl
        //get the inner div
//        var   oChild=inner.children(0);   
//        //delete the initializing form
//        inner.removeChild(oChild);   

        var d = $('container');        
        var olddiv = $('outer');
        if(olddiv)
        {
            d.removeChild(olddiv);
        }

        if(this._xmlHttpRequest==null)return;
        if(this._xmlHttpRequest.readyState==4)
        {
            //alert("get:"+this._xmlHttpRequest.responseText);
            this.onCompleted(this._xmlHttpRequest);
        }
    }
    
}