function clean_input(string){
	string = string.replace(/,/g, ".");
	string = string.replace(/[^0-9eE*+-/.]/g, '');
	string = eval(string);
	return string;
	}
function clean_output(string){
	var negative = false;
	var k = 0;
	var i = 0;
	var a = 0;
	var output = '';
	if(string != 0){
		string = rounds(string).value;
		if(!rounds(string).power){
			if(Math.abs(string) >= 1000 && Math.abs(string) < 1e+21){
				if(string < 0){
					string = string * -1;
					negative = true;
					}
				while(string >= 1){
					string = string / 10;
					k++;
					}
				string = string * Math.pow(10, k);
				string = string.toString();
				i = Math.floor(k/3);
				k = k - 3*i;
				if(negative){
					output = '-';
					}
				if(k){
					output = output + string.substring(0, k) + _thousand_separator_;
					}
				output = output + string.substring(k + 3*a, k+3*(a+1));
				i--;
				a++;
				while(i > 0){
					output = output + _thousand_separator_ + string.substring(k + 3*a, k+3*(a+1));
					a++;
					i--;
					}
				string = output;
				}
			}
		if(_comma_){
			string = string.toString().replace(/[.]/g, ",");
			}
		}
	else{
		string = '0';
		}
	return string;
	}
function rounds(value){
	var multipler = Math.pow(10, 5);
	var k = 0;
	var power = false;
	if(Math.abs(value) > multipler){
		while(Math.abs(value) > multipler){
			value = value / 10;
			k++;
			}
		value = Math.round(value);
		if(k > 10){
			k = k + 4;
			value = value/multipler*10;
			value = value.toString() + 'e+' + k;
			var power = true;
			}
		else{
			value = value * Math.pow(10, k);
			}
		}
	if(Math.abs(value) < multipler/10){
		while(Math.abs(value) < multipler/10){
			value = value * 10;
			k++;
			}
		value = Math.round(value);
		value = value / Math.pow(10, k);
		}
	this.value = value;
	this.power = power;
	return this;
	}
function convert1(){
	var textfield_1=document.getElementById('convert_1');
	var textfield_2=document.getElementById('convert_2');
	if(unit_kerroin[unit_selected[1]] && unit_kerroin[unit_selected[2]] && textfield_1.value){
		textfield_2.value=clean_output(clean_input(textfield_1.value)*unit_kerroin[unit_selected[2]]/unit_kerroin[unit_selected[1]], _tarkkuus_);
		}
	else{
		textfield_2.value='0';
		}
	}
function convert2(){
	var textfield_1=document.getElementById('convert_1');
	var textfield_2=document.getElementById('convert_2');
	if(unit_kerroin[unit_selected[1]] && unit_kerroin[unit_selected[2]] && textfield_2.value){
		textfield_1.value=clean_output(clean_input(textfield_2.value)*unit_kerroin[unit_selected[1]]/unit_kerroin[unit_selected[2]], _tarkkuus_);
		}
	else{
		textfield_1.value='0';
		}
	}
function menu_action(nr){
	if(!open[nr]){
		showElement(nr);
		var id='search_box_'+nr;
		select(id);
		}
	else{
		hideElement(nr);
		}
	}
function showElement(nr){
	var k=0;
	while(units_in_list[nr][k]!=unit_selected[nr]){
		k++;
		}
	select_unit_list(k, nr);
	var id='div_menu_'+nr;
	var element=document.getElementById(id);
	element.style.visibility='visible';
	open[nr]=1;
	}
function hideElement(nr){
	var id='div_menu_'+nr;
	var element=document.getElementById(id);
	element.style.visibility='hidden';
	open[nr]=0;
	var search_box=document.getElementById('search_box_'+nr);
	search_box.value='';
	write_all_units(nr);
	}
function select(id){
	var element=document.getElementById(id);
	element.focus();
	element.select();
	}
function select_unit(nr, unit){
	var element=document.getElementById('div_unit_selected_'+nr);
	element.removeChild(element.firstChild);
	var text=document.createTextNode(unit_name[unit]);
	element.appendChild(text);
	unit_selected[nr]=unit;
	convert1();
	}
