var AJAXHandler = function(params) {
	this.loadMask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."});
	this.sfType = 'AJAXHandler';
	var self = this;
	this.responseObject ={};
	//this.onFinish=params.onFinish || function(){};
	//alert(this.onFinish);
//	Ext.Ajax.on('beforebegin', function(){self.loadMask.show();alert(self.loadMask());});
//	Ext.Ajax.on('requestcomplete', function(){self.loadMask.hide();});
}

AJAXHandler.prototype.resetButtonClicked = function(sender,args) {

	this.sendRequest({'action':'resetbuttonclicked','onFinish':args.onFinish});
}

AJAXHandler.prototype.handleRecalculateButtonClicked = function(sender,args) {
	
	
	var reqObj = {'action':'recalcbuttonclicked','args':Ext.util.JSON.encode(args.optionChanges),'onFinish':args.onFinish};
	if (args.customerChanges) reqObj.customerChanges = Ext.util.JSON.encode(args.customerChanges);
	this.sendRequest(reqObj);
}

AJAXHandler.prototype.handleOptionControlChanged = function(sender,args) {
	//alert(sender+" "+args);
	this.sendRequest({'action':'optionchanged'});
}

AJAXHandler.prototype.handleExpandButtonClicked = function(sender,args) {
	this.sendRequest({'action':'planexpanded'});
}

AJAXHandler.prototype.showCustomersClicked = function(sender,args) {
	var reqObj = {'action':'customersshown','args':Ext.util.JSON.encode(args.optionChanges),'onFinish':args.onFinish,'getIndividual':true};
	if (args.customerChanges) reqObj.customerChanges = Ext.util.JSON.encode(args.customerChanges);
	this.sendRequest(reqObj);
}

AJAXHandler.prototype.sendRequest = function(params) {
	var self = this;
	var action = params.action;
	var getIndividual = params.getIndividual && params.getIndividual==true;
	Ext.getBody().mask("<div style='padding:20px;text-align:center; border:0'>Please wait while we recalculate<br/>your rates ...<br/><img src='images/loading.gif'/></div>");
	var reqObj = { 'action': action, 'args': params.args, 'getIndividual': getIndividual};
	if (params.customerChanges) reqObj.customerChanges = params.customerChanges;
	Ext.Ajax.request({
	   url: 'ajax',
	   success: self.requestSucceeded,
	   failure: self.requestFailed,
	   params: reqObj,
	   returnFunction: params.onFinish,
	   parentObj: this,
	   objType: 'Ext.AJAX.request'
	});

}

AJAXHandler.prototype.requestSucceeded = function(result, request) {
	Ext.getBody().unmask();
	this.responseObject = Ext.util.JSON.decode(result.responseText);

	if (request.returnFunction) request.returnFunction(Ext.util.JSON.decode(result.responseText));
	//Ext.MessageBox.alert('Success', 'Data returned from the server: '+ result.responseText);
}

AJAXHandler.prototype.requestFailed = function(result, request) {
	Ext.getBody().unmask();
	Ext.MessageBox.alert('Failed', result.responseText); 
}