function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

var bookmarkurl = "http://www.investorwords.com";
var bookmarktitle = "Investorwords.com - Investing Glossary";

function addBookmark() {
	window.external.AddFavorite(bookmarkurl, bookmarktitle);
}

function tryGetElements()
{
	var elements = new Array();

	for (var i = 0; i < arguments.length; i++)
	{
		var element = arguments[i];
		if (typeof element == 'string') element = document.getElementById(element);
		if (arguments.length == 1) return element;
		elements.push(element);
	}

	return elements;
}

$ = tryGetElements;

var $A = function(iterable)
{
	if (!iterable) return [];

	if (iterable.toArray) {
		return iterable.toArray();
	} else {
		var results = [];
		for (var i = 0; i < iterable.length; i++) results.push(iterable[i]);
		return results;
	}
}

Function.prototype.bind = function()
{
	var __method = this;
	var args = $A(arguments);
	var object = args.shift();

	return function() {
		return __method.apply(object, args.concat($A(arguments)));
	}
}

if (typeof(XMLHttpRequest) == "undefined") {
	var XMLHttpRequest = function() {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function CSuggestion(fieldName)
{
	this.objField = tryGetElements(fieldName);
	this.lastRequest = '';
	this.timer = false;
	this.hideTimeOut = 100;
	this.searchUrl = '';
	this.searchKey = '';
	this.searchTarget = '';
	this.selectedIndex = -1;
	this.fieldSearchText = 'Enter a word or phrase...';
}

var directMove = '';
var directMoveFull = '';
var cSobj = null;

function send()
{
	directMove = '';
	if (cSobj != null) cSobj.sendRequest();
}

CSuggestion.prototype = {

	init: function(obj)
	{
		this.searchUrl = obj.searchUrl ? obj.searchUrl : '';
		this.searchKey = obj.searchKey ? obj.searchKey : '';
		this.searchTarget = obj.searchTarget ? obj.searchTarget : '';
		this.requestUrl = obj.requestUrl ? obj.requestUrl : '';

		if (typeof(this.objField)== 'undefined' || this.objField==null) return;

		this.objField.onkeyup = this.getStrings.bind(this);
		this.objField.value = this.fieldSearchText;

		if (document.all && !window.opera)
		{
			var _this = this;

			setTimeout(function() {
				document.body.onclick = _this.handleWindowClick.bind(_this);
			}, 1);
		}
		else
		{
			window.onclick = this.handleWindowClick.bind(this);
		}
	},

	handleWindowClick: function(evt)
	{
		evt = evt ? evt : window.event;
		var srcEl = (evt.target) ? evt.target : evt.srcElement;

		if (srcEl == this.objField)
		{
			this.hideTimerReset();

			var objContainer = this.createContainer();
			if (objContainer.innerHTML != '') objContainer.style.display = '';
		}
		else
		{
			this.hideTimerSet();
		}

		return true;
	},

	resetSelectedIndex: function()
	{
		this.selectedIndex = -1;
	},

	timeOut : null,
	sEelem : null,

	sendRequest: function()
	{
		if (this.sEelem != null)
		{
			var srcEl =this.sEelem;
			this.request(this.requestUrl+srcEl.value);
			this.lastRequest = srcEl.value;
			this.resetSelectedIndex();
		}
	},

	getStrings: function(evt)
	{
		evt = evt ? evt : window.event;
		var srcEl = (evt.target) ? evt.target : evt.srcElement;

		if (srcEl && srcEl.value != this.lastRequest)
		{
			if (evt.keyCode!=38 && evt.keyCode!=40 && evt.keyCode!=9)
			{
				this.sEelem = srcEl;
				clearTimeout(this.timeOut);
				cSobj = this;
				this.timeOut = setTimeout('send()', 100);
			}
		}

		if (srcEl.value == '') {
			this.hideSuggestions('');
		}
	},

	request: function (url)
	{
		try {
			var req = new XMLHttpRequest();
		} catch(e) {
			return;
		}

		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				if (req.status == 200)
				{
					try
					{
						if (this.objField.value == '') return;

						var objContainer = this.createContainer();
						var xml = req.responseXML;
						var words = xml.getElementsByTagName('words');

						if (words && words[0])
						{
							setStyleOver = function(es)
							{
								es.backgroundColor = '#elf3ff';
								es.color = '#a44533';
								es.textDecoration = 'none';
							}

							setStyleOut = function(es)
							{
								  es.display = 'block';
								  es.color = '#076499';
								  es.padding = '2px 6px 2px 6px';
								  es.backgroundColor = 'White';
								  es.textDecoration = 'none';
							}

							objContainer.innerHTML = '';
							var word_arr = words[0].getElementsByTagName('word');

							if (word_arr && word_arr.length)
							{
								if (word_arr.length == 1) {
									directMoveFull = word_arr[0].getAttribute('url');
								}

								for (var i = 0; i < word_arr.length; i++)
								{
									if (document.forms['frmSearch'].elements['term'].value == word_arr[i].firstChild.nodeValue)
									{
										directMoveTerm = word_arr[i].firstChild.nodeValue;
										directMove = word_arr[0].getAttribute('url');
									}

									{
										var word = document.createElement('A');

										word.onfocus = function(evt)
										{
											var evt = (evt) ? evt : ((window.event) ? event : null);
											var target = (evt.target) ? evt.target : evt.srcElement;
											this.objField.value = target.firstChild.nodeValue;
											this.objField.focus();
										}.bind(this);

										word.onmouseover = function(evt)
										{
											var evt = (evt) ? evt : ((window.event) ? event : null);
											var target = (evt.target) ? evt.target : evt.srcElement;

											if (this.selectedIndex != -1)
											{
												var els = tryGetElements('suggestions').getElementsByTagName('A');
												for (var i = 0; i < els.length; i++) els[i].className = 'out';
											}

											this.selectedIndex = target.rel;
											target.className = 'over';
										}.bind(this);

										word.onmouseout = function(evt)
										{
											var els = tryGetElements('suggestions').getElementsByTagName('A');
											for (var i = 0; i < els.length; i++) els[i].className = 'out';
											this.resetSelectedIndex();
										}.bind(this);

										word.onclick = function(evt)
										{
											var evt = (evt) ? evt : ((window.event) ? event : null);
											var target = (evt.target) ? evt.target : evt.srcElement;

											location.href = target.getAttribute('href');
											this.updateStatistic( target.getAttribute( 'tag' ) );
											return false;
										}.bind(this);

										word.setAttribute('tag', word_arr[i].getAttribute('id'));
										word.setAttribute('rel',i);
										word.setAttribute('href', word_arr[i].getAttribute('url'));
										word.setAttribute('target', this.searchTarget);

										word.innerHTML = word_arr[i].firstChild.nodeValue;
										objContainer.appendChild(word);
									}
								}

								objContainer.style.display = '';
							}
							else
							{
								objContainer.style.display = 'none';
								directMoveFull = '';
							}
						}
					}
					catch (e) {}
				}
			}
		}.bind(this);

		req.open('GET', url, true);
		req.setRequestHeader('x-requested-with', 'XMLHttpRequest');
		req.send('');
	},

	hideSuggestions: function(text)
	{
		if (tryGetElements('suggestions'))
		{
			tryGetElements('suggestions').style.display = 'none';
			this.lastRequest = '';
			this.resetSelectedIndex();
		}
	},

	hideTimerSet: function()
	{
		this.timer = setTimeout(this.hideSuggestions.bind(this), this.hideTimeOut);
	},

	hideTimerReset: function()
	{
		if (this.timer) clearTimeout(this.timer);
	},

	createContainer: function ()
	{
		if (tryGetElements('suggestions')) return tryGetElements('suggestions');

		var body = document.getElementsByTagName('body');
		if (!body || !body[0]) return null;

		var container = document.createElement('DIV');
		container.id = 'suggestions';
		container.style.display = 'none';
		container.style.position = 'absolute';

		body[0].appendChild(container);
		this.containerPosition(container);

		return container;
	},

	setSuggestFocus: function(action)
	{
		if (tryGetElements('suggestions'))
		{
			var els = tryGetElements('suggestions').getElementsByTagName('A');

			if (els)
			{
				for (var i = 0; i < els.length; i++) els[i].className = 'out';

				if (action == 'down') this.selectedIndex++;
				else this.selectedIndex--;

				switch (this.selectedIndex)
				{
					case -1:
					case -2:
						this.selectedIndex = els.length-1;
						break;

					case els.length:
						this.selectedIndex = 0;
						break;
				}

				els[this.selectedIndex].className = 'over';
				if (tryGetElements('suggestions').style.display == '') els[this.selectedIndex].focus();
			}
		}
	},

	updateStatistic: function(term_id)
	{
		try {
			var req = new XMLHttpRequest();
		} catch(e) {
			return;
		}

		req.open('GET', this.searchUrl + "?mode=set_statistic&tid=" + term_id, false);
		req.send('');

	},

	gotoDefinition: function()
	{
		if (tryGetElements('suggestions'))
		{
 			var els = tryGetElements('suggestions').getElementsByTagName('A');

 			if (els && this.selectedIndex>=0 && els[this.selectedIndex])
			{
				var t = els[this.selectedIndex].getAttribute('tag');
				if (t > 0) this.updateStatistic( t );

				location.href = els[this.selectedIndex].href;
				return true;
			}
		}

		return false;
	},

	handleArrowKeys: function(evt)
	{
		var evt = (evt) ? evt : ((window.event) ? event : null);

		if (evt)
		{
			switch (evt.keyCode)
			{
				case 38: // up
					this.setSuggestFocus('up');
					break;

				case 40: // down
					this.setSuggestFocus('down');
					break;
			 }
		}
	},

	formSubmit: function()
	{
		if (directMoveFull != '')
		{
			if (directMoveTerm == document.forms['frmSearch'].elements['term'].value) {
				window.location.href = directMoveFull;
			} else {
				directMoveFull = '';
			}

			return false;
		}
		else if (directMove!='' && directMoveTerm==document.forms['frmSearch'].elements['term'].value)
		{
			window.location.href = directMove;
			return false;
		}
		if (!this.gotoDefinition())
		{
			return true;
		}

		return false;
	},

	containerPosition: function ( container )
	{
		container.style.left = this.getLeftPos(this.objField.offsetParent) + 'px';
		container.style.top = (this.getTopPos(this.objField.offsetParent) + 25) + 'px';
	},

	getLeftPos: function (obj)
	{
		var res = 0;

		while (obj)
		{
			res += obj.offsetLeft;
			obj = obj.offsetParent;
		}

		return res;
	},

	getTopPos: function (obj)
	{
		var res = 0;

		while (obj)
		{
			res += obj.offsetTop;
			obj = obj.offsetParent;
		}

		return res;
	}
}

