
function include(file) {
  var script = document.createElement('script');
  script.src = file;
  script.type = 'text/javascript';
  script.defer = true;
  document.getElementsByTagName('head').item(0).appendChild(script);
}

include('/common/js/url.js');

var basketHelper = {

	// Number of requests in progress.
	requestCounter : 0,
	
	// Request id counter, used to identify request/response.
	requestId : 0,

	// private function
	_getHttpReqObject : function () {
		xmlHttpReq=null;
		try { // Firefox, Opera 8.0+, Safari
			xmlHttpReq=new XMLHttpRequest();
		} catch (e) {
			try { // Internet Explorer
				xmlHttpReq=new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e2) {
				try {
					xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e4) {
					alert("Your browser does not support AJAX!");
				}
			}
		}
		
		if (!xmlHttpReq && typeof XMLHttpRequest!='undefined') {
			try {
				xmlHttpReq = new XMLHttpRequest();
			} catch (e) {
				xmlHttpReq=false;
			}
		}
	 
		if (!xmlHttpReq && window.createRequest) {
			try {
				xmlHttpReq = window.createRequest();
			} catch (e) {
				xmlHttpReq=false;
			}
		}
		return xmlHttpReq;
	},

	// private function
	_loadXMLDoc : function(requestObj, url, handler) {
		if (requestObj) {
			this.requestCounter++;
			requestObj.onreadystatechange = function() { handler(requestObj); };
			requestObj.open("GET", url, true);
			requestObj.send(null);
	   	}
	},

	// private function
	_showIndicator : function(id) {
		document.getElementById(id).style.visibility = 'visible';
	},
	
	// private function
	_hideIndicator : function(id) {
		if (this.requestCounter < 1) {
			document.getElementById(id).style.visibility = 'hidden';
		}
	},

	// public function
	addToOrder : function(catEntryIds, singleItem, options) {
		var reqObject = this._getHttpReqObject();
		var parameters = "";
		
		if (options.storeId) {
			parameters += "&storeId=" + options.storeId;
		}
		for (i = 0; i < catEntryIds.length; i++) {
			parameters += "&itemId=" + catEntryIds[i];
		}
		
		var url = '/Magellan/pages/ajax/basketHelper.jsp?action=addToOrder' + parameters + '&singleItem=' + singleItem + '&requestId=' + this.requestId++ + '&' + (new Date()).getTime();
		var that = this;
		
		var handler = function(httpRequest)
			{
				if (httpRequest.readyState == 4 && httpRequest.status == 200) {
					var response = eval('(' + httpRequest.responseText + ')');				

					that.requestCounter--;
					
					if (options.onComplete) {		
						options.onComplete(response);
					}
					if (options.indicator) {
						that._hideIndicator(options.indicator);
					}
				}
			};

		if (options.indicator) {
			this._showIndicator(options.indicator);
		}
		this._loadXMLDoc(reqObject, url, handler);
	},

	// public function
	deleteFromOrder : function(orderItemId, options) {
		var reqObject = this._getHttpReqObject();
		var url = '/Magellan/pages/ajax/basketHelper.jsp?action=deleteFromOrder&orderItemId=' + orderItemId + '&requestId=' + this.requestId++ + '&' + (new Date()).getTime();
		var that = this;
		
		var handler = function(httpRequest) {
				if (httpRequest.readyState == 4 && httpRequest.status == 200) {
					var response = eval('(' + httpRequest.responseText + ')');

					that.requestCounter--;

					if (options.onComplete) {		
						options.onComplete(response);
					}
					if (options.indicator) {
						that._hideIndicator(options.indicator);
					}
				}
			};
			
		if (options.indicator) {
			this._showIndicator(options.indicator);
		}
		this._loadXMLDoc(reqObject, url, handler);
	},

	// public function
	readBasketInfo : function(options) {
		var reqObject = this._getHttpReqObject();
		var url = '/Magellan/pages/ajax/basketHelper.jsp?action=readBasketInfo' + '&requestId=' + this.requestId++ + '&' + (new Date()).getTime();
		var that = this;
		
		var handler = function(httpRequest) {
				if (httpRequest.readyState == 4 && httpRequest.status == 200) {
					var response = eval('(' + httpRequest.responseText + ')');

					that.requestCounter--;
					
					if (options.onComplete) {		
						options.onComplete(response);
					}
					if (options.indicator) {
						that._hideIndicator(options.indicator);
					}
				}
			};
		
		if (options.indicator) {
			this._showIndicator(options.indicator);
		}
		this._loadXMLDoc(reqObject, url, handler);
	},
	
	// public function
	readBasketItems : function(orderItemIds, options) {
		var reqObject = this._getHttpReqObject();
		var parameters = "";
		for (i = 0; i < orderItemIds.length; i++) {
			parameters += "&orderItemId=" + orderItemIds[i];
		}
		
		var url = '/Magellan/pages/ajax/basketHelper.jsp?action=readBasketItems' + parameters + '&requestId=' + this.requestId++ + '&' + (new Date()).getTime();
		var that = this;
		
		var handler = function(httpRequest) {
				if (httpRequest.readyState == 4 && httpRequest.status == 200) {
					var response = eval('(' + httpRequest.responseText + ')');

					if (response.basketItems) {
						for (index = 0; index < response.basketItems.length; index++) {
							response.basketItems[index].title = Url.decode(response.basketItems[index].title);
							response.basketItems[index].artist = Url.decode(response.basketItems[index].artist);
						}
					}

					that.requestCounter--;

					if (options.onComplete) {
						options.onComplete(response);
					}
					if (options.indicator) {
						that._hideIndicator(options.indicator);
					}
				}
			};
		
		if (options.indicator) {
			this._showIndicator(options.indicator);
		}
		this._loadXMLDoc(reqObject, url, handler);
	}
}
