if ( ! com) var com = {};
if (!com.corejsf) {
	var focusLostTimeout;
	com.corejsf = {   
			errorHandler: function(data) { 
				//alert("Error occurred during Ajax call: " + data.description) ;
				var form = com.corejsf.getForm(tempInput);
				jQuery(form).remove("javax.faces.encodedURL");
			},

			updateCompletionItems: function(input, event, usaConversation) { 
				var keystrokeTimeout;

				if(com.corejsf.keyRepresentation[event.keyCode] == null && 
						jQuery(input).val() != null && jQuery(input).val() != ""
					&& jQuery(input).val().length >= 3){

					document.getElementById(com.corejsf.getId(input,':autocomplete_loading')).style.display= 'inline-block';  
					document.getElementById(com.corejsf.getId(input,':valueId')).value="";

					jsf.ajax.addOnError(com.corejsf.errorHandler);

					var params = jQuery("div.params > input");

					var ajaxRequest = function() {

						options = { 
								render: com.corejsf.getId(input, ":listbox"),
								onevent: com.corejsf.updateListBoxCallBack,
								x: jQuery(input).offset().left,
								y: jQuery(input).offset().top + jQuery(input).height()
						};
						
						for(i = 0; i < params.length; i++){
							options[params[i].name] = params[i].value; 
						}

						var form = com.corejsf.getForm(input);
						var url = form.action;
						var indice = url.indexOf("?");
						
						hidden = jQuery("input[name='javax.faces.encodedURL']",form).val();
						if(!usaConversation && indice > 0 
								&& (typeof hidden === 'undefined' || hidden === null)){
							jQuery(form).append("<input type='hidden' id='javax.faces.encodedURL' name='javax.faces.encodedURL' value='"+url.substring(0,indice)+"' />");
						}
						
						jsf.ajax.request(input, event, options);
						tempInput = input;
					};

					window.clearTimeout(keystrokeTimeout);
					keystrokeTimeout = window.setTimeout(ajaxRequest, 100);
				}
			},

			inputLostFocus: function(input) {  	  
				var hideListbox = function() {
					//document.getElementById(com.corejsf.getId(input,":listbox")).style.display= 'none';
				};
//				if(!document.getElementById(com.corejsf.getId(input,":listbox")).focus())
//				document.getElementById(com.corejsf.getId(input,":listbox")).style.display= 'none';
				focusLostTimeout = window.setTimeout(hideListbox, 200);
			},
			
			inputGainFocus: function(input) {  	  
				document.getElementById(com.corejsf.getId(input,":listbox")).style.display= 'none';
			},
			
			getId: function(input, id) {  
				var clientId = new String(input.name);  
				var lastIndex = clientId.lastIndexOf(':');  
				return clientId.substring(0, lastIndex) + id;  

			},  

			updateListBoxCallBack: function(e) {  
				if(e.status == "success") {  
					document.getElementById(com.corejsf.getId(tempInput,':autocomplete_loading')).style.display='none';  
					var form = com.corejsf.getForm(tempInput);
					jQuery(form).remove("javax.faces.encodedURL");
				}
			},  

			submitEnter: function(obj, e) {  
				var keycode;  
				if (window.event) keycode = window.event.keyCode; //IE  
				else if (e) keycode = e.which;  //Mozilla  
				else return true;  
				if (keycode == 13) {  
					com.corejsf.inputLostFocus(obj);  
					return false;  
				} else {  
					return true;  
				}  
			},

			getForm : function getForm(element) {
				if (element) {
					var form = element;
					while (form) {

						if (form.nodeName && (form.nodeName.toLowerCase() == 'form')) {
							return form;
						}
						if (form.form) {
							return form.form;
						}
						if (form.parentNode) {
							form = form.parentNode;
						} else {
							form = null;
						}
					}
					return document.forms[0];
				}
				return null;
			},
			
			keyRepresentation: {
 //               8    : 'backspace',
                9    : 'tab',
                13   : 'enter',
                16   : 'shift',
                17   : 'control',
                18   : 'alt',
                27   : 'esc',
                33   : 'page up',
                34   : 'page down',
                35   : 'end',
                36   : 'home',
                37   : 'left',
                38   : 'up',
                39   : 'right',
                40   : 'down',
                45   : 'insert',
                46   : 'delete',
                116  : 'f5',
                123  : 'f12',
                224  : 'command'
            },

	};
}