String.prototype.trim = function()
{
	return this.replace(/^[\s]+|[\s]+$/, "");
};

function SuggestFramework_Create(instance)
{
	if(SuggestFramework_Name[instance] && SuggestFramework_Action[instance])
	{
		SuggestFramework_InputContainer[instance]              = document.getElementById(SuggestFramework_Name[instance]);
		SuggestFramework_InputContainer[instance].autocomplete = "off";
		SuggestFramework_InputContainer[instance].onblur       = function() { SuggestFramework_HideOutput(instance); };
		SuggestFramework_InputContainer[instance].onclick      = function() { SuggestFramework_ShowOutput(instance); SuggestFramework_Previous[instance] = '';};
		SuggestFramework_InputContainer[instance].onfocus      = function() { 			SuggestFramework_ShowOutput(instance); 		};
		SuggestFramework_InputContainer[instance].onkeydown    = function(event) { SuggestFramework_ProcessKeys(instance, event); };

		SuggestFramework_OutputContainer[instance]                = document.createElement("div");
		SuggestFramework_OutputContainer[instance].id             = SuggestFramework_Name[instance] + "SuggestList";
		SuggestFramework_OutputContainer[instance].className      = "SuggestFramework_List";
		SuggestFramework_OutputContainer[instance].style.position = "absolute";
		SuggestFramework_OutputContainer[instance].style.zIndex   = "1000";
    SuggestFramework_OutputContainer[instance].style.width    = SuggestFramework_InputContainer[instance].clientWidth + "px";
    SuggestFramework_OutputContainer[instance].style.height    = 0 + "px";
		SuggestFramework_OutputContainer[instance].style.wordWrap = "break-word";
		SuggestFramework_OutputContainer[instance].style.cursor   = "default";
		SuggestFramework_InputContainer[instance].parentNode.insertBefore(SuggestFramework_OutputContainer[instance], SuggestFramework_InputContainer[instance].nextSibling);
		SuggestFramework_InputContainer[instance].parentNode.insertBefore(document.createElement("br"), SuggestFramework_OutputContainer[instance]);

    // Create IFRAME to overlay IE selects
    SuggestFramework_IframeLayer[instance]               = document.createElement("iframe");
    SuggestFramework_IframeLayer[instance].id            = "ieBugsAreEvil";
    SuggestFramework_IframeLayer[instance].style.width    = SuggestFramework_OutputContainer[instance].clientWidth + 2 + "px";
    SuggestFramework_IframeLayer[instance].style.height    = SuggestFramework_OutputContainer[instance].clientHeight + 2 + "px";
    SuggestFramework_IframeLayer[instance].style.display = "block";
    SuggestFramework_IframeLayer[instance].style.border = "0px black solid";
    SuggestFramework_IframeLayer[instance].style.backgroundColor = "transparent";
    SuggestFramework_IframeLayer[instance].style.position = "absolute";
    SuggestFramework_IframeLayer[instance].style.zIndex = SuggestFramework_OutputContainer[instance].style.zIndex - 1;
    SuggestFramework_InputContainer[instance].parentNode.insertBefore(SuggestFramework_IframeLayer[instance], SuggestFramework_OutputContainer[instance]);

		if(!SuggestFramework_CreateConnection())
		{
			SuggestFramework_Proxy[instance]               = document.createElement("iframe");
			SuggestFramework_Proxy[instance].id            = "proxy";
			SuggestFramework_Proxy[instance].style.width   = "0";
			SuggestFramework_Proxy[instance].style.height  = "0";
			SuggestFramework_Proxy[instance].style.display = "none";
			document.body.appendChild(SuggestFramework_Proxy[instance]);

			if(window.frames && window.frames["proxy"])
				SuggestFramework_Proxy[instance] = window.frames["proxy"];
			else if(document.getElementById("proxy").contentWindow)
				SuggestFramework_Proxy[instance] = document.getElementById("proxy").contentWindow;
			else
				SuggestFramework_Proxy[instance] = document.getElementById("proxy");
		}
	    SuggestFramework_Previous[instance] = SuggestFramework_InputContainer[instance].value;
	
		SuggestFramework_HideOutput(instance);
		SuggestFramework_Throttle(instance);

    SuggestFramework_ShowTip(instance); // Empty tip to workaround uninitiated iframe i IE
    SuggestFramework_HideOutput(instance);

    //set_timeout('SuggestFramework_HideOutput(instance);', 5);

	}
	else
	{
		throw 'Error: SuggestFramework for instance "' + SuggestFramework_Name[instance] + '" not initialized';
	}
};

function SuggestFramework_CreateConnection()
{
	var asynchronousConnection;

	try
	{
		asynchronousConnection = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch(e)
	{
		if(typeof(XMLHttpRequest) != "undefined")
			asynchronousConnection = new XMLHttpRequest();
	}

	return asynchronousConnection;
};

function SuggestFramework_HideOutput(instance)
{
	SuggestFramework_OutputContainer[instance].style.display = "none";
  SuggestFramework_IframeLayer[instance].style.display = "none";
};

function SuggestFramework_Highlight(instance, index)
{
	SuggestFramework_SuggestionsIndex[instance] = index;

	for(var i in SuggestFramework_Suggestions[instance])
	{
		var suggestColumns = document.getElementById(SuggestFramework_Name[instance] + "Suggestions[" + i + "]").getElementsByTagName("td");
		for(var j in suggestColumns)
			suggestColumns[j].className = "SuggestFramework_Normal";
	}

	var suggestColumns = document.getElementById(SuggestFramework_Name[instance] + "Suggestions[" + SuggestFramework_SuggestionsIndex[instance] + "]").getElementsByTagName("td");
	for(var i in suggestColumns)
		suggestColumns[i].className = "SuggestFramework_Highlighted";
};

function SuggestFramework_IsHidden(instance)
{
	return ((SuggestFramework_OutputContainer[instance].style.display == "none") ? true : false);
};

function SuggestFramework_ProcessKeys(instance, e)
{
	var keyDown   = 40;
	var keyUp     = 38;
	var keyTab    = 9;
	var keyEnter  = 13;
	var keyEscape = 27;

	var keyPressed = ((window.event) ? window.event.keyCode : e.which);

	if(!SuggestFramework_IsHidden(instance))
	{
		switch(keyPressed)
		{
			case keyDown:   SuggestFramework_SelectNext(instance);     return;
			case keyUp:     SuggestFramework_SelectPrevious(instance); return;
			case keyTab:    SuggestFramework_SelectThis(instance);     return;
			case keyEnter:  SuggestFramework_SelectThis(instance);     return;
			case keyEscape: SuggestFramework_HideOutput(instance);     return;
			default: return;
		}
	}
};

function SuggestFramework_ProcessProxyRequest(instance)
{
	var result = ((SuggestFramework_Proxy[instance].document) ? SuggestFramework_Proxy[instance].document : SuggestFramework_Proxy[instance].contentDocument);
	result = result.body.innerHTML.replace(/\r|\n/g, " ").trim();

	if(typeof(eval(result)) == "object")
		SuggestFramework_Suggest(instance, eval(result));
	else
		setTimeout("SuggestFramework_ProcessProxyRequest(" + instance + ")", 100);
};

function SuggestFramework_ProcessRequest(instance)
{
	if(SuggestFramework_Connection[instance].readyState == 4)
	{
		if(SuggestFramework_Connection[instance].status == 200) {
      //alert(SuggestFramework_Connection[instance].responseText);
			SuggestFramework_Suggest(instance, eval(SuggestFramework_Connection[instance].responseText));
		}
	}
};

function SuggestFramework_Query(instance)
{
	SuggestFramework_Throttle(instance);
	var phrase = SuggestFramework_InputContainer[instance].value;
	if(phrase == "" || phrase == SuggestFramework_Previous[instance]) return;
	SuggestFramework_Previous[instance] = phrase;
	//alert(SuggestFramework_Previous[instance]+'  = '+phrase); 
	phrase = phrase.trim();
	phrase = escape(phrase);
	SuggestFramework_Request(instance, SuggestFramework_Action[instance] + "?type=" + SuggestFramework_Name[instance] + "&q=" + phrase);
};

function SuggestFramework_Request(instance, url)
{
	if(SuggestFramework_Connection[instance] = SuggestFramework_CreateConnection())
	{
		SuggestFramework_Connection[instance].onreadystatechange = function() { SuggestFramework_ProcessRequest(instance) };
		SuggestFramework_Connection[instance].open("GET", url, true);
		SuggestFramework_Connection[instance].send(null);

	}
	else
	{
		SuggestFramework_Proxy[instance].location.replace(url);
		SuggestFramework_ProcessProxyRequest(instance);
	}
};

/* Hackish equivalent of PHP's html_entity_decode() */
function html_entity_decode(str) {

  var ent = new Object()
  ent['apos'] = 39 // from XML, not present in HTML4
  ent['quot'] = 34
  ent['amp'] = 38
  ent['lt'] = 60
  ent['gt'] = 62
  ent['nbsp'] = 160
  ent['iexcl'] = 161
  ent['cent'] = 162
  ent['pound'] = 163
  ent['curren'] = 164
  ent['yen'] = 165
  ent['brvbar'] = 166
  ent['sect'] = 167
  ent['uml'] = 168
  ent['copy'] = 169
  ent['ordf'] = 170
  ent['laquo'] = 171
  ent['not'] = 172
  ent['shy'] = 173
  ent['reg'] = 174
  ent['macr'] = 175
  ent['deg'] = 176
  ent['plusmn'] = 177
  ent['sup2'] = 178
  ent['sup3'] = 179
  ent['acute'] = 180
  ent['micro'] = 181
  ent['para'] = 182
  ent['middot'] = 183
  ent['cedil'] = 184
  ent['sup1'] = 185
  ent['ordm'] = 186
  ent['raquo'] = 187
  ent['frac14'] = 188
  ent['frac12'] = 189
  ent['frac34'] = 190
  ent['iquest'] = 191
  ent['Agrave'] = 192
  ent['Aacute'] = 193
  ent['Acirc'] = 194
  ent['Atilde'] = 195
  ent['Auml'] = 196
  ent['Aring'] = 197
  ent['AElig'] = 198
  ent['Ccedil'] = 199
  ent['Egrave'] = 200
  ent['Eacute'] = 201
  ent['Ecirc'] = 202
  ent['Euml'] = 203
  ent['Igrave'] = 204
  ent['Iacute'] = 205
  ent['Icirc'] = 206
  ent['Iuml'] = 207
  ent['ETH'] = 208
  ent['Ntilde'] = 209
  ent['Ograve'] = 210
  ent['Oacute'] = 211
  ent['Ocirc'] = 212
  ent['Otilde'] = 213
  ent['Ouml'] = 214
  ent['times'] = 215
  ent['Oslash'] = 216
  ent['Ugrave'] = 217
  ent['Uacute'] = 218
  ent['Ucirc'] = 219
  ent['Uuml'] = 220
  ent['Yacute'] = 221
  ent['THORN'] = 222
  ent['szlig'] = 223
  ent['agrave'] = 224
  ent['aacute'] = 225
  ent['acirc'] = 226
  ent['atilde'] = 227
  ent['auml'] = 228
  ent['aring'] = 229
  ent['aelig'] = 230
  ent['ccedil'] = 231
  ent['egrave'] = 232
  ent['eacute'] = 233
  ent['ecirc'] = 234
  ent['euml'] = 235
  ent['igrave'] = 236
  ent['iacute'] = 237
  ent['icirc'] = 238
  ent['iuml'] = 239
  ent['eth'] = 240
  ent['ntilde'] = 241
  ent['ograve'] = 242
  ent['oacute'] = 243
  ent['ocirc'] = 244
  ent['otilde'] = 245
  ent['ouml'] = 246
  ent['divide'] = 247
  ent['oslash'] = 248
  ent['ugrave'] = 249
  ent['uacute'] = 250
  ent['ucirc'] = 251
  ent['uuml'] = 252
  ent['yacute'] = 253
  ent['thorn'] = 254
  ent['yuml'] = 255
  ent['OElig'] = 338
  ent['oelig'] = 339
  ent['Scaron'] = 352
  ent['scaron'] = 353
  ent['Yuml'] = 376
  ent['fnof'] = 402
  ent['circ'] = 710
  ent['tilde'] = 732
  ent['Alpha'] = 913
  ent['Beta'] = 914
  ent['Gamma'] = 915
  ent['Delta'] = 916
  ent['Epsilon'] = 917
  ent['Zeta'] = 918
  ent['Eta'] = 919
  ent['Theta'] = 920
  ent['Iota'] = 921
  ent['Kappa'] = 922
  ent['Lambda'] = 923
  ent['Mu'] = 924
  ent['Nu'] = 925
  ent['Xi'] = 926
  ent['Omicron'] = 927
  ent['Pi'] = 928
  ent['Rho'] = 929
  ent['Sigma'] = 931
  ent['Tau'] = 932
  ent['Upsilon'] = 933
  ent['Phi'] = 934
  ent['Chi'] = 935
  ent['Psi'] = 936
  ent['Omega'] = 937
  ent['alpha'] = 945
  ent['beta'] = 946
  ent['gamma'] = 947
  ent['delta'] = 948
  ent['epsilon'] = 949
  ent['zeta'] = 950
  ent['eta'] = 951
  ent['theta'] = 952
  ent['iota'] = 953
  ent['kappa'] = 954
  ent['lambda'] = 955
  ent['mu'] = 956
  ent['nu'] = 957
  ent['xi'] = 958
  ent['omicron'] = 959
  ent['pi'] = 960
  ent['rho'] = 961
  ent['sigmaf'] = 962
  ent['sigma'] = 963
  ent['tau'] = 964
  ent['upsilon'] = 965
  ent['phi'] = 966
  ent['chi'] = 967
  ent['psi'] = 968
  ent['omega'] = 969
  ent['thetasym'] = 977
  ent['upsih'] = 978
  ent['piv'] = 982
  ent['ensp'] = 8194
  ent['emsp'] = 8195
  ent['thinsp'] = 8201
  ent['zwnj'] = 8204
  ent['zwj'] = 8205
  ent['lrm'] = 8206
  ent['rlm'] = 8207
  ent['ndash'] = 8211
  ent['mdash'] = 8212
  ent['lsquo'] = 8216
  ent['rsquo'] = 8217
  ent['sbquo'] = 8218
  ent['ldquo'] = 8220
  ent['rdquo'] = 8221
  ent['bdquo'] = 8222
  ent['dagger'] = 8224
  ent['Dagger'] = 8225
  ent['bull'] = 8226
  ent['hellip'] = 8230
  ent['permil'] = 8240
  ent['prime'] = 8242
  ent['Prime'] = 8243
  ent['lsaquo'] = 8249
  ent['rsaquo'] = 8250
  ent['oline'] = 8254
  ent['frasl'] = 8260
  ent['euro'] = 8364
  ent['image'] = 8465
  ent['weierp'] = 8472
  ent['real'] = 8476
  ent['trade'] = 8482
  ent['alefsym'] = 8501
  ent['larr'] = 8592
  ent['uarr'] = 8593
  ent['rarr'] = 8594
  ent['darr'] = 8595
  ent['harr'] = 8596
  ent['crarr'] = 8629
  ent['lArr'] = 8656
  ent['uArr'] = 8657
  ent['rArr'] = 8658
  ent['dArr'] = 8659
  ent['hArr'] = 8660
  ent['forall'] = 8704
  ent['part'] = 8706
  ent['exist'] = 8707
  ent['empty'] = 8709
  ent['nabla'] = 8711
  ent['isin'] = 8712
  ent['notin'] = 8713
  ent['ni'] = 8715
  ent['prod'] = 8719
  ent['sum'] = 8721
  ent['minus'] = 8722
  ent['lowast'] = 8727
  ent['radic'] = 8730
  ent['prop'] = 8733
  ent['infin'] = 8734
  ent['ang'] = 8736
  ent['and'] = 8743
  ent['or'] = 8744
  ent['cap'] = 8745
  ent['cup'] = 8746
  ent['int'] = 8747
  ent['there4'] = 8756
  ent['sim'] = 8764
  ent['cong'] = 8773
  ent['asymp'] = 8776
  ent['ne'] = 8800
  ent['equiv'] = 8801
  ent['le'] = 8804
  ent['ge'] = 8805
  ent['sub'] = 8834
  ent['sup'] = 8835
  ent['nsub'] = 8836
  ent['sube'] = 8838
  ent['supe'] = 8839
  ent['oplus'] = 8853
  ent['otimes'] = 8855
  ent['perp'] = 8869
  ent['sdot'] = 8901
  ent['lceil'] = 8968
  ent['rceil'] = 8969
  ent['lfloor'] = 8970
  ent['rfloor'] = 8971
  ent['lang'] = 9001
  ent['rang'] = 9002
  ent['loz'] = 9674
  ent['spades'] = 9824
  ent['clubs'] = 9827
  ent['hearts'] = 9829
  ent['diams'] = 9830

  var xml = str;
  for (var i in ent)
  xml = xml.replace(new RegExp('&'+i+';','g'), //'gi' instead of 'g' for case-insensitivity
  String.fromCharCode(ent[i]));
  xml = xml.replace(/(&)(#)(\d{1,})(;)/g,
  function (tot,amp,cr,cp,sem) {
    return String.fromCharCode(cp)
  }
  )
  //alert(str);
  //alert(xml);
  return xml;

}

function SuggestFramework_SelectThis(instance, index)
{
	if(!isNaN(index))
		SuggestFramework_SuggestionsIndex[instance] = index;

  /* do not attempt if object are not correctly loaded */
  if (typeof(SuggestFramework_Suggestions) == 'undefined' || typeof(SuggestFramework_InputContainer) == 'undefined' || typeof(SuggestFramework_Capture) == 'undefined') return true;

	if(SuggestFramework_Columns[instance] > 1) {
    var assignValue = SuggestFramework_Suggestions[instance][SuggestFramework_SuggestionsIndex[instance]][SuggestFramework_Capture[instance] - 1];
    if (typeof(assignValue) == 'undefined') return true;
		SuggestFramework_InputContainer[instance].value = html_entity_decode(assignValue);
	} else {
    var assignValue = SuggestFramework_Suggestions[instance][SuggestFramework_SuggestionsIndex[instance]];
    if (typeof(assignValue) == 'undefined') return true;
		SuggestFramework_InputContainer[instance].value = html_entity_decode(assignValue);
  }

	SuggestFramework_Previous[instance] = SuggestFramework_InputContainer[instance].value;
	SuggestFramework_HideOutput(instance);
	
	/* submit form after selecting */
	document.forms[0].submit();
};

function SuggestFramework_SelectNext(instance)
{
	SuggestFramework_SetTextSelectionRange(instance);
	if(typeof(SuggestFramework_Suggestions[instance][(SuggestFramework_SuggestionsIndex[instance] + 1)]) != "undefined")
	{
		if(typeof(SuggestFramework_Suggestions[instance][SuggestFramework_SuggestionsIndex[instance]]) != "undefined")
			document.getElementById(SuggestFramework_Name[instance] + "Suggestions[" + SuggestFramework_SuggestionsIndex[instance] + "]").className = "SuggestFramework_Normal";
		SuggestFramework_SuggestionsIndex[instance]++;
		SuggestFramework_Highlight(instance, SuggestFramework_SuggestionsIndex[instance]);
	}
};

function SuggestFramework_SelectPrevious(instance)
{
	SuggestFramework_SetTextSelectionRange(instance);
	if(typeof(SuggestFramework_Suggestions[instance][(SuggestFramework_SuggestionsIndex[instance] - 1)]) != "undefined")
	{
		if(typeof(SuggestFramework_Suggestions[instance][SuggestFramework_SuggestionsIndex[instance]]) != "undefined")
			document.getElementById(SuggestFramework_Name[instance] + "Suggestions[" + SuggestFramework_SuggestionsIndex[instance] + "]").className = "SuggestFramework_Normal";
		SuggestFramework_SuggestionsIndex[instance]--;
		SuggestFramework_Highlight(instance, SuggestFramework_SuggestionsIndex[instance]);
	}
};

function SuggestFramework_SetTextSelectionRange(instance, start, end)
{
	if(!start) var start = SuggestFramework_InputContainer[instance].value.length;
	if(!end)   var end   = SuggestFramework_InputContainer[instance].value.length;

	if(SuggestFramework_InputContainer[instance].setSelectionRange)
	{
		SuggestFramework_InputContainer[instance].setSelectionRange(start, end);
	}
	else if(SuggestFramework_InputContainer[instance].createTextRange)
	{
		var selection = SuggestFramework_InputContainer[instance].createTextRange();
		selection.moveStart("character", start);
		selection.moveEnd("character", end);
		selection.select();
	}
};

function SuggestFramework_ShowOutput(instance)
{
	if(typeof(SuggestFramework_Suggestions[instance]) != "undefined" && typeof(SuggestFramework_IframeLayer[instance]) != "undefined" && SuggestFramework_Suggestions[instance].length) {
    SuggestFramework_IframeLayer[instance].style.height = (SuggestFramework_OutputContainer[instance].clientHeight > 0 ? SuggestFramework_OutputContainer[instance].clientHeight + "px" : SuggestFramework_Suggestions[instance].length * 1.4 + "em");
    SuggestFramework_IframeLayer[instance].style.display = "block";
    SuggestFramework_OutputContainer[instance].style.display = "block";
  }
};

function SuggestFramework_ShowTip(instance)
{
  //tipArray = new Array(new Array("<center>Hej! Skriv det du vill söka efter i rutan</center>", ""),new Array("<center>ovanför, så hjälper jag dig med sökförslag.</center>", ""));
  tipArray = new Array(new Array("", ""));
  SuggestFramework_Suggest(instance, tipArray);
}

function SuggestFramework_Suggest(instance, list)
{
	SuggestFramework_Suggestions[instance]               = list;
	SuggestFramework_SuggestionsIndex[instance]          = -1;
	SuggestFramework_OutputContainer[instance].innerHTML = "";

	var table = '<table class="SuggestFramework_Combo" cellspacing="0" cellpadding="0">';
	if(SuggestFramework_Heading[instance] && SuggestFramework_Suggestions[instance].length)
	{
		var heading = SuggestFramework_Suggestions[instance].shift();
		var thead   = '<thead>';
		var headingContainer = '<tr>';
		for(var i = 0; i < SuggestFramework_Columns[instance]; i++)
		{
			var value  = ((SuggestFramework_Columns[instance] > 1) ? heading[i] : heading);
			var column = '<td class="SuggestFramework_Heading"';
			if(SuggestFramework_Columns[instance] > 1 && i == SuggestFramework_Columns[instance] - 1)
				column += ' style="text-align: right"';
			column += '>' + value.trim() + '</td>';
			headingContainer += column;
		}
		headingContainer += '</tr>';
		thead  += headingContainer;
		thead  += '</thead>';
		table  += thead;
	}
	var tbody = '<tbody>';
	for(var i in SuggestFramework_Suggestions[instance])
	{
		var suggestionContainer = '<tr id="' + SuggestFramework_Name[instance] + 'Suggestions[' + i + ']">';
		for(var j = 0; j < SuggestFramework_Columns[instance]; j++)
		{
			var value  = ((SuggestFramework_Columns[instance] > 1) ? SuggestFramework_Suggestions[instance][i][j] : SuggestFramework_Suggestions[instance][i]);
			var column = '<td class="SuggestFramework_Normal"';
			if(SuggestFramework_Columns[instance] > 1 && j == SuggestFramework_Columns[instance] - 1)
				column += ' style="text-align: right"';
			column += '>' + value.trim() + '</td>';
			suggestionContainer += column;
		}
		suggestionContainer += '</tr>';
		tbody += suggestionContainer;
	}
	tbody += '</tbody>';
	table += tbody;
	table += '</table>';
	SuggestFramework_OutputContainer[instance].innerHTML = table;
	for(var i in SuggestFramework_Suggestions[instance])
	{
		var row = document.getElementById(SuggestFramework_Name[instance] + 'Suggestions[' + i + ']');
		row.onmouseover = new Function("SuggestFramework_Highlight(" + instance + ", " + i + ")");
		row.onmousedown = new Function("SuggestFramework_SelectThis(" + instance + ", " + i + ")");
	}

	SuggestFramework_ShowOutput(instance);
};

function SuggestFramework_Throttle(instance)
{
	setTimeout("SuggestFramework_Query(" + instance + ")", SuggestFramework_Delay[instance]);
};

function initializeSuggestFramework()
{

	function getAttributeByName(node, attributeName)
	{
		if(typeof(NamedNodeMap) != "undefined")
		{
			if(node.attributes.getNamedItem(attributeName))
				return node.attributes.getNamedItem(attributeName).value;
		}
		else
		{
			return node.getAttribute(attributeName);
		}
	}

	var inputElements = document.getElementsByTagName("input");

	try
	{
		for(var instance = 0; instance < inputElements.length; instance++)
		{
			if(getAttributeByName(inputElements[instance], "name") &&
			   getAttributeByName(inputElements[instance], "type") == "text" && 
			   getAttributeByName(inputElements[instance], "action"))
			{

				SuggestFramework_Action[instance]  = getAttributeByName(inputElements[instance], "action");
				SuggestFramework_Capture[instance] = 1;
				SuggestFramework_Columns[instance] = 1;
				SuggestFramework_Delay[instance]   = 1000;
				SuggestFramework_Heading[instance] = false;
				SuggestFramework_Name[instance]    = getAttributeByName(inputElements[instance], "name");

				if(getAttributeByName(inputElements[instance], "capture"))
					SuggestFramework_Capture[instance] = getAttributeByName(inputElements[instance], "capture");
				if(getAttributeByName(inputElements[instance], "columns"))
					SuggestFramework_Columns[instance] = getAttributeByName(inputElements[instance], "columns");
				if(getAttributeByName(inputElements[instance], "delay"))
					SuggestFramework_Delay[instance] = getAttributeByName(inputElements[instance], "delay");
				if(getAttributeByName(inputElements[instance], "heading"))
					SuggestFramework_Heading[instance] = getAttributeByName(inputElements[instance], "heading");

				SuggestFramework_Create(instance);
			}
		}
	}
	catch(e) {}
};

// External
var SuggestFramework_Action           = new Array();
var SuggestFramework_Capture          = new Array(); // Default = 1;
var SuggestFramework_Columns          = new Array(); // Default = 1;
var SuggestFramework_Delay            = new Array(); // Default = 1000;
var SuggestFramework_Heading          = new Array(); // Default = false;
var SuggestFramework_Name             = new Array();

// Internal
var SuggestFramework_Connection       = new Array();
var SuggestFramework_InputContainer   = new Array();
var SuggestFramework_OutputContainer  = new Array();
var SuggestFramework_IframeLayer      = new Array();
var SuggestFramework_Previous         = new Array();
var SuggestFramework_Proxy            = new Array();
var SuggestFramework_Suggestions      = new Array();
var SuggestFramework_SuggestionsIndex = new Array();
