// SpiffY!Search, v1.10, 3/18/2006
// copyright (c) Kent Brewster, 2006
// feel free to use or abuse this code, BUT:
//
// - leave these credits intact
// - leave the "help" link alone
// - leave the API key set to SpiffySearch
//
// I'd also love to hear from you; please
// contact me via http://www.mindsack.com/

var ss_obj_1 =
{
	kickstart : function()
	{
		// set to the SpiffY!Search form ID 
		ss_obj_1.id = 'ss';
		// delete this line if you don't want autofill
		ss_obj_1.autoFillTag = 'B';
		// you can automagically get your default domain
///		ss_obj_1.defaultDomain = ss_obj_1.getDomain(document.location + '?');
		// OR specify one here
		// ss_obj_1.defaultDomain = 'mindsack.com';
		// results per page
		// 100 = max ... more than 10 will be slow
		ss_obj_1.resultsPerPage = 10;
		ss_obj_1.skinnyLimit = 190;
		// messing with anything else may cause trouble!
		ss_obj_1.f = document.getElementById(ss_obj_1.id);
		ss_obj_1.f.innerHTML = '';
		ss_obj_1.f.id = ss_obj_1.id;
		ss_obj_1.f.action='#';
		ss_obj_1.f.onkeypress = ss_obj_1.disableCr;
		ss_obj_1.resultSet = 0;
		ss_obj_1.lastQuery = '';
///		ss_obj_1.lastDomain = ss_obj_1.defaultDomain;
		ss_obj_1.searchMode = ['yahooSearch'];  ///, 'yahooNews'];
		ss_obj_1.searchUrl = ['http://api.search.yahoo.com/WebSearchService/V1/webSearch'] //// , 'http://api.search.yahoo.com/NewsSearchService/V1/newsSearch'];
		var s = document.createElement('script');
		ss_obj_1.s = ss_obj_1.id + '_s';
		s.setAttribute('type','text/javascript');
		s.setAttribute('charset', 'utf-8');
		document.getElementsByTagName('head')[0].appendChild(s);
		ss_obj_1.f.y = document.createElement('a');
		ss_obj_1.f.y.mode = 0;
		ss_obj_1.f.y.className = 'yahooSearch';
		ss_obj_1.f.y.onclick = ss_obj_1.toggleSearch;
		ss_obj_1.f.appendChild(ss_obj_1.f.y);		
		ss_obj_1.f.r = document.createElement('input');
		ss_obj_1.f.r.type = 'checkbox';
		ss_obj_1.f.r.checked = true;
		ss_obj_1.f.r.id = ss_obj_1.id + '_r';
		ss_obj_1.f.r.onclick = ss_obj_1.toggleRestrict;
		ss_obj_1.f.appendChild(ss_obj_1.f.r);
		ss_obj_1.f.d = document.createElement('input');
		ss_obj_1.f.d.id = ss_obj_1.id + '_d';
		ss_obj_1.f.d.style.width = ss_obj_1.f.offsetWidth - 10 + 'px';
		ss_obj_1.f.d.style.paddingLeft = '0';
		ss_obj_1.f.d.value = 'results from tagged sites';   //  ss_obj_1.defaultDomain;
//		ss_obj_1.f.appendChild(ss_obj_1.f.d);   /// nope - not for the search in tagged sites application



		ss_obj_1.f.label = document.createElement('LABEL');
		ss_obj_1.f.label.htmlFor = ss_obj_1.id + '_d';
		ss_obj_1.f.label.id = ss_obj_1.id + '_label';
///////		ss_obj_1.f.label.innerText = 'Search in tagged sites'
		ss_obj_1.f.label.appendChild(document.createTextNode('Search in tagged sites'))
		ss_obj_1.f.appendChild(ss_obj_1.f.label);
		
		ss_obj_1.f.q = document.createElement('input');
		ss_obj_1.f.q.id = ss_obj_1.id + '_q';
		ss_obj_1.f.q.type = 'text';
		ss_obj_1.f.q.autocomplete = 'off';
///////		ss_obj_1.f.q.style.width = '200px'; //  ss_obj_1.f.offsetWidth - 16 + 'px';
		ss_obj_1.f.appendChild(ss_obj_1.f.q);
		ss_obj_1.f.a = document.createElement('dl');
		ss_obj_1.f.a.id = ss_obj_1.id + '_a';
		ss_obj_1.f.appendChild(ss_obj_1.f.a);
		ss_obj_1.f.u = document.createElement('p');
		ss_obj_1.f.u.id = ss_obj_1.id + '_u';
		ss_obj_1.f.appendChild(ss_obj_1.f.u);
		ss_obj_1.f.h = document.createElement('a');
		ss_obj_1.f.h.href = "http://www.mindsack.com/uxe/SpiffySearch";
		ss_obj_1.f.h.innerHTML = '[about spiffySearch]';
		ss_obj_1.f.h.style.display = 'block';
		ss_obj_1.f.h.className = 'spiffySearch_creditlink';
		ss_obj_1.f.h.style.margin = '3px';
		ss_obj_1.f.h.style.textAlign = 'right';
		ss_obj_1.f.appendChild(ss_obj_1.f.h);
		
		if (/safari/i.test(navigator.userAgent)) {
			ss_obj_1.f.d.style.fontSize = 'x-small';
		} 		
		if (ss_obj_1.f.offsetWidth < 100)
		{
			ss_obj_1.f.style.display = 'none';
		}
		else
		{
			if (ss_obj_1.f.offsetWidth > ss_obj_1.skinnyLimit)
			{
				var w = (ss_obj_1.f.offsetWidth / 2) - 12;
				ss_obj_1.f.d.style.width = w + 'px';
			///////	ss_obj_1.f.r.style.left = ss_obj_1.f.offsetWidth - w - 26 + 'px';
			}
			else
			{
				ss_obj_1.f.d.style.display = 'none';
				ss_obj_1.f.r.style.display = 'none';
			}
			ss_obj_1.f.a.style.width = ss_obj_1.f.offsetWidth - 10 + 'px';
			ss_obj_1.f.q.style.width = ss_obj_1.f.offsetWidth - 10 + 'px';
			ss_obj_1.f.onmouseover = ss_obj_1.mouseOver;
			ss_obj_1.f.onmouseout = ss_obj_1.mouseOut;
			ss_obj_1.f.onmouseup = ss_obj_1.mouseUp;
			setInterval("ss_obj_1.doStuff()", 500);
		}
		if (ss_obj_1.autoFillTag)
		{
		    theKids = document.getElementsByTagName(ss_obj_1.autoFillTag);
		    for (var i=0; i<theKids.length; i++)
		    {
		        theKids[i].style.cursor = 'pointer';
		        theKids[i].onmouseover = ss_obj_1.stuffQuery;
		    }
		}		
	},
	toggleSearch : function()
	{
		ss_obj_1.f.y.mode = (ss_obj_1.f.y.mode + 1) % ss_obj_1.searchMode.length;
		ss_obj_1.f.y.className = ss_obj_1.searchMode[ss_obj_1.f.y.mode];
		ss_obj_1.resultSet = 0;
		ss_obj_1.runSearch();
	},
	toggleRestrict : function()
	{
		if (ss_obj_1.f.q.value)
		{
			ss_obj_1.resultSet = 0;
			ss_obj_1.runSearch();
		}
	},
	mouseOver : function(v)
	{
		el = ss_obj_1.getEl(v);
		if (el.className.match(/searchResult/))
		{
			ss_obj_1.getNextSibling(el).style.display = 'block';
		}
		if (el.parentNode.className.match(/searchResult/))
		{
			ss_obj_1.getNextSibling(el.parentNode).style.display = 'block';
		}
	},
	mouseOut : function(v)
	{
		el = ss_obj_1.getEl(v);
		if (el.className.match(/searchResult/))
		{
			ss_obj_1.getNextSibling(el).style.display = 'none';
		}
		if (el.parentNode.className.match(/searchResult/))
		{
			ss_obj_1.getNextSibling(el.parentNode).style.display = 'none';
		}
	},
	mouseUp : function(v)
	{
		el = ss_obj_1.getEl(v);
		if (el.id == ss_obj_1.f.id + '_nx')
		{
			ss_obj_1.resultSet += ss_obj_1.resultsPerPage;
			ss_obj_1.runSearch();
		}	
		if (el.id == ss_obj_1.f.id + '_pr')
		{
			ss_obj_1.resultSet -= ss_obj_1.resultsPerPage;
			ss_obj_1.runSearch();
		}	
		if (el.className == 'relatedTerm')
		{
			ss_obj_1.f.q.value = el.innerHTML;
			ss_obj_1.resultSet = 0;
			ss_obj_1.runSearch();
		}	
		if (el.id == ss_obj_1.f.id + '_yh')
		{
			var site = '';
			if (ss_obj_1.f.r.checked)
			{
				site = '&vs=' + ss_obj_1.f.d.value;
			}
    			var url = 'http://search.yahoo.com/search?p=' + ss_obj_1.f.q.value + '&b=' + ss_obj_1.resultSet + site;
    			window.open(url,'search','',0);		
		}
		if (el.className == 'addToMyWeb')
		{
			var ns = ss_obj_1.getNextSibling(ss_obj_1.getEl(v));
			var url = 'http://myweb2.search.yahoo.com/myresults/bookmarklet?t=';
			url += escape(ns.innerHTML);
			url += '&u=';
			url += escape(ns.name);
			url += '&tag=';
			var tags = ss_obj_1.f.q.value;
			url += escape(tags);	
			url += '&ei=UTF-8';
			window.open(url,'popup','width=520px,height=420px,status=0,location=0,resizable=1,scrollbars=1,left=100,top=50',0);
		}	
		else
		{
			if (el.className.match(/searchResult/) || el.parentNode.className.match(/searchResult/))
			{
				v = v || window.event;
				if (v.shiftKey)
				{
					ss_obj_1.f.r.click();
					ss_obj_1.f.d.value = ss_obj_1.getDomain(el.name);
					resultSet = 0;
					ss_obj_1.runSearch();
				}
				else
				{
					window.open(el.name,'_vu');
				}
			}
		}
	},
	stuffQuery : function(v)
	{
	/* MM commenting this out - we do not want to stuff queries
		el = ss_obj_1.getEl(v);
		if (el.innerHTML != ss_obj_1.lastQuery)
		{
			ss_obj_1.f.q.value = el.innerHTML;
			ss_obj_1.runSearch();
		}
    */
	},
	getEl : function(v)
	{
		var tg = (v) ? v : event;
		if (tg.target)
		{
			var el = (tg.target.nodeType == 3) ? tg.target.parentNode : tg.target;
		}
		else
		{
			var el = tg.srcElement;
		}
		return el;
	},
	getNextSibling : function(el)
	{
		var nextSib = el.nextSibling;
		if (nextSib && nextSib.nodeType != 1)
		{
			nextSib = nextSib.nextSibling;
		}
		return nextSib;
	},
	doStuff : function()
	{
		if (ss_obj_1.f.q.value)
		{
			if (ss_obj_1.lastQuery != ss_obj_1.f.q.value)
			{
				ss_obj_1.runSearch();
			}
		}
		else
		{
			if (ss_obj_1.lastQuery)
			{
				ss_obj_1.f.a.innerHTML = '';
			}
		}
/*		if (ss_obj_1.f.d.value != ss_obj_1.lastDomain && ss_obj_1.f.r.checked)
		{
			ss_obj_1.lastDomain = ss_obj_1.f.d.value;
			ss_obj_1.runSearch();
		}
*/
	},
	disableCr : function(v)
	{
		if (v)
		{
			var k = v.which;
		}
		else
		{
			var k = window.event.keyCode;
		}
		return k!=13;
	},
	runSearch : function()
	{
		ss_obj_1.lastQuery = ss_obj_1.f.q.value;
		var startingRecord = '&start=' + ss_obj_1.resultSet;
		var restrictDomain = '';
		if (ss_obj_1.f.r.checked && ss_obj_1.f.d.value)
		{
			restrictDomain = '&site=' + ss_obj_1.f.d.value;
		}
//		var url = ss_obj_1.searchUrl[ss_obj_1.f.y.mode] + '?appid=SpiffySearch&language=en&query=' + ss_obj_1.f.q.value + startingRecord + restrictDomain + '&results=' + ss_obj_1.resultsPerPage + '&output=json&callback=ss_obj_1.pingSearch';
		var url = ss_obj_1.searchUrl[ss_obj_1.f.y.mode] + '?appid=SpiffySearch&language=en&query=' + ss_obj_1.f.q.value + startingRecord + generateYahooJSON_URL() + '&results=' + ss_obj_1.resultsPerPage + '&output=json&callback=ss_obj_1.pingSearch';

/////// alert(url)


		ss_obj_1.runScript(url);
	},
	pingSearch : function(r)
	{
		ss_obj_1.f.a.innerHTML = '';
		var nav = document.createElement('dt');
		nav.id = ss_obj_1.f.id + '_n';
		var yh = document.createElement('a');
		yh.id = 'ss_yh';
		yh.title = 'Visit Yahoo! search for these results.';
		if (ss_obj_1.f.offsetWidth > ss_obj_1.skinnyLimit)
		{
			yh.innerHTML = 'from the Web';
			if (ss_obj_1.f.d.value && ss_obj_1.f.r.checked)
			{
				yh.innerHTML = ss_obj_1.f.d.value;
			}
		}
		else
		{
			yh.innerHTML = 'Y!';
		}
		nav.appendChild(yh);
		if (ss_obj_1.resultSet)
		{
			var pr = document.createElement('a');
			pr.id = 'ss_pr';
			pr.innerHTML = '&laquo;';
			pr.title = 'Previous Results';
			nav.appendChild(pr);
		}
		if (parseInt(r.ResultSet.totalResultsAvailable) > parseInt(r.ResultSet.firstResultPosition) + ss_obj_1.resultsPerPage)
		{
			var nx = document.createElement('a');
			nx.id = 'ss_nx';
			nx.innerHTML = '&raquo;';
			nx.title = 'Next Results';
			nav.appendChild(nx);
		}
		ss_obj_1.f.a.appendChild(nav);
		if (r.ResultSet.totalResultsReturned)
		{
			for (var i = 0; i< r.ResultSet.totalResultsReturned; i++)
			{
				if (r.ResultSet.Result[i] && r.ResultSet.Result[i].Url && r.ResultSet.Result[i].Title)
				{
					var item = document.createElement('dt');
					item.className = 'searchResult';
					item.name = r.ResultSet.Result[i].Url;
					if (i % 2) { item.className += ' odd' };
					item.style.zIndex = i;
                			var img = document.createElement('a');
                			img.className = 'addToMyWeb';
                			img.title = 'Add to My Web';
                			item.appendChild(img);
				
					var link = document.createElement('a');
                			link.className = 'resultTitle';
					link.name = r.ResultSet.Result[i].Url;
					link.innerHTML = r.ResultSet.Result[i].Title;
					item.appendChild(link);
					ss_obj_1.f.a.appendChild(item);
					var dd = document.createElement('dd');
					dd.style.display = 'none';
					dd.style.zIndex = i + 100;
					dd.innerHTML = '<h4>' + r.ResultSet.Result[i].Title + '</h4>' + r.ResultSet.Result[i].Summary;
					var d = ss_obj_1.getDomain(r.ResultSet.Result[i].Url);
					if (!ss_obj_1.f.r.checked)
					{
						dd.innerHTML += '<p>Shift-click to restrict results to ' + d + '</p>';
					}
					else
					{
						dd.innerHTML += '<p>Shift-click to show results from all domains.</p>';
					}
					item.appendChild(dd);
					ss_obj_1.f.a.appendChild(dd);
				}
			}
			if (!ss_obj_1.resultSet)
			{
				ss_obj_1.runRelated();
			}
		}
		else
		{
			ss_obj_1.f.a.innerHTML = '<dt>Nothing found, sorry!</dt>';
		}
		ss_obj_1.lastQuery = ss_obj_1.f.q.value;
	},
	runRelated : function()
	{
		var url = 'http://api.search.yahoo.com/WebSearchService/V1/relatedSuggestion?appid=SpiffySearch&query=' + ss_obj_1.f.q.value + '&output=json&callback=ss_obj_1.pingRelated';
		ss_obj_1.runScript(url);
	},
	pingRelated : function(r)
	{
	
	
	return 0;    /// until MM knows how to restrict related to the tagged sites, leave this out
	
	
	
	
	
		ss_obj_1.f.u.innerHTML = '';
		if (r.ResultSet)
		{
			if (r.ResultSet.Result.length)
			{
				ss_obj_1.f.u.appendChild(document.createTextNode('See Also: '));
				for (var i = 0; i < r.ResultSet.Result.length; i++)
				{
					if (i)
					{
						ss_obj_1.f.u.appendChild(document.createTextNode(', '));
					}
					var t = document.createElement('a');
					t.innerHTML = r.ResultSet.Result[i];
					t.className = 'relatedTerm';
					ss_obj_1.f.u.appendChild(t);	
				}
			}		
		}
	},
	goThere : function(url)
	{
		window.open(url, '_vu');
	},
	runScript : function(url)
	{
		var remoteScript=document.createElement('script');
		remoteScript.id = ss_obj_1.s;
		remoteScript.setAttribute('type','text/javascript');
		remoteScript.setAttribute('charset', 'utf-8');
		remoteScript.setAttribute('src', url);
		document.getElementsByTagName('head')[0].appendChild(remoteScript);
	},
	removeScript : function(id)
	{
		document.getElementsByTagName('head')[0].removeChild(ss_obj_1.s);
	},
	getDomain : function(url)
	{
		var h = url.split('?');
		var i = h[0].split('//');
		var j = i[1].split('/');
		var k = j[0].split('.');
		var t = k[k.length-2] + '.' + k[k.length-1];
		if ((k[k.length-1].length) == 2)
		{
		t = k[k.length-3] + '.' + t;
		}
		return t;
	},
	showDetails : function(id)
	{
	    document.getElementById(id).style.display = 'block';
	},
	hideDetails : function(id)
	{
	    document.getElementById(id).style.display = 'none';
	}	    
}

/////// MM took this out of here - will call it from main init window.onload=ss_obj_1.kickstart;
