/*
	search js api
	relies on google api and google.load set in dhandler
	
	FIXME Remove code dependance on "Search..." checks - set a state instead.
	
	SM 25Mar11: Moved tri_is_user_input_key -> common.js (tri_is_user_input_key)
*/

var regional_throbber = 'http://images.regional.org.au/icons/throbber.gif';

$(document).ready(function() {
  
    //alert('search js ready test');
		
		$("input[name='googlesearchinput']")
  		.data('timeout', null)
  		.keyup(function(event){
  		  clearTimeout($(this).data('timeout'));
  		  // SM 15Mar11: Don't search on control key inputs
        if(!tri_is_user_input_key(event.keyCode)) { event.preventDefault(); return false; }
  			// SM 15Mar11: Don't search on nothing
  			if($.trim($(this).val()).length > 0) {
    			$(this).data('timeout', setTimeout(function(){ do_google_search(); }, 400));
  			}
  		})
  		.keydown(function(event){
  		  clearTimeout($(this).data('timeout'));
  		  if(!tri_is_user_input_key(event.keyCode)) { event.preventDefault(); return false; }
  		  hide_google_search();
  		});
		
		// SM 08Jul10: If you change the radio AFTER a search, then re-search
		$("input[name='googlesearchsite']").change(function() {
			if('Search...' != $("input[name='googlesearchinput']").val()) {
				do_google_search();
			}
		});
		
});

/**
 * SM 15Mar11: Helper function
 */
function hide_google_search() {
  $('#googlesearchresults').slideUp().html('');
}

/**
 * Pull google/json results data and format into HTML via JS.
 * A little clunky (Not a huge fan of building HTML with JS) but it works ok.
 */
function do_google_search() {

	// grab data from UI
	var elem		= $("input[name='googlesearchinput']");
	var query 	= elem.val();
	var site		= $("input:radio[name='googlesearchsite']:checked").val();
	
	query = $.trim(query); // prune out useless spaces
	//alert('test: do_google_search q:'+query);
	if('Search...' == query) { return false; } // prevent search against default
	
	$('#googlesearchresults').slideUp().html('');
	elem.addClass('throbbing');
	
	$.getJSON(
		"/my/search/google-json",
		{ q: query, site: site},
		function(data) {
		  var out = [];
			elem.removeClass('throbbing');
			if(data == null) { alert("No search results returned from Google/JSON."); return false; }
			if (data.responseData && data.responseData.results) {
			  if(data.responseData.results.length == 0) {
			    out.push('No results found.');
				} else {
  			  var results = data.responseData.results;
  			  var total_count = data.responseData.cursor.estimatedResultCount;
          var more_link   = data.responseData.cursor.moreResultsUrl;
          var close_link  = '<a onClick="hide_google_search()">Close</a>';
          out.push('<div class="gs_results_footer"><span class="results_info">About '+total_count+' results: <a href="'+more_link+'" target="_blank">view more</a></span>'+close_link+'</div>');
          out.push("<ul>");
          for (var i=0; i < results.length; i++) {
            out.push('<li><div class="gs_results_title"><a href="'+results[i].url+'" target="_blank">'+results[i].titleNoFormatting+'</a></div><div class="gs_results_content">'+results[i].content+'</div></li>');
          }
          out.push("</ul>");
          out.push('<div class="gs_results_footer"><span class="powered_by_google">Powered by Google</span>'+close_link+'</div>'); // SM 15Mar11
        }	
			} else {
			 out.push('No results found.');
			}
					
			$('#googlesearchresults').html(out.join("\n")).slideDown();
		}
	);
	
}

