/**
 * Main search script
 * Variables and constants definition
 * On document load event handler
 * Start search procedure
 * Queryng ads webservice
 * Queryng search webservice
 */

//Search constants
	var language;
	var region;
	var page			= 1;
	var resultsOnPage	= 10;
	var visiblePages	= 11;
	var pagesCount		= 0;

//Ads constants
	var adsRegion;
	var adsEngine		= 'Yahoo';
	var requestedAdsCount;
	var defaultAdsQuery;
	var hSearchContainer;
	var advertiseArray = new Array();
	var responseObject;

//Start search on document ready
	$(document).ready(function(){
		//Send prepared in hidden variables query
		language		= $('#searchLanguage').val();
		region			= $('#searchRegion').val();
		adsRegion		= $('#adsRegion').val();
		defaultAdsQuery	= $('#defaultAdsQuery').val();
		$('#query').val($('#oldQuery').val());
		if ($('#query').val().length > 0) {
			startSearch();
		};	
		if (!(($.browser.webkit && !/chrome/.test(navigator.userAgent.toLowerCase())) || $.browser.opera)) {    
			$('.hulbeeIn_default').css({display: "block"});
		}
		
		// Suggest Services
		if($('#suggestState').val() == 'on') {
			$('#query').autocomplete (
				'/suggest.php', 
				{
					selectFirst: false,
					beforeSend: function(xhr, settings) { 					
							settings.data = '<SuggestRequest><MaxCount>10</MaxCount><PartialQuery>'+ $('#query').val().replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;') +'</PartialQuery></SuggestRequest>';						
					},				
					type: "post",				
					dataType: "xml",
					contentType: "text/xml",
					parse: function(xml) {					
						var parsed = [];
						$(xml).find('string').each(function(i, result) {						
							parsed.push({
								data: $(this).text(),
								value: $(this).text(),
								result: $(this).text()
							});						
						});
						return parsed;
					},
					formatItem: function(data, i, max, result, query) {
						return result;
					}				
				}
			);
		}
	});	
	

//Start new search
	function startSearch(requestPage) {

		//Prepare search
		var query = new String();

		//If page is setted
		if (requestPage!=undefined) {
			page = requestPage;
			query = $('#lastSearch').val();
			$('#query').val(query);
			$('#page').val(page);
			$('#page').attr('name','page');

			$('#nextArgs1').attr('name', 'nextArgs1');
			//$('#nextArgs2').attr('name', 'nextArgs2');

			submitForm();
			return;
		}
		else {//If default search requested
			page=$('#page').val();
			if ((page==undefined)||(page<1)) {
				page=1;
			};
			query = $('#query').val();
			$('#lastSearch').val(query);
		};

		//Go home if needed
		if (query.length==0) {
			document.location = $('#hulbeeUrl').val();
			return;
		};

		//Show preloader
		$('#preloader').css('display' ,'inline');

		//Quering search webservice
		var searchQuery = query;
		var searchWebserviceRequest = new searchRequest(searchQuery);
		searchWebserviceRequest.searchUrl = $('#searchUrl').val();
		searchWebserviceRequest.language = language;
		searchWebserviceRequest.region = region;

		if ($('#language').attr('checked')) {
			searchWebserviceRequest.strictLang = 1;
			searchWebserviceRequest.site = '.de';			
		};

		//searchWebserviceRequest.searchEngine = searchEngine;
		searchWebserviceRequest.page = page;
		searchWebserviceRequest.resultsOnPage = resultsOnPage;
		searchWebserviceRequest.onRequestReceived = searchRequestReceived;
		searchWebserviceRequest.sendQuery();
		
		//Quering spelling webservice
		var searchQuery = query;
		
		//Quetring ads webservice
		requestedAdsCount = 0;
		//startAdsSearch(query);
	};

//Queryng Ads webservice
	function startAdsSearch(adsQuery, type, count) {

		if (type == undefined) {
			advertiseArray = new Array();
		};

		if (count==undefined) {
			count = leftAdsCount+topAdsCount+bottomAdsCount;
		}

		var adsWebserviceRequest = new adsRequest(adsQuery);
		adsWebserviceRequest.adsUrl = $('#adsUrl').val();
		adsWebserviceRequest.region = adsRegion;
		adsWebserviceRequest.searchEngine = adsEngine;
		adsWebserviceRequest.count = count - requestedAdsCount;
		adsWebserviceRequest.onRequestReceived = adsRequestReceived;
		adsWebserviceRequest.linkArgs = $('#nextArgs'+(advertiseArray.length+1)).val();
		adsWebserviceRequest.sendQuery();
	};