function initTermsField()
{
	if (document.forms['frmSearch'] && document.forms['frmSearch'].elements['term'])
	{
		var termField = document.forms['frmSearch'].elements['term'];

		if (termField.value != "")
		{
			termField.value = "";
			setTimeout('initTermsField()', 400);
		}
		else
		{
			termField.setAttribute('id', 'term');
			termField.setAttribute('autocomplete', 'off');

			var suggestion = new CSuggestion('term');
			suggestion.init(
			{
				searchUrl: '/sterm.php',
				searchKey: 'search',
				searchTarget: '_self',
				requestUrl: '/sterm.php?mode=get_words&term='
			});

			document.onkeyup = suggestion.handleArrowKeys.bind(suggestion);
			document.forms['frmSearch'].onsubmit = suggestion.formSubmit.bind(suggestion);
		}

	}
	else
	{
		setTimeout('initTermsField()', 400);
	}
}

initTermsField();

function search(e)
{
	e = e ? e : window.event;

	if (e.keyCode == 13 && directMoveFull != '')
	{
		if (directMoveTerm == document.forms['frmSearch'].elements['term'].value) {
			window.location.href = directMoveFull;
		} else {
			directMoveFull = '';
		}

		return false;
	}
	else if (e.keyCode == 13 && directMove != '' && directMoveTerm == document.forms['frmSearch'].elements['term'].value)
	{
		window.location.href = directMove;
	}
}

function initBody()
{
	var elem = document.getElementsByTagName('body')[0];

	if (elem)
	{
		elem.onkeypress = function(evt) {
			search(evt);
		}
	}
	else
	{
		setTimeout('initBody()', 100);
	}
}

initBody();

