﻿// JScript File

var  _minDate, _maxDate;  
var  clientInfo = navigator.userAgent.toLowerCase();
var  isIE = ( clientInfo.indexOf("msie") != -1 );
var  isWin = ( (clientInfo.indexOf("win")!=-1) || (clientInfo.indexOf("16bit") != -1) );    
    
    function taLimit(e, textObj, minDate, maxDate) 
    {   
        var date = stringUDatum(textObj.value);
        if (isNaN(date)) date = new Date();
        var position = getPosition(textObj);
        var index = 0;
        
        _minDate = stringUDatum(minDate);
        _maxDate = stringUDatum(maxDate);
        if (_minDate==null) _minDate = new Date(1900,0,1);

        var KeyID = (window.event) ? event.keyCode : e.keyCode;
        
        switch(KeyID) 
        {
            case 9://"Tab"
                position = (position + 1);
                if (position >=3 )
                { 
                    if (hideCalendar) hideCalendar();
                    return true;
                }
                break;
            case 27:case 13://"Esc","Enter"
                if (hideCalendar) hideCalendar();
                if (e.preventDefault) e.preventDefault();
                return false;
                break;
            case 33://"Page  Up"
            case 38://"Arrow Up"
                //alert("Arrow Up ,  position="+ position );
                switch(position) {
                    case 0: incrementDay(date); break;
                    case 1: incrementMonth(date); break;
                    case 2: incrementYear(date); break;
                }
            break;
            case 34://"Page  Down"      
            case 40://"Arrow Down"
                //alert("Arrow Down ,  position="+ position );
                switch(position) {
                    case 0: decrementDay(date); break;
                    case 1: decrementMonth(date); break;
                    case 2: decrementYear(date); break;
                }
            break;  
            case 37://"Arrow Left";
                var subIndex = getPositionFromDot(textObj);
                if (subIndex == 0) position = (position + 2) % 3;
                //alert("Arrow L ,  position="+ position + " , subIndex = " + subIndex);
            break;  
            case 39://"Arrow Right"
                //alert("Arrow R ,  position="+ position + " , subIndex = " + subIndex);
                position = (position + 1) % 3;
            break;  
            case 46: //"delete"
            case 0x8://"backSpace"
            {
                date=null;
            }
            break;     
            default:
                var c='';
                if (KeyID >= 0x60 && KeyID <= 0x69) c = KeyID - 0x60;
                 else if (KeyID >= 0x30 && KeyID <= 0x39) c = KeyID - 0x30;
                    else 
                        {
                        if (e.preventDefault) e.preventDefault();
                        return false;
                        }
                
                //if (document.selection.type=='Text') document.selection.clear();
                index = getCursorPosition(textObj);
                var subIndex = getPositionFromDot(textObj)+1;
                
                var string = "." + (date.getMonth() + 1)+ "." + (date.getYear() < 1900 ? date.getYear()+1900:date.getYear());
                string = clearSelected(textObj,string);
                string = string.substring(0,index) + c + string.substring(index,string.length);
                textObj.value = string;
                date = stringUDatum(textObj.value);
                
                
                switch(position) {
                    case 0: 
                        if (subIndex == 2 || (subIndex == 1 && c>3)) 
                            position = 1; 
                        else 
                            position = -1;
                    break;
                    case 1: 
                        if (subIndex == 2 || (subIndex == 1 && c>1)) 
                            position = 2;
                         else
                            position = -1;
                    break;
                    case 2: 
                        if (subIndex >= 4) 
                            position = 2; 
                        else 
                            position = -1;
                    break;
                }
               // if (e.preventDefault) e.preventDefault();
               //return false;
        }
        if (date){
            if (position!=-1) // kontrola minimalnog i imaksimalnog datuma
            {
                if (date < _minDate && _minDate!=null) date = _minDate;
                if (date > _maxDate && _maxDate!=null) date = _maxDate;
                textObj.value = date.getDate()+ "." + (date.getMonth() + 1)+ "." + (date.getYear() < 1900 ? date.getYear()+1900:date.getYear());
            }
            select(position, textObj, index);
        } else {
            textObj.value='';
        }
        
        if (e.preventDefault) e.preventDefault();
        return false;
    }
    
    function onFocus(e, textObj)
    {
        select(getPosition(textObj), textObj)
    }
    
    function onBlur(e, textObj)
    {
        if (textObj.value && textObj.value!='')
        {
            var date = stringUDatum(textObj.value);
            if (date < _minDate && _minDate!=null) date = _minDate;
            if (date > _maxDate && _maxDate!=null) date = _maxDate;
            textObj.value = date.getDate()+ "." + (date.getMonth() + 1)+ "." + (date.getYear() < 1900 ? date.getYear()+1900:date.getYear());
        }
    }
    
    
    function select(position, textObj, index)
    {
        if (position==-1)
        {
            if(isIE && isWin) 
            {
            selectFromTo(textObj, index+1, index);
            }
            else 
            {
            selectFromTo(textObj, index+1, index+1);
            }
        }
        else 
        {
            if(isIE && isWin) 
    	    {
                switch(position) 
                {
                    case 0: selectFromTo(textObj, 0, textObj.value.indexOf('.')-1); break;
                    case 1: selectFromTo(textObj, textObj.value.indexOf('.') + 1   , textObj.value.lastIndexOf('.')-1);  break;
                    case 2: selectFromTo(textObj, textObj.value.lastIndexOf('.') + 1, textObj.value.length); break;
                }
            }
	        else 
	        {
               switch(position) 
                {
                    case 0: selectFromTo(textObj, 0, textObj.value.indexOf('.')); break;
                    case 1: selectFromTo(textObj, textObj.value.indexOf('.') + 1   , textObj.value.lastIndexOf('.')); break;
                    case 2: selectFromTo(textObj, textObj.value.lastIndexOf('.') + 1, textObj.value.length); break;
                }
           }
       }
    }
    
    //0 - dani, 1 - mjeseci, 2 - godine
    function getPosition(textObj)
    {
        var i = getCursorPosition(textObj);
        if (i > textObj.value.lastIndexOf('.')) return 2;
        if (i > textObj.value.indexOf('.')) return 1;
        return 0;
    }
    
    //pozicija unutar dana, mjeseca ili godine
    function getPositionFromDot(textObj)
    {
        var i = getCursorPosition(textObj);
        if (i > textObj.value.lastIndexOf('.')) return i-textObj.value.lastIndexOf('.')-1;
        if (i > textObj.value.indexOf('.')) return i-textObj.value.indexOf('.')-1;
        return i;
    }
    
    function getCursorPosition(textObj)
    {
    	if(isIE && isWin) 
    	{
		    return getCursorPosition_IE(textObj);
	    }
	    else 
	    {
		    return getCursorPosition_NAV(textObj);
	    }
	    return 0;
    }    
    
    function getCursorPosition_IE(textObj)
    {
        var i = textObj.value.length+1;
        if (textObj.createTextRange)
        {
            theCaret = document.selection.createRange().duplicate();
            while (theCaret.parentElement()==textObj
            && theCaret.move("character",1)==1) --i;
        }
        return i-1;
    }  
      
    function getCursorPosition_NAV(textObj)
    {
       return textObj.selectionStart;
    }  
    
    function clearSelected(textObj, string)
    {
        if (textObj.value!='')
        {
        if(isIE && isWin) 
           {
	       if (textObj.createTextRange)
	           if (document.selection.createRange().text.length>1) select(getPosition(textObj), textObj)
               document.selection.createRange().text='';
           }
	       else 
	       {
	           if (textObj.selectionEnd > textObj.selectionStart+1) select(getPosition(textObj), textObj)
	           var preString = (textObj.value).substring(0,textObj.selectionStart);
		       var postString = (textObj.value).substring(textObj.selectionEnd);
		       textObj.value = preString + postString;
	       }
	    return textObj.value;
	    } else {
	        return string;
	    }
    }
    
    function getYearFromString(datumStr)
    {
        var year = datumStr;
        year = year.substr(year.lastIndexOf('.')+1);
        year = parseInt(year, 10);
        return year;
    }
    
    function getMonthFromString(datumStr)
    {
        var month = datumStr;
        month = month.substring(month.indexOf('.')+1,month.lastIndexOf('.'));
        month = parseInt(month, 10);
        return month;
    }
    
    function getDayFromString(datumStr)
    {
        var day = datumStr;
        day = day.substring(0,day.indexOf('.'));
        day = parseInt(day, 10);
        return day;
    }

	function stringUDatum(datumStr) {
	    try
	    {
	        if (datumStr == null) return null;
		    var dan = getDayFromString(datumStr);
		    var mjesec = getMonthFromString(datumStr)-1;
		    var godina = getYearFromString(datumStr);
		    
	        var dt = new Date(godina, mjesec, dan);
	        return dt;
		}
		catch (err)
		{
		    return null;
		}
	}
    
    function incrementDay(date)  { date.setDate(date.getDate() + 1);  }
    function decrementDay(date)  { date.setDate(date.getDate() -1);   }
    function incrementMonth(date){ date.setMonth(date.getMonth() + 1);}   
    function decrementMonth(date){ date.setMonth(date.getMonth() -1); }
    function incrementYear(date) { date.setYear((date.getYear() < 1900 ? date.getYear()+1900:date.getYear()) + 1);   }
    function decrementYear(date) { date.setFullYear((date.getYear() < 1900 ? date.getYear()+1900:date.getYear()) -1);}
    
    function selectFromTo(textInput, charStartIndex, charEndIndex) 
    {
        if(isIE && isWin) 
        {
		    selectFromTo_IE(textInput, charStartIndex, charEndIndex) 
	    }
	    else 
	    {
		    selectFromTo_Nav(textInput, charStartIndex, charEndIndex) 
	    }
	    return;
    }
    
    function selectFromTo_IE(textInput, charStartIndex, charEndIndex) 
    {
    /* We´ll calculate the appropiate value to the different moves. */
    strTextInputValue = "" + textInput.value;

    charStartIndex = (parseInt(charStartIndex));

    numEndIndex = parseInt(charEndIndex) + 1;
    numEndIndex -= strTextInputValue.length;
    charEndIndex = numEndIndex.toString();

        if (textInput.createTextRange) 
        {
            var range = textInput.createTextRange();
            range.moveStart('character', charStartIndex );
            range.moveEnd('character', charEndIndex);
            range.select();
        }
    }
    
    function selectFromTo_Nav(textInput, charStartIndex, charEndIndex) 
    {
        textInput.selectionStart = parseInt(charStartIndex);
        textInput.selectionEnd = parseInt(charEndIndex);
        textInput.focus();
        
    }


function daysInMonth(year, month)
{ 
    return 32-new Date(year, month, 32).getDate(); 
}

