function az(obj,ca){
	this.az_timeOut = -1;
	this.az_limit = 10;
	this.az_firstText = false;
	this.az_mouse = true;
	this.az_delimiter = new Array();
	this.az_startCheck = 1;

	this.az_bgColor = '#ffffff';
	this.az_textColor = '#333333';
	this.az_hColor = '#f0f0f0';
	this.az_fontName = 'arial';
	this.az_fontSize = '14px';
	this.az_hStyle = 'letter-spacing:-0.02em;font-weight:bold;text-decoration:underline';

	var az_delimWords = new Array();
	var az_cdelimword = 0;
	var az_delimchar = new Array();
	var az_display = false;
	var az_pos = 0;
	var az_total = 0;
	var az_curr = null;
	var az_rangeu = 0;
	var az_ranged = 0;
	var az_bool = new Array();
	var az_pre = 0;
	var az_toid;
	var az_tomake = false;
	var az_getpre = "";
	var az_mouse_on_list = 1;
	var az_kwcount = 0;
	var az_caretmove = false;
	this.az_keywords = new Array();
	
	this.az_keywords = ca;
	var az_self = this;

	az_curr = obj;
	
	addEvent(az_curr,"focus",az_setup);
	function az_setup(){
		addEvent(document,"keydown",az_checkkey);
		addEvent(az_curr,"blur",az_clear);
		addEvent(document,"keypress",az_keypress);
	}

	function az_clear(evt){
		if (!evt) evt = event;
		removeEvent(document,"keydown",az_checkkey);
		removeEvent(az_curr,"blur",az_clear);
		removeEvent(document,"keypress",az_keypress);
		az_removedisp();
	}
	function az_parse(n){
		if (az_self.az_delimiter.length > 0){
			var t = az_delimWords[az_cdelimword].trim().addslashes();
			var plen = az_delimWords[az_cdelimword].trim().length;
		}else{
			var t = az_curr.value.addslashes();
			var plen = az_curr.value.length;
		}
		var tobuild = '';
		var i;

		if (az_self.az_firstText){
			var re = new RegExp("^" + t, "i");
		}else{
			var re = new RegExp(t, "i");
		}
		var p = n.search(re);
				
		for (i=0;i<p;i++){
			tobuild += n.substr(i,1);
		}
		tobuild += "<font style='"+(az_self.az_hStyle)+"'>"
		for (i=p;i<plen+p;i++){
			tobuild += n.substr(i,1);
		}
		tobuild += "</font>";
			for (i=plen+p;i<n.length;i++){
			tobuild += n.substr(i,1);
		}
		return tobuild;
	}
	function az_generate(){
		if (document.getElementById('tat_table')){ az_display = false;document.body.removeChild(document.getElementById('tat_table')); } 
		if (az_kwcount == 0){
			az_display = false;
			return;
		}
		a = document.createElement('table');
		a.cellSpacing='1px';
		a.cellPadding='2px';
		a.style.width='245px';
		a.style.position='absolute';
		a.style.top = eval(curTop(az_curr) + az_curr.offsetHeight) + "px";
		a.style.left = curLeft(az_curr) + "px";
		a.style.backgroundColor=az_self.az_bgColor;
		a.id = 'tat_table';
		document.body.appendChild(a);
		var i;
		var first = true;
		var j = 1;
		if (az_self.az_mouse){
			a.onmouseout = az_table_unfocus;
			a.onmouseover = az_table_focus;
		}
		var counter = 0;
		for (i=0;i<az_self.az_keywords.length;i++){
			if (az_bool[i]){
				counter++;
				r = a.insertRow(-1);
				if (first && !az_tomake){
					r.style.backgroundColor = az_self.az_hColor;
					first = false;
					az_pos = counter;
				}else if(az_pre == i){
					r.style.backgroundColor = az_self.az_hColor;
					first = false;
					az_pos = counter;
				}else{
					r.style.backgroundColor = az_self.az_bgColor;
				}
				r.id = 'tat_tr'+(j);
				c = r.insertCell(-1);
				c.style.color = az_self.az_textColor;
				c.style.fontFamily = az_self.az_fontName;
				c.style.fontSize = az_self.az_fontSize;
				c.innerHTML = az_parse(az_self.az_keywords[i]);
				c.id = 'tat_td'+(j);
				c.setAttribute('pos',j);
				if (az_self.az_mouse){
					c.style.cursor = 'pointer';
					c.onclick=az_mouseclick;
					c.onmouseover = az_table_highlight;
				}
				j++;
			}
			if (j - 1 == az_self.az_limit && j < az_total){
				r = a.insertRow(-1);
				r.style.backgroundColor = az_self.az_bgColor;
				c = r.insertCell(-1);
				c.style.color = az_self.az_textColor;
				c.style.fontFamily = 'arial narrow';
				c.style.fontSize = az_self.az_fontSize;
				c.align='center';
				replaceHTML(c,'<img src="/images/searchScrollDown.gif" width="13" height="8" border="0">');
				if (az_self.az_mouse){
					c.style.cursor = 'pointer';
					c.onclick = az_mouse_down;
				}
				break;
			}
		}
		az_rangeu = 1;
		az_ranged = j-1;
		az_display = true;
		if (az_pos <= 0) az_pos = 1;
	}
	function az_remake(){
		document.body.removeChild(document.getElementById('tat_table'));
		a = document.createElement('table');
		a.cellSpacing='1px';
		a.cellPadding='2px';
		a.style.width='245px';
		a.style.position='absolute';
		a.style.top = eval(curTop(az_curr) + az_curr.offsetHeight) + "px";
		a.style.left = curLeft(az_curr) + "px";
		a.style.backgroundColor=az_self.az_bgColor;
		a.id = 'tat_table';
		if (az_self.az_mouse){
			a.onmouseout= az_table_unfocus;
			a.onmouseover=az_table_focus;
		}
		document.body.appendChild(a);
		var i;
		var first = true;
		var j = 1;
		if (az_rangeu > 1){
			r = a.insertRow(-1);
			r.style.backgroundColor = az_self.az_bgColor;
			c = r.insertCell(-1);
			c.style.color = az_self.az_textColor;
			c.style.fontFamily = 'arial narrow';
			c.style.fontSize = az_self.az_fontSize;
			c.align='center';
			replaceHTML(c,'<img src="/images/searchScrollUp.gif" width="13" height="8" border="0">');

			if (az_self.az_mouse){
				c.style.cursor = 'pointer';
				c.onclick = az_mouse_up;
			}
		}
		for (i=0;i<az_self.az_keywords.length;i++){
			if (az_bool[i]){
				if (j >= az_rangeu && j <= az_ranged){
					r = a.insertRow(-1);
					r.style.backgroundColor = az_self.az_bgColor;
					r.id = 'tat_tr'+(j);
					c = r.insertCell(-1);
					c.style.color = az_self.az_textColor;
					c.style.fontFamily = az_self.az_fontName;
					c.style.fontSize = az_self.az_fontSize;
					c.innerHTML = az_parse(az_self.az_keywords[i]);
					c.id = 'tat_td'+(j);
					c.setAttribute('pos',j);
					if (az_self.az_mouse){
						c.style.cursor = 'pointer';
						c.onclick=az_mouseclick;
						c.onmouseover = az_table_highlight;
					}
					j++;
				}else{
					j++;
				}
			}
			if (j > az_ranged) break;
		}
		if (j-1 < az_total){
			r = a.insertRow(-1);
			r.style.backgroundColor = az_self.az_bgColor;
			c = r.insertCell(-1);
			c.style.color = az_self.az_textColor;
			c.style.fontFamily = 'arial narrow';
			c.style.fontSize = az_self.az_fontSize;
			c.align='center';
			replaceHTML(c,'<img src="/images/searchScrollDown.gif" width="13" height="8" border="0">');
			if (az_self.az_mouse){
				c.style.cursor = 'pointer';
				c.onclick = az_mouse_down;
			}
		}
	}
	function az_goup(){
		if (!az_display) return;
		if (az_pos == 1) return;
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_bgColor;
		az_pos--;
		if (az_pos < az_rangeu) az_moveup();
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_hColor;
		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list=0;az_removedisp();},az_self.az_timeOut);
	}
	function az_godown(){
		if (!az_display) return;
		if (az_pos == az_total) return;
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_bgColor;
		az_pos++;
		if (az_pos > az_ranged) az_movedown();
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_hColor;
		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list=0;az_removedisp();},az_self.az_timeOut);
	}
	function az_movedown(){
		az_rangeu++;
		az_ranged++;
		az_remake();
	}
	function az_moveup(){
		az_rangeu--;
		az_ranged--;
		az_remake();
	}

	function az_mouse_down(){
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_bgColor;
		az_pos++;
		az_movedown();
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_hColor;
		az_curr.focus();
		az_mouse_on_list = 0;
		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list=0;az_removedisp();},az_self.az_timeOut);
	}
	function az_mouse_up(evt){
		if (!evt) evt = event;
		if (evt.stopPropagation){
			evt.stopPropagation();
		}else{
			evt.cancelBubble = true;
		}
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_bgColor;
		az_pos--;
		az_moveup();
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_hColor;
		az_curr.focus();
		az_mouse_on_list = 0;
		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list=0;az_removedisp();},az_self.az_timeOut);
	}
	function az_mouseclick(evt){
		if (!evt) evt = event;
		if (!az_display) return;
		az_mouse_on_list = 0;
		az_pos = this.getAttribute('pos');
		az_penter();
	}
	function az_table_focus(){
		az_mouse_on_list = 1;
	}
	function az_table_unfocus(){
		az_mouse_on_list = 0;
		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list = 0;az_removedisp();},az_self.az_timeOut);
	}
	function az_table_highlight(){
		az_mouse_on_list = 1;
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_bgColor;
		az_pos = this.getAttribute('pos');
		while (az_pos < az_rangeu) az_moveup();
		while (az_pos > az_ranged) az_movedown();
		document.getElementById('tat_tr'+az_pos).style.backgroundColor = az_self.az_hColor;
		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list = 0;az_removedisp();},az_self.az_timeOut);
	}

	function az_insertword(a){
		if (az_self.az_delimiter.length > 0){
			str = '';
			l=0;
			for (i=0;i<az_delimWords.length;i++){
				if (az_cdelimword == i){
					prespace = postspace = '';
					gotbreak = false;
					for (j=0;j<az_delimWords[i].length;++j){
						if (az_delimWords[i].charAt(j) != ' '){
							gotbreak = true;
							break;
						}
						prespace += ' ';
					}
					for (j=az_delimWords[i].length-1;j>=0;--j){
						if (az_delimWords[i].charAt(j) != ' ') break;
						postspace += ' ';
					}
					str += prespace;
					str += a;
					l = str.length;
					if (gotbreak) str += postspace;
				}else{
					str += az_delimWords[i];
				}
				if (i != az_delimWords.length - 1){
					str += az_delimchar[i];
				}
			}
			az_curr.value = str;
			setCaret(az_curr,l);
		}else{
			az_curr.value = a;
		}
		az_mouse_on_list = 0;
		az_removedisp();
	}
	function az_penter(){
		if (!az_display) return;
		az_display = false;
		var word = '';
		var c = 0;
		for (var i=0;i<=az_self.az_keywords.length;i++){
			if (az_bool[i]) c++;
			if (c == az_pos){
				word = az_self.az_keywords[i];
				break;
			}
		}
		az_insertword(word);
		l = getCaretStart(az_curr);
	}
	function az_removedisp(){
		if (az_mouse_on_list==0){
			az_display = 0;
			if (document.getElementById('tat_table')){ document.body.removeChild(document.getElementById('tat_table')); }
			if (az_toid) clearTimeout(az_toid);
		}
	}
	function az_keypress(e){
		if (az_caretmove) stopEvent(e);
		return !az_caretmove;
	}
	function az_checkkey(evt){
		if (!evt) evt = event;
		a = evt.keyCode;
		caret_pos_start = getCaretStart(az_curr);
		az_caretmove = 0;
		switch (a){
			case 38:
				az_goup();
				az_caretmove = 1;
				return false;
				break;
			case 40:
				az_godown();
				az_caretmove = 1;
				return false;
				break;
			case 13: case 9:
				if (az_display){
					az_caretmove = 1;
					az_penter();
					return false;
				}else{
					return true;
				}
				break;
			default:
				setTimeout(function(){az_tocomplete(a)},50);
				break;
		}
	}

	function az_tocomplete(kc){
		if (kc == 38 || kc == 40 || kc == 13) return;
		var i;
		if (az_display){ 
			var word = 0;
			var c = 0;
			for (var i=0;i<=az_self.az_keywords.length;i++){
				if (az_bool[i]) c++;
				if (c == az_pos){
					word = i;
					break;
				}
			}
			az_pre = word;
		}else{ az_pre = -1};
		
		if (az_curr.value == ''){
			az_mouse_on_list = 0;
			az_removedisp();
			return;
		}
		if (az_self.az_delimiter.length > 0){
			caret_pos_start = getCaretStart(az_curr);
			caret_pos_end = getCaretEnd(az_curr);
			
			delim_split = '';
			for (i=0;i<az_self.az_delimiter.length;i++){
				delim_split += az_self.az_delimiter[i];
			}
			delim_split = delim_split.addslashes();
			delim_split_rx = new RegExp("(["+delim_split+"])");
			c = 0;
			az_delimWords = new Array();
			az_delimWords[0] = '';
			for (i=0,j=az_curr.value.length;i<az_curr.value.length;i++,j--){
				if (az_curr.value.substr(i,j).search(delim_split_rx) == 0){
					ma = az_curr.value.substr(i,j).match(delim_split_rx);
					az_delimchar[c] = ma[1];
					c++;
					az_delimWords[c] = '';
				}else{
					az_delimWords[c] += az_curr.value.charAt(i);
				}
			}

			var l = 0;
			az_cdelimword = -1;
			for (i=0;i<az_delimWords.length;i++){
				if (caret_pos_end >= l && caret_pos_end <= l + az_delimWords[i].length){
					az_cdelimword = i;
				}
				l+=az_delimWords[i].length + 1;
			}
			var ot = az_delimWords[az_cdelimword].trim(); 
			var t = az_delimWords[az_cdelimword].addslashes().trim();
		}else{
			var ot = az_curr.value;
			var t = az_curr.value.addslashes();
		}
		if (ot.length == 0){
			az_mouse_on_list = 0;
			az_removedisp();
		}
		if (ot.length < az_self.az_startCheck) return this;
		if (az_self.az_firstText){
			var re = new RegExp("^" + t, "i");
		}else{
			var re = new RegExp(t, "i");
		}

		az_total = 0;
		az_tomake = false;
		az_kwcount = 0;
		for (i=0;i<az_self.az_keywords.length;i++){
			az_bool[i] = false;
			if (re.test(az_self.az_keywords[i])){
				az_total++;
				az_bool[i] = true;
				az_kwcount++;
				if (az_pre == i) az_tomake = true;
			}
		}

		if (az_toid) clearTimeout(az_toid);
		if (az_self.az_timeOut > 0) az_toid = setTimeout(function(){az_mouse_on_list = 0;az_removedisp();},az_self.az_timeOut);
		az_generate();
	}
	return this;
}

