//The api service to call
//var SEARCH_URL = 'http://search.nursingcenter.com/api';
var SEARCH_URL = 'http://www.nursingcenter.com/services/Fulltext.svc/json/pagedsearch/{index}/{term}/{page}/10';
var SORTED_SEARCH_URL = 'http://www.nursingcenter.com/services/Fulltext.svc/json/pagedsortedsearch/{index}/{term}/{sortByDocumentField}/{page}/10';

var search;
var search_results;

//setup JQuery ajax object
$.ajaxSetup({
    global  : true,
    dataType: 'json',
    cache   : false
}); 


function CalculateSearchUrl(index, term, page){


	var indexReplaceOp = new RegExp("\\{index\\}", "gm"); 
	var termReplaceOp = new RegExp("\\{term\\}", "gm"); 
	var pageReplaceOp = new RegExp("\\{page\\}", "gm"); 
	var url = SEARCH_URL;
	url = url.replace(indexReplaceOp, index);
	url = url.replace(termReplaceOp, term);
	url = url.replace(pageReplaceOp, page);
	
	return url;
	
}

function CalculateSortedSearchUrl(index, term, page, sort){
	var indexReplaceOp = new RegExp("\\{index\\}", "gm"); 
	var termReplaceOp = new RegExp("\\{term\\}", "gm"); 
	var pageReplaceOp = new RegExp("\\{page\\}", "gm"); 
	var sortReplaceOp = new RegExp("\\{sortByDocumentField\\}", "gm"); 
	var url = SORTED_SEARCH_URL;
	url = url.replace(indexReplaceOp, index);
	url = url.replace(termReplaceOp, term);
	url = url.replace(pageReplaceOp, page);
	url = url.replace(sortReplaceOp, sort);
	
	return url;
	
}


//This function pefrorms the AJAX request to the API to do the search
function switchTabs(tabid){ 
	var index = tabid.replace("-TAB","");
	ActiveIndex = index;

	ExecuteSearch(index, null,null);
};

//This function pefrorms the AJAX request to the API to do the search
function doNext(start){ 
	ExecuteSearch(null,null,start);
};

var ActiveIndex = "ALL";


function ExecuteSearch(index, term, page){
		
		if(!index){
			index = ActiveIndex;
		}
		
		if(!term){
			term = $("#search-value").val();
		}

		// convert multiple terms with spaces into boolean "or" words //
		//if ( term.indexOf(" ") != -1 )
		//{
		//	var re2 = / or /g;
		//	term = term.replace(re2, " ");


		//	var re = / /g;
		//	term = term.replace(re, " or ");
		//}
		
		if(!page){
			page = "0";
		}
		
		var sort = $("#sort-type").val();

		
		if(sort == "date"){		
			var url = CalculateSortedSearchUrl(index, term,page,"modifieddate");
		}
		else{
			var url = CalculateSearchUrl(index, term,page);
		}

	
		$.ajax({		
        url: url,

        success: function(data) {
		
        	if (data.Successful)
        	{
        		buildTabs();
        		showPager(data);
				var instStatus = $("#institutionalStatus").val();
				var instDetect = $("#institutionalDetect").val();
				showSearchResults(data, instStatus, instDetect);
				if(index)
				{
					toggleTabs(index + "-TAB");
				}
			}
			else
			{
			    showEmptyRecords();
			}
        },
        failure: function(x,t,r) {
        	alert("Error " + t);
        }
     });  
}

//Called when search results are available from AJAX
function showSearchResults(data, status, detect) {

	var resultContent = new StringBuffer();
	var resultHeader = "";
	var articleID = "";
	var articleURL = "";
	var articleType = "";

	resultContent.append("<div id='search-results'>");
	resultContent.append("<table id='results'>");
	
	var hitOpenReplaceOp = new RegExp("\\{hit\\}", "gm"); 
	var hitCloseReplaceOp = new RegExp("\\{/hit\\}", "gm"); 
	
	
	//Loop through each result object in the searchresults, and construct some HTML to display it
	if (data.Results)
	{
	
		//construcy a header showing number of results found
		//resultHeader = "Search Results from " + data.cuisearchapi.scopelabel + " sites - about " + r.numdocs + " total";
		for(var i = 0 ; i < data.Results.length; i++)
		{

			var val =data.Results[i];

			articleID = val.ContentId;
			index = val.Index + 1;

			articleURL = "http://www.nursingcenter.com/library/JournalArticle.asp?Article_ID=" + articleID
						
			articleType = "";
			if (val.FieldValueMap[3].Value == "True")
			{
				articleType = articleType + "<img src=\"http://www.nursingcenter.com/images/ico_ce.gif\" />&nbsp;&nbsp;";
			}
			else if (val.FieldValueMap[1].Value == "0.0000")
			{
				if (status == "InstitutionalUser" && detect == "True") 
				{
					articleType = "&nbsp;&nbsp;";
				}
				else
				{
					articleType = "<img src=\"http://www.nursingcenter.com/images/ico_free.gif\" class=\"free_image\" />&nbsp;&nbsp;"
				}
			}
			else
			{
				if (status == "InstitutionalUser" && detect == "True") 
				{
					articleType = "&nbsp;&nbsp;";
				}
				else
				{
					articleType = "<img src=\"http://www.nursingcenter.com/images/ico_ppv.gif\" class=\"ppv_image\" />&nbsp;&nbsp;"
				}
			}
			
			
			// 4 and 11 lines down: H. Gould (TECHNO) removed "target='_NEW'" anchor attributes as per B. Maroldo request (5/28/2009)
			resultContent.append("<tr>");
			resultContent.append("<td class='result-number'>" + index + "<span class='results-number-suffix'>.</span></td>");
			resultContent.append("<td class='result-content'>");

			resultContent.append("<div class='result-title'>" + articleType + "<a href='" + articleURL + "' rel='nofollow' target='_top'>" +  val.Title + "</a></div>");
			
			var highlightedHitSummary = val.HitSummary.replace(hitOpenReplaceOp, '<b class="cnvr_hit">').replace(hitCloseReplaceOp, "</b>");
						
			resultContent.append(highlightedHitSummary);
			resultContent.append("<div id='result-links'>");
			
			resultContent.append("<span class='date'>" + val.FieldValueMap[5].Value + "</span>");
				
			resultContent.append("<span class='result-link-separator rls-1'>|</span>");
			resultContent.append("<span class='result-link-domain'>");
			
			resultContent.append("<a href='" + articleURL + "' rel='nofollow' target='_top'>" +  val.FieldValueMap[2].Value + "</a>");
			
			resultContent.append("</div>");
			resultContent.append("</td>");
			resultContent.append("</tr>");
		}
	}
	else
	{
		//construcy a header showing number of results found
		//resultHeader = "Expand your search scope to peer-approved sites";
	}
	
	resultContent.append("</table>");
	resultContent.append("</div>");
	$('#result-header').html(resultHeader);
	$('#results').html(resultContent.toString());

}



