/**
 * 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 searchEngine	= 'YahooBoss';
	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();
		};
	});

//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.searchEngine = searchEngine;
		searchWebserviceRequest.page = page;
		searchWebserviceRequest.resultsOnPage = resultsOnPage;
		searchWebserviceRequest.onRequestReceived = searchRequestReceived;
		searchWebserviceRequest.sendQuery();
		
		//Quering spelling webservice
		var searchQuery = query;
		var spellingWebserviceRequest = new spellingRequest(searchQuery);
		spellingWebserviceRequest.searchUrl = $('#spellingUrl').val();
		spellingWebserviceRequest.onRequestReceived = spellingRequestReceived;
		spellingWebserviceRequest.sendQuery();

		//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');
		}
		else {
			$('#searchBar').css('display','inline');
			$('#noResults').css('display','none');
		};

		//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);

		$('#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;
	};