function NumberFormat(ezreselvalaszto,tizedeselvalaszto)
{
	this.ezreselvalaszto=ezreselvalaszto;
	this.tizedeselvalaszto=tizedeselvalaszto;
}
RegExp.escape = function(text) {
  if (!arguments.callee.sRE) {
    var specials = [
      '/', '.', '*', '+', '?', '|',
      '(', ')', '[', ']', '{', '}', '\\'
    ];
    arguments.callee.sRE = new RegExp(
      '(\\' + specials.join('|\\') + ')', 'g'
    );
  }
  return text.replace(arguments.callee.sRE, '\\$1');
}

NumberFormat.prototype = {
	formatMoney : function (n,onChange,tizedesvagas)
	{

		n=(this.normalize(n));
		var aa=n;
		//tizedespont keresese
		var negativ=false;
		if (n<0){	negativ=true; n=n.replace('-','');}
		var tizedesponthelye=(res=String(n)).lastIndexOf('.');

		//ha nincs
		var elejehossz=((tizedesponthelye==-1)?res.length:tizedesponthelye);
		a=0;o=new Array();
		while (--elejehossz>=0)
		{
			a++;
			o[o.length]=res.substr(elejehossz,1);
			if (a%3==0 && elejehossz>0) o[o.length]=this.ezreselvalaszto;
		}
		o=o.reverse();str='';
		for (var i=0;i<o.length;i++)
			str+=o[i];

		if (tizedesponthelye>0)
		{
			if (tizedesvagas<0)
			{
				str+=this.tizedeselvalaszto+n.substr(tizedesponthelye+1,n.length);
			}
			else if (tizedesvagas>0)
				str+=this.tizedeselvalaszto+n.substr(tizedesponthelye+1,tizedesvagas);
		}

		//Ha lelepett a fieldrol es az utolso karakter pont, akkor torlom.
		if (onChange)
		{
			if (str.lastIndexOf(this.tizedeselvalaszto)==str.length-1) str=str.replace(this.tizedeselvalaszto,'');
		}
		return ((negativ)?'-':'')+str;
	},

	formatMoneyJsInput : function(n,onChange,tizedesvagas)
	{
		if (typeof(n)!='string')	n=n.toString();
		n=n.replace('.',this.tizedeselvalaszto);
		return this.formatMoney(n,onChange,tizedesvagas)	;
	},

	normalize : function(str)
	{
		var retVal = String(str);
		var retVal1='';
		var re1=new RegExp(RegExp.escape(this.ezreselvalaszto),"g");
		var re2=new RegExp(RegExp.escape(this.tizedeselvalaszto),"g");
		retVal=retVal.replace(re1,'');
		retVal=retVal.replace(re2,'.').replace(/ /g,'');

		retVal=retVal.replace(/[^0-9\.,-]/g,'');
		firstP=retVal.indexOf(this.tizedeselvalaszto);
		return retVal;
	},

	makeMoneyField : function(field,tizedesvagas,disableFormating)
	{
		var thisref=this;
		tizedesvagas=(tizedesvagas==null)?2:tizedesvagas;
		if (typeof(field)=='object' || typeof(field)=='string')
		{
			if (field.nodeType || typeof(field)=='string')	field=[field];
			if(field.length)
			{
				i=field.length;
				while (--i>-1)
				{
					if (typeof(field[i])=='string')	field[i]=document.getElementById(field[i]);
					createEvent(field[i],disableFormating);
					//if (init)	throwEvent(field[i],'change');
					throwEvent(field[i],'change');
				}
			}
		}
		function createEvent(field,disableFormating)
		{
			attachElementEvent([field],['keypress'],function(event){return ((thisref._filterMoneyInput(event,field.value)))});
			attachElementEvent([field],['keyup'],function(event){ if (thisref._filterMoneyKeyUp(event,field.value) && !disableFormating) field.value=thisref.formatMoney(field.value,false,tizedesvagas)});
			if (!disableFormating)
				attachElementEvent([field],['change'],function(){field.value=thisref.formatMoney(field.value,true,tizedesvagas)});

		}
	},

	_filterMoneyKeyUp : function(e,fieldValue)
	{
		var keynum;
		if(window.event) // IE
		{
			e=window.event;
			keynum = e.keyCode;
		}
		else if(e.which) // Netscape/Firefox/Opera
		{
			keynum = e.which;
		}

		var ok = (!(isKeynumControlKey(keynum,e)));

		if (!ok)
		{
			if (e.preventDefault)
				e.preventDefault();
		}
		return ok;
	},

	_filterMoneyInput : function(e,fieldValue)
	{
		var keynum;
		if(window.event) // IE
		{
			e=window.event;
			keynum = e.keyCode;
		}
		else if(e.which) // Netscape/Firefox/Opera
		{
			keynum = e.which;
		}

		var ok = (
		!keynum ||keynum >= 48 && keynum <= 57 || keynum == 44 || isKeynumControlKey(keynum,e) );

		if (fieldValue && (keynum==46 || keynum==44) && (fieldValue.indexOf(this.tizedeselvalaszto)>-1 || fieldValue.indexOf('-')>0))	ok=false;
		//if (keynum==45 && fieldValue.length!=0) ok=false;
		if (keynum==45 && fieldValue.lastIndexOf('-')==0) ok=false;

		if (!ok)
		{
			if (e.preventDefault)
				e.preventDefault();
		}
		return ok;
	},


	makeCurrencyRateFields : function(field1,field2,tizedesvagas)
	{
		tizedesvagas=(tizedesvagas==null)?-1:tizedesvagas;
		var thisref=this;

		var field1=(typeof(field1)=='string')?document.getElementById(field1):field1;
		var field2=(typeof(field2)=='string')?document.getElementById(field2):field2;
		
		createEvent(field1);
		createEvent(field2);
		
		
		t1=thisref.normalize(field1.value);
		t2=thisref.normalize(field2.value);
		
		if (t1>0)
			throwEvent(field1,'keyup');
		else
			throwEvent(field2,'keyup');

		function createEvent(field)
		{
			attachElementEvent([field],['keypress'],function(event){return thisref._filterMoneyInput(event,field.value)});
			attachElementEvent([field],['keyup'],function() { field.value=thisref.formatMoney(field.value,false,tizedesvagas);});
			attachElementEvent([field],['change'],function() { field.value=thisref.formatMoney(field.value,true,tizedesvagas);});
			attachElementEvent([field],['keyup'],function()
			{
				if (field==field1)
				{
					f1=thisref.normalize(field.value);
					if (f1>0)field2.value=thisref.formatMoneyJsInput(1/f1,false,tizedesvagas);
					else field2.value=0;
				}
				else
				{
					f2=thisref.normalize(field.value);
					if(f2>0)field1.value=thisref.formatMoneyJsInput(1/f2,false,tizedesvagas);
					else field1.value=0;
				}
			});
		}
	}
};

var numberFormat = new NumberFormat('.',',');
//numberFormat.makeMoneyField(id,tizedesjegyek);
