var Engine = function () {
	
	this.setPageLinks = function () {
		$('#logo').click(function(){ document.location.href = 'http://www.coreteam.pl/'; });
	}
	
	this.setLoggFrame = function () {
		$('#top').mouseover(function(){ $('#loginFrame').fadeIn(); });
		$('#content').mouseover(function(){ $('#loginFrame').fadeOut(); });
		$('#loginButton').click(function(){ $('#loginForm').submit(); });
	};
	
	this.setSearchFrame = function () {
		$('#searchFrame').mouseover(function(){ $('#searchField').focus(); });
		$('#searchButton').click(function(){ $('#search').submit(); });
	};
	
	return this;
};

var Vanity = {

	_browser: {
		ie: /*@cc_on!@*/false
	},

	start: function() {
		this.enhanceSearch();
	},

	enhanceSearch: function() {

		var liveForm = $('#search');
		var liveQuery = liveForm.find('input.edit');
		var liveLegend = liveForm.find('legend');
		
		liveLegend.text('Wyszukiwanie');
		liveQuery.attr({ autocomplete: 'off' });
		
		var title = liveLegend.text();		
		$.each(liveQuery, function() {
			var inp = $(this);
			inp.val(title);
			inp.bind('focus', function() {
				if (inp.val() == title) inp.val('');
			});
			inp.bind('blur', function() {
				if (inp.val() == '') inp.val(title);
			});
		});
		
		var liveContainer = $(document.createElement('div'));
		var liveOuter = $(document.createElement('div'));
		var liveInner = $(document.createElement('div'));
		var liveShadow = $(document.createElement('div'));
		var liveList = $(document.createElement('div'));
		var liveBrand = $(document.createElement('div'));
		var liveBrandImg = $(document.createElement('img'));
		
		// search.getBranding() doesn't work :(
		liveBrandImg.attr('src', 'http://www.google.com/uds/css/small-logo.png');
		liveBrand.text('Powered by ').append(liveBrandImg);

		liveContainer.attr('id', 'livesearch').append(liveOuter, liveShadow).hide();
		
		liveList.attr('id', 'results').appendTo(liveInner);
		liveOuter.addClass('outer').append(liveInner);
		liveBrand.attr('id', 'brand')
		liveInner.addClass('inner').append(liveBrand);
		liveShadow.addClass('shadow');
		
		var search = new GwebSearch();
		var domain = '014438084762292074993:rqwouca3o2o';
		//var name = / \u2013 CoreTeam$/;
		//var ellipsis = /<b>\.{3}<\/b>$/;
		var article = /\/\d{4}\/\d{2}\/\d{2}\/[\w-]+\/$/;

		search.setResultSetSize(GSearch.LARGE_RESULTSET);
		search.setSiteRestriction(domain);
		search.setNoHtmlGeneration();

		search.setSearchCompleteCallback(this, function() {
		
			function makeResult(title, url) {
				var liveResult = $(document.createElement('div'));
				var liveResultLink = $(document.createElement('a'));
				var liveResultDesc = $(document.createElement('div'));
				liveResultLink.text(title).attr('href', url).appendTo(liveResult);
				liveResult.appendTo(liveList);
			}
		
			var results = search.results;
			if (results.length) {
				for (var i = 0; i < results.length; i++) {
					var r = results[i];
					//if (r.unescapedUrl.match(article)) {
						var title = r.titleNoFormatting.replace('', '');
						makeResult(title, r.unescapedUrl);
					//}
				}
				showList();
			} else {
				liveQuery.removeClass('loading');
				hideList();
			}
			liveContainer.show();
			liveQuery.removeClass('loading');

		});
		
		var lastSearch, wasSearch, keyPressed, itemIndex = 0;
		
		function makeSearch() {
			var query = liveQuery.val();
			if (query != lastSearch) {
				liveList.empty();
				search.clearResults();
				search.execute(query);
				lastSearch = query;
			} else {
				liveQuery.removeClass('loading');
			}
		}
		
		function showList() {
			liveForm.addClass('live').next().fadeIn(2000);
			$('#searchResults').fadeIn(2000);
			wasSearch = true;
		}
		
		function hideList() {
			liveForm.removeClass('live').next().slideup(2000);
			$('#searchResults').hide();
			wasSearch = false;
		}
		
		function resetSearch() {
			lastSearch = '';
			itemIndex = 0;
			liveQuery.removeClass('loading').val('');
			hideList();
		}
		
		function setCursor(index) {
			index = index - 1;
			liveList.find('li').removeClass('selected').eq(index).addClass('selected');
		}
		
		liveForm.after(liveContainer).bind('submit', function(e) {
			e.preventDefault();
		});
		
		liveForm.find('input.submit').bind('click', function(e) {
			liveForm.submit();
		})
		
		liveQuery.bind('keyup', function(e) {
			var key = e.charCode || e.keyCode || 0;
			if (this.value == '') {
				resetSearch();
			}
			if (/27/.test(key)) { // esc
				if (wasSearch && itemIndex) {
					itemIndex = 0;
					hideList();
				} else {
					resetSearch();
				}
			} else if (/38/.test(key)) { // up
				if (wasSearch) {
					var next = itemIndex - 1;
					if (next < 1) {
						next = liveList.find('li').length;
					}
					itemIndex = next;
					setCursor(next);
					e.preventDefault(e);
				}
			} else if (/40/.test(key)) { // down
				if (wasSearch) {
					var next = itemIndex + 1;
					if (next > liveList.find('li').length) {
						next = 1;
					}
					itemIndex = next;
					setCursor(next);
					e.preventDefault(e);
				}
			} else if (/13/.test(key)) {
				if (wasSearch && itemIndex) {
					var url = liveList.find('li').eq(itemIndex - 1).find('a').attr('href');
					hideList();
					document.location = url;
				} else {
					liveForm.submit();
				}
			} else {
				if (keyPressed) { clearTimeout(keyPressed); }
				keyPressed = setTimeout(function() {
					liveQuery.addClass('loading');
					makeSearch();
				}, 400);
			}
		}); 
	}
	}


$(document).ready(function() {
	Engine = new Engine();
	Vanity.start();
	Engine.setPageLinks();
	Engine.setLoggFrame();
	Engine.setSearchFrame();
	
	$.fn.cycle.defaults.speed   = 900;
	$.fn.cycle.defaults.timeout = 6000;
	$('#clients_fade').cycle();
});