//Called when no search results are found
function showEmptyRecords() {

	var resultContent = new StringBuffer();

	resultContent.append("<div id='search-results'>");
	resultContent.append("<table id='results'>");
	resultContent.append("<tr>");
	resultContent.append("<td class='result-number'>&nbsp;</td>");
	resultContent.append("<td class='result-content'><b>0 files found.</b><br /><a href='http://www.nursingcenter.com/include/searchhelp.asp' target='_BLANK'>Search help</a></td></tr>");
	
	
	resultContent.append("</table>");
	resultContent.append("</div>");
	$('#results').html(resultContent.toString());

}





function buildTabs() {
	
	var tabContent = new StringBuffer();
		
	tabContent.append("<ul>");
	tabContent.append("	<li>");
	tabContent.append("	<a id=\"ALL-TAB\" href=\"javascript:switchTabs('ALL-TAB');toggleTabs('ALL-TAB');\" title=\"All\">");
	tabContent.append("	<span>All</span></a></li>");
	tabContent.append("	<li>");
	tabContent.append("	<a id=\"CE-TAB\" href=\"javascript:switchTabs('CE-TAB');toggleTabs('CE-TAB');\" title=\"CE\">");
	tabContent.append("	<span>CE</span></a></li>");
	tabContent.append("	<li>");
	tabContent.append("	<a id=\"FREE-TAB\" href=\"javascript:switchTabs('FREE-TAB');toggleTabs('FREE-TAB');\" title=\"Free Articles\">");
	tabContent.append("	<span>Free Articles</span></a></li>");
	tabContent.append("</ul>");

	
	$("#menu-top").html(tabContent.toString());						
											
}

//Called when search results are available from AJAX
function showPager(data) {

	var pagerContent = new StringBuffer();
	
	var startdoc = data.StartIndex
	var enddoc = data.EndIndex
	var numdocs = data.TotalResultCount;
	var hasmore = data.HasMoreResults;
	var prevIndex = startdoc - 10;
	pagerContent.append("<table>");
	pagerContent.append("	<tr>");
	
	if (startdoc == "0")
	{
		pagerContent.append("<td class=\"nav-prev\"><strong><<&nbsp;Prev</strong></td>");
	}
	else
	{
		var index = startdoc - numdocs;
		pagerContent.append("<td class=\"nav-prev\">");
		pagerContent.append("	<span class=\"pager-prev\">");
		pagerContent.append("		<a href=\"javascript:doNext('" + prevIndex+ "');\" rel=\"nofollow\"><strong><<&nbsp;Prev</strong></a>");
		pagerContent.append("	</span>");
		pagerContent.append("</td>");
	}
	
	//resultHeader = "Search Results from " +  + " sites - about " + r.numdocs + " total";
	
	pagerContent.append("<td class=\"nav\">" + " Results " + (startdoc + 1) + " to " + enddoc + " of " + numdocs + "</td>");
	
	//alert(typeof(hasmore));
	if (hasmore == true)
	{
		pagerContent.append("<td class=\"nav-next\" align=\"right\">");
		pagerContent.append("	<span class=\"pager-next\">");
		pagerContent.append("		<a href=\"javascript:doNext('" + (enddoc) + "');\" rel=\"nofollow\"><strong>Next&nbsp;>></strong></a>");
		pagerContent.append("	</span>");
		pagerContent.append("</td>");
	}
	else
	{
		pagerContent.append("<td class=\"nav-next\"><strong>Next&nbsp;>></strong></td>");
	}
	
	pagerContent.append("	</tr>");
	
	
	
	pagerContent.append("</table>");
	
	$("#pager-content-top").html(pagerContent.toString());
	$("#pager-content-bottom").html(pagerContent.toString());
	
}

function StringBuffer(str){
    this.buf = [];
    if(str)
        this.buf.push(str);
    this.append = function(str){
        this.buf.push(str);
    };
    this.toString = function(){
        return this.buf.join("");
    };
}

function randomString() {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var string_length = 30;
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	document.randform.randomfield.value = randomstring;
}

