dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.Button");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.TitlePane");
dojo.require("dojo.io.script");

Just8It = {
	terms: ["eat", "ate", "supper", "dinner", "lunch", "snack", "breakfast", "restaurant", "deli"],
	numResults: 10,
	lastSearch: "No one will ever search for this.",
	twitterSearch: function(query, numResults, callback){
		twitterQuery = Just8It.terms.join(" OR ") + (query ? " AND " + query : "");
		dojo.io.script.get({
			url: "http://search.twitter.com/search.json?rpp="+numResults+"&q=" + encodeURIComponent(twitterQuery),
			callbackParamName: "callback",
			load: callback
		});
	},
	search: function(query){
		if(query == Just8It.lastSearch) return; else Just8It.lastSearch = query;
		var timers = {
			map: 1000,
			engine: 500,
			twitpics: 1500
		}
		dojo.byId("results").innerHTML = "<center>Digesting results...</center>";
		if(query) window.location.hash = query; else window.location.hash = " ";

		// Mobile Uploads
		setTimeout(function(){ dijit.byId("MobilePhotos").setHref("getimages.php?q=" + encodeURIComponent(query)) }, 10);;

		// Restaurant Map
		setTimeout(function(){ Just8It.map(query); }, timers.map);

		// Hunger Engine
		setTimeout(function(){ Just8It.twitterSearch(query, Just8It.numResults, function(resp){
			var display = [];
			if(resp.results.length) dojo.forEach(resp.results, function(twitResult){
				display.push([
					"<div>",
						"<img width='48' height='48' style='float:left; margin: 0.1em; margin-right: 0.5em;'",
							"src='" + twitResult.profile_image_url + "'",
						"/>",
						"<div style='margin: 0.1em; padding-top: 0.1em;'>",
							"<a target='_blank' href='http://twitter.com/"+twitResult.from_user+"'>",
								twitResult.from_user,
							"</a>: ",
							"<span>" + twitResult.text + "</span>",
						"</div>",
						"<br style='clear: left; height: 1px;' />",
					"</div>"
				].join("\n"));
			}); else display.push(["<center>No results found.</center>"]);
			dojo.byId("results").innerHTML = display.join(
				"<div style='height: 4px; border-top: 1px dotted #999;'></div>"
			);
		})}, timers.engine);

		// TwitPics
		var twitpics = dojo.query(".twitpic");
		twitpics.forEach(function(box){ box.innerHTML = ""; });
		dojo.byId("TwitpicNotify").innerHTML = "Digesting results...";
		setTimeout(function(){ Just8It.twitterSearch(query + (query?" AND ":"") + "twitpic.com",  twitpics.length, function(resp){
			var display = [];
			var imgBoxes = dojo.query(".twitpic");
			var curBox = 0;
			if(resp.results.length) dojo.forEach(resp.results, function(twitResult){
				if(curBox == imgBoxes.length) return; // Stop after all img boxes are filled

				imgBoxes[curBox].innerHTML = ""; // Clear content

				var twitpicMatches = twitResult.text.match(/http:\/\/twitpic\.com\/[\w]+/);

				if(twitpicMatches.length){
					var twitpicCode = twitpicMatches[0].split("/"); twitpicCode = twitpicCode[twitpicCode.length-1];
					var twitpicText = twitResult.text.replace(/http:\/\/twitpic\.com\/[\w]+/, "").replace("\"", "'");
					imgBoxes[curBox].innerHTML = [
						'<a href="http://twitpic.com/'+twitpicCode+'" title="'+twitpicText+'" target="_blank">',
							'<img class="twitpicimg" width="150" height="150" alt="'+twitpicText+'"',
								'src="http://twitpic.com/show/thumb/'+twitpicCode+'.jpg"',
							'/>',
						'</a>'
					].join("\n");
					curBox ++;

				}
			}); else {
				dojo.byId("TwitpicNotify").innerHTML = "No images found.";
			}
		})}, timers.engine);
	},
	map: function(query){
		var urlStart = "http://maps.google.ca/maps?f=q&source=s_q&hl=en&q=restaurant";
		var urlEnd = "&ie=UTF8";
		var urlEmbed = "&output=embed";
		dojo.attr(dojo.byId("Map"), "src", urlStart + (query ? "+" + encodeURIComponent(query) : "") + urlEnd + urlEmbed);
		dojo.attr(dojo.byId("MapLink"), "href", urlStart + (query ? "+" + encodeURIComponent(query) : "") + urlEnd);
	}
}

dojo.addOnLoad(function(){

	dijit.layout.ContentPane.prototype.onDownloadStart = function() { return ""; }

	setTimeout(function(){
		if(window.location.hash != "" && window.location.hash != "# "){
			dijit.byId("QueryBox").setValue(window.location.hash.substring(1));
		} else {
			Just8It.search("");
		}
	}, 500);

});
