//temporary - for version compatibility

function setSymbol(str) {
	oChart.setSymbol(str);
}

function setCurrency(str) {
	oChart.setCurrency(str);
}

//-------------------------------------

function show_news_by_tiker (tiker) {
	var c = document.getElementById("news");
	if(!c) return;
	var ax = new ajaxQ();
	ax.callback = function (str) {
		c.innerHTML = str;
	}
	ax.send("GET", "/web-backend?module=news&tiker=" + urlescape(tiker));
}

function show_tiker_description (tiker) {
	var c = document.getElementById("tiker_description");
	if(!c) return;
	var ax = new ajaxQ();
	ax.callback = function (str) {
		c.innerHTML = str;
	}
	ax.send("GET", "/web-backend?module=td&tiker=" + urlescape(tiker));
}

function show_same_tikers_list (obj) {
	var c = $("#same_tikers_list");
	if(!c.length) return;
	var ax = new ajaxQ();
	ax.callback = function (str) {
		eval(str);
		if(!same_tikers_list || !same_tikers_list.length) {
			c.hide();
			return;
		}
		c.find("span").each(function () {
					if(obj.compare.indexOf($(this).find(":first-child").attr("value")) == -1) {
						$(this).remove();
					}
				});
		for(var i=0; i<same_tikers_list.length; i++) {
			var o = same_tikers_list[i];
			o.full_name = o.full_name.replace("пр.", "(привилегированные акции)");
			if(c.find(":contains(\"" + o.name +"\")").length) continue;
			var s = $("<span class=\"list\"/>").appendTo(c);
			$("<input type=\"checkbox\" class=\"box\" value=\"" + o.name + "\"/>")
				.appendTo(s)
				.each(function () {
						if(obj.symbol == o.name || (obj.compare.indexOf(o.name) != -1)) {
							$(this).attr("checked", "true")
							.attr("title", "Убрать из сравнения элемент: " + o.full_name);
							return;
						}
						$(this).attr("title", "Добавить к сравнению элемент: " + o.full_name);
						})
				.click(function () {
						if(!$(this).attr("checked")) {
							obj.removeIndicator($(this).attr("value"));
						}
						else obj.addCompare($(this).attr("value"));
						});
			$("<a href=\"javascript:void(0)\" title=\"Выбрать элемент: " + o.full_name + "\"/>").text(o.name)
				.click(function () {
						obj.setSymbol($(this).prev().attr("value"));
						})
				.appendTo(s);
		}
	}
	ax.send("GET", "/web-backend?module=stl&tiker=" + urlescape(obj.symbol));
}

function show_tikers_data (obj) {
	var c = $("#tikersdata");
	if(!c.length) return;
	var tikers = {size: 1, list: []};
	if(obj.compare) {
		var list = obj.compare.split('+');
		tikers.size += list.length;
		for(var i=0; i<list.length; i++) {
			if(list[i] != "null") show_tiker_data(list[i], tikers, c);
			else tikers.size--;
		}
	}
	show_tiker_data(obj.symbol, tikers, c);
}

function show_tiker_data (s, tikers, c) {
	var re = /[-0-9.]+/
	var ax = new ajaxQ();
	ax.callback = function (str) {
		eval(str);
		tikers.list.push(tiker_data);
		if(tikers.list.length == tikers.size) {
			tikers.list.sort(function (a, b) {
					var x = parseFloat(re.exec(a[10]));
					var y = parseFloat(re.exec(b[10]));
					return y - x;
					});
			var length = 11;
			var tbody = c.find("tbody");
			tbody.empty();
			for(var j=0; j<tikers.size; j++) {
				var tr = $("<tr/>").appendTo(tbody);
				for(var i=0; i<length; i++) {
					var val = tikers.list[j][i];
					if(val && !re.test(val)) {
						val = val.toUpperCase();
					}
                                        if(i == 1 || i == 9) {
						val = big_double_format(val);
					}
					if(i>4 && i <9) {
						val = val.toFixed(2);
					}
					var td = $("<td/>").appendTo(tr);
					if(i == 10) {
						if(val < 0) td.css("color", "#800000");
						else {
							td.css("color", "#008000");
							val = "+" + val;
						}
						val += "%";
					}
					td.text(val);
				}
			}
		}
	}
	ax.send("GET", "/web-backend?module=ctd&tiker=" + urlescape(s));
}

