/**
 * tumblr-search.js
 * search posts with tumblr api
 */
 
 
 /**
  * SiteSearch
  * @require Yahoo, Dom, Event, Get, DataSource, AutoComplete
  * @see     http://developer.yahoo.com/yui/2/
  */
 YAHOO.namespace("tumblr");
 YAHOO.tumblr.SiteSearch = function(){
 	var _sInputId     = "q",
 		_sContainerId = "yui-ac-results",
 		_sSearchUrl   = "http://stonedsoul.org/api/read/json?";
 	
 	// DataSource instance
 	var oDataSource = new YAHOO.util.ScriptNodeDataSource(_sSearchUrl, {
	 	generateRequestCallback: function(){
		 		return "&callback=YAHOO.tumblr.SiteSearch.showResults";
		},
		maxCacheEntries: 0,
	 	responseSchema: {
	 		resultsList: "posts"
	 	}
 	});
 	
 	// AutoComplete instance
 	var oAutoComplete = new YAHOO.widget.AutoComplete(_sInputId, _sContainerId, oDataSource, {
	 	generateRequest: function(sQuery){
	 		return "q=" + sQuery;
	 	},
	 	minQueryLength: 2,
	 	queryDelay: 0.4,
	 	suppressInputUpdate: true
 	});

 	// customize results format
 	oAutoComplete.formatResult = function(aResultData, sQuery, sResultMatch){
 		var oResultItem = aResultData[1],
 			sTitle = "";
 			
 		switch (oResultItem["type"]) {
 			case "regular":
 				if (oResultItem["regular-title"] && oResultItem["regular-title"] !== "") {
 					sTitle = oResultItem["regular-title"];
 				}
 				break;
 			case "quote":
 				sTitle = oResultItem["quote-text"].substr(0, 20) + "..";
 				break;
 			case "link":
 				sTitle = oResultItem["link-text"].substr(0, 20) + "..";
 				break;
 			case "conversation":
 				if (oResultItem["conversation-title"] && oResultItem["conversation-title"] !== "") {
 					sTitle = oResultItem["conversation-title"];
 				}
 				break; 			
 		};
 		if (sTitle === "") {
 			var sSlug = oResultItem["slug"] ? oResultItem["slug"] : "";
 			sTitle = sSlug !== "" ? sSlug.replace(/\-/g, " ") : "post #" + oResultItem["id"];
 		}
 		return '<a href="' + oResultItem["url"] + '">' + sTitle + '</a>';
 	};
 	
 	// create <span> for speech bubble and appends it to .yui-ac-bd
 	var oSpan = document.createElement("span");
 	oSpan.className = "arrow";
 	var oYuiAcBd = YAHOO.util.Dom.getElementsByClassName("yui-ac-bd", "div")[0];
 	oYuiAcBd.appendChild(oSpan);
 	
 	return {
 		/**
 		 * execute callback function which is dinamically generated by YUI DataSource
 		 * due to Tumblr API drops "[" and "]" for the callback function name,
 		 * this method proxies to the callback function
 		 * @method showResults
 		 * @param  {object} Response from Tumblr API
 		 */
 		showResults: function(oResponse){
 			var oCallbacks = YAHOO.util.ScriptNodeDataSource.callbacks,
 				nId        = oCallbacks.length - 1;
 			try {
 				YAHOO.util.ScriptNodeDataSource.callbacks[nId](oResponse);
 			} catch(e) {
 			}
 		}
 	};
 }();
 