/* *
 */
ponte.Services.AjaxService =
{
   //  keres kezelo osztalyokat tarolo tomb
   _requestObjects : new Array(),
   _enabled : true,

   //  uj Ajax request kezelo inicializalasa
   createRequest : function (openURL, onReadyState, errorHandler, openType, sendMsg)
   {
      if(this._enabled)
      {
        req =new ponte.Services.AjaxService.HttpRequest();
        req.init(openURL, onReadyState, errorHandler, openType, sendMsg);
        this._requestObjects.push(req);

        return req;
      }else{ 
        return null;
      }
   }
   ,

   stopAllRequest : function ()
   {
      for(k in this._requestObjects)
      this._requestObjects[k].kill();
   }
}

/*  bongeszo tipustol fuggoen letrehoz egy uj requestet
 *   @onReadyState   -   valasz megerkezesekor hivodik meg
 *   @openURL        -   ahova a requestet kuldi
 *   @openType       -   GET vagy POST hivas
 *   @sendMsg        -   kuldendo uzenet
 */
ponte.Services.AjaxService.HttpRequest = function ()
{
	return{
	   request:false,
	   // van e eppen fuggobe levo request
	   isBusy : false,
	   //   a request tipusa, alapbol GET
	   openType : 'GET',
	   //   cel URL
	   requestURL : null,
	   //   kuldendo uzenet
	   requestMsg :  null,
	   //   ha megvan adva beallitja a callback fuggvenyt
	   readyStateMethod : null,
	   //   error kezelo
	   errorHandler :null,
	   //	opcionalis argumentum lista
	   _args : null, 
	
	   //  uj request letrehozasa, inicializalas
	   init : function(openURL, onReadyState, errorHandler, openType, sendMsg)
	   {
	   		this.request=false;
		   // van e eppen fuggobe levo request
		   this.isBusy = false;
		   //   a request tipusa, alapbol GET
		   this.openType = (openType != undefined) ? openType : 'GET';
		   //   cel URL
		   this.requestURL = openURL;
		   //   kuldendo uzenet
		   this.requestMsg = (sendMsg != undefined) ? sendMsg : null;
		   //   ha megvan adva beallitja a callback fuggvenyt
		   this.readyStateMethod = (onReadyState != undefined) ? onReadyState : this.baseReadyMethod;
		   //   error kezelo
		   this.errorHandler = (errorHandler != undefined) ? errorHandler : null;   	
	   	
	      request = false;
	      if(window.XMLHttpRequest)
	      {
	         request = new XMLHttpRequest();
	         if(request.overrideMimeType)
	         request.overrideMimeType('text/xml');
	      }
	      else if (window.ActiveXObject)
	      {
	         try
	         {
	            request = new ActiveXObject('Msxml2.XMLHTTP');
	         }
	         catch(e)
	         {
	            try
	            {
	               request = new ActiveXObject('Microsoft.XMLHTTP');
	            }
	            catch(e)
	            {
	               request = false;
	            }
	         }
	      }
	      
	    	
	      
	      this.request=request;
	   },
	   // ha nincs megadva ready esemeny ez az alap
	   baseReadyMethod : function ()
	   {
	      alert("AJAX response message: " + this.request.responseText);
	   },
	   
	   //   request elkuldese
	   makeRequest :function(args)
	   {
	   		function copyFunction(func, arg)
	      	{
	         	return function()
	         	{
	         		func(arg);
	        	}
	      	}
	      if( ! this.isBusy)
	      {
	      	 if((args!=null)||(args!=undefined))
	         {
	         	this._args=args;
	         }
	         this.request.onreadystatechange=copyFunction(this.onReady, this);
	         this.request.open(this.openType, this.requestURL);
	         if (this.openType=="POST"){
		         this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	         }
	         this.request.send(this.requestMsg);
	         this.isBusy = true;
	         
	      }
	   },
	   //   request torlese
	   kill : function()
	   {
	      this.request.abort();
	   },
	
	   //   ###     Statusz lekerdezo metodusok a Service szamara
	   isAvailable : function ()
	   {
	      if(this.request != false)
	      return true;
	      else return false;
	   },
	
	   // ready statusz valtozas
	   onReady : function(obj)
	   {
	      if((obj.request.readyState == 4) && (obj.request.status == 200 || obj.request.status == 304))
	      {
	         obj.isBusy = false;
	         obj.readyStateMethod(obj.request, obj._args);
	      }
	      else
	      {
	      	if((obj.errorHandler!=null)&&(obj.errorHandler!=undefined))
	         obj.errorHandler(obj.request);
	      }
	   }
	}
}