function show_sectors_rate_list () {
	var ax = new ajaxQ();
	ax.callback = function (str) {
		$("#sectors_rate_list").html(str);
	}
	ax.send("GET", "/web-backend?module=sr");
}

function show_tikers_by_sector(id) {
	$("#sec_" + id).each(function () {($(this).css("display") == "none") ? $(this).show() : $(this).hide();});
}

function close_tikers_by_sector(id) {
	$("#sec_" + id).each(function () {($(this).css("display") == "none") ? $(this).show() : $(this).hide();});
}

function show_leaders_rate_list () {
	var ax = new ajaxQ();
	ax.callback = function (str) {
		$("#leaders_rate_list").html(str);
	}
	ax.send("GET", "/web-backend?module=lr");
}

function show_currencies_list () {
	var ax = new ajaxQ();
	ax.callback = function (str) {
		$("#currencies_list").html(str);
	}
	ax.send("GET", "/web-backend?module=curs");
}

function show_tools(e) {
	if(e.className.indexOf("selected") != -1) return;
	var pn = 0;
	var toolsmenu = e.parentNode;
	var tls = toolsmenu.getElementsByTagName("div");
	var sz = tls.length;
	for(var i=0; i<sz; i++) {
		var c = tls[i];
		if(c == e) {
			c.className = "selected";
			pn = i;
			if(c.getAttribute("value") == "draw") {
				oChart.setDrawingState("true");
			}
			else {
				oChart.setDrawingState("false");
			}
		}
		else c.className = "";
	}

	var toolspanel = document.getElementById("toolspanel");
	var tpls = toolspanel.getElementsByTagName("div");
	sz = tpls.length;
	var cpn = 0;
	for(var i=0; i<sz; i++) {
		var c = tpls[i];
		if(c.parentNode != toolspanel) continue;
		if(cpn == pn) {
			c.className = "panel left";
		}
		else {
			c.className = "invisible";
		}
		cpn++;
	}
}

function getValue(str, name) {
	var search = name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (str.length > 0) {
		offset = str.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = str.indexOf(";", offset);
			if (end == -1) {
				end = str.length;
			}
			setStr = str.substring(offset, end);
		}
	}
	return(setStr);
}

function chart() {

	this.wnd;
	
	this.width = 640;
	this.height = 320;

	this.id;
	this.item = "chartt";
	this.ditem = "chart";

	this.symbol = "LKOH";
	this.compare = "null";
	this.indicator = "null";
	this.range = "5d";
	this.charttype = "line";
	this.crosshair = "on";
	this.logscale = "on";
	this.currency = "0";
	this.drawing_state = "false";
	this.drawing_primitive = "line";
	this.drawing_color = 0;
	this.drawing_thickness = 2;
	this.drawings = "";
	this.highlighted = -1;

	this.count = 0;
	this.background = 0xFFFFFF;

	this.get_values_from_cookie();
}

chart.prototype.create = function () {
	var c = document.getElementById(this.ditem);
	if(!c) {
		alert("Couldn't find chart block");
		return;
	}
	var __count = 0;
	var ob = this;
	var t = setInterval(function() {
			if(!c.clientWidth) {
				__count++;
				if(__count == 20) {
					alert("Chart load error!");
					clearInterval(t);
				}
				return;
			}
			clearInterval(t);
			ob.width = c.clientWidth;
			ob.height = ob.width / 2;
			ob.create_chart();
			}, 300);
}

