
// Yahoo Web search with pagination
function displayYahooWebResults(results, start, limit, total_records, query, container_id) 
{
	var container = $(container_id);
	var navigation_container = $(container_id+'_navigation');
	var status_container = $(container_id+'_status');
	container.empty();
	navigation_container.empty();
	results.each(function(result) {
		var el = new Element('div');
		var name = new Element('h2').injectInside(el);
		var title = new Element('a', {'href': result.Url}).setHTML(result.Title).injectInside(name);
		var desc = new Element('p').setHTML(result.Summary).injectAfter(name);
		var span = new Element('span').injectInside(el);
		var link = new Element('a', {'href': result.Url}).setHTML(result.DisplayUrl).injectInside(span);
		el.inject(container);
	});
	
	//navigation
	// ** POSITION STATUS AND PAGES NAVIGATION
	var page = Math.ceil(start / limit);
	var max_good_pages = Math.ceil( total_records / limit );
	var is_last_page = ( page == max_good_pages - 1 );
	is_first_page = ( page == 0 );
	start_record = limit * page;

	// ** POSITION STATUS (where in result set are we situated)
	// display only when multiple pages in result
	if( max_good_pages > 1 )
	{
		status_container.setHTML('Displaying '+(start+1)+'-'+Math.min((start+limit), total_records)+' of '+addCommas(total_records));
		// results "start_record" - "min( $start_record + $this->get_page_size()" of "total_records"
	}

	// ** PAGES NAVIGATION (links to navigate between result pages 
	// display only when multiple pages in result
	if( max_good_pages > 1 )
	{

		if( !is_first_page )
		{
			//display prev link
			new_page = page - 1;
			var link = new Element('a', {'id': 'prev_'+new_page, 'href': "#", 'events':{
				'click': function(){
					var page = this.id.replace(/prev_/,'').toInt();
					var start = page * limit;
					getYahooWebResults(query, start, limit, container_id);
				}
				}}).setHTML("PREV");
			link.inject(navigation_container);
		}



		for( var i = Math.max( 0, page-10 ); i < Math.min( max_good_pages, page+10 ); i++ )
		{
			var page_number = i+1;
			if( i == page )
			{
				//current page
				var b = new Element('b').setHTML(page_number);
				b.inject(navigation_container);
			}
			else
			{
				//other page
				var link = new Element('a', {'id': 'page_'+i, 'href': "#", 'events':{
					'click': function(){
						var page = this.id.replace(/page_/,'').toInt();
						var start = page * limit;
						getYahooWebResults(query, start, limit, container_id);
					}
					}}).setHTML(page_number);
				link.inject(navigation_container);
			}
		}
		

		if( !is_last_page )
		{
			//display next link
			new_page = page + 1;
			var link = new Element('a', {'id': 'next_'+new_page, 'href': "#", 'events':{
				'click': function(){
					var page = this.id.replace(/next_/,'').toInt();
					var start = page * limit;
					getYahooWebResults(query, start, limit, container_id);
				}
				}}).setHTML("NEXT");
			link.inject(navigation_container);
		}
		
	}
	
}
 
function getYahooWebResults(query,start,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://search.yahooapis.com/WebSearchService/V1/webSearch?appid='+yahoo_key+'&query='+query+'&start='+start+'&results='+limit+'&output=json'));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			displayYahooWebResults(jsonObj.ResultSet.Result, start, limit, jsonObj.ResultSet.totalResultsAvailable, query, container_id);
		}
	}).send();
};


//Sugested searches
function displayYahooSuggestionsResults(results, container_id) 
{
	var container = $(container_id);
	
	if(typeof(results) == 'undefined' || results.length == 0)
	{
		container.style.display = 'none';
		return;
	}
	results.each(function(result) {
		var el = new Element('a', {'href':'index.php?q='+result}).setHTML(result).inject(container);
	});
}
 
function getYahooSuggestionsResults(query,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://search.yahooapis.com/WebSearchService/V1/relatedSuggestion?appid='+yahoo_key+'&query='+query+'&results='+limit+'&output=json'));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			displayYahooSuggestionsResults(jsonObj.ResultSet.Result, container_id);
		}
	}).send();
};


//Wiktionary
//http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Golf|PHP&rvprop=content

/*
// Yahoo Image Search
function displayYahooImageResults(results, container_id) 
{
	var container = $(container_id);
	results.each(function(result) {
		var el = new Element('span');
		var name = new Element('div').setHTML(result.Title).injectInside(el);
		var img = new Element('img', {'src':result.Thumbnail.Url, 'width':result.Thumbnail.Width,'height':result.Thumbnail.Height}).injectAfter(name);
		el.inject(container);
	});
}
 
function getYahooImageResults(query,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid='+yahoo_key+'&query='+query+'&results='+limit+'&output=json'));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			displayYahooImageResults(jsonObj.ResultSet.Result, container_id);
		}
	}).send();
};

*/