function addEvent(obj,event_name,func_name){
	if (obj.attachEvent){
		obj.attachEvent("on"+event_name, func_name);
	}else if(obj.addEventListener){
		obj.addEventListener(event_name,func_name,true);
	}else{
		obj["on"+event_name] = func_name;
	}
}

function removeEvent(obj,event_name,func_name){
	if (obj.detachEvent){
		obj.detachEvent("on"+event_name,func_name);
	}else if(obj.removeEventListener){
		obj.removeEventListener(event_name,func_name,true);
	}else{
		obj["on"+event_name] = null;
	}
}

function stopEvent(evt){
	evt || window.event;
	if (evt.stopPropagation){
		evt.stopPropagation();
		evt.preventDefault();
	}else if(typeof evt.cancelBubble != "undefined"){
		evt.cancelBubble = true;
		evt.returnValue = false;
	}
	return false;
}

function getElement(evt){
	if (window.event){
		return window.event.srcElement;
	}else{
		return evt.currentTarget;
	}
}

function getTargetElement(evt){
	if (window.event){
		return window.event.srcElement;
	}else{
		return evt.target;
	}
}

function stopSelect(obj){
	if (typeof obj.onselectstart != 'undefined'){
		addEvent(obj,"selectstart",function(){ return false;});
	}
}

