(function() {
	if (!dojo) return;

	var saveResultDialog;
	var queue = new AjaxQueue();

	dojo.require("dijit.Dialog");

	dojo.addOnLoad(function() {
		dojo.query("#saveResultDialogCloseButton").connect("onclick", onSaveResultDialogCloseButtonClick);		
		dojo.query("#saveButton").connect("onclick", onSaveButtonClick);

		saveResultDialog = createSaveResultDialog();
	});
	
	function onSaveButtonClick(event) {
		dojo.stopEvent(event);
	
		saveProducts();
		
		dojo.byId("saveButton").disabled = true;
		showSaveResultDialog();
	}
	
	function saveProducts() {
		var nodeIds = select.getSelectedValues();
		var callId = queue.addPendingCall();

		dojo.xhrPost({
			url: "save.json",
			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();
					dojo.byId("saveResultDialogCloseButton").disabled = false;
				}
				else {
					queue.clearPendingCall(callId);	
				}
			},

			error: function(err) {
				dojo.byId("saveResultDialogCloseButton").disabled = false;
				queue.clearPendingCall(callId);
				alert(err.message);
			}
		});
	}

	function onSaveResultDialogCloseButtonClick(event) {
		dojo.stopEvent(event);
		
		closeSaveResultDialog();
	}

	function closeSaveResultDialog() {
		dojo.byId("saveButton").disabled = false;

		saveResultDialog.hide();
	}
	
	function showSaveResultDialog() {
		dojo.byId("saveResultDialogCloseButton").disabled = true;
		dojo.byId("saveErrorContainer").innerHTML = "";
		dojo.byId("savedProductsContainer").innerHTML = "Saving...";
		
		saveResultDialog.show();
	}

	function createSaveResultDialog() {
		var saveResultDialog = new dijit.Dialog({
			title: "Save to My Custom Catalog"
		}, dojo.byId("saveResultDialog"));

		initDialog(saveResultDialog);

		return saveResultDialog;
	}
})();
