/**
 * 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();
		};
		
		// Suggest Services for domain .com
		/*if ((region == 'us')&&($('#suggestState').val() == 'on')){
			'/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.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');*/
		//$('#searchResultsPanel').css('margin-right','250px');
		//$('#searchResultsPanel').css('padding-right','250px');
		//	$('#searchResultsPanel').css('overflow','hidden');		
		
		//Check results count
		if (responseObject.totalHits==0) {
			$('#searchBar').css('display','none');
			$('#noResults').css('display','inline');
			
			// Suggest Admin Service only for hulbee.com
			/*if (region == "us"){
				$.ajax({
					type: "POST",
					url: '/suggestAdmin.php?operation=dec',
					dataType: "xml",
					contentType: "text/xml",
					data: '<QueriesBlock><Query>'+ $('#query').val() +'</Query></QueriesBlock>'				
				});
			}*/
		}
		else {
			$('#searchBar').css('display','inline');
			$('#noResults').css('display','none');
			
			// Suggest Admin Service only for hulbee.com
			/*if (region == "us"){
				$.ajax({
					type: "POST",
					url: '/suggestAdmin.php?operation=inc',
					dataType: "xml",
					contentType: "text/xml",
					data: '<QueriesBlock><Query>'+ $('#query').val() +'</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);

		$('#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', 'block');
		};
		if (hAdsContainer.bottomAdsContainer.length>0) {
			$('#findedAdsBottom').css('display', 'block');
		};

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