if(!$chk(HKM)) {
	var HKM = {};
}

// 192.168.0.172
HKM.Request = new Class({

	options: {
		useCache: true,
		maxCach: 20,
		method: 'POST',
		serviceURL: null,
		onData: Class.empty,
		onDataFailed: Class.empty
	},
	
	requestDataCache: {},
	
	// serviceURL: 'http://192.168.0.172:8310/shop/jsonservice/catalog.ashx',
	serviceURL: '/catalogService.php',	
	
	xhrRequest: null,

	initialize: function(options) {
		this.setOptions(options);
		if(this.options.serviceURL !== null) {
			this.serviceURL = this.options.serviceURL;
		}
	},
	
	load: function(requestData) {
		
		if(this.options.useCache === true) {
			if($chk(this.requestDataCache[requestData.toString()])) {
				this.fireEvent('onData', this.requestDataCache[requestData.toString()]);
				return;
			}
			
		}

		// Create the request object if needed
		if(this.xhrRequest == null) {
			this.xhrRequest = new XHR({
										method:this.options.method,
										onStateChange:this.onStateChangeHandler.bindAsEventListener(this),
										onSuccess: this.onSuccessHandler.bindAsEventListener(this),
										onRequest: this.onRequestHandler.bindAsEventListener(this),
										onFailure: this.onFailureHandler.bindAsEventListener(this)
									});
		}
		
		// Cancel the request if needed
		this.xhrRequest.cancel();
		
		// Create the transport object
		var transport = Json.toString(this.transportForData(requestData));
		this.xhrRequest.send(this.serviceURL, transport);
		
	},
	
	onRequestHandler: function() {

	},
	
	onSuccessHandler: function(stringResponseObject, xmlResponseObject) {		
		var responseObject = Json.evaluate(stringResponseObject);
		if(responseObject.success === true) {
			this.fireEvent('onData', responseObject.data);
			if(this.options.useCache === true) {
				this.requestDataCache[responseObject.data[0].productId.toString()] = responseObject.data;
			}
		} else if(responseObject.success == false) {
			this.fireEvent('onDataFailed', responseObject.message);
		} else {
			this.fireEvent('onDataFailed');
		}
		
	},
	
	onFailureHandler: function(xhrObj) {
		this.fireEvent('onDataFailed');
	},
	
	onStateChangeHandler: function() {

	},
	
	transportForData: function(productId) {
		return {};
	}

});
HKM.Request.implement(new Options);
HKM.Request.implement(new Events);


HKM.ProductRequest = HKM.Request.extend({

	options: {
		useCache: true,
		maxCach: 20,
		method: 'POST'
	},
	
	requestDataCache: {},
	
	//serviceURL: 'http://192.168.0.172:8310/shop/jsonservice/catalog.ashx',
	serviceURL: '/catalogService.php',
	
	xhrRequest: null,
	
	transportForData: function(requestData) {
		var transPort = {requestType:'ProductDetailsList'};
		var request;
		if($type(requestData) == 'array') {
			request = requestData;
		} else {
			request = [requestData];
		}
		transPort['query'] = request;
		return transPort;
	}
});

HKM.NewArrivalsRequest = HKM.Request.extend({
	options: {
		useCache: false
	},
	
	serviceURL: '/catalogService.php',
	
	transportForData: function(requestData) {
		
		var transPort = {requestType:'NewArrivalsList'};
		
		var request  = [($chk(newArrivalsCategoryId)) ? newArrivalsCategoryId : ""];
		
		if($chk(requestData.limit)) {
			transPort.limit = requestData.limit;
			transPort.offset = $chk(requestData.offset) ? requestData.offset : 0;
		}
		transPort['query'] = request;
		return transPort;
	}
});

HKM.BasketRequest = HKM.Request.extend({
	options: {
		useCache: false,
		method: 'POST'
	},
	
	requestDataCache: {},
	
	//serviceURL: 'http://192.168.0.172:8310/shop/jsonservice/basket.ashx',
	serviceURL: 'basketService.php',
	
	xhrRequest: null,
	
	transportForData: function(productId) {

		var transPort = {requestType:'AddItemToBasket'};
		transPort['query'] = productId;

		return transPort;
		
	}
});

HKM.TellAFriendRequest = HKM.Request.extend({
	
	options: {
		useCache: false,
		method: 'POST'
	},
	
	requestDataCache: {},
	
	//serviceURL: 'http://192.168.0.172:8310/shop/jsonservice/basket.ashx',
	serviceURL: 'tellAFriendService.php',
	
	xhrRequest: null,
	
	transportForData: function(postData) {
		var transPort = {requestType:'TellAFriend'};
		transPort['query'] = postData;
		
		return transPort;
		
	}
});


HKM.SearchItemRequest = HKM.Request.extend({
	
	options: {
		useCache: false,
		method: 'POST'
	},
	
	requestDataCache: {},
	
	//serviceURL: 'http://192.168.0.172:8310/shop/jsonservice/basket.ashx',
	serviceURL: 'searchService.php',
	
	xhrRequest: null,
	
	transportForData: function(postData) {

		var transPort = {requestType:'SearchItemList'};
		transPort['query'] = postData;
		
		return transPort;
		
	}
});
