// Window onload functions array
window.onloads = new Array();

// Window onload functions
onloads.push(historyHandler);
onloads.push(searchSuggestHandler);
onloads.push(searchSubmitHandler);


// Create dhtmlHistory
window.dhtmlHistory.create();

// On window load call onload functions
window.onload = function()
{
	// Loop through onload functions
	for(var i=0; i < window.onloads.length; i++)
	{
		// Execute onload function
		window.onloads[i]();
	}
}

function historyHandler()
{
	// If dhtmlHistory
	if(window.dhtmlHistory)
	{
		// Initialize dhtmlHistory
		dhtmlHistory.initialize();

		// Add listener to dhtmlHistory
		dhtmlHistory.addListener(historyListener);

		// Get current location from dhtmlHistory
		historyListener(dhtmlHistory.getCurrentLocation());
	}
}

var historyListener = function(newLocation, historyData)
{
	var searchRegex = RegExp(/search:(.+)/);
	if(searchRegex.test(newLocation))
	{
		// Get searchQuery
		var searchQuery = document.getElementById('searchQuery');

		// If searchQuery exists cnage value to current page
		if(searchQuery)
		{
			query = newLocation.replace(/search:/, '');
			query = query.replace(/\+/g, ' ');
			query = query.replace(/\%22/g, '"');
			searchQuery.value = query;
		}

		// Get search results
		getSearchResults();
	}
}

function searchSuggestHandler()
{
	// Get needed DOM elements
	var searchForm = document.getElementById('searchForm');
	var searchQuery = document.getElementById('searchQuery');
	var searchSubmit = document.getElementById('searchSubmit');

	// If needed DOM elements exist create suggest
	if(searchForm && searchQuery && searchSubmit)
	{
		// Create and append searchSuggest div
		var searchSuggest = document.createElement('div');
		searchSuggest.setAttribute('id', 'searchSuggest');
		searchForm.appendChild(searchSuggest);

		// If searchQuery loses focus hide searchSuggest
		searchQuery.onblur = function()
		{
			searchSuggest.style.display = 'none';
		}

		// If searchQuery clicked show searchSuggest
		searchQuery.onclick = function()
		{
			searchSuggest.style.display = 'block';
		}

		// If searchQuery onfocus get suggest results and display searchSuggest
		searchQuery.onfocus = function()
		{
			getSuggestResults();
			searchSuggest.style.display = 'block';
		}

		// If searchQuery onkeyup get suggest results
		searchQuery.onkeyup = function()
		{
			getSuggestResults();
		}
	}
}

function getSuggestResults()
{
	// Get needed DOM elements
	var searchQuery = document.getElementById('searchQuery');
	var searchSuggest = document.getElementById('searchSuggest');
	var searchSubmit = document.getElementById('searchSubmit');

	// If needed DOM elements and functions exist create and send AJAX request
	if(window.ajax && searchQuery && searchSuggest)
	{
		suggestRequest = new ajax();
		suggestRequest.respFunc = getResults;
		suggestRequest.url('searchSuggest.php?id=' + document.getElementById('searchQuery').value);
		suggestRequest.send();
	}

	// Result function for suggestRequest
	function getResults()
	{
		// AJAX request is complete
		if(4 == suggestRequest.xmlHttp.readyState)
		{
			// Set searchSuggest results
			searchSuggest.innerHTML = suggestRequest.xmlHttp.responseText;

			// If searchSugest results
			if('' != searchSuggest.innerHTML)
			{
				// Loop through searchSuggest results
				var suggestResults = searchSuggest.childNodes[0].childNodes;
				for(var i = 0; i < suggestResults.length; i++)
				{
					// If even result
					if(i % 2 >= 1)
					{
						// Change background color
						suggestResults[i].style.backgroundColor = '#EFFFEF';
					}

					// When searchSuggest result is onmousedown
					suggestResults[i].onmousedown = function()
					{
						// Update searchQuery value
						searchQuery.value = this.childNodes[0].innerHTML;
						// Submit Search
						searchSubmit.click();
					}
				}
			}
		}
	}
}

function searchSubmitHandler()
{
	// Get needed DOM elements
	var searchSubmit = document.getElementById('searchSubmit');

	// If needed DOM elements and functions exist
	if(searchSubmit)
	{

		// Add onclick function to searchSubmit
		searchSubmit.onclick = function()
		{
			// get search results
			getSearchResults();

			// Get searchSuggest
			var searchSuggest = document.getElementById('searchSuggest');

			// If searchSuggest exists
			if(searchSuggest)
			{
				// Hide searchSuggest
				searchSuggest.style.display = 'none';
			}

			return false;
		}
	}
}

function getSearchResults()
{
	searchQuery = document.getElementById('searchQuery');
	searchRequest = new ajax();
	searchRequest.respFunc = getResults;
	searchRequest.url('index.php?ajax=1&q=' + searchQuery.value + '&search=Search');
	searchRequest.send();
	var urlQuery = searchQuery.value.replace(/ /g, '+');
	urlQuery = urlQuery.replace(/"/g, '%22');
	dhtmlHistory.add('search:' + urlQuery, 'Search: ' + searchQuery.value);

	function getResults()
	{
		if(1 == searchRequest.xmlHttp.readyState)
		{
			document.getElementById('body').innerHTML = '<img alt="Loading" src="view/themes/default/content/images/loading.gif"><div class="loading">Loading...</div>';
		}
		if(4 == searchRequest.xmlHttp.readyState)
		{
			document.getElementById('body').innerHTML = searchRequest.xmlHttp.responseText;

			if(!window.DataGrid)
			{
				var dataGridScript = document.createElement('script');
				dataGridScript.onload = function()
				{
					resultsDataGrid = new DataGrid('resultsDataGrid');
					musicResultsDataGrid = new DataGrid('musicResultsDataGrid');
				};
				dataGridScript.src = 'view/behavior/DataGrid.js';
				dataGridScript.type = 'text/javascript';
				head = document.getElementsByTagName('head');
				head[0].appendChild(dataGridScript);
			}
			else
			{
				resultsDataGrid = new DataGrid('resultsDataGrid');
				musicResultsDataGrid = new DataGrid('musicResultsDataGrid');
			}

			return true;
		}
		return false;
	}
}
