/**
 * @author adam
 */

	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}

 	var autocomplete = {
		tags : [],
		input : '',
		div : '',
		enabled: true,
		init : function(){
			if(document.all){
				autocomplete.enabled = false;
			}
			autocomplete.input = $('tagDisplay');
			autocomplete.div = $('tagList');

			autocomplete.input.onkeyup = autocomplete.update; //setAttribute("onkeyup", "autocomplete.update()");
			autocomplete.input.onclick = autocomplete.update;			
			autocomplete.input.onblur = autocomplete.hide_list;
			autocomplete.input.setAttribute("autocomplete", "off");
		},
		
		update : function(event){
			if(!autocomplete.enabled)
				return false;
			event = event || window.event;

			deleteKeyPressed = false;
			alphaKeyPressed = false;
			if(event.keyCode == 46 || event.keyCode == 8)
				deleteKeyPressed = true;
				
			if(event.keyCode >= 65 && event.keyCode <= 90)
				alphaKeyPressed = true;
			
			clicked = false;

			if(typeof(event.keyCode) == 'undefined')
				clicked = true;
				
			if (alphaKeyPressed || clicked) {
				inputs = autocomplete.input.value.split(',');
				autocomplete.input.value = "";
				input = inputs.pop().trim();
				
				for (i = 0; i < inputs.length; i++) {
					autocomplete.input.value += inputs[i].trim();
					autocomplete.input.value += ', ';
				}
				
				
				suggestion = autocomplete.show_list(input);
				
				if (typeof(suggestion) != 'undefined') {
					len = autocomplete.input.value.length;
					autocomplete.input.value += suggestion;
					autocomplete.createSelection(len + input.length, len + suggestion.length);
				}
			}else{
				autocomplete.show_list(autocomplete.input.value.split(',').pop().trim());
			}

		},
		
		show_list : function(input){
			var inputreg = new RegExp(input, "ig");
			autocomplete.div.innerHTML = '';
			matchingTags = [];
			for(i=0;i<autocomplete.tags.length;i++){
				if (autocomplete.tags[i].search(inputreg) == 0) {
					matchingTags.push(autocomplete.tags[i]);
					link = document.createElement('a');
					link.href = "javascript: autocomplete.complete('"+autocomplete.tags[i]+"');";
					link.innerHTML = autocomplete.tags[i];
					
					autocomplete.div.appendChild(link);
					autocomplete.div.innerHTML += "<br />";
				}
			}
			
			if(autocomplete.div.innerHTML == '')
				autocomplete.div.style.display = "none";
			else
				autocomplete.div.style.display = "block";
			if(matchingTags.length > 0)
				return matchingTags[0];
			else
				return input;			
		},
		hide_list : function(){
			setTimeout('autocomplete.div.style.display = "none";', 1000);
			
		},
		
		createSelection : function(selectionStart, selectionEnd){

			if(document.all){
			    var range = input.createTextRange();
			    range.collapse(true);
			    range.moveEnd('character', selectionEnd);
			    range.moveStart('character', selectionStart);
			    range.select();
			}else{
			   autocomplete.input.setSelectionRange(selectionStart, selectionEnd);	
			}

		},
		
		complete: function(completion){

			inputs = autocomplete.input.value.split(',');
			autocomplete.input.value = "";
			input = inputs.pop().trim();
			
			for(i=0;i<inputs.length;i++){
				autocomplete.input.value.trim();

				autocomplete.input.value += inputs[i].trim() + ', ';					
			}

			autocomplete.input.value += completion + ", ";
			autocomplete.input.focus();
			
		}	
	}