function setClass(obj, class_name){
	obj.className=class_name;
	}
function div_menu(nr){
	var element=document.getElementById('div_'+nr);
	var div_selected=document.createElement('div');
	div_selected.setAttribute('id', 'div_unit_selected_'+nr);
	div_selected.className='div_unit_selected';
	div_selected.onclick=function(){menu_action(nr);}
	div_selected.onmouseover=function(){setClass(this, 'div_unit_selected_mouseon');}
	div_selected.onmouseout=function(){setClass(this, 'div_unit_selected');}
	var text_div_selected=document.createTextNode(unit_name[unit_selected[nr]]);
	div_selected.appendChild(text_div_selected);
	element.appendChild(div_selected);
	var div_menu=document.createElement('div');
	div_menu.style.visibility='hidden';
	div_menu.className='div_menu';
	div_menu.setAttribute('id', 'div_menu_'+nr);	
	var div_unit_list=document.createElement('div');
	div_unit_list.setAttribute('id', 'div_unit_list_'+nr);
	div_unit_list.className='div_unit_list';
	div_menu.appendChild(div_unit_list);
	var div_search=document.createElement('div');
	div_search.className='div_search';
	var search_span=document.createElement('span');
	search_span.className='span_search';
	var text_search_span=document.createTextNode(_search_);
	search_span.appendChild(text_search_span);
	div_search.appendChild(search_span);
	var search=document.createElement('input');
	search.setAttribute('type', 'text');
	search.setAttribute('name', 'search_box_'+nr);
	search.setAttribute('id', 'search_box_'+nr);
	search.onkeyup=function(e){if(!e)e=window.event; if(e.keyCode!=13&&e.keyCode!=38&&e.keyCode!=40)search_unit(nr, this.value);}
	search.className='search';
	div_search.appendChild(search);
	div_menu.appendChild(div_search);
	element.appendChild(div_menu);
	}
function write_all_units(nr){
	var id='div_unit_list_'+nr;
	var element=document.getElementById(id);
	while(element.firstChild){
		element.removeChild(element.firstChild);
		}
	if(_type_=='_currency_'){
		create_unit(nr, 'EUR', 0);
		create_unit(nr, 'USD', 1);
		create_unit(nr, 'GBP', 2);
		var a=3;
		}
	else{
		var a=0;
		}
	for(var k=0; k<group_id.length; k++){		
		var div=document.createElement('div');
		div.className='group';
		var text=document.createTextNode(group[group_id[k]]);		
		element.appendChild(div);
		div.appendChild(text);
		for(var i=0; i<unit_id[group_id[k]].length; i++){
			create_unit(nr, unit_id[group_id[k]][i], a);
			units_in_list[nr][a]=unit_id[group_id[k]][i];
			a++;
			}
		var empty=document.createElement('div');
		empty.style.height='10px';
		element.appendChild(empty);
		}
	for(var k=0; k<unit_id[0].length; k++){
		create_unit(nr, unit_id[0][k], a);
		units_in_list[nr][a]=unit_id[0][k];
		a++;
		}
	}
function create_unit(nr, unit, unit_nr, group){
	var id='div_unit_list_'+nr;
	var element=document.getElementById(id);
	var div=document.createElement('div');
	div.onclick=function(){hideElement(nr); select_unit(nr, unit);}
	div.setAttribute('id', 'unit_'+nr+'_'+unit_nr);
	div.className='unit';
	div.onmouseover=function(){select_unit_list(unit_nr, nr);}
	var teksti=unit_name[unit];
	if(group){
		teksti+=' ['+group+']';
		}
	var text=document.createTextNode(teksti);
	element.appendChild(div);
	div.appendChild(text);
	}
