// NUMERICINPUT.JS

// SABITLER     
var NOTRM = 4;  
var PUAN = 5;   
var NOT = 6;    
var NOTG = 7;   
var NOTR = 8;   

function NumericInputClass()
{
    function findDecimalSeperator(DecimalSeparator)
    {
		var entryString = "";
		
		if (DecimalSeparator=="%1") entryString = (" 012345RM");
		if (DecimalSeparator=="%2") entryString = (" 0123456789R");
		if (DecimalSeparator=="%3") entryString = (" 012345");
		if (DecimalSeparator=="%4") entryString = (" 012345G");
		if (DecimalSeparator=="%5") entryString = (" 012345R");

		// KLASIK'DE TIRE DE GIRILEBILIYOR (SADECE 2006 YILINDAN ITIBAREN, VE SADECE PUAN HUCRELERINE)
		if (entryString != "" && KurumGrubu == IlkOgretim && Number(DersYili) >= 2006 && DecimalSeparator == "%2")
			entryString += "-";
        
        if (entryString != "")
			return entryString;
		else
			return DecimalSeparator;
    }
    
	function NumericInputKillExtraDigits(Val, Type, DecimalSeparator,Precision,IsZeroEmpty)
	{
		var precisionStr = "";
		var i = 0;
		for(i=0;i<Precision;i++) precisionStr += "0";
		
		if(Type == 0)
			return(Val);
		if(Type == 1)
			return(Val);
		
		if((parseFloat(Val.replace(DecimalSeparator,"."))==0) || 
		   isNaN(parseFloat(Val.replace(DecimalSeparator,".")))) Val = "0";
		   
		if(IsZeroEmpty && Val == "0") return '';
		if(Precision>0)
		{
		    var DotPos = Val.indexOf(DecimalSeparator);
	        if(DotPos == -1)
		        return(Val+DecimalSeparator+precisionStr);
    	    
	        Val += precisionStr;
	        return(Val.slice(0, DotPos + (Precision+1)));
	    }
	    else
	        return Val;
	}

    function NotRMTextControl(Val, DecimalSeparator)
    {
        var newStr="";
        var c=Val.charAt(Val.length-1);
        if (DecimalSeparator.indexOf(c.toUpperCase())!=-1)
            newStr=c.toUpperCase();
		
		return newStr;
    }
    this.NotRMTextControl = NotRMTextControl;

    function removeNumericFields(newStr)
    {
        var DecimalSeparator=" 0123456789";
        var returnStr="";

        for(var i=0; i<newStr.length; i++)
		{
            var c=newStr.charAt(i);
            if (DecimalSeparator.indexOf(c.toUpperCase())==-1)
                returnStr=returnStr + c.toUpperCase();
		}
		return returnStr;
    }
    this.newStr=removeNumericFields;

    function PuanTextControl(Val, DecimalSeparator)
    {
        var newStr="";
        for(var i=0; i<Val.length; i++)
		{
            var c=Val.charAt(i);
            if (DecimalSeparator.indexOf(c.toUpperCase())!=-1)
                newStr=newStr + c.toUpperCase();
		}
		
        if (isNaN(newStr)==false)
        {
            if (Number(newStr)<0)   newStr="0";
            if (Number(newStr)>100) newStr=newStr.substr(0, 2);
        }
        else 
        {
           newStr=removeNumericFields(newStr);
           if (newStr.length>1) newStr=newStr.substr(0,1);
        }
        
        return newStr;
    }
    this.PuanTextControl = PuanTextControl;

	function Fix(This, Type, DecimalSeparator,Precision,IsZeroEmpty)
	{
	    DecimalSeparator=findDecimalSeperator(DecimalSeparator);
	    
		var Val = This.value;
		if (Type==NOTRM || Type==NOT || Type==NOTG || Type==NOTR) 
		{ 
		   var notStr = NotRMTextControl(Val, DecimalSeparator)		   
		   if (This.value!=notStr) 
		      This.value = notStr;
		   return;
		}
		if (Type==PUAN) // PUAN
		{ 
		   var puanStr = PuanTextControl(Val, DecimalSeparator);
		   if (This.value!=puanStr) 
  		       This.value = puanStr; 
		   return;
		}
        
        // Check if the value is within range
		var max=This.getAttribute('maxAmount');
		if(floatParse(Val)>floatParse(max)){Val=max}
		var min=This.getAttribute('minAmount');
		if(floatParse(Val)<floatParse(min)){Val=min}
		
		var NewVal = "";
		var GotDot = false;
		for(var i=0; i<Val.length; i++)
		{
			var c=Val.charAt(i);
			if(c == "-" && i == 0)
			{
				NewVal += c;
				continue;
			}
			// window.alert("new: '"+NewVal+"' c: '"+c+"'");
			if(c == DecimalSeparator)
			{
				if(Type == 0)
				{
					This.value = NewVal;
					return;
				}
				if(GotDot == true)
				{
					This.value = NumericInputKillExtraDigits(NewVal, Type, DecimalSeparator,Precision,IsZeroEmpty);
					return;
				}
				NewVal += c;
				GotDot = true;
				continue;
			}
			if(c >= '0' && c <= '9')
				NewVal += c;
		}
		This.value = NumericInputKillExtraDigits(NewVal, Type, DecimalSeparator,Precision,IsZeroEmpty);
	}
	this.Fix = Fix;
	function Chk(This, Type, DecimalSeparator)
	{   
		var Obj = event.srcElement;
		var Val = Obj.value;
		var Key = event.keyCode;
		var KeyAscii = String.fromCharCode(Key);
		
		DecimalSeparator=findDecimalSeperator(DecimalSeparator);
		if(KeyAscii == "-")
		{
			if(Obj.value != "")
			{
				event.returnValue = false;
				return;
			}
			return;
		}
		switch(Type)
		{
			case 0:		// integer
				if(KeyAscii < '0' || KeyAscii > '9')
				{
					event.returnValue = false;
					return;
				}
				return;

			case 1:		// Float
			case 2:		// Currency
				var DotPos = Val.indexOf(DecimalSeparator);
				if(KeyAscii == DecimalSeparator)
				{
					if( DotPos >= 0)
					{
						event.returnValue = false;
						return;
					}
					return;
				}
				if(KeyAscii < '0' || KeyAscii > '9')
				{
					event.returnValue = false;
					return;
				}
				return;
		    case NOTRM:
		    case NOT:  
		    case NOTG: 
		    case NOTR: 
		        var allowStr = DecimalSeparator;
		        event.returnValue = false;
		        if (allowStr.indexOf(KeyAscii.toUpperCase())==-1)
					return;		        
		        This.value = KeyAscii.toUpperCase();
		        return;
		    case PUAN:    // Puan 0 -100 + R
		        var allowStr = DecimalSeparator;
		        event.returnValue = false;
		        KeyAscii=KeyAscii.toUpperCase();
		        if (allowStr.indexOf(KeyAscii)==-1) 
		            return;
				if (KeyAscii=="R") 
				{ 
				    This.value="R"; 
				    return ;
				} 
				event.returnValue = true;
				return;
		}
	}
	this.Chk = Chk;
}
function floatParse(value)
{
    var decimalVal = 0;
    value = value.replace(",",".");
    if((parseFloat(value)!=0) && !isNaN(parseFloat(value)))
      decimalVal=parseFloat(value);
    return decimalVal;
}
var NI = new NumericInputClass();
