var MyItemsSectionList = Class.create({
	ajaxUrl: "ajax_functions/ajax_items_content.html",
	userId: 0,
	itemType: "",
	group: "",
	sumItemType: "",
	sumGroup: "",
	viewingUserId: 0,
	viewingUserCDs: 0,

	loadList: function(params) {
		if (params == undefined)
			params = {};
		if (params.id == undefined)
			params.id = this.userId;
		if (params.g == undefined)
			params.g = this.group;

		 //alert($("itemTypeSelect"));
		if (params.t == undefined && $("itemTypeSelect") != null)
			params.t = $("itemTypeSelect").value;
		else
			params.t = this.itemType;

		if (params.a == undefined)
			params.a = "itemsList";
		if (params.time == undefined)
			params.time = new Date().toString();
		if (params.c == undefined && $("categorySelect") != null)
			params.c = $("categorySelect").value;
		if (params.s == undefined && $("sortSelect") != null)
			params.s = $("sortSelect").value;

		if (params.hideMessage != undefined && params.hideMessage == true)
			$("itemsListInfo").hide();

		new Ajax.Updater($("itemsListContainer"), this.ajaxUrl, {
			parameters: params,
			evalScripts: true,
			method: "get",
			onCreate: function(event) {
				$("itemsListContainer").update("");
				$("itemsContentLoader").show();
				},
				onComplete: function(event) {
					$("itemsContentLoader").hide();
				}
			});
	},

	updateSum: function(params) {
		if ($("itemSum") == null)
			return;

		if (params == undefined)
			params = {};
		if (params.id == undefined)
			params.id = this.userId;
		if (params.g == undefined)
			params.g = this.sumGroup;
		if (params.t == undefined)
			params.t = this.sumItemType;

		if (params.a == undefined)
			params.a = "getItemsSum";
		if (params.time == undefined)
			params.time = new Date().toString();

		new Ajax.Request(this.ajaxUrl, {
			parameters: params,
			method: "get",
			evalJSON: "force",
			onSuccess: function(event) {
				var result = event.responseJSON;
				if (result != undefined && result.sum != undefined) {
					$("itemSum").update(result.sum);
				}
			}.bind(this)
		});
	},

	/*submitSendItemForm: function(form) {
		var params = form.serialize(true);
		params.a = "sendItem";
		params.time = new Date().toString();
		new Ajax.Request(this.ajaxUrl, {
			parameters: params,
			method: "post",
			onComplete: function(event) {
				this.loadList();
			}.bind(this)
		});
	},*/

	submitForm: function(form, action) {
		var params = form.serialize(true);
		form.disable();
		params.a = action;
		params.time = new Date().toString();
		new Ajax.Request(this.ajaxUrl, {
			parameters: params,
			method: "post",
			evalJSON: "force",
			onCreate: this.onFormSubmitCreate.bind(this),
			onSuccess: this.onFormSubmitSuccess.bind(this),
			onComplete: function(event) {

			}.bind(this)
		});
	},

	onFormSubmitCreate: function(event) {
		$("itemsListInfoContent").update("");
		$("itemsListInfo").hide();
	},

	onFormSubmitSuccess: function(event) {
		var result = event.responseJSON;
		var message = "";
		if (result != null && result.message != null)
			message = result.message;
		else
			message = "Sorry. An unexpected error has occured";
		$("itemsListInfoContent").update(message);
		$("itemsListInfo").show();
		if ($("pageTitle") != null)
			$("pageTitle").scrollTo();
		else
			$("itemsListInfo").scrollTo();

		this.loadList({hideMessage: false });
		this.updateSum();
	},

	 registerSendItemFormsEvents: function(container) {
		var forms = container.select(".sendItemForm");
		for (var i = 0; i < forms.length; i++) {
			var form = forms[i];
			var buttons = form.select(".formSubmitButton");
			for (var j = 0; j < buttons.length; j++) {
				buttons[j].onclick = null;
				buttons[j].observe("click", function(event) {
					event.stop();
					$(event.target).hide();
					// find ancestor
					var ancestor = $(event.target).up(".sendItemForm");
					if (ancestor != null)
						this.submitForm(ancestor, "sendItem");
						//this.submitSendItemForm(ancestor);
					//buttons[j].hide();
					//this.submitSendItemForm(form);
				}.bind(this));
			}
		}
	},


	registerRemoveFromFleaMarketFormsEvents: function(container) {
		var forms = container.select(".removeFromFleamarketForm");
		forms.map(function(mappedForm) {
			var buttons = mappedForm.select(".formSubmitButton");
			buttons.map(function(mappedButton) {
				mappedButton.onclick = null;
				mappedButton.observe("click", function(event) {
					event.stop();
					event.target.hide();
					var parentForm = event.target.up("form");
					if (parentForm != null)
						this.submitForm(parentForm, "removeFromFleaMarket");
				}.bind(this));
			}.bind(this));
		}.bind(this));
	},

	registerSellItemFormEvents: function(container) {
		var forms = container.select(".sellItemForm");
		forms.map(function(mappedForm) {
			var buttons = mappedForm.select(".formSubmitButton");
			buttons.map(function(mappedButton) {
				mappedButton.onclick = null;
			});
			mappedForm.observe("submit", function(event) {
				event.stop();
				//event.target.hide();
				var form = event.target;
				if (form != null) {
				//	if (!this.checkViewingUserCDs(form.down(".salePrice").value, true))
				//		return;

					form.down(".formSubmitButton").hide();
					//if (event.target.hasClassName("addToFleamarket"))
						//this.submitForm(parentForm, "addToFleamarket");
					//else if (event.target.hasClassName("addToStoreMaker"))
					this.submitForm(form, "addToStoreMaker");
				}
			}.bind(this));
		}.bind(this));
	},

	/*registerSellItemFormEvents: function(container) {
		var forms = container.select(".sellItemForm");
		forms.map(function(mappedForm) {
			var buttons = mappedForm.select(".formSubmitButton");
			buttons.map(function(mappedButton) {
				mappedButton.onclick = null;
				mappedButton.observe("click", function(event) {
					event.stop();
					event.target.hide();
					var parentForm = event.target.up("form");
					if (parentForm != null) {
						if (event.target.hasClassName("addToFleamarket"))
							this.submitForm(parentForm, "addToFleamarket");
						else if (event.target.hasClassName("addToStoreMaker"))
							this.submitForm(parentForm, "addToStoreMaker");
					}
				}.bind(this));
			}.bind(this));
		}.bind(this));
	},*/

	registerBuyItemFormEvents: function(container) {
		var forms = container.select(".buyItemForm");
		forms.map(function(mappedForm) {
			var buttons = mappedForm.select(".formSubmitButton");
			buttons.map(function(mappedButton) {
				mappedButton.onclick = null;
			});

			mappedForm.observe("submit", function(event) {
				event.stop();
				//event.target.hide();
				var form = event.target;
				if (form != null) {
					if (!this.checkViewingUserCDs(form.down(".salePrice").value))
						return;

					form.down(".formSubmitButton").hide();
					var url = "makeoffer.html?";
					url += "item_id=" + form.down(".itemId").value;
					url += "&owner_id=" + form.down(".ownerId").value;
					url += "&offer_price=" + form.down(".salePrice").value;
					form.disable();
					window.location = url;
					//form.down(".formSubmitButton").show();
				}

			}.bind(this));
		}.bind(this));
	},

	/*registerBuyItemFormEvents: function(container) {
		var forms = container.select(".buyItemForm");
		forms.map(function(mappedForm) {
			var buttons = mappedForm.select(".formSubmitButton");
			buttons.map(function(mappedButton) {
				mappedButton.onclick = null;
				mappedButton.observe("click", function(event) {
					event.stop();
					event.target.hide();
					var parentForm = event.target.up("form");
					if (parentForm != null) {
						var url = "makeoffer.html?";
						url += "item_id=" + parentForm.down(".itemId").value;
						url += "&owner_id=" + parentForm.down(".ownerId").value;
						url += "&offer_price=" + parentForm.down(".salePrice").value;
						parentForm.disable();
						window.location = url;
					}
						//this.submitForm(parentForm, "buyItem");
				}.bind(this));
			}.bind(this));
		}.bind(this));
	},*/

	registerItemFormEvents: function(container) {
		this.registerRemoveFromFleaMarketFormsEvents(container);
		//this.registerSendItemFormsEvents(container);
		this.registerSellItemFormEvents(container);
		this.registerBuyItemFormEvents(container);
	},

	checkViewingUserCDs: function(entered, selling) {
		if (selling == undefined)
			selling = false;

		if (isNaN(entered)) {
			alert("You must enter a valid price");
			return false;
		} else if (entered > 100000) {
			alert("You must enter a price lower than 100,000 CDs");
			return false;
		} else if (entered <= 0) {
			alert("You must enter a valid price");
			return false;
		} else if (!selling && (this.viewingUserCDs * 100) < (entered * 100)) {
			alert("You don't have " + entered + " CDs");
			return false;
		}

		return true;

	}
});