function search_unit(nr, str){
	var _name=new Array();
	var _unit=new Array();
	var unit=new Array();
	str=str.toLowerCase();
	var id='div_unit_list_'+nr;
	var element=document.getElementById(id);
	var _search=new Array();
	var _group=new Array();
	while(element.firstChild){
		element.removeChild(element.firstChild);
		}
	unit_selected_list[nr]=null;
	units_in_list[nr]=null;
	units_in_list[nr]=new Array;
	if(str){
		for(var k=0;k<group_id.length;k++){
			for(var i=0;i<unit_id[group_id[k]].length;i++){
				_unit[_unit.length]=unit_id[group_id[k]][i].toLowerCase();
				_name[_name.length]=unit_name[unit_id[group_id[k]][i]].toLowerCase();
				unit[unit.length]=unit_id[group_id[k]][i];
				_group[_unit.length]=group_id[k];
				}
			}
		for(var k=0;k<unit_id[0].length;k++){
			_unit[_unit.length]=unit_id[0][k].toLowerCase();
			_name[_name.length]=unit_name[unit_id[0][k]].toLowerCase();
			unit[unit.length]=unit_id[0][k];
			_group[_unit.length]=0;
			}
		for(var k=0;k<_unit.length;k++){
			var place_1=_unit[k].indexOf(str)+2;
			var place_2=_name[k].indexOf(str)+3;
			if(str==_unit[k]){
				_search[_search.length]=1+"|"+unit[k]+"|"+_group[k];
				}
			else if(place_1==2){
				_search[_search.length]=2+"|"+unit[k]+"|"+_group[k];
				}
			else if(place_2>2){
				_search[_search.length]=place_2+"|"+unit[k]+"|"+_group[k];
				}
			}
		_search=_search.sort(sortNumber);
		var chace=new Array();
		for(var k=0;k<_search.length;k++){
			chace=_search[k].split("|");
			create_unit(nr, chace[1], k, group[chace[2]]);
			units_in_list[nr][k]=chace[1];
			}
		select_unit_list(0, nr);
		}
	else{
		write_all_units(nr);
		}
	}
function sortNumber(a, b) {
	/* erotetaan numero-osa */
	a = a.substring(0, a.indexOf("|"));
	b = b.substring(0, b.indexOf("|"));
	/* palautetaan lukujen erotus */
	return a - b;
	}
function select_unit_list(unit_nr, nr){
	if(unit_selected_list[nr]!=null){
		var element1=document.getElementById('unit_'+nr+'_'+unit_selected_list[nr]);
		setClass(element1, 'unit');
	}
	var element2=document.getElementById('unit_'+nr+'_'+unit_nr);
	setClass(element2, 'unit_mouseon');
	unit_selected_list[nr]=unit_nr;
	}
function preselect_previous(nr){
	if(unit_selected_list[nr]){
		select_unit_list(unit_selected_list[nr]-1, nr);
		}
	}
function preselect_next(nr){
	if(unit_selected_list[nr]<units_in_list[nr].length-1){
		select_unit_list(unit_selected_list[nr]+1, nr);
		}
	}
var unit_selected_list=new Array();
var units_in_list=new Array();
units_in_list[1]=new Array();
units_in_list[2]=new Array();
document.onclick = function(e){
	var menu1, menu2 = false;
	if(!e)
		var e = window.event;
	if(e.target)
		var target = e.target;
	else if(e.srcElement)
		var target = e.srcElement;
	if (target.nodeType == 3)
		var target = target.parentNode;
	while (target != document.body && target.parentNode ) {
		if(target.id == 'div_1')
			menu1 = true;
		if(target.id == 'div_2')
			menu2 = true;
		target = target.parentNode;
		}
	if(!menu1 && open[1])
		hideElement(1);
	if(!menu2 && open[2])
		hideElement(2);
	}
document.onkeydown = function(event){
	if(!event){
		var event=window.event;
	}
	if(event.keyCode==13){
		if(open[1]){
			select_unit(1, units_in_list[1][unit_selected_list[1]]);
			hideElement(1);
		}
		if(open[2]){
			select_unit(2, units_in_list[2][unit_selected_list[2]]);
			hideElement(2);
		}
	}
	if(event.keyCode==38){
		if(open[1]){
			preselect_previous(1);
			}
		if(open[2]){
			preselect_previous(2);
			}
	}
	if(event.keyCode==40){
		if(open[1]){
			preselect_next(1);
			}
		if(open[2]){
			preselect_next(2);
			}
	}
}