//Function on search webservice request received
	function searchRequestReceived(xml) {

		//Queryng cloud former
		sendQueryToCloudService(xml);

		//Prepare xmlObject from xmlString
		xml = $.createXMLDocument(xml);

		//Prepare search results container
		responseObject			= new searchResponse(xml);
		hSearchContainer		= new searchContainer(responseObject);

		/*if (responseObject.totalHits==0) {
			$('#searchResults').attr('innerHTML','<p><strong>Sorry, no results found</strong></p>');
			return;
		};*/

		//$('#searchResultsPanel').css('display','inline');
		
		//Check results count
		if (responseObject.totalHits==0) {
			$('#searchBar').css('display','none');
			$('#noResults').css('display','inline');
			
			// Suggest Admin Service
			$.ajax({
				type: "POST",
				url: '/suggestAdmin.php?operation=dec',
				dataType: "xml",
				contentType: "text/xml",
				data: '<QueriesBlock><Query>'+ query +'</Query></QueriesBlock>'
			});
		}
		else {
			$('#searchBar').css('display','inline');
			$('#noResults').css('display','none');
			
			// Suggest Admin Service			
			$.ajax({
				type: "POST",
				url: '/suggestAdmin.php?operation=inc',
				dataType: "xml",
				contentType: "text/xml",
				data: '<QueriesBlock><Query>'+ query +'</Query></QueriesBlock>'			});
		};

		//Show search header
		var searchHeader = hSearchContainer.prepareSearchHeaderHtml();
		$('#searchHeader').attr('innerHTML', searchHeader);

		//Show search results
		var searchResultsHtml = hSearchContainer.prepareSearchResultsHtml();
		$('#searchResults').attr('innerHTML', searchResultsHtml);

		//Show pages control
		var pagesBar = hSearchContainer.preparePagesControlHtml(page, visiblePages);
		$('#searchPages').attr('innerHTML', pagesBar);

		//Show top navigation control
		var topBar = hSearchContainer.prepareTopPagesControlHtml(page);
		$('#topNavigation').attr('innerHTML', topBar);

		$(document).trigger('dataload')

		$('#footer').css('display', 'none');
		$('#footer').css('display', 'inline');
	};
	
//Function on spelling webservice request received
	function spellingRequestReceived(xml) {
		//Prepare xmlObject from xmlString
		xml = $.createXMLDocument(xml);

		//Prepare search results container
		responseObject = new spellingResponse(xml);
		
		if (responseObject.resultsList.length>0) {
			var newQuery = responseObject.resultsList[0].title;
			
			$('#spellSuggestion').css('display', 'inline');
			
			var spellingString = $('#didYouMean').val()+' &nbsp;';
			spellingString += '<a href="javascript:newSearch(\''+newQuery+'\')" style="color:#757575 !important;">';
			spellingString += newQuery+'</a>';

			$('#spellSuggestion').attr('innerHTML', spellingString);
		};

	};
	
	function newSearch(query) {
		$('#query').val(query);
		submitForm();
	};

//Function on ads webservice request received
	function adsRequestReceived(xml) {

		var adsResponseObject	= new adsResponse(xml);
		requestedAdsCount	   += adsResponseObject.totalHits;

		advertiseArray[advertiseArray.length] = adsResponseObject;
		$('#nextArgs'+advertiseArray.length).val(adsResponseObject.nextArgs);

		var hAdsContainer = new adsContainer(advertiseArray);
		var adsResult = hAdsContainer.prepareAdsResultsHtml();

		$('#sponsoredResults').attr('innerHTML', hAdsContainer.leftAdsContainer);
		if (hAdsContainer.leftAdsContainer.length==0) {
			var more = $('#more').val();
			var defaultAds = $('#defaultAds').val();
			$('div.greyText').attr('innerHTML',more);
			$('#sponsoredResults').attr('innerHTML', defaultAds);
			$('#searchResults').css('padding-top','25px');
		}
		$('#sponsoredResultsTop').attr('innerHTML', hAdsContainer.topAdsContainer);
		$('#sponsoredResultsBottom').attr('innerHTML', hAdsContainer.bottomAdsContainer);

		if (hAdsContainer.topAdsContainer.length>0) {
			$('#findedAdsTop').css('display', 'inline');
		};
		if (hAdsContainer.bottomAdsContainer.length>0) {
			$('#findedAdsBottom').css('display', 'inline');
		};

		$('#footer').css('display', 'none');
		$('#footer').css('display', 'inline');
	};

//Change page view
	function changeView(view) {
		var query = $('#query').val();
		document.location = 'index.php?view='+view+'&query='+query;
	};