chart.prototype.create_chart = function () {
	var c = document.getElementById(this.ditem);
	if(!c) {
		alert("Couldn't find chart block");
		return;
	}
	var code = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+this.width.toString() + 'px" height="'+this.height.toString() + 'px" id="'+this.item+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="movie" value="/charts-client-full.1.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="state='+this.toVars()+'&bg_color='+this.background+'"/><param name="wmode" value="opaque"/><embed src="/charts-client-full.1.swf" quality="high" bgcolor="#ffffff" width="'+this.width.toString()+'px" height="'+this.height.toString()+'px" name="'+this.item+'" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" FlashVars="state='+this.toVars()+'&bg_color='+this.background+'" wmode="opaque"/></object>';

	c.innerHTML = code;
//	$(c).html(code);
	this.init_tools();
	var ob = this;
	setInterval(function() {
				if(ob.range == "1d" || ob.range == "5d") {
					ob.send("refresh&str=none");
				}
			}, 60000);

}

chart.prototype.get_current_state = function () {
	return {symbol: this.symbol, compare: this.compare, indicator: this.indicator, range: this.range, charttype: this.charttype, crosshair: this.crosshair, logscale: this.logscale, currency: this.currency};
}

chart.prototype.get_values_from_cookie = function () {
	var tmp = "";
	if(tmp = getValue(document.cookie, "symbol")) this.symbol = tmp;
	if(tmp = getValue(document.cookie, "compare")) this.compare = tmp;
	if(tmp = getValue(document.cookie, "indicator")) this.indicator = tmp;
	if(tmp = getValue(document.cookie, "range")) this.range = tmp;
	if(tmp = getValue(document.cookie, "charttype")) this.charttype = tmp;
	if(tmp = getValue(document.cookie, "crosshair")) this.crosshair = tmp;
	if(tmp = getValue(document.cookie, "logscale")) this.logscale = tmp;
	if(tmp = getValue(document.cookie, "currency")) this.currency = tmp;
	this.drawings = getValue(document.cookie, "drawings");
}

chart.prototype.toVars = function () {
	str = "";
	if(this.symbol) str += "symbol#" + this.symbol + ";";
	if(this.compare) str += "compare#" + this.compare + ";";
	if(this.indicator) str += "indicator#" + this.indicator + ";";
	if(this.range) str += "range#" + this.range + ";";
	if(this.charttype) str += "charttype#" + this.charttype + ";";
	if(this.crosshair) str += "crosshair#" + this.crosshair + ";";
	if(this.logscale) str += "logscale#" + this.logscale + ";";
	if(this.currency) str += "currency#" + this.currency + ";";
	if(this.drawings) str += "drawings#" + this.drawings + ";";
	return str;
}

chart.prototype.setType = function(str) {
	this.charttype = str;
	setCookie('charttype', str);
	this.send("setChartType&str=" + str);
}

chart.prototype.setCross = function(str) {
	var toFalsh;
	if(str == "true" || str == "false") {
		toFlash = "setCrosshair&bool=" + str;
		setCookie('crosshair', str=="true" ? "on" : "off");
	}
	else {
		toFlash = "setCrosshair2&str=" + str;
		setCookie('crosshair', str);
	}
	this.crosshair = str;
	this.send(toFlash);
}

chart.prototype.setLogscale = function(str) {
	this.logscale = str;
	this.send("setLog&bool=" + str);
	setCookie('logscale', str=="true" ? "on" : "off");
}

chart.prototype.setDrawingState = function(str) {
	this.drawing_state = str;
	var c = document.getElementById("drawingElements");
	if(c && this.drawing_state == "true") {
		c.className = "block";
		this.showDrawingElements();
	}
	else if(c && this.drawing_state == "false") {
		c.className = "invisible";
	}
	this.send("setDrawingState&bool=" + str);
}

chart.prototype.setDrawingPrimitive = function(str) {
	this.drawing_primitive = str;
	this.send("setDrawingPrimitive&str=" + str);
}

chart.prototype.setDrawingColor = function(str) {
	this.drawing_color = str;
	this.send("setDrawingColor&num=" + str);
}

