ASC.namespace('ASC.Chrysler.Ajax.Configurator.ConfigResponse');

ASC.Chrysler.Ajax.Configurator.ConfigResponse = ASC.extend(ASC.Ajax.Response, {
	
	constructor: function (cfg)
	{
		var options = ASC.apply(cfg||{}, {
			addEvents: {
				complete: true,
				mustHave: true,
				cantHave: true,
				delta: true
			}
		});    
		
		ASC.Chrysler.Ajax.Configurator.ConfigResponse.superclass.constructor.call(this, options);
				
		if (options.events) {
			this.on(options.events);
		}		
	},
	
	parseJSON: function (response, ioArgs)
	{
		var configData = response.data;
		
		var resState = configData.result;
		var options = configData.options;
		
		if (resState === 'COMPLETE') {
			
			var delta = configData.delta;
					
			var showDelta = 0;
			
			if( typeof delta != 'undefined' ){
				var count = 0;
				if( typeof delta.changedList != 'undefined' ){
					count = count + delta.changedList.length;
				}
				if( typeof delta.selectedList != 'undefined' ){
					count = count + delta.selectedList.length;
				}
				if( typeof delta.unselectedList != 'undefined' ){
					count = count + delta.unselectedList.length;
				}
				
				showDelta = count;
			}
				
			if (showDelta > 0) {
				this.fireEvent('delta', /**AjaxResponse*/ configData,/**Object*/ ioArgs);				
				return;			
			}			
			
			//this.fireEvent('complete', /**AjaxResponse*/ configData, /**ConfigResponseHandler*/ this, /**Object*/ ioArgs);
			this.fireEvent('complete', /**AjaxResponse*/ configData,/**Object*/ ioArgs);
			
		} else if (resState === 'MUSTHAVE') {
			
			this.fireEvent('mustHave', /**AjaxResponse*/ configData,/**Object*/ ioArgs);
			
		} else if (resState === 'CANTHAVE') {
			
			this.fireEvent('cantHave', /**AjaxResponse*/ configData,/**Object*/ ioArgs);
			
		} else {
			ASC.log('resultState = ' + resState);
			
			throw new Error('An unexpected result state was returned ' + resState);
		}
	}
});