var lang2;
var Search = new Class({
	
	Implements: [Events, Options],
	
	options: {
		label: null,
		restrict: null
	},
	
	initialize: function(options){
		this.setOptions(options);
		
		this.search = new google.search.WebSearch();
		if (this.options.label) this.search.setUserDefinedLabel(this.options.label);
		if (this.options.restrict) this.search.setSiteRestriction(this.options.restrict);
		this.search.setNoHtmlGeneration();
		this.search.setSearchCompleteCallback(this, this.complete);
		
	},
	
	complete: function(){
		this.fireEvent('onComplete', [this.search.results]);
	},
	
	query: function(value){
		this.search.execute(value);
		return this;
	}
	
});

Search.Results = new Class({
	
	toElement: function(){
		return this.container;
	},
	
	initialize: function(){
		this.container = new Element('ul', {'class': 'results'});
	},
	
	fill: function(results){
		this.container.empty();
		
		for (var i = 0, l = results.length; i < l; i++){
			
			var li = this.parseResult(results[i]);
			
			this.container.adopt(li);
			
			if (i == results.length - 1) li.addClass('last');
		}
		
		if (results.length == 0){
			var empty = new Element('li', {'class': 'result-item first last'});
			if (lang2 == "en") {
				var content = new Element('div', {'class': 'result-content', html: 'no searching results'});	
			} else {
				var content = new Element('div', {'class': 'result-content', html: 'brak wyników wyszukiwania'});
			}
			empty.adopt(content);
			this.container.adopt(empty);
		}
	},
	
	parseResult: function(result){
		var li = new Element('li', {'class': 'result-item'});
		var title = new Element('a', {'class': 'result-title', html: result.title, href: result.url});
		var content = new Element('div', {'class': 'result-content', html: result.content});
		li.adopt(title, content);
		return li;
	}
	
});

Search.Input = new Class({
	
	Implements: [Events, Options],
	
	options: {
		results: 4,
		placeHolder: null,
		id: null,
		className: null
	},
	
	toElement: function(){
		return this.input;
	},
	
	initialize: function(options){
		
		this.setOptions(options);
		
		this.input = new Element('input', {type: Browser.Engine.webkit ? 'search' : 'text'});
		
		
		
		if (Browser.Engine.webkit) this.input.set('results', this.options.results);
		
		if (this.options.id) this.input.set('id', this.options.id);
		
		var placeHolder = this.options.placeHolder;
		
		if (placeHolder){
			
			if (Browser.Engine.webkit){
				this.input.set('placeholder', placeHolder);
			} else {
				this.input.addEvents({
					
					focus: function(){
						if (this.value == placeHolder) this.value = '';
						this.removeClass('place-holder');
					},
					
					blur: function(){
						if (!this.value.length){
							this.value = placeHolder;
							this.addClass('place-holder');
						}
						
					}
				});
				
				this.input.fireEvent('blur');
			}

		}
		
		this.input.addEvent('keydown', function(event){
			this.value = this.input.value;
			if (event.key == 'enter' && this.value.length) this.fireEvent('onSubmit');
		}.bind(this));
	}
	
});

google.load('search', '1', {nocss: true,language : "pl"});

function init_search() {

	var webSearch = new Search({restrict: 'http://gaudemater.pl/', label: 'Gaudemater'});

	  var searchControl = new google.search.SearchControl();

      // Add in a full set of searchers
	
	if (lang2 == "en") {
		var input = new Search.Input({
			id: "google-input",
			placeHolder: 'Search...'
		});	
	} else {
		var input = new Search.Input({
			id: "google-input",
			placeHolder: 'Szukaj...'
		});
	}
	
	
	var list = new Search.Results();
	
	li = $(list);
	
	li.inject('google-search-results');
	
	li.setStyle('visibility', 'hidden');
	
	
	
	input.addEvent('onSubmit', function()
	{
		if (Browser.Engine.trident)
		{
			$('szukaj').set('styles',{'position': 'absolute'})
			left=$('szukaj').getLeft();
			$('szukaj').set('styles',{'position': 'static'})
			left+=33;
		}
		else
		left= $(input).getLeft();
	
		li.setStyles({
			top: $('wrapper').getTop(),
			left: left,
			width: $(input).getWidth() -2
		});
		if (lang2 == "en") {
			li.setStyle('visibility', 'visible').set('html','<li class="first last">Searching...</li>');	
		} else {
			li.setStyle('visibility', 'visible').set('html','<li class="first last">Szukanie...</li>');
		}
		
		webSearch.query(this.value);
	});
	
	webSearch.addEvent('onComplete', function(results){
		$(input).blur();
		list.fill(results);
		li.grabTop(new Element('li', {'class': 'first', id: 'powered-by-google', html: 'oparto na <a href="http://google.com">Google</a>'}));
	});
	
	document.addEvent('click', function(e){
		if (e.target != li && !li.hasChild(e.target)) li.setStyle('visibility', 'hidden');
	});
	
	$(input).inject('google-search');
	
};