//Yahoo Questions Search
function displayYahooAnswersResults(results, container_id) 
{
	var container = $(container_id);
	if(results.length == 0)
	{
		container.style.display = 'none';
		return
	}
	results.each(function(result) {
		var el = new Element('div');
		var name = new Element('b').setHTML('Q: ').injectInside(el);
		var title = new Element('a', {'href': result.Link}).setHTML(result.Subject).injectInside(name);
		var desc = new Element('p').setHTML(result.Content).injectAfter(name);
		var answer = new Element('p').setHTML('<b>A:</b> '+result.ChosenAnswer).injectAfter(desc);
		
		el.inject(container);
	});
}
 
function getYahooAnswersResults(query,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://answers.yahooapis.com/AnswersService/V1/questionSearch?appid='+yahoo_key+'&search_in=all&query='+query+'&results='+limit+'&output=json'));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			displayYahooAnswersResults(jsonObj.all.questions, container_id);
		}
	}).send();
};


//Wikipedia Search
function displayWikipediaResults(title, content, container_id) 
{
	var container = $(container_id);
	var count_results = 0;
	
	
	

	if(content.substring(0,9) =="#REDIRECT")
	{
		container.style.display = 'none';
		return
	}
	//remove comments
	var text = content.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/m,'');
	
	//get the first part
	text = text.substring(0, 5000);
	
	//remove info boxes
	while(true)
	{
		var new_text = text.replace(/\{\{[^{}}]+\}\}/g,'');
		if(new_text == text)
		{
			break;
		}
		text = new_text;
	}
	
	//separate lines
	var lines = text.split('\n', 100);
	text = '';
	//Stop after the first line that has more then 150 chars
	for(var i = 0; i<lines.length; i++)
	{
		text += lines[i]+"\n";
		if(lines[i].length > 150) break;
	}
	
	
	text = InstaView.convert(text).replace(/undefined/g,'')+'<div><a href="http://en.wikipedia.com/wiki/'+title+'">More</div>';
	
	var el = new Element('div').setHTML(text).inject(container);
	el.inject(container);
	
	
	
}
/*
function getWikipediaResults(query,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles='+query.replace(/ /, '_')+'&rvprop=content&format=json'));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			displayWikipediaResults(jsonObj.query.pages, container_id);
		}
	}).send();
};
*/

function getWikipediaResults(query,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles='+query.replace(/ /, '_')+'&rvprop=content&format=xml'));
	
	new Ajax(url, {
		
		onComplete: function(responseText,responseXml) {
				if(responseXml.getElementsByTagName('rev').length == 0)
				{
					var container = $(container_id);
					container.style.display = 'none';
					return;
					
				}
				var content = responseXml.getElementsByTagName('rev')[0].firstChild.nodeValue;
				var attributes = responseXml.getElementsByTagName('page')[0].attributes;
				var title = '';
				for(var i=0; i<attributes.length; i++)
				{
					if(attributes[i].nodeName == 'title')
					{
						title = attributes[i].nodeValue;
					}
				}
				displayWikipediaResults(title, content, container_id);
			}
		}).request();
	
};


//Yahoo shopping search

//Sugested searches
function displayYahooShoppingResults(results, container_id) 
{
	var container = $(container_id);
	//debugger
	if(typeof(results)!='undefined')
	{
		results.each(function(product) {
			var el = new Element('div');
			var table = new Element('table',{'border':'0'}).injectInside(el);
			var tbody = new Element('tbody').injectInside(table)
			var tr = new Element('tr').injectInside(tbody);
			
			if(typeof(product.Offer)!='undefined')
			{
				
				var td = new Element('td',{'valign':'top','width':'70'}).injectInside(tr);
				var a = new Element('a', {'href':product.Offer.Url}).injectInside(td);
				var img = null;
				if(typeof(product.Offer.Thumbnail)!='undefined')
					img = new Element('img', {'src':product.Offer.Thumbnail.Url}).injectInside(a);
				
				td = new Element('td',{'valign':'top'}).injectInside(tr);
				a = new Element('a', {'href':product.Offer.Url}).setHTML(product.Offer.ProductName).injectInside(td);
				if(typeof(product.Offer.Summary)!='undefined')
				{
					var p = new Element('p').setHTML(product.Offer.Summary.substring(0,75)+'...').injectInside(td);
				}
				if(typeof(product.Offer.Description)!='undefined')
				{
					var p = new Element('p').setHTML(product.Offer.Description.substring(0,75)+'...').injectInside(td);
				}
				
				var b = new Element('b').setHTML('$'+product.Offer.Price).injectInside(td);
				
			}
			
			if(typeof(product.Catalog)!='undefined')
			{
				
				var td = new Element('td',{'valign':'top','width':'70'}).injectInside(tr);
				var a = new Element('a', {'href':product.Catalog.Url}).injectInside(td);
				var img = null;
				if(typeof(product.Catalog.Thumbnail)!='undefined')
					img = new Element('img', {'src':product.Catalog.Thumbnail.Url,'border':'0'}).injectInside(a);
				
				td = new Element('td',{'valign':'top'}).injectInside(tr);
				a = new Element('a', {'href':product.Catalog.Url}).setHTML(product.Catalog.ProductName).injectInside(td);
				if(typeof(product.Catalog.Description)!='undefined')
				{
					var p = new Element('p').setHTML(product.Catalog.Description.substring(0,75)+'...').injectInside(td);
				}
				if(typeof(product.Catalog.Summary)!='undefined')
				{
					var p = new Element('p').setHTML(product.Catalog.Summary.substring(0,75)+'...').injectInside(td);
				}
				
				var b = new Element('b').setHTML('$'+product.Catalog.PriceFrom+' - '+'$'+product.Catalog.PriceTo).injectInside(td);
				
			}
			
			
			el.inject(container);
			//var el = new Element('a', {'href':'/?q='}).setHTML(x).inject(container);
		});
	}
	else
	{
		container.style.display = 'none';
	}
	
	
}
 