function getCaretEnd(obj){
	if(typeof obj.selectionEnd != "undefined"){
		return obj.selectionEnd;
	}else if(document.selection&&document.selection.createRange){
		var M=document.selection.createRange();
		try{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}catch(e){
			var Lp=obj.createTextRange();
		}
		Lp.setEndPoint("EndToEnd",M);
		var rb=Lp.text.length;
		if(rb>obj.value.length){
			return -1;
		}
		return rb;
	}
}

function getCaretStart(obj){
	if(typeof obj.selectionStart != "undefined"){
		return obj.selectionStart;
	}else if(document.selection&&document.selection.createRange){
		var M=document.selection.createRange();
		try{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}catch(e){
			var Lp=obj.createTextRange();
		}
		Lp.setEndPoint("EndToStart",M);
		var rb=Lp.text.length;
		if(rb>obj.value.length){
			return -1;
		}
		return rb;
	}
}

function setCaret(obj,l){
	obj.focus();
	if (obj.setSelectionRange){
		obj.setSelectionRange(l,l);
	}else if(obj.createTextRange){
		m = obj.createTextRange();		
		m.moveStart('character',l);
		m.collapse();
		m.select();
	}
}

function setSelection(obj,s,e){
	obj.focus();
	if (obj.setSelectionRange){
		obj.setSelectionRange(s,e);
	}else if(obj.createTextRange){
		m = obj.createTextRange();		
		m.moveStart('character',s);
		m.moveEnd('character',e);
		m.select();
	}
}

String.prototype.addslashes = function(){
	return this.replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g, '\\$1');
}
String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

function curTop(obj){
	toreturn = 0;
	while(obj){
		toreturn += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return toreturn;
}
function curLeft(obj){
	toreturn = 0;
	while(obj){
		toreturn += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return toreturn;
}

function isNumber(a){
    return typeof a == 'number' && isFinite(a);
}

function replaceHTML(obj,img){
	while(el = obj.childNodes[0]){
		obj.removeChild(el);
	};
	obj.appendChild(document.createElement(img));
}