var generalPos=0 ;
var generalValue='';
var generalChar='';
function isMacintosh(){
	return (navigator.appVersion.indexOf("Macintosh")>-1);
}

function currencyFormatKeyUp(fld, e) {
if(isMacintosh())
	return true;
	
var milSep=',';
var decSep='.';
var precision = 3;//noktadan sonraki izin verilen hane sayısı
var sep = 0;
var i = j = k = l = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = auxdec='';
var decimal =0;
var commaCounter=0;
var originalCommaCounter=0;
var whichCode = (window.Event) ? e.which : e.keyCode;
//if (whichCode == 13) return false;  // Enter
var newfld ='';
var kontrol=0;
len = fld.value.length;
//get cursor position 
//////////////////////
	var saveText = fld.value;  // save for restoring later
	fld.focus();
	var range = document.selection.createRange();
	var weirdStr = String.fromCharCode(1);   // a weird string to recognize the place
	range.text = weirdStr;
	var pos = fld.value.indexOf(weirdStr);  // get the position
	var originalPos = pos;
	fld.value = saveText;                   // restore the previous text
/////////////////////
if(whichCode==39||whichCode==37){ 
		range = fld.createTextRange();
		range.move('character', pos);            // restore the cursor (also shows how to set the cursor)
		range.select();
		return false;
	}
//decimal part is gotten
if(whichCode != 8 && (strCheck.indexOf(generalChar)!=-1 || whichCode == 46)){//backspace & del degilse
if(whichCode != 46){
	pos = generalPos+1;
	originalPos = generalPos+1;
	var temp=''
	for(i=0;i<generalValue.length;i++){
		if(generalPos==0 && i==0)
			temp += generalChar;
		temp += generalValue.charAt(i);
		if(i==generalPos-1)
			temp += generalChar;
	}
	if(generalValue.length==0)
			temp += generalChar;
	
	//alert(temp);
	fld.value =temp;
}

	if(fld.value.indexOf(decSep)!=-1){//ondalıklı değer içeriyorsa
		decimal=1;//ondalıklı değer içeriyor demektir
		for(i = len-1; i >= fld.value.indexOf(decSep); i--){
			if (strCheck.indexOf(fld.value.charAt(i))!=-1) {
				auxdec += fld.value.charAt(i);//ondalıklı kısım auxdec de saklanır
				decimal=1;
			}
		}
	}
	for(i = 0; i < len; i++) {//anlamsız kısımların atılması solda sıfır gibi
		if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep) ) 
			break;
	}

	aux = '';//virgulsuz datanın saklanması gerekendegisken
	for(i=0; i < len; i++){//butun text alandaki deger uzunlugu kadar doner
		if ((fld.value.charAt(i) == decSep)) {
			break;
		}
		if (strCheck.indexOf(fld.value.charAt(i))!=-1) {//rakam olan kısımlar aux'a alınır
			aux += fld.value.charAt(i);	
		}
		///virguller çıkarılırken position da azaltılır
		if (strCheck.indexOf(fld.value.charAt(i))==-1 ) {//eger rakam degilse virgul demektir
			if(i<originalPos && fld.value.charAt(i)==milSep &&whichCode!=8){
				pos = pos-1;//virgulsuz position her virgul çıkarılınca bir eksilir
				}
			if(fld.value.charAt(i) == milSep)
				originalCommaCounter++;
		}
	}//aux değeri virgulsuz tutar olusturuldu
	len = aux.length;
	if (len >= 0) {//virgulsuz len 0 dan buuyukse
		aux2 = '';
			for (j = 0, i = len - 1; i >= 0; i--) {
				if (j == 3) {//virgul if'i
					aux2 += milSep;
					j = 0;
					commaCounter +=1;
					///virguller eklenirken pos da arttırılır
					if(i<pos && whichCode!=8 )
						pos = pos+1;
				}//if close
				aux2 += aux.charAt(i);
				j++;
			}//for close
		fld.value = '';
		len2 = aux2.length;
		// part texte yazılır
		for (i = len2 - 1; i >= 0; i--) {
			fld.value += aux2.charAt(i);//aux2 texte ters çevrilerek yazılır
		}
		//gelen key decSep ise yazılır
		lendec = auxdec.length;
		if(decimal==1 && len2 ==0){//ondalıklı sayı ise ve tam kısmı yoksa
			fld.value = "0";
		}
		if(decimal==1 && len2 !=0){//ondalıklı sayı ise ve tam kısmı varsa
			fld.value += decSep;//decimal noktası ekleme
			for (i = lendec-1; i >=0 && (lendec-1-i<precision); i--){
				fld.value += auxdec.charAt(i);//decimal kısmı eklenir
			}
		}	
		range = fld.createTextRange();
		range.move('character', pos);            // restore the cursor (also shows how to set the cursor)
		range.select();
		}//if(len>0) closed
	}//if(whichCode != 8) closed
	if(whichCode ==8 ){
	if(fld.value.indexOf(decSep)!=-1){//ondalıklı değer içeriyorsa
		decimal=1;//ondalıklı değer içeriyor demektir
		for(i = len-1; i >= fld.value.indexOf(decSep); i--){
			if (strCheck.indexOf(fld.value.charAt(i))!=-1) {
				auxdec += fld.value.charAt(i);//ondalıklı kısım auxdec de saklanır
				decimal=1;
			}
		}
	}
	for(i = 0; i < len; i++) {//anlamsız kısımların atılması solda sıfır gibi
		if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep) ) 
			break;
	}
	aux = '';//virgulsuz datanın saklanması gerekendegisken
	for(i=0; i < len; i++){//butun text alandaki deger uzunlugu kadar doner
		if ((fld.value.charAt(i) == decSep)) {
			break;
		}
		if (strCheck.indexOf(fld.value.charAt(i))!=-1) {//rakam olan kısımlar aux'a alınır
			aux += fld.value.charAt(i);	
		}
		///virguller çıkarılırken position da azaltılır
		if (strCheck.indexOf(fld.value.charAt(i))==-1 ) {//eger rakam degilse virgul demektir
			if(i<originalPos && fld.value.charAt(i)==milSep &&whichCode==8){
				pos = pos-1;
				}//
			if(fld.value.charAt(i) == milSep)
				originalCommaCounter++;
				
		}
	}//aux değeri virgulsuz tutar olusturuldu
	len = aux.length;
	if (len >= 0) {//virgulsuz len 0 dan buuyukse
		aux2 = '';
			for (j = 0, i = len - 1; i >= 0; i--) {
				if (j == 3) {//virgul if'i
					aux2 += milSep;
					j = 0;
					commaCounter +=1;
					///virguller eklenirken pos da arttırılır
					if(i<pos && whichCode==8 ){
						pos = pos+1;
					}
				}//if close
				aux2 += aux.charAt(i);
				j++;
			}//for close
		////////////////////////
		if(whichCode == 8 && commaCounter > originalCommaCounter){//silme yapıldı ama orijinal virgul sayısı arttırılıyorsa
			kontrol=1;
			newfld ='';
			//len original textlen
			aux2len = aux2.length;
			for(k=0,l=aux2len-1; k<saveText.length && l>=0;k++,l--  )
			{
				if(aux2.charAt(l)!= saveText.charAt(k)){
					break;
				}
			}
			for(l=0;l<saveText.length;l++)
			{
				if(l!=k-1)
				{
					newfld += saveText.charAt(l);
					pos=k-1;
				}
				else
				{
				newfld += milSep;	
				}	
			}
			aux = '';
			for(i=0; i < newfld.length; i++){
				if ((newfld.charAt(i) == decSep)) {
					break;
				}
				if (strCheck.indexOf(newfld.charAt(i))!=-1) {
					aux += newfld.charAt(i);	
				}
				///virguller çıkarılırken position da azaltılır
				if (strCheck.indexOf(newfld.charAt(i))==-1 ) {
					if(i<=originalPos )
						pos = pos-1;
					if(newfld.charAt(i) == milSep)
						originalCommaCounter++;
				}
			}
			len = aux.length;
			///comma sayısı sayılıyor
			//milpart uzunlugu
			aux2 = '';
			for (j = 0, i = len - 1; i >= 0; i--) {
				if (j == 3) {
					aux2 += milSep;
					j = 0;
					commaCounter +=1;
					///virguller eklenirken pos da arttırılır
					if(i<=pos)
						pos = pos+1;
					///	
				}
				aux2 += aux.charAt(i);
				j++;
			}
		}
		////////////////////////
		fld.value = '';
		len2 = aux2.length;
		// part texte yazılır
		for (i = len2 - 1; i >= 0; i--) {
			fld.value += aux2.charAt(i);//aux2 texte ters çevrilerek yazılır
		}
		//gelen key decSep ise yazılır
		lendec = auxdec.length;
		if(decimal==1 && len2 ==0){//ondalıklı sayı ise ve tam kısmı yoksa
			fld.value = "0";
		}
		if(decimal==1 && len2 !=0){//ondalıklı sayı ise ve tam kısmı varsa
			fld.value += decSep;//decimal noktası ekleme
			for (i = lendec-1; i >=0 && (lendec-1-i<precision); i--){
				fld.value += auxdec.charAt(i);//decimal kısmı eklenir
			}	
		}	
	}//if(len>0) closed   
	range = fld.createTextRange();
	range.move('character', pos);            // restore the cursor (also shows how to set the cursor)
	range.select();
	}
return false;
}
function currencyFormatKeyPress(fld, e){
if(isMacintosh())
	return true;

	var whichCode = (window.Event) ? e.which : e.keyCode;
	//if (whichCode == 13) return false;  // Enter
	//get cursor position 
	key = String.fromCharCode(whichCode);  // Get key value from key code
	var saveText = fld.value;  // save for restoring later
	fld.focus();
	var range = document.selection.createRange();
	var weirdStr = String.fromCharCode(1);   // a weird string to recognize the place
	range.text = weirdStr;
	var pos = fld.value.indexOf(weirdStr);  // get the position
	var originalPos = pos;
	fld.value = saveText;           // restore the previous text
	generalPos=pos;
	generalValue=saveText;
	generalChar=key;
}