chart.prototype.setDrawingThickness = function(str) {
	this.drawing_thickness = str;
	this.send("setDrawingThickness&num=" + str);
}

chart.prototype.highlightById = function(id) {
	if(this.highlighted == id) return;
	this.highlighted = id;
	this.send("highlightById&num=" + id);
}

chart.prototype.removeDrawingById = function(id) {
	this.send("removeDrawingElement&num=" + id);
}

chart.prototype.showDrawingElements = function() {
	if(this.drawing_state != "true") return;
	var ob = this;
	$("#drawingElements").each(function() {
			$(this).children(":not(span)").remove();
			if(!ob.drawings) return;
			var list = ob.drawings.split('|');
			if(!list.length) return;
			for(var i=0; i<list.length; i++) {
				if(list[i] == "") continue;
				var __list = list[i].split('_');
				if(!__list.length) continue;
				$("<a href=\"javascript: void(0);\" eid=\""+__list[__list.length-1]+"\" title=\"Удалить элемент с графика\"/>")
				.text(__list[0] + " (id " + __list[__list.length-1] + ")")
				.bind("mouseenter", function() {
					ob.highlightById($(this).attr("eid"));
					})
				.bind("mouseleave", function() {
					ob.highlightById(-1);
					})
				.click(function () {
					ob.removeDrawingById($(this).attr("eid"));
					})
				.appendTo($(this))
				.wrap("<div class=\"list\"></div>");
			}
	});
}

chart.prototype.init_tools = function() {
	var list = document.getElementsByName("chart_type");
	var sz = list.length;
	if(sz) {
		for(var i=0; i<sz; i++) {
			if(list[i].value == this.charttype) {
				list[i].checked = true;
				break;
			}
		}
	}

	list = document.getElementsByName("chart_cross");
	sz = list.length;
	if(sz) {
		for(var i=0; i<sz; i++) {
			if(list[i].value == this.crosshair) {
				list[i].checked = true;
				break;
			}
		}
	}

	list = document.getElementsByName("chart_scale");
	sz = list.length;
	if(sz) {
		for(var i=0; i<sz; i++) {
			if(list[i].value == this.logscale) {
				list[i].checked = true;
				break;
			}
		}
	}

	list = document.getElementsByName("techIndex");
	sz = list.length;
	if(sz) {
		for(var i=0; i<sz; i++) {
			if(this.indicator.indexOf(list[i].value) != -1) {
				list[i].checked = true;
			}
			else list[i].checked = false;
		}
	}
	list = document.getElementsByName("chart_draw_primitive");
	sz = list.length;
	if(sz) {
		for(var i=0; i<sz; i++) {
			if(this.drawing_primitive == list[i].value) {
				list[i].checked = true;
			}
			else list[i].checked = false;
		}
	}
	var e = document.getElementsByName("chart_draw_color")[0];
	if(e) {
		e.value = "#" + this.drawing_color.toString(16);
	}
	e = document.getElementsByName("chart_draw_thickness")[0];
	if(e) {
		e.value = this.drawing_thickness;
	}
	this.showDrawingElements();
}

chart.prototype.setSymbol = function(str) {
	if(this.compare.indexOf(str) != -1) {
		this.removeIndicator(str);
	}
	this.send("setSymbol&str=" + str);
}

chart.prototype.setCurrency = function (str) {
	this.send("setCurrency&num=" + str);
}

chart.prototype.addCompare = function(str) {
	if(str == this.symbol) return;
	this.send("addIndicator&str=compare(" + str + ")");
}

chart.prototype.addIndicator = function (str) {
	this.send("addIndicator&str=" + str);
}

chart.prototype.removeIndicator = function (str) {
	var offset = this.indicator.indexOf(str);
	if(offset == -1) {
		offset = this.compare.indexOf(str);
		if(offset == -1) {
			this.send("removeIndicator&str=" + str);
		}
		else {
			this.send("removeIndicator&str=compare(" + str + ")");
		}
		return;
	}
	var end = this.indicator.indexOf("+", offset);
	if(end == -1) end = this.indicator.length;
	str = this.indicator.substring(offset, end);
	this.send("removeIndicator&str=" + str);
}

