
//////////////////////////////////////////////////////////////////////////////////
// 1F (One File) JavaScript Suggest Script
// Version 1.0 
// Create easy javascript suggest dropdown 
// Syntax: auto_suggest_create(<Textbox ID name>, <Array of suggesting elements>); 
// Author: Viktor Abovyan
// Website: http://1f.freehostia.com/
//////////////////////////////////////////////////////////////////////////////////

// Max. Number of items in dropdown
item_maxnum = 14;

// Global variables
cur_selected = 0;
longstr = new Object();

function auto_suggest_create(obj_str, arr ){
	// Geting Main Object
	main_obj = document.getElementById(obj_str);
	
	// Check if Suggest div Exists
	if (!document.getElementById(obj_str + "_suggest")){
		
		// Create suggest div
		main_div = document.createElement("div");
		main_div.id = obj_str+"_suggest"; 
	
		
		
		// If can get offset width set it, 
		if (main_obj.offsetWidth != "") {
			main_div.style.width = main_obj.offsetWidth +"px";	
		} else {
			main_div.style.width = main_obj.style.width +"px";
		}
		
		// Styling box
		main_div.style.border = "2px Black";
		main_div.style.position = "absolute";
		main_div.style.background = "#F8F8F8";
		main_div.style.font = "14px";
		main_div.style.padding = "2 2 2 2";
		main_div.style.overflow ="hidden";
		
		// Setting visibility
		main_div.style.visibility = "hidden";
		
		// Inserting 
		main_obj.parentNode.insertBefore(main_div, main_obj.nextSibling)
		main_obj.parentNode.insertBefore(document.createElement("br"), main_obj.nextSibling)
		
		// Attaching events
		attachEv(main_obj, "keyup", function (event) {auto_suggest_keyup(obj_str,event)  });
		attachEv(main_obj, "blur", function (event) {auto_suggest_hide(obj_str,event)  });
		attachEv(main_obj, "focus", function (event) {auto_suggest_keyup(obj_str,event)  });
		attachEv(main_obj, "keypress", function (event) {return auto_suggest_enter(obj_str,event) });
	}	
	
	arr.sort();
	
	// Creating long string
	longstr[obj_str] = "#";
	for (i = 0; i < arr.length; i++){
		tmp_str = arr[i].replace( /#/g , "");
		longstr[obj_str] += tmp_str + "#";  
	}
}

// Attach event to object IE and Firefox
function attachEv(obj,event,handler){ 
	if(obj.addEventListener) { 
		obj.addEventListener(event,handler,false); 
	} else if(obj.attachEvent) { 
		obj.attachEvent('on'+event,handler,false); 
	} 
} 

// Event when key is up
function auto_suggest_keyup(obj_str,in_event){
	// Geting Main Object
	main_obj = document.getElementById(obj_str);
	main_div = document.getElementById(obj_str+"_suggest");
	
	typed_str = main_obj.value.toLowerCase();
	
	if (typed_str !="")	{
		// Case of up and down
		// Firefox and IE ... Must live together
		if (in_event.which) {
			key_code = in_event.which; 
		} else {
			if (in_event.keyCode) {
				key_code = event.keyCode;
			}else {
				key_code =0;
			}
		}
		
		// Down is pressed
		if (key_code == 40){
			
			// If next exist add
			if (document.getElementById(obj_str+"_dv"+(cur_selected+1))){
				cur_selected++;
			} else {
				return;
			}
			// Deselect old 
			if (cur_selected > 1) {
				uder_div = document.getElementById(obj_str+"_dv"+(cur_selected-1));
				uder_div.style.border = "1px white solid";
				uder_div.style.background = "white";
			}

			// Mark current selected
			uder_div = document.getElementById(obj_str+"_dv"+cur_selected)
			if (uder_div){
				uder_div.style.border = "1px black solid";
				uder_div.style.background = "#F4F5FE";
				main_obj.value = uder_div.firstChild.innerHTML;
			}
			return;
		};
		
		// Up is pressed
		if (key_code == 38){
			// If next exist add
			if (document.getElementById(obj_str+"_dv"+(cur_selected-1))){
				cur_selected--;
			}
			
			// Deselect old 
			uder_div = document.getElementById(obj_str+"_dv"+(cur_selected+1));
			if (uder_div) {
				uder_div.style.border = "1px white solid";
				uder_div.style.background = "white";
			}

			// Mark current selected
			uder_div = document.getElementById(obj_str+"_dv"+cur_selected)
			if (uder_div){
				uder_div.style.border = "1px black solid";
				uder_div.style.background = "#F4F5FE";
				main_obj.value = uder_div.firstChild.innerHTML;
			}
			return;
		};
		
		lcase_longstr = longstr[obj_str].toLowerCase(); 		
		last_index = lcase_longstr.indexOf("#"+typed_str) 
		out_html = "";
		item_count = 0;
		while (last_index != -1 && item_count < item_maxnum ){
			finish_index = lcase_longstr.indexOf("#", last_index+1 );
			cur_str = longstr[obj_str].substr(last_index+1, finish_index-last_index-1);
			last_index = lcase_longstr.indexOf("#"+typed_str, finish_index);
			item_count++;
			
			// Creating out HTML
			out_html += "<div id='"+obj_str+"_dv"+item_count+"' style='width:100%; padding:2 2 2 2; border: 2px #333333;'><a href=\"JavaScript:auto_suggest_insert('"+obj_str+"', '"+cur_str+"')\" style='color:black; text-decoration:none; align:left'>"+cur_str+"</a><br></div>"; 
		}
		main_div.innerHTML = out_html;
		if (item_count == 0) main_div.innerHTML ="Not Found...";
		
		main_div.style.visibility ="";
		cur_selected = 0 ;
	} else {
		main_div.style.visibility = "hidden"
	}
}

// Insert when item is clicked
function auto_suggest_insert(obj_str,in_str){
	// Geting Main Object
	main_obj = document.getElementById(obj_str);
	main_obj.value = in_str;
	auto_suggest_hide(obj_str);
}

// Triger to make invisible
function auto_suggest_hide(obj_str){
	// Div need to be romove later
	// After blur evet dosnt go to link.
	setTimeout('auto_suggest_real_hide("'+obj_str+'");',200); 
}

// Realy Making Invisible
function auto_suggest_real_hide(obj_str){
	main_div = document.getElementById(obj_str+"_suggest");
	main_div.style.visibility = "hidden";
}

// Handeling Enter key, Keypress event
function auto_suggest_enter(obj_str, e)
{
	var key = (window.event)? event.keyCode : e.which;
	key = key ;
	if (key == 13){
		main_obj = document.getElementById(obj_str);
		main_obj.blur();
		return false;
	}
} 