function getYahooShoppingResults(query,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://shopping.yahooapis.com/ShoppingService/V3/productSearch?appid='+yahoo_key+'&query='+query+'&results='+limit+'&output=json'));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			//debugger
			displayYahooShoppingResults(jsonObj.Products.Product, container_id);
		}
	}).send();
};


//sponsored results

function getSponsoredResultsRMM(query,start,limit,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('https://zone.redmccombsmedia.com/feed/json/msf/?q='+query));
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			displaySponsoredResultsRMM(jsonObj.ResultSet.Result, start, limit, jsonObj.ResultSet.totalResultsAvailable, query, container_id);
		}
	}).send();
};

function displaySponsoredResultsRMM(results, start, limit, total_records, query, container_id) 
{
	var container = $(container_id);
	//var navigation_container = $(container_id+'_navigation');
	//var status_container = $(container_id+'_status');
	container.empty();
	//navigation_container.empty();
	results.each(function(result) {
		var el = new Element('div');
		var name = new Element('h2').injectInside(el);
		var title = new Element('a', {'href': result.ClickUrl}).setHTML(result.Title).injectInside(name);
		var desc = new Element('p').setHTML(result.Description).injectAfter(name);
		var span = new Element('span').injectInside(el);
		var link = new Element('a', {'href': result.ClickUrl}).setHTML(result.DisplayUrl).injectInside(span);
		el.inject(container);
	});
}

function getSponsoredResultsSASSY(feed_id,query,container_id) 
{
	var url = '/proxy.php?url_path='+encodeURIComponent(encodeURI('http://sassysearch.com/xml/?fid='+feed_id+'&keywords='+query+'&user_ip=10.1.2.136&ua='+navigator.userAgent+'&serve_url=http%3A%2F%2Fwww.mysearch-finder.com'));
	
	new Ajax(url, {
		
		onComplete: function(responseText,responseXml) {
				//var results = responseXml.getElementsByTagName('listings');
				displaySponsoredResultsSASSY(responseXml.firstChild.firstChild.childNodes, container_id);
			}
		}).request();
	
};

function displaySponsoredResultsSASSY(results, container_id) 
{
	var container = $(container_id);
	//var navigation_container = $(container_id+'_navigation');
	//var status_container = $(container_id+'_status');
	container.empty();
	//navigation_container.empty();
	for(var i=0; i<results.length; i++)
	{

		if(results[i].nodeName == 'listing')
		{
			var el = new Element('div');
			var name = new Element('h2').injectInside(el);
			var title = new Element('a', {'href': results[i].childNodes[7].textContent}).setHTML(results[i].childNodes[1].textContent).injectInside(name);
			var desc = new Element('p').setHTML(results[i].childNodes[3].textContent).injectAfter(name);
			var span = new Element('span').injectInside(el);
			var link = new Element('a', {'href': results[i].childNodes[7].textContent}).setHTML(results[i].childNodes[5].textContent).injectInside(span);
			el.inject(container);
		}
		
	}
}


function getAndDisplayGoogleWebResults(q, container_id) {

  // Create a search control
  var searchControl = new GSearchControl();

  var options = new GsearcherOptions();
  options.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);

  // Add in a full set of searchers
  searchControl.addSearcher(new GwebSearch(), options);

  // Tell the searcher to draw itself and tell it where to attach
  searchControl.draw(document.getElementById(container_id));

  // Execute an inital search
  searchControl.execute(q);
}