chart.prototype.techIndex = function (e, high) {
	var box = e.firstChild;
	var index = box.value;
	if(this.indicator.indexOf(index) != -1) {
		this.removeIndicator(index);
		return;
	}
	if(index == "volume") {
		this.addIndicator("volume");
		return;
	}
	var width = document.body.clientWidth/2 - 50;
	var height = document.body.clientHeight/2 - 25;
	this.wnd = window.open(index + '.html', "wnd", "width=300,height=" + high + ",left="+width+",top="+height+"status=no,toolbar=no,scrollbar=no,menubar=no,dependent=yes,resizeable=no");
}

chart.prototype.send = function(str) {
	try {
		if(navigator.appName.indexOf("Microsoft") != -1) {
//			window[this.item].asFunc(str);
			var f = document.getElementById(this.item);
			f.asFunc(str);
		}
		else {
			document[this.item].asFunc(str);
		}
	}
	catch(err) {
//		alert("send error: " + err);
	}
}

chart.prototype.clear_cookie = function () {
	setCookie("symbol", "");
	setCookie("compare", "");
	setCookie("indicator", "");
	setCookie("range", "");
	setCookie("charttype", "");
	setCookie("crosshair", "");
	setCookie("logscale", "");
	setCookie("currency", "");
	setCookie("drawings", "");
}

chart.prototype.add_chart = function () {
	this.clear_cookie();
	window.location.href = "/charts.html";
}

chart.prototype.remove_charts = function () {
	var list = document.getElementsByName("remove_charts");
	var fsz = list.length;
	var sz = 0;
	if(!fsz) return;
	for(var i=0; i<fsz; i++) {
		if(list[i].checked) sz++;
	}
	if(!sz) return;
	if(!confirm("Remove " + sz + " charts")) {
		for(var i=0; i<fsz; i++) {
			list[i].checked = false;
		}
		return;
	}
	var url = "/charts.html?remove=1";
	for(var i=0; i<fsz; i++) {
		if(!list[i].checked) continue;
		url += "&id=" + urlescape(list[i].value);
	}
	var ob = this;
	var ax = new ajaxQ();
	ax.callback = function () {
		ob.clear_cookie();
		window.location.href = "/charts.html";
	}
	ax.send("GET", url);
}

chart.prototype.save = function (f) {
	if(!f) return;
	if(!f.elements["name"].value) {
		alert("Chart name field empty");
		return;
	}
	var url = "/charts.html?save=1";
	var data = "name=" + urlescape(f.elements["name"].value) + "&title=" + urlescape(f.elements["title"].value) + "&id=" + urlescape(f.elements["id"].value) + "&drawings=" + urlescape(this.drawings);
	var ax = new ajaxQ();
	ax.callback = function (str) {
		eval(str);
		if(chart_id) window.location.href = "/charts.html?id=" + chart_id;
	}
	ax.send("POST", url, data);
}

function rsi(e) {
	oChart.addIndicator('rsi(' + e.period.value + ')');
	oChart.wnd.close();
}
function sma(e) {
	oChart.addIndicator('sma(' + e.period.value + ')');
	oChart.wnd.close();
}

function ema(e) {
	oChart.addIndicator('ema(' + e.period.value + ')');
	oChart.wnd.close();
}

function bollinger(e) {
	oChart.addIndicator('bollinger(' + e.period1.value + ',' + e.period2.value + ')');
	oChart.wnd.close();
}

function mfi(e) {
	oChart.addIndicator('mfi(' + e.period.value + ')');
	oChart.wnd.close();
}

function macd(e) {
	oChart.addIndicator('macd(' + e.period1.value + ',' + e.period2.value + ',' + e.period3.value + ')');
	oChart.wnd.close();
}

function roc(e) {
	oChart.addIndicator('roc(' + e.period.value + ')');
	oChart.wnd.close();
}

