/**
 * Class for creating quick search listing.
 * @class This is the Quick Search class.  
 *
 * @param {Array} conf
 *
 * @param {String} conf.id The id search input element
 * @param {String} conf.container The container of quick search result 
 * @param {String} conf.minLength The min length of query string
 * @param {String} conf.url The URL to script
 * @param {String} conf.limit The number listings to display in the result box
 *
 */
gecocons.search = function(conf)
{
	var obj = (-1 != conf.id.indexOf('#')) ? $(conf.id) : $('#' + conf.id);
	var objCon = (-1 != conf.container.indexOf('#')) ? $(conf.container) : $('#' + conf.container);

	var minLength = conf.minLength;
	var url = conf.url ? conf.url : 'get-search.php';
	var searchFields = conf.searchFields ? conf.searchFields : 'title,description';
	var limit = conf.limit ? conf.limit : 10;

	var containerHidden = false;	
	var timeOutHandler = null;
	
	var selected = null;
	var lastSelected = null;
	var reset = 0;
	
	var navigateList = function(key) {
		if($('#quickSearch').css('display') == 'none') {
			return;
		}
		items = $('.quickSearchItem');
		if (items.length != 0) {
			if (selected == null) {
				selected = 0;
			}
			else {
				if (key == 38 && selected >= 1) {
					selected--;
				}
				else 
					if (key == 40 && selected < (items.length - 1)) {
						selected++;
					}
			}
			$(items[selected]).css('background', '#DFE8F6');
			if (lastSelected != null && lastSelected != selected) {
				$(items[lastSelected]).css('background', '#FFFFFF');
			}
			lastSelected = selected;
			value = $(items[selected]).text();
			value = value.replace(/\([0-9]*?\)/, '');
			$('#search_input').val(value);
		}
	}

	this.init = function()
	{
		obj.keydown(function(e)
		{
			key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
			if (key == 38 || key == 40) {
				navigateList(key);
			} else if(key == 27) {
				try {
					$('#quickSearch').html('');					
					$('.quickSearchItem').remove();
					$('#quickSearch').css('display', 'none');
					return false;
				} catch(e) {
					
				}
			};
		});
		obj.keyup(function(e){
			key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
			if(key == 27) {
				try {
					$('#quickSearch').html('');										
					$('.quickSearchItem').remove();
					$('#quickSearch').css('display', 'none');					
					return false;					
				} catch(e) {
					
				}
			} else if ((key > 8) && (key < 46) || (key > 90)) {
				return;
			};
			if ($(obj).val().length) {
				if (obj.val().length >= minLength && obj.val().length <= 32) {
					var qUrl = url;
					
					qUrl += '?q=' + obj.val();
					
					$.getJSON(qUrl, function(listings){
						selected = null;
						try {
							if($('#quickSearch').css('display') == 'none') {
								$('#quickSearch').css('display', 'block');
							}
							printElement(listings);
							gecocons.display(objCon, 'show');
						} 
						catch (e) {
						
						};
											});
				}
				else {
					gecocons.display(objCon, 'hide');
				}
			}
		})

		objCon.mouseout(function()
		{
			containerHidden = true;
			timeOutHandler = setTimeout(hide, 2000);
			objects = $('.quickSearchItem');
			for(i = 0; i < objects.length; i++) {
				$(objects[i]).removeAttr('style');
			}
		});

		objCon.mouseover(function()
		{
			clearTimeout(timeOutHandler);
			gecocons.display(objCon, 'show');
			objects = $('.quickSearchItem');
			for(i = 0; i < objects.length; i++) {
				$(objects[i]).removeAttr('style');
			}
		});
	};
	

	var hide = function()
	{
		if(containerHidden)
		{
			gecocons.display(objCon, 'hide');
			containerHidden = false;
		}
	};

	var printElement = function(listings)
	{
		var html = '';
		objCon.empty();
		for(i = 0; i < listings.length; i++) {
			var url = host + 'search.php?q=' + listings[i].phrase.replace(' ', '+');
			html += '<div class="quickSearchItem">';
			res  = (parseInt(listings[i].results)) ? '<span>(' + listings[i].results + ')</span>' : '';
			html += '<a href="' + url + '"><h3>' + listings[i].phrase + res + '</h3></a>';
			html += '</div>';
		}
		objCon.append(html);
		reset = 0;
	};
	
}



$(document).ready(
	
	function(e) {
		quicksearchconf = {
			'id': '#search_input',
			'container': '#quickSearch',
			'minLength': 0,
			'limit': 10
		};
		QuickSearch = new gecocons.search(quicksearchconf);
		QuickSearch.init();
	}
	
);

var advS = new function() {
	this.docHeight = 0;
	this.docWidth  = 0;
	this.winHeight = 0;
	this.winWidth  = 0;
	this.opened	   = 0;
	
	this.show = function() {
		this.opened = 1;
		holderWidth = $('#advancedSearch').width();
		this.drawBackground();
		$('#region_select').css('visibility', 'hidden');
		leftPos = (this.winWidth - holderWidth) / 2;
		$('#advancedSearch').css(
			{
				'position'	: 'absolute',
				'display' 	: 'block',
				'left'		: leftPos + 'px',
				'top'		: '100px',
				'z-index'	: '334'
			}
		);
	}
	
	this.close = function() {
		this.opened = 0;
		$('#advancedSearch').css('display', 'none');		
		this.eraseBackground();
		$('#region_select').css('visibility', 'visible');		
	}
	
	this.drawBackground = function() {
		this.winWidth  = $(window).width();
		this.winHeight = $(window).height();
		this.docHeight = $(document).height();
		this.docWidth = $(document).width();
		$('#auxDiv').html('<div id="advSBackground"></div>');
		$('#advSBackground').css({
			'position': 'absolute',
			'top': '0px',
			'left': '0px',
			'width': this.docWidth + 'px',
			'height': this.docHeight + 'px',
			'background': '#000000',
			'opacity': '0.4',
			'filter': 'alpha(opacity=40)',
			'z-index': '333'
		});
	}
	
	this.eraseBackground = function() {
		$('#advSBackground').remove();
	}
	
	this.reDraw = function() {
		if(this.opened) {
			this.close();
			this.show();
		}
	}
	
}
