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();
		var mylength = results.length;
		//alert(mylength);
		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'});
			var content = new Element('div', {'class': 'result-content', html: 'no results'});
			empty.adopt(content);
			this.container.adopt(empty);
		}
	},
	
	parseResult: function(result){
		var li = new Element('li', {'class': 'result-item'});
		var linking = new Element('a', {'class': 'result-link', href: decodeURIComponent(result.url)});
		var title = new Element('span', {'class': 'result-title', html: result.title});
		var content = new Element('span', {'class': 'result-content', html: result.content});
		linking.adopt(title, content);
		li.adopt(linking);
		return li;
		//alert(title.get('html'));
	}
	
});

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', '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});

window.addEvent('domready', function(){
	
	var webSearch = new Search({restrict: '011569302302407036660:tfq4h_73zv4', label: 'Techtube Search Engine'});
	var input = new Search.Input({id: "google-input", placeHolder: 'Search TechTube'});
	
	var list = new Search.Results();
	
	li = $(list);
	
	li.inject('google-search-results');
	
	li.setStyle('visibility', 'hidden');
	
	input.addEvent('onSubmit', function(){
		li.setStyles({
	
			width: $('google-input').getWidth() -2
		});
		
		li.setStyle('visibility', 'visible').set('html','<li class="first last">Loading...</li>');
		var searchadd = "intitle:";
		var searchquery = searchadd+(this.value);
		//webSearch.query(searchquery);
		webSearch.query(this.value);
	});
	
	webSearch.addEvent('onComplete', function(results){
		//$(input).blur();
		var searchquery = $('google-input').value;
		list.fill(results);
		li.grabTop(new Element('li', {'class': 'first', id: 'powered-by-google', html: 'powered by <a href="http://google.com">Google</a>'}));
		li.grabBottom(new Element('li', {'class': 'last', id: 'powered-by-google', html: '<a href="http://www.techtube.mtu.edu/search.php?cx=011569302302407036660%3Atfq4h_73zv4&cof=FORID%3A9&ie=UTF-8&q='+searchquery+'&sa=Search#366">All Results</a>'}));
	});
	
	document.addEvent('click', function(e){
		if (e.target != li && !li.hasChild(e.target)) li.setStyle('visibility', 'hidden');
	});
	
	$(input).inject('google-search');
	
});