function onLegendClick(s) {
	oChart.removeIndicator(s);
}

function onFlashAction(__in) {

	var s = __in;

	setCookie('symbol', getValue(s, "symbol"));
	setCookie('compare', getValue(s, "compare"));
	setCookie('indicator', getValue(s, "indicator"));
	setCookie('range', getValue(s, "range"));
	setCookie('charttype', getValue(s, "charttype"));
	setCookie('crosshair', getValue(s, "crosshair"));
	setCookie('logscale', getValue(s, "logscale"));
	setCookie('currency', getValue(s, "currency"));
	setCookie('drawings', getValue(s, "drawings"));

	if(oChart) {

		var o = oChart.get_current_state();
		oChart.get_values_from_cookie();
		oChart.init_tools();

		if((o.symbol != oChart.symbol) || (!oChart.count)) {
			show_news_by_tiker(oChart.symbol);
			show_tiker_description(oChart.symbol);
		}
		if((o.symbol != oChart.symbol) || (!oChart.count) || (o.compare != oChart.compare)) {
			show_same_tikers_list(oChart);
		}
		if((o.symbol != oChart.symbol) || (!oChart.count) || (o.compare != oChart.compare) || (o.range != oChart.range) || (o.currency != oChart.currency)) {
			show_tikers_data(oChart);
		}
		if((!oChart.count) || (o.range != oChart.range)) {
			show_sectors_rate_list();
			show_leaders_rate_list();
		}
		if((!oChart.count) || (o.currency != oChart.currency)) {
			show_currencies_list();
		}
		oChart.count++;
	}
}

