//JS used for the tags pages
// showSuccess, getRecentPosts, getRecentThreads, etc...

var isLoading = false; //used to make sure we don't try loading data more than once for infinite scrolling
var startingResult = 15;


function initMoreResults(resultsFunc,query,sort,username) {
	jQuery(window).scroll(function(){
	        if  ((jQuery(window).scrollTop() + 500 > jQuery(document).height() - jQuery(window).height()) && isLoading != true){
				isLoading = true;
				executeFunctionByName(resultsFunc,window,[startingResult,sort,query,username]);
				startingResult += 15;
	        }
	});
}

function tagResultsFunc(start,sort,query,username)
{
    jQuery.post("/tags/show/tags/"+query+"/start/"+start+"/sort/"+sort+"/fmt/json",   
     function(data){
        if (data != "") {
			if(data.ListOfQualitySimplePosts != "") {
				jQuery.each(data.ListOfQualitySimplePosts,function(index,value) { process(index,value,query,username); });
        	} else {
				processNoMoreResults(query);
			}
		}
    }, "json");
}

function geotagResultsFunc(start,sort,query,username)
{
    jQuery.post("/tags/geotagShow/tags/"+query+"/start/"+start+"/sort/"+sort+"/fmt/json",   
     function(data){
        if (data != "") {
			if(data.ListOfQualitySimplePosts != "") {
				jQuery.each(data.ListOfQualitySimplePosts,function(index,value) { process(index,value,query,username); });
    		} else {
				processNoMoreResults(query);
			}
		}
    }, "json");
}

function userResultsFunc(start,sort,query,username)
{
    jQuery.post("/user/"+query+"/start/"+start+"/fmt/json",   
     function(data){
        if (data != "") {
			jQuery.each(data.ListOfQualitySimplePosts,function(index,value) { process(index,value,query,username); });
        }
    }, "json");
}

function myDiscussionsFunc(start,sort,query,username)
{
		console.log(" query: "+query);
    jQuery.post("/myDiscussions/start/"+start+"/fmt/json",   
     function(data){
        if (data != "") {
			jQuery.each(data.ListOfQualitySimplePosts,function(index,value) { process(index,value,query,username); });
        }
    }, "json");
}

function recentPostsResultsFunc(start,sort,query,username)
{
    jQuery.post("/tags/getRecentPosts/start/"+start+'/fmt/json',   
     function(data){
				jQuery("#msg").ajaxError(function(event, request, settings, exception){
				   jQuery(this).append("<li>Error requesting page " + settings.url + "</li>");
				 });
        if (data != "") {
			if(data.ListOfQualitySimplePosts != "") {	
				jQuery.each(data.ListOfQualitySimplePosts,function(index,value) { process(index,value,"Recent Posts",username); });
        	} else {
				processNoMoreResults("");
			}
		}
    }, "json");
}

function recentThreadsResultsFunc(start,sort,query,username)
{
    jQuery.post("/tags/getRecentThreads/start/"+start+'/fmt/json',   
     function(data){
        if (data != "") {
			jQuery.each(data.ListOfQualitySimplePosts,function(index,value) { process(index,value,query,username); });
        }
    }, "json");
}

function executeFunctionByName(functionName, context, args) {
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i++) {
    context = context[namespaces[i]];
  }
  return context[func].apply(this, args);
}


function process(index,value,query,username) {  	
	console.log("index: "+index+" value: "+value+" query: "+query+" username: "+username);
	var results = parseTemplate(jQuery("#resultTemplate").html(), {"result": value, "query": query, "username": username});	
	jQuery("ul#results").append(results);
	isLoading = false;
}

function processNoMoreResults(query) {  	
	if(jQuery("#noMoreResults").size() < 1) {
		var results = parseTemplate(jQuery("#noMoreResultsTemplate").html(), {"query": query});	
		jQuery("ul#results").append(results);
	}
}

function makeStrong(needle,haystack) {
	strongQuery = '<strong>$1</strong>';
	introWithBold = haystack.replace(new RegExp( "("+needle+")", "i" ),strongQuery);
	return introWithBold;	
}
