// Replace the following string with the AppId you received from the
// Bing Developer Center.
var AppId = "D00B0614899AA0A495694B1DCD4E5AD3A8A9C944";

function Search(query, fullSearch)
{	
	var requestStr = "http://api.bing.net/json.aspx?"
	
		// Common request fields (required)
		+ "AppId=" + AppId
		+ "&Query=site:allocade.com+"
		+ query.replace( /\s+/i, '+' )
		+ "&Sources=Web"
		
		// Common request fields (optional)
		+ "&Version=2.0"
		+ "&Market=en-us"
		+ "&Adult=Moderate"
		+ "&Options=EnableHighlighting"

		// Web-specific request fields (optional)
		+ "&Web.Count="
		+ (fullSearch ? '50' : '5')
		+ "&Web.Offset=0"
		+ "&Web.Options=DisableHostCollapsing+DisableQueryAlterations"

		// JSON-specific request fields (optional)
		+ "&JsonType=callback"
		+ "&JsonCallback=SearchCompleted";

	if( fullSearch)
		requestStr += 'Full';
	 //var requestScript = document.getElementById("searchCallback");
	 
	 var requestScript = document.createElement('script');
	 requestScript.src = requestStr;
	 
	 document.getElementsByTagName('head')[0].appendChild(requestScript);
}

function SearchCompletedFull(response)
{
	var fullSearchResults = $('full-search-results');
	
	var errors = response.SearchResponse.Errors;
	if (errors != null)
	{
		// There are errors in the response. Display error details.
		DisplayErrors(errors, fullSearchResults);
	}
	else
	{
		// There were no errors in the response. Display the
		// Web results.
		DisplayResults(response, fullSearchResults);
	}

}

function SearchCompleted(response)
{
	var errors = response.SearchResponse.Errors;
	if (errors != null)
	{
		// There are errors in the response. Display error details.
		DisplayErrors(errors);
	}
	else
	{
		// There were no errors in the response. Display the
		// Web results.
		DisplayResults(response);
	}
}

function DisplayResults(response, element)
{

	var output = element || document.getElementById("search-results-content");
	//var resultsHeader = document.createElement("h4");
	var resultsList = document.createElement("ul");
	output.innerHTML = '';
	//output.appendChild(resultsHeader);
	output.appendChild(resultsList);

	var results = response.SearchResponse.Web.Results;
	
	if( !results && !element )
	{
		if( typeof _container !== 'undefined' )
			_container.fade(0);
			
		return;
	}
	
	if( !element )
		_container.fade(1);
		
	var searchTerm = response.SearchResponse.Query.SearchTerms.replace(/^site:allocade\.com/i, '').trim();

	// Display the Web results.
	var resultsListItem = null;
	var resultStr = "";
	
	if( !results || results.length == 0 )
	{
		DisplayNoResults(searchTerm, element);
		return;
	}	
	
	var displayedCount = 0;
	
	for (var i = 0; i < results.length; ++i)
	{
		// if( location.href.indexOf('testsearch') > -1 )
			// alert(results[i].Url.toLowerCase());
			
		if( results[i].Url.toLowerCase().indexOf('allocade.com/classic/') == -1 )
		{
			displayedCount++;
			
			resultsListItem = document.createElement("li");
			resultsList.appendChild(resultsListItem);
			resultStr = "<a class='title-link' href=\""
				+ results[i].Url
				+ "\"><h3>"
				+ results[i].Title
				+ "</h3></a>"
				+ results[i].Description
				+ "<br /><a class='read-more' href=\""
				+ results[i].Url
				+ "\">Read more...</a>"
				+ "<div class='result-break'></div>";

			var viewAllResults = $('view-all-results');
			
			if( viewAllResults && !element)
				viewAllResults.href = '/search.html?q=' + searchTerm.replace(/\s+/g, '+');
			
			// Replace highlighting characters with strong tags.
			resultsListItem.innerHTML = ReplaceHighlightingCharacters(
				resultStr,
				"<span class='hilite'>",
				"</span>");
		}
	}
	
	if( displayedCount == 0 )
		DisplayNoResults(searchTerm, element);
}

function ReplaceHighlightingCharacters(text, beginStr, endStr)
{
	// Replace all occurrences of U+E000 (begin highlighting) with
	// beginStr. Replace all occurrences of U+E001 (end highlighting)
	// with endStr.
	var regexBegin = new RegExp("\uE000", "g");
	var regexEnd = new RegExp("\uE001", "g");
		  
	return text.replace(regexBegin, beginStr).replace(regexEnd, endStr);
}

function DisplayErrors(errors, element)
{
	var output = element || document.getElementById("search-results-content");
	var errorsHeader = document.createElement("h4");
	var errorsList = document.createElement("ul");
	output.appendChild(errorsHeader);
	output.appendChild(errorsList);
	
	// Iterate over the list of errors and display error details.
	errorsHeader.innerHTML = "Errors:";
	var errorsListItem = null;
	for (var i = 0; i < errors.length; ++i)
	{
		errorsListItem = document.createElement("li");
		errorsList.appendChild(errorsListItem);
		errorsListItem.innerHTML = "";
		for (var errorDetail in errors[i])
		{
			errorsListItem.innerHTML += errorDetail
				+ ": "
				+ errors[i][errorDetail]
				+ "<br />";
		}
		
		errorsListItem.innerHTML += "<br />";
	}
}

function DisplayNoResults(query, element)
{
	var output = element || document.getElementById("search-results-content");
	var noResults = document.createElement("div");
	noResults.innerHTML = 'There are no results for <b>' + query + '</b>';
	output.appendChild(noResults);
}

  //CRD (search)
  window.addEvent('domready',function(){

	/* search */
	var searchBox = $('search-box'), searchLoaded=false, searchFn = function() {
		if(!searchLoaded) {
			searchLoaded = true; //set searchLoaded to "true"; no more loading!

			//build elements!
			var container = _container = new Element('div',{ id: 'search-results', className: 'search-results' }).inject($('search-area'),'after');
			
			var resultsHeader = new Element('div',{ id: 'search-results-header',
				html: '<b>Results</b>'
			}).inject(container);
			
			
			
			//var container = new Element('div',{ id: 'search-results' }).inject($('ps_results'),'first');
			var wrapper = new Element('div',{
				styles: {
					position: 'relative'
				}
			}).inject(container);
			new Element('div',{ id: 'search-results-pointer' }).inject(wrapper);
			
			
			var contentContainer = new Element('div',{ id: 'search-results-content' }).inject(wrapper);
			var closer = new Element('a', {
				href: 'javascript:;',
				text: 'Close',
				styles: {
					position: 'absolute', //position the "Close" link
					top: 1,
					right: 2,
					textDecoration: 'none',
					fontSize: '11px'
				},
				events: {
					click: function() {
						container.fade(0);
					}
				}
			}).inject(resultsHeader);

			var resultsFooter = new Element('div',{ id: 'search-results-footer',
				html: '<a id="view-all-results">View all results</a>'
			}).inject(container);
			
			//add listeners to search box
			searchBox.addEvents({
				keyup: function(e) {
					if( typeof _searchTimer !== 'undefined')
						clearTimeout(_searchTimer);
						
					_searchTimer = setTimeout( function () {
						if(searchBox.value && searchBox.value != searchBox.get('placeholder')) {
							
							var searchValue = searchBox.value.replace(/\+/g, ' ');
							Search(searchValue);
							//control.execute(searchBox.value);
						}
						else {
							container.fade(0);
						}
					}, 600);
				}
			});
			searchBox.removeEvent('focus',searchFn);
		}
	};
	searchBox.addEvent('focus',searchFn);
});
