/*
 * 
 * $Id: googlesearch.js 3235 2009-05-29 12:21:28Z antonenkova $
 * 
 */

$.fn.replaceWith = function(html) {
	return this.after(html).remove();
};

$.fn.addSearchExit = function() {
	this.append("<div class='searchExit'>Закончить поиск</div>");
	$(".searchExit", $(this)).click(function() {
		$("#resultGoogleSearch").empty();
		$("#googleSearchMain").empty();
		$("#indexPage").show();
	});
	return this;
};

$.fn.addSearchFor = function() {
	$(".searchText", $(this)).after("<div class='searchSite'>Поискать по другим разделам &gt;&gt;</div>");
	$(".searchSite", $(this)).click(function() {
		$("#indexPage").hide();
		$("#resultGoogleSearch").hide();
		
		GoogleSearch.createOptions();
		
		$("#googleSearchMain input[type=radio]").click(function() {
			GoogleSearch.searchForOptions();
		});
		
	});
	if (GoogleSearch.searchFor == "+site%3Aforum.autosputnik.com/") {
		this.append("<div class='searchBottom'>Посмотреть результаты поиска по сайту &gt;&gt;</div>");
		$(".searchBottom", $(this)).click(function() {
			GoogleSearch.searchFor = "+site%3Aautosputnik.com/+-site%3Aforum.autosputnik.com/";
			GoogleSearch.searchForText = "по всему сайту";
			GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus);
		});
	}
	else {
		this.append("<div class='searchBottom'>Посмотреть результаты поиска по форуму &gt;&gt;</div>");
		$(".searchBottom", $(this)).click(function() {
			GoogleSearch.searchFor = "+site%3Aforum.autosputnik.com/";
			GoogleSearch.searchForText = "по форуму";
			GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus);
		});
		
	}
	
	return this;
};

$.fn.addGASText = function() {
	return this.append("<div class='googleAjaxSearch'>Используется <a href='http://code.google.com/intl/ru/apis/ajaxsearch/' target='_blank'>Google Ajax Search</a></div>");
};

$.ajax({
url: "http://autosputnik.com/get-search-words/?callback=?",
	dataType: "jsonp",
	success: function(data) {	
		words = data;
	}
});


