dojo.require("dojox.validate.check");

/*
dojo.addOnLoad(function() {
	var map = new google.maps.Map2(dojo.byId("temp_map"));

	var req = {};
	var ss_form = dojo.byId("store_search");
	if (ss_form) {
		fm_store_search.init(ss_form, req);
	}

});
*/

var search_error = {
	error_node_id: "suggestions_node",
	search_term_id: "term_node",
	search_term_class: "search_term",

	display: function(code, term) {
		var term_node = dojo.byId(this.search_term_id);
		var err_node = dojo.byId(this.error_node_id);

		if (term) {
			term_node.innerHTML = term;
		} else {
			term_node.innerHTML = "your search";
			dojo.toggleClass(term_node, this.search_term_class, false);
		}

		dojo.toggleClass(err_node, "hidden", false);
	}
};

dojo.addOnLoad(function() {
	if (dojo.global.error) {
		search_error.display(error);
	}
});

var fm_store_search = {
	node: null,
	request: null,
	selector_template: "input[name='${name}']",

	profile: {
		required: [ "address", "radius" ],
		constraints: {
			radius: [dojox.validate.isInRange, { max: 100, min: 5 }]
		}
	},

	init: function(node, req) {
		if (!node) { return; }
		if (req) { fm_store_search.request = req; }

		fm_store_search.node = node;
		fm_store_search.submit_handler = dojo.connect(node, "onsubmit", fm_store_search.process);

		var store_selector = dojo.string.substitute(fm_store_search.selector_template, { name: "show_stores" });
		var stores_cbg = dojo.query(store_selector);

		var set_stores = (req.checked && req.checked.length > 0) ? true : false;
		stores_cbg.forEach(function(node, idx, arr) {
			if (set_stores) {
				// set checked
			} else {
				node.checked = true;
			}
			
			dojo.connect(node, "onclick", function() {
				if (this.checked) {
					if (this.value == "all") {
						arr.forEach("item.checked = true;");
					}
				} else {
					arr[0].checked = false;
				}
			});
		});

		var events_selector = dojo.string.substitute(fm_store_search.selector_template, { name: "event_stores_only" });
		var events_cbg = dojo.query(events_selector);
		var set_events = (req.checked && req.checked.length > 0) ? true : false;
		events_cbg.forEach(function(node, idx, arr) {
			if (set_events) {
				// set events
			}

			dojo.connect(node, "onclick", function() {
				if (this.checked) {
					arr.forEach(function(item, index) {
						if (index <= idx) {
							item.checked = true;
						}
					});
				} else {
					arr.forEach(function(item, index) {
						if (index >= idx) {
							item.checked = false;
						}
					});
				}
			});
		});
	},

	process: function(e) {
		if (e.target.id !== fm_store_search.node.id) { return; }
		console.log("event: ", e);
		dojo.stopEvent(e);

		var fobj = dojo.formToObject(fm_store_search.node);
		var results = dojox.validate.check(fm_store_search.node, fm_store_search.profile);

		if (!results.isSuccessful()) {
			console.log("missing: ", results.getMissing());
			console.log("invalid: ", results.getInvalid());
			var invalid = results.getInvalid();

			if (invalid[0] == "radius") {
				alert("Please enter a search radius between 5 and 100 miles.");
			} else {
				dojo.byId("term_node").innerHTML = "'" + fobj.address + "'";
				var suggest = dojo.byId("suggestions_node");
				dojo.removeClass(suggest, "hidden");
			}

			return;
		} else {
			var coder = new google.maps.ClientGeocoder();
			console.log("address: ", fobj.address);
			coder.getLatLng(fobj.address, function(point) {
				if (!point) {
					dojo.byId("term_node").innerHTML = "'" + fobj.address + "'";
					dojo.removeClass(dojo.byId("suggestions_node"), "hidden");
					return;
				} else {
					console.log("fobj: ", fobj);
					dojo.byId("show_stores_list").value = (fobj.show_stores[0] == "all") ? "all" : fobj.show_stores;
					dojo.byId("event_stores_list").value = (fobj.event_stores_only && fobj.event_stores_only.length > 0) ? fobj.event_stores_only : "";
					console.log("node: ", fm_store_search.node, " obj: ", dojo.formToObject(fm_store_search.node));

					var geodata = {
						lat: point.lat(),
						lng: point.lng(),
						url: point.toUrlValue()
					};
					var json = dojo.toJson(geodata);
					var el = dojo.doc.createElement("input");
					el.id = "_geodata";
					el.name = "_geodata";
					el.type = "hidden";
					el.value = json;
					fm_store_search.node.appendChild(el);

					console.log("submit: ", fm_store_search.node, " obj: ", dojo.formToObject(fm_store_search.node));
					fm_store_search.node.submit();
				}
			});
		}
	},

	loadPreset: function(addy) {
		if (!addy) { return; }
		dojo.byId("address").value = addy;
		dojo.byId("store_search_submit").click();
	}

};
