// JavaScript Document
function InputHinting(){
	
	var panel;
	var ie_iframe;//ie fix for hovering over form elements (select)
	var border_size = 1;
	var padding_size = 2;
	var panel_showing = false;
	var req;
	var testdata;
	var focused_element;
	var focused_option = -1;
	var el_arr = new Array();
	var color_on = '#aaddff';
	var color_off= '#ffffff';
	var hint_obj = {
			'styles':{'padding':padding_size+'px','cursor':'pointer'},
			'events':{'mouseover':function(){
							this.setStyle('background-color',color_on)
							focused_element.value = this.getProperty('text');
						},
						'mouseout':function(){
							this.setStyle('background-color',color_off)
						},
						'click':function(){
							hide();
						}
					}
		}
	
	this.run = function (obj) {
		destroy();
		focused_element = obj;
		if(!panel){place_panel()}
		list = obj.id;
		obj.setProperty('autocomplete','off');
		panel.setStyles({
			'font-family':obj.getStyle('font-family'), 
			'font-size':obj.getStyle('font-size'), 
			'left':obj.getPosition().x, 
			'top':obj.getPosition().y + obj.getSize().y,
			'width':obj.getSize().x - border_size*2,
			'display':'none'
			});
		ie_iframe.setStyles({
			'left':obj.getPosition().x, 
			'top':obj.getPosition().y + obj.getSize().y,
			'width':obj.getSize().x
			})
		req = new Request({
			url:'includes/greghowle/forms/input_hinting.php', 
			onSuccess:function(responseText, responseXML){
				onSuccess()
			}
		})
		$(window.document).addEvent('keyup',onKeyUp);
		obj.addEvent('blur',focusOut);
	}
	
	function destroy() {
		if($('input_hinting')){$('input_hinting').dispose();}
		panel_showing = false;
		panel = null;
	}
	
	function hide() {
		focused_option = -1;
		panel.setStyle('display','none');
		ie_iframe.setStyle('display','none')
		panel_showing = false;
	}
	
	function clearPanel(){
		for(var i=0; i<el_arr.length;i++){
			if($('input_hint_'+i)){$('input_hint_'+i).dispose();}
		}
		el_arr = new Array();
	}
	
	function focusOut(e){
		$(window.document).removeEvent('keyup',onKeyUp);
		focused_element.removeEvent('blur',focusOut);
		hide();
	}
	
	function onKeyUp(e){
		if(e.key == 'up' || e.key == 'down'){
			moveFocus(e.key)
		}else{
			if(focused_element.value){
				clearPanel();
				req.send("input_str="+focused_element.value+"&list="+ncr.input_helps[list]);
			}else{
				hide()
			}
		}
	}
	
	function moveFocus(dir){
		if(dir == 'down'){
			if(focused_option < el_arr.length - 1){
				elOn(focused_option,false);
				focused_option++;
				elOn(focused_option,true);
				focused_element.value = el_arr[focused_option].getProperty('text');
			}
		}else{
			if(focused_option > 0){
				elOn(focused_option,false);
				focused_option--;
				elOn(focused_option,true);
				focused_element.value = el_arr[focused_option].getProperty('text');
			}else{
				hide();
			}
		}
	}
	function elOn(el_ind, b){
		if(el_arr[el_ind]){
			var color = (b)?color_on:color_off;
			el_arr[el_ind].setStyle('background-color',color)
		}
	}
	
	function onSuccess(){
		if(req.response.text != ""){
			var c_arr = req.response.text.split(",");
			c_arr.pop();
			for(var i =0; i<c_arr.length; i++){
				var h = new Element('div',hint_obj);
				var w = (Browser.Engine.trident)?"100%":focused_element.getSize().x - border_size*2 - padding_size*2;
				h.setProperties({'text':c_arr[i],'id':'input_hint_'+i})
				h.setStyle('width',w);
				el_arr.push(h);
			}
			if(el_arr.length == 1 && (el_arr[0].textContent == focused_element.value)){
				hide()
			}else if(el_arr.length > 0){
				focused_option = -1;
				panel.adopt(el_arr)
				panel.setStyle('display','block')
				ie_iframe.setStyles({
					'display':'block', 
					'height':panel.getSize().y
					})
				panel_showing = true;
			}
		}else{
			hide()
		}
	}
	
	function place_panel(){
		panel = new Element('div',{'id':'input_hinting', 'styles':{'border':border_size+'px solid #000000', 'background-color':'#ffffff', 'position':'absolute'}})
		ie_iframe = new Element('iframe',{'styles':{'position':'absolute','border':'0','display':'none'}})
		$(document.body).adopt(ie_iframe)
		$(document.body).adopt(panel)
	}
}
var input_hinting = new InputHinting();
