var _moneyFormatCache = {};

function initMoneyFormat()
{
	var retnode = [];
	var myclass = new RegExp('\\bmoneyFormat\\b');
	var elem = document.getElementsByTagName('input');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes))
		{
			var element = elem[i];
			element.onfocus = function(){
				restore(this);
				if (document.selection) { 
					var oSel = document.selection.createRange ();
					oSel.moveStart ('character', -this.value.length);
					oSel.moveStart ('character', this.value.length);
					oSel.moveEnd ('character', 0);
					oSel.select ();
				}
			};
			element.onblur = function(){ moneyFormat(this); };
			element.form.onsubmit = function(){updateMoneyFields(); };
			moneyFormat(element);
		}
	}
}


function restore(field)
{
	if(_moneyFormatCache[field.id] && _moneyFormatCache[field.id]['value'])
	{
		field.value = _moneyFormatCache[field.id]['value'];
	}
	else
	{
		var value = clean(field.value);
		var pos1 = value.lastIndexOf(',');
		var pos2 = value.lastIndexOf('.');
		var pos = Math.max(pos1, pos2);
		var _sub = value.length-1 - pos ;
		if(_sub == 2 || _sub ==1)
			value = value.substring(0, pos) + "a" + value.substr(pos+1);
		value = value.replace(/,/g, '');
		value = value.replace(/\./g, '');
		value = value.replace('a', '.');
		
		if(value == 0.00)
			field.value = '';
		else
			field.value = value;
	}
}
function moneyFormat(field)
{
	var value = field.value;
	var intPart, decPart;
	
	//prepare
	value = clean(value);
	var pos1 = value.lastIndexOf(',');
	var pos2 = value.lastIndexOf('.');
	var pos = Math.max(pos1, pos2);
	if(pos > -1)
	{
		var _sub = value.length-1 - pos ;
		if(_sub == 2 || _sub ==1)
			value = value.substring(0, pos) + "a" + value.substr(pos+1);
		value = value.replace(/,/g, '');
		value = value.replace(/\./g, '');
		value = value.replace('a', '.');
	}
	// get int and decimal part
	ret=Math.round(value*100);
	ret=value<.1?"0"+ret:ret;
	ret=value< 1?"0"+ret:""+ret;
	intPart=ret.substring(0,ret.length-2);
	decPart=ret.substring(ret.length-2);
	
	// duizendtallen
	var punten = Math.floor((intPart.length-1)/3)+1;
	ret = "";
	for(var i=1; i<=punten; i++) {
		start =  intPart.length-(3*i);
		_sub = intPart.substring(start, start+3);
		ret = "."+_sub + ret;
	}
	intPart = ret.substring(1, ret.length);
	
	// combine
	// \u20AC = euro sign
	ret= "\u20AC "+intPart;//+","+decPart;
	
	// save in cache
	if(_moneyFormatCache[field.id] == null)
		_moneyFormatCache[field.id] = {};
	_moneyFormatCache[field.id]['value'] = field.value;
	field.value = (ret);
	
	if(sliders[field.id])
		sliders[field.id].setValue(_moneyFormatCache[field.id]['value']);
}

function updateMoneyFields()
{
	for ( id in _moneyFormatCache ) 
	{
		field = document.getElementById(id);
		if(field)
		{
			// var value = _moneyFormatCache[field.id]['value'];
			var value = field.value;
			value = clean(value);
			var pos1 = value.lastIndexOf(',');
			var pos2 = value.lastIndexOf('.');
			var pos = Math.max(pos1, pos2);
			var _sub = value.length-1 - pos ;
			if(_sub == 2 || _sub == 1)
				value = value.substring(0, pos) + "a" + value.substr(pos+1);
			value = value.replace(/,/g, '');
			value = value.replace(/\./g, '');
			field.value = value.replace('a', '.');
		}
	}
}


function clean(str){
	var nchar,n;
	var out="";
	var permitted = "1234567890.,";
	for(n=0;n<str.length;n++) {
		nchar=str.charAt(n);
		out+=permitted.indexOf(nchar)>-1?nchar:"";
	}
	return(out);
}