

	var My = {}	;
	var keys = [ 13, 27, 32, 37, 38, 39, 40, 46 ];
	
	My.List = {
		Filter : function (inputSelector, listSelector, idField, freeSearch) {
			
			// Sanity check	 
			var inp, titles = $(listSelector);
			
			if (titles.length === 0) {
				return false;
			}

			// The list with keys to skip (esc, arrows, return, etc)
			// 8 is backspace, you might want to remove that for better usability
			

			// binding keyup to the unordered list
			
			$(inputSelector).bind('keyup', function (e) {
				
				if (jQuery.inArray(e.keyCode, keys) >= 0) {
					return false;
				}
				
				// Building the regex from our user input, 'inp' should be escaped
				if(freeSearch && freeSearch==true){
					inp = $(this).attr('value');
					//alert(inp);
				}else{
					inp = '^'+$(this).attr('value');
				}
				
				
				doFilter(inp, titles, idField, this, freeSearch);
				//initPatientToolbar(isSelected);
				
			});
		}
	};

	function doFilter(inp,titles, idField, inputField, freeSearch){
		
		try {
			var isSelected=false;
			var rgx = new RegExp();
			rgx.compile(inp, 'im');
			for (var i=0; i < titles.length; i++) {
				if (rgx.source !== '' && !rgx.test(titles[i].innerHTML)) {
					titles[i].parentNode.parentNode.style.display = 'none';
				} else {
					titles[i].parentNode.parentNode.style.display = '';
					if(!isSelected){
//						$(titles[i]).parent().addClass('selected');
						selStart = $(inputField).attr('value').length;
						v = trim(titles[i].innerHTML);
						if(!freeSearch){
							$(inputField).attr('value',v);
							createSelection(inputField, selStart, v.length);
							$('#'+idField).attr('value',titles[i].parentNode.value);
							isSelected = true;
						}
					}else{
						titles[i].parentNode.style.backgroundColor = '';
					}
				}
			}
		} catch(e) {
			//alert(e);
		}
	}
	
