(function() {
	if (!dojo) return;

	var compareDialog;
	var queue = new AjaxQueue();

	dojo.require("dijit.Dialog");

	dojo.addOnLoad(function() {
		dojo.query("#compareDialogCloseButton").connect("onclick", onCompareDialogCloseButtonClick);		
		dojo.query("#compareButton").connect("onclick", onCompareButtonClick);

		compareDialog = createCompareDialog();
	});
	
	function onCompareButtonClick(event) {
		dojo.stopEvent(event);
	
		updateProducts();
		
		dojo.byId("productContainer").innerHTML = ""; //"Loading products...";
		//compareDialog.show();
		
		dojo.byId("compareButton").disabled = true;
	}
	
	function updateProducts() {
		var nodeIds = select.getSelectedValues();
		var callId = queue.addPendingCall();

		dojo.xhrPost({
			url: "compare.html",
			handleAs: "json",
			timeout: 10000,

			content: {
				nodeId: nodeIds,
				output: "json"
			},

			load: function(response, args) {
				if (queue.isLastCall(callId)) {
					for(var selector in response) {
						var elements = dojo.query(selector);
	
						for(var attrName in response[selector]) {
							elements.forEach(function(element) {
								element[attrName] = response[selector][attrName];
							});
						}
					}
	
					// If this was the last call made, clear out any older pending calls.

					queue.clearAllPendingCalls();

					compareDialog.show();
					compareDialog._size();
					compareDialog._position();
					
				}
				else {
					queue.clearPendingCall(callId);	
				}
			},

			error: function(err) {
				queue.clearPendingCall(callId);
				alert(err.message);
			}
		});
	}

	function onCompareDialogCloseButtonClick(event) {
		dojo.stopEvent(event);
		
		closeCompareDialog();
	}

	function closeCompareDialog() {
		dojo.byId("compareButton").disabled = false;

		compareDialog.hide();
	}	

	function createCompareDialog() {
		var compareDialog = new dijit.Dialog({
			title: "Compare Products"
		}, dojo.byId("compareDialog"));

		initDialog(compareDialog);

		return compareDialog;
	}
})();
