﻿/*
author : whilestomach
date : 09.04.30
*/
var AsyncRequestHandler = Class.create();
AsyncRequestHandler.prototype = {	
	initialize: function() {				
		Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this.beginRequestHandler.bind(this));
		Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this.endRequestHandler.bind(this));	
	} , 
	beginRequestHandler : function (sender, args) {    
		var request = args.get_request();    
		var userContext = {        
			object:args._postBackElement
			, clientId : args._postBackElement.id.substr(args._postBackElement.id.lastIndexOf("_")+1)			
		};
				
		request.set_userContext(userContext);		
		document.fire("arh:beginRequest" , userContext.object);
	} , 
	endRequestHandler : function (sender, args)
	{
		var caller = this._getCaller(args);
		// success
		if (!args.get_error()){			  					
			this.onSuccess(caller);					
			return;
		}			
		// fail
		if (args.get_error() != undefined && args.get_error().httpStatusCode == '500'){
			this.onFail(caller , args);
		}
	},
	onSuccess : function(caller){
		if (caller){		
			// prototype custom event
			document.fire("arh:onSuccess" , {id:caller.object.id,clientId:caller.clientId});												
			
		}        							
	}, 
	onFail : function(caller , args){	
		var errorMessage = args.get_error().message;										
		errorMessage = errorMessage.gsub("Sys.WebForms.PageRequestManagerServerErrorException: " , "");
		args.set_errorHandled(true);						
		if (caller){											
			document.fire("arh:onFail" , {id:caller.object.id,clientId:caller.clientId,message:errorMessage});									
		}		
	} , 
	_getCaller : function(args){
			var response = args.get_response();			
			if(response.get_responseAvailable()) {                
				var webRequest = response.get_webRequest();         				
				return webRequest.get_userContext();											
			}else
				return null;			
	}	
}