var GoogleSearch = {
		
		searchFor: "+site%3Aautosputnik.com/+-site%3Aforum.autosputnik.com/",
		searchForText: "по всему сайту",
		
		googleCallback: function(func, data){
			window[func](data);
			
		},
		
		noResult: function(query){
			$("#resultGoogleSearch")
				.empty()
				.append("<div class='searchText'>поиск " + GoogleSearch.searchForText + "</div><div class='resultText'>По запросу \"" + query + "\" ничего не найдено</div>")
				.addSearchFor()
				.addSearchExit()
				.addGASText()
				.show();	
		},
		
		createResult: function(query, startSearch, queryStatus){
			
			$("#googleSearchUserOptionsApply").remove();
			
			GoogleSearch.createForm();
			
			var url = "http://ajax.googleapis.com/ajax/services/search/web?"
					+ "v=1.0"
					+ "&key=" + AJAX_SEARCH_API_KEY 
					+ "&q=" + query
					+ GoogleSearch.searchFor
					+ "&rsz=large"
					+ "&start=" + startSearch 
					+ "&callback=GoogleSearch.googleCallback"
					+ "&context=?";
			
			$.ajax({
				url: url,
				dataType: "jsonp",
				success: function(data) {	
					if (!data.results | data.results.length == 0 | !queryStatus){	
						GoogleSearch.noResult(query);
					} 
					else {
						var ul = document.createElement("ul");
						$(ul).addClass("result");
						$.each(data.results, function(i, val){
							
							var li = document.createElement("li");
				        	li.innerHTML = "<a href='" + val.unescapedUrl + "' target='_blank'>" + val.title + "</a>" + "<div>" + val.content + "<div>";  						
				        	ul.appendChild(li);
							
						});
						
						if (data.cursor.estimatedResultCount > 8){
							var pager = document.createElement("ul");
							$(pager).addClass("pager");
							$.each(data.cursor.pages, function(i, val){
								
								var li = document.createElement("li");
					        	$(li).text(val.label).addClass(val.start);
					        	$(li).text() == data.cursor.currentPageIndex+1 ? $(li).addClass("active") : null;
					        	pager.appendChild(li);
					        	
							});
							
							if (!$(pager.childNodes).hasClass("active")) {
								$(pager.lastChild).addClass("active");
							}
							
							if ($(pager.lastChild).hasClass("active")) {
								var div = document.createElement("div");
								$(div).addClass("moreResult");
								div.innerHTML = "<a href='" + data.cursor.moreResultsUrl + "' target='_blank'>Дополнительные результаты в Google &gt;&gt;</a>";
							}
						}
						
						$("#resultGoogleSearch")
							.html(ul)
							.prepend("<div class='searchText'>поиск " + GoogleSearch.searchForText + "</div><div class='resultText'>результаты по запросу \"" + query + "\"</div>")
							.append(pager)
							.append(div)
							.addSearchFor()
							.addSearchExit()
							.addGASText()
							.show();
						
						$("ul.pager li").not(".active").click(function(){
							GoogleSearch.createResult(query, $(this).attr("className"), queryStatus);			
						});
					}
				}
			});	
		},
		
		checkQuery: function(searcher){
			GoogleSearch.query = $("form input", $(searcher)).val();
			if (GoogleSearch.query.length != 0) {
				$("#indexPage").hide();
				GoogleSearch.queryStatus	= true;
				var query_query = GoogleSearch.query.replace(/[^\wа-яА-Я]/g, "");
				$(words).each(function() {
					if ( query_query.toLowerCase() == this.toLowerCase()) {
						GoogleSearch.queryStatus	= false;
					}
				});	
				
				$("form", $(searcher)).resetForm();
				GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus);
			}
		},
		
		createForm: function() {
			var html = 
					"<div style='float:left'>" +
					"<form name='googlesearch'>" +
					"<input type='text'/>" +
					"<input type='submit' value='»'/>" +
					"</form>" +
					"</div>" +
					"<div class='searchExit'>Закончить поиск</div>" +
					"<div id=optionMainGoogleSearch>настройки</div>";
			
			$("#googleSearchMain").html(html);
			
			$(".searchExit").click(function() {
				$("#resultGoogleSearch").empty();
				$("#googleSearchMain").empty();
				$("#indexPage").show();
				GoogleSearch.query = null;
			});
			
			GoogleSearch.setSearch("#googleSearchMain");
			GoogleSearch.setOptionClick("#optionMainGoogleSearch");
		},
		
		createOptions: function() {
			var html = 
					"<div id='googleSearchUserOptions'>" +
					"<span>Выберите, где будет производиться поиск:</span>" +
					"<form>" +
					"<div style='margin-bottom: 5px;'>" + 
					"<input style='margin-right: 5px;' id='radio_all' type='radio' name='options' value='+site%3Aautosputnik.com/+-site%3Aforum.autosputnik.com/'/>" +
					"<label for='radio_all'>по всему сайту</label>" +
					"</div>" +
					"<div style='margin-bottom: 5px;'>" +
					"<input style='margin-right: 5px;' id='radio_news' type='radio' name='options' value='+site%3Aautosputnik.com/company/news/+-site%3Aforum.autosputnik.com/'/>" +
					"<label for='radio_news'>по разделу Новости</label>" +
					"</div>" +
					"<div style='margin-bottom: 5px;'>" +
					"<input style='margin-right: 5px;' id='radio_faq' type='radio' name='options' value='+site%3Aautosputnik.com/support/faq/+-site%3Aforum.autosputnik.com/'/>" +
					"<label for='radio_faq'>по разделу Вопросы и ответы</label>" +
					"</div>" +
					"</form>" +
					"<div class='optionsExit'>Закрыть</div>" +
					"</div>";
			$("#googleSearchMain").append(html);
			
			$("#googleSearchUserOptions .optionsExit").click(function() {
				GoogleSearch.getOptions();
				$("#googleSearchUserOptions").remove();
				$("#resultGoogleSearch").show();
			});
		},
		
		getOptions: function() {
			GoogleSearch.searchFor = $("#googleSearchUserOptions input[@type='radio']:checked").val();
			GoogleSearch.searchForText = $("#googleSearchUserOptions input[@type='radio']:checked").next().text();
		},
		
		searchForOptions: function() {
			GoogleSearch.getOptions();
			GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus);
		},
		
		setSearch: function(searcher) {
			$("form input[type=text]", $(searcher)).keypress(function(event){	
				if (event.which == "13") {
					event.preventDefault();
					GoogleSearch.checkQuery(searcher);
				}	
			});
			$("form input[type=submit]", $(searcher)).click(function(event){
				event.preventDefault();
				GoogleSearch.checkQuery(searcher);
			});
		},
		
		setOptionClick: function(searcher) {
			$(searcher).click(function() {
				$("#indexPage").hide();
				$("#resultGoogleSearch").hide();
				$("#googleSearchUserOptions").remove();
				if (GoogleSearch.query)
				{
					GoogleSearch.createOptions();
					$("#googleSearchMain input[type=radio]").click(function() {
						GoogleSearch.searchForOptions();
					});
				}
				else {
					GoogleSearch.createForm();	
					GoogleSearch.createOptions();
				}
				
				$("#googleSearchMain input[type=radio]").click(function() {
					GoogleSearch.getOptions();
				});	
			});
			
		}
};



$(function(){
	
	GoogleSearch.setSearch("#googleSearch");
	
	GoogleSearch.setOptionClick("#optionGoogleSearch");

});

