var quoteComplete = {
	index:-1,
	totalResults:0,
	results:false,
	resultsDiv:'searchoverlay',
	field:'input.quoteComplete',
	url:'http://interactive.foxbusiness.com/projects/autocomplete/autocomplete.json',
	action:'http://interactive.foxbusiness.com/projects/autocomplete/intercept.html?q=',
	quoteUrl:'http://quote.foxbusiness.com/?searchString=',
	defaultText:'Search quotes, news and video',
	reset:function() {
		$('.' + quoteComplete.resultsDiv).html('');
		quoteComplete.results = false;
		quoteComplete.index = -1;
	},
	init:function() {
		$(quoteComplete.field).focus(function() {
			if ( $(this).val() == quoteComplete.defaultText ) {
				$(this).val('');
			}
			quoteComplete.reset();
		});
		$(quoteComplete.field).blur(function(ev) {
			if ( $(this).val() == '' ){
				$(this).val(quoteComplete.defaultText);
			}
			setTimeout("quoteComplete.reset()", 500);
		});
		$(quoteComplete.field).parents('form').submit(function() {
			if ( quoteComplete.index > -1 ) {
				$(quoteComplete.field).val($('#search_drop_overlay ul li:eq(' + quoteComplete.index + ') a span.ticker').text());
			}
			if ( quoteComplete.index > -1 ) quoteComplete.action = quoteComplete.quoteUrl;
			quoteComplete.action += $(quoteComplete.field).val();
			if ( quoteComplete.index > -1 ) { quoteComplete.reset(); }
			document.location = quoteComplete.action;
			return false;
		});
		$(quoteComplete.field).keyup(function(event) {
			if ( (event.keyCode >= 65 && event.keyCode <= 90) || (event.keyCode >= 97 && event.keyCode <= 122) || event.keyCode == 8 ) {
				quoteComplete.index = -1;
				var val = $(quoteComplete.field).val();
				$('.' + quoteComplete.resultsDiv).html('');
				if (val != '') {
					$.getJSON(quoteComplete.url + '?q=' + val + '&callback=quoteComplete.response&jsonp=?');
					quoteComplete.results = true;
				} else {
					quoteComplete.results = false;
				}
			}
			else if ( event.keyCode == 40 || event.keyCode == 38 ) {
				if ( quoteComplete.results ) {
					$('#search_drop_overlay ul li:eq(' + quoteComplete.index + ')').removeClass('selected');
					$('#search_drop_overlay ul li a:eq(' + quoteComplete.index + ')').removeClass('selected');
					if ( event.keyCode == 40 ) {
						if( quoteComplete.index < (quoteComplete.totalResults-1) ) {
							quoteComplete.index++;
						} else {
							quoteComplete.index = 0;
						}
					} else {
						if( quoteComplete.index > 0 ) {
							quoteComplete.index--;
						} else {
							quoteComplete.index = quoteComplete.totalResults - 1;
						}
					}
					$('#search_drop_overlay ul li:eq(' + quoteComplete.index + ')').addClass('selected');
					$('#search_drop_overlay ul li a:eq(' + quoteComplete.index + ')').addClass('selected');
				}
			}
			else if ( event.keyCode == 27 ) {
				quoteComplete.reset();
			}
		});
		$(quoteComplete.field).parents('form').after('<div class="' + quoteComplete.resultsDiv + '"></div>');
	},
	response:function(data) {
		var list = '';
		var val = $(quoteComplete.field).val();
		if( data != '' ) {
			quoteComplete.totalResults = $(data).size();
			list += '<ul>';
			$.each(data, function(i, item) {
				var re = new RegExp(val,'i');
				var symPos = this.s.search(re);
				var symNamePos = this.n.search(re);
				var sym = symPos > -1 ? this.s.replace(re, '<strong>' + this.s.slice(symPos, (symPos + val.length)) + '</strong>') : this.s;
				var symName = symNamePos > -1 ? this.n.replace(re,  '<strong>' + this.n.slice(symNamePos, (symNamePos + val.length))  + '</strong>') : this.n;
				var symLink = this.s;
				list += '<li><a href="' + quoteComplete.quoteUrl + symLink + '"><span class="ticker">' + sym + '</span><span class="corporation">' + symName + '</span></a></li>';
			});
			list += '</ul>';
		} else {
			quoteComplete.totalResults = 0;
			list = '<p>No suggestions available</p>';
		}
		$('.' + quoteComplete.resultsDiv).html('<div id="search_drop_overlay" class="search_drop_overlay"><div class="search_drop_top">&nbsp;</div><div class="search_drop_list">' + list + '<div class="clearflatgray"></div><div class="search_drop_link1"><a href="' + quoteComplete.action + val + '">&raquo; Search for "<strong>' + val + '</strong>" News &amp; Videos</a></div></div><div class="search_drop_bottom"></div></div>');
		quoteComplete.initMouseEvents();
	},
	initMouseEvents:function() {
		$('.' + quoteComplete.resultsDiv + ' ul li').mouseover(function() {
			if( quoteComplete.index > -1 ) {
				$('.' + quoteComplete.resultsDiv + ' ul li:eq(' + quoteComplete.index + ')').removeClass('selected');
			}
			$(this).addClass('selected');
		});
		$('.' + quoteComplete.resultsDiv + ' ul li').mouseout(function() {
			$(this).removeClass('selected');
		});
		$('.' + quoteComplete.resultsDiv + ' ul li a').mouseover(function() {
			if( quoteComplete.index > -1 ) {
				$('.' + quoteComplete.resultsDiv + ' ul li a:eq(' + quoteComplete.index + ')').removeClass('selected');
			}
			$(this).addClass('selected');
		});
		$('.' + quoteComplete.resultsDiv + ' ul li a').mouseout(function() {
			$(this).removeClass('selected');
		});
	}
}
quoteComplete.init();