function onTextInput(s) {
//	var re = /[a-zA-Z0-9 :)(а-яА-Я.,-+=]+/;
	var t = setTimeout(function () {
		var re = /[^a-zA-Z0-9а-яА-Я\s\!\?\.]+/;
		var text = (window.prompt("Enter text")).replace(re, '');
		if(oChart && text && text != "") {
			oChart.send("setTextValue&num="+s+"&str="+text);
		}
		},500);
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( els[i].className == searchClass ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function menuEngine(id, data, callback)
{
	this.id = id;
	this.ypos = -1;
	this.nelem = 0;
	this.data = data;
	this.callback = callback;
	this.visible = false;
}

menuEngine.prototype.getInput = function()
{
	var menu = document.getElementById(this.id);
	var els = menu.getElementsByTagName('input');

	if (els.length != 1)
		return;
	return els[0];
}

menuEngine.prototype.getPopup = function()
{
	var menu = document.getElementById(this.id);
	var ix = getElementsByClass(this.visible ? 'popup visible' : 'popup invisible', menu);

	if (ix.length != 1)
		return;
	return ix[0];
}

menuEngine.prototype.getDiv = function(i)
{
	var popup = this.getPopup();

	var len = popup.childNodes.length;
	if (i > len)
		return;
	return popup.childNodes[i];
}

menuEngine.prototype.addItem = function(str) 
{
	var popup = this.getPopup();
	if (!this.visible)
	{
		popup.setAttribute('class', 'popup visible');
		popup.setAttribute('className', 'popup visible');
		this.visible = true;
	}
	var ndiv = document.createElement('div');
	var pins = popup.appendChild(ndiv);

	var node = str.split(',');

	var tiker_div = document.createElement('div');
	tiker_div.className = 'tiker';
	var text = document.createTextNode(node[0]);
	tiker_div.appendChild(text);
	pins.appendChild(tiker_div);

	var name_div = document.createElement('div');
	name_div.className = 'name';
	text = document.createTextNode(node[1]);
	name_div.appendChild(text);
	pins.appendChild(name_div);	

//	var text = document.createTextNode(str);

	
	pins.setAttribute("onMouseOver", "javascript:" + this.id + ".mouseOver(this)");
	pins.setAttribute("onClick", "javascript:" + this.id + ".call()");

	if (isIE())
	{
		var obj = this;
		pins.onmouseover = function () { obj.mouseOver(pins); } 
		pins.onclick = function () { obj.call(); }
	}
	
//	pins.appendChild(text);
}

menuEngine.prototype.removeItems = function()
{
	var popup = this.getPopup();
	var len = popup.childNodes.length;
	for (var i = 0; i < len; i++)
		popup.removeChild(popup.firstChild);	
	if (this.visible)
	{
		popup.setAttribute('class', 'popup invisible');
		popup.setAttribute('className', 'popup invisible');
		this.visible = false;
	}	
}

menuEngine.prototype.handleChange = function(eve)
{
	var input = this.getInput();

	code = isIE() ? eve.keyCode : eve.which;

	if (code == 13)
		return;

	if (code == 40)
	{
		this.handleDown(input);
		return;	
	}
	if (code == 38)
	{
		this.handleUp(input);
		return;
	}
	
//	alert(els[0].value + ' ' + els[0].length);

	var cur_len = input.value.length;

	this.removeItems();

	if (cur_len == 0)
	{
		this.ypos = -1;
		return;
	}

	for (var i = 0, j = 0; i < data.length && j < 10; i++)
	{
		if (data[i].toUpperCase().indexOf(input.value.toUpperCase()) != -1)
		{
			this.addItem(this.data[i]);
			j++;
		}
	}

	if (this.ypos == -1)
		return;
	if (this.ypos > j)
		this.ypos = j;

	var div = this.getDiv(this.ypos);
	if (div)
	{
		div.setAttribute('class', 'selected');
		div.setAttribute('className', 'selected');
	}
}

menuEngine.prototype.handleDown = function(els)
{
	var popup = this.getPopup();

       var len = popup.childNodes.length;
       var children = popup.childNodes;	
	
       if (this.ypos == len-1)
		return;

       if (this.ypos != -1)			
       {
		children[this.ypos].removeAttribute('class');
		children[this.ypos].removeAttribute('className');
       }

	this.ypos++;

       children[this.ypos].setAttribute('class', 'selected');	
       children[this.ypos].setAttribute('className', 'selected');	
       var val = children[this.ypos].firstChild.firstChild.nodeValue;		
       els.value = val;//val.substr(0, val.indexOf(','));
}

menuEngine.prototype.handleUp = function(els)
{
	var popup = this.getPopup();

       var len = popup.childNodes.length;
       var children = popup.childNodes;	

       var len = children.length;
	
//	alert(this.ypos);

       if (this.ypos == 0)
		return;

       children[this.ypos].removeAttribute('class');
       children[this.ypos].removeAttribute('className');
       this.ypos--;

       children[this.ypos].setAttribute('class', 'selected');	
       children[this.ypos].setAttribute('className', 'selected');	
       var val = children[this.ypos].firstChild.firstChild.nodeValue;		
       els.value = val;//val.substr(0, val.indexOf(','));
}

menuEngine.prototype.mouseOver = function(elem)
{
	var len = elem.parentNode.childNodes.length;	
	var children = elem.parentNode.childNodes;

	for (var i = 0; i < len; i++)
		if (children[i] == elem)
		{
			if (this.ypos != -1)
			{
				children[this.ypos].removeAttribute('class');
				children[this.ypos].removeAttribute('className');
			}
			this.ypos = i;
			elem.setAttribute('class', 'selected'); 
			elem.setAttribute('className', 'selected'); 
       			var val = elem.firstChild.firstChild.nodeValue;		
       			this.getInput().value = val;//val.substr(0, val.indexOf(','));
		}
//	elem.setAttribute()
}

menuEngine.prototype.call = function()
{
	var input = this.getInput();
       for (var i = 0; i < data.length; i++)
       {       
              if (data[i].substr(0, data[i].indexOf(',')) == input.value.toUpperCase())
              {
			this.callback(input.value.toUpperCase());
              }
       }
	this.removeItems();
	this.ypos = -1;
	input.value = "";
//	input.value = '';
}

