﻿(function($) {

$.fn.dateinput = function (options) {
    var settings = $.extend({
        value: "",
        focus: false,
        picker:true,
        setupDatePicker:'' ,
        onkeydown: '',
        onblur:'',
        dialog:''
    }, options);

    settings.classes = $.extend({
        tokenList: "token-input-list",
        tokenList_focus: "token-input-list_focus",
        token: "token-input-token",
        tokenDelete: "token-input-delete-token",
        selectedToken: "token-input-selected-token",
        highlightedToken: "token-input-highlighted-token",
        dropdown: "token-input-dropdown",
        dropdownItem: "token-input-dropdown-item",
        dropdownItem2: "token-input-dropdown-item2",
        selectedDropdownItem: "token-input-selected-dropdown-item",
        inputToken: "token-input-input-token"
        
    },  options.classes);

    return this.each(function () {
        var list = new $.date_input(this, settings);
    });
};


$.fn.setFocus = function()
{
    this.each(function(){
        var t = this ;
        //alert($(t).css('display'))
        var input = $(t).next().find('li:eq(0)').find('input:eq(0)') ;
              
        //alert(input.val());
        input.focus();
    });
}



$.date_input = function (input, settings) {
    //
    // Variables
    //

    // Input box position "enum"
    var POSITION = {
        BEFORE: 0,
        AFTER: 1,
        END: 2
    };
    
    // Keys "enum"
    var KEY = {
        BACKSPACE: 8,
        RETURN: 13,
        LEFT: 37,
        UP: 38,
        RIGHT: 39,
        DOWN: 40,
        ESC:27
    };
    
    // Save the tokens
    var saved_tokens = [];
    var tokenPopUp = jQuery('#tokenPopupContainer');
    // Basic cache to save on db hits
    // Keep track of the timeout
    var timeout;
    
    
    
     //show_dropdown_searching();
    //clearTimeout(timeout);
    //timeout = setTimeout(do_search, settings.searchDelay);
    // Keep a reference to the original input box
    
    var value_old = "";
    
    var arr  = new Array(); 
    var now ='';
    
    
    if(settings.value != '')
    {
        value_old = settings.value;
        arr = settings.value.split('/');
        now = settings.value ;
    }
    else 
    {  
        var date = new Date();
        var day = parseInt(date.getDate());
        var month = parseInt(date.getMonth()) + 1;
        if(month < 10){
        month = "0" + month;
        }
        var year = date.getFullYear();
        if ( day < 10) {day = "0" + day};
        var now = day + '/' + month + '/' + year;
        
        value_old = now;
        arr = now.split('/');
                
    }
    
    
    
    var hidden_input = $(input)
                           .val(now) 
                           .hide()
                           .focus(function () {
                              // input_box.focus();
                           })
                           .blur(function () {
                               //input_box.blur();
                           })
                        ;
    
    
    
    // The list to store the token items in
    
    var token_list = $("<ul />")
        .addClass(settings.classes.tokenList)
        .insertAfter(hidden_input)
        
        .click(function (event) {
        
          
        })
        
        .mouseover(function (event) {
           
        })
        .mouseout(function (event) {
           
        })
        .mousedown(function (event) {
           
    });
    
    var ngayinput = $("<input type=\"text\">")
             .attr('value',arr[0])
             .addClass('datepicker_ngay')
             .focus(function(){
                ngayinput.removeClass();
                ngayinput.addClass('datepicker_ngay_focus');  
                
                thanginput.removeClass();
                thanginput.addClass('datepicker_ngay');     
                
                naminput.removeClass();
                naminput.addClass('datepicker_nam');     
                
             })
             
             .keydown(function(e) {
                 var key = e.charCode || e.keyCode || 0;
                 //alert(String.fromCharCode(e.keyCode)+":"+e.keyCode);
                 return ((key >= 48 && key <= 57)||(key >= 96 && key <= 105)||(key == 13)||
                    (key == 190||key == 37||key == 38||key == 40||key == 39||key == 9))
             })
             .keyup(function(e){
                 var ngay_new = ngayinput.val();
                 var key = e.keyCode ;
                 if((key >= 48 && key <= 57)||(key >= 96 && key <= 105))
                 {
                     var idex = indexOf(ngay_old,ngay_new);   
                     var newChar = String.fromCharCode(e.keyCode);
                     var val = ngay_old.substring(0,idex) + newChar + ngay_old.substring(idex+1,ngay_old.length) ;
                     
                     if(parseInt(val) > 31)
                     {
                        ngayinput.val(ngay_old);
                     }
                     else
                     {
                        ngayinput.val(val);
                        ngay_old = val ;  
                     }
                     
                     ngayinput.focus();
                     
                 }
                 else if(key == 8)
                 {
                     var idex = indexOf(ngay_old,ngay_new);   
                     var val = ngay_old.substring(0,idex) + "0" + ngay_old.substring(idex+1,ngay_old.length) ;
                     ngayinput.val(val);
                     ngayinput.focus();
                     ngay_old = val ;
                 }
                 setdate();    
             });
   var ngay_old = ngayinput.val();
   var idex_ngay = ngay_old.indexOf('0');
   if(idex_ngay != -1){
        ngay_old = ngay_old.substring(1,2)
   }
   
   
   var span = "<span type=\"text\" style='width:3px;float:left;border:none;color:black;margin:0px;height:17px;padding-top:2px;'>/</span>" ;
             
    var thanginput = $("<input type=\"text\">")
             .attr('value',arr[1])
             .addClass('datepicker_ngay')
             .focus(function(){
                thanginput.removeClass();
                thanginput.addClass('datepicker_thang_focus');  
                    
                ngayinput.removeClass();
                ngayinput.addClass('datepicker_ngay');     
                
                naminput.removeClass();
                naminput.addClass('datepicker_nam');   
                
             })
            
             .keydown(function(e) {
                
                    var key = e.charCode || e.keyCode || 0;
                    return ((key >= 48 && key <= 57)||(key >= 96 && key <= 105)||(key == 13)||
                        (key == 190||key == 37||key == 38||key == 40||key == 39||key == 9))
             })
             .keyup(function(e){
                 var thang_new = thanginput.val();
                 var key = e.keyCode ;
                 if((key >= 48 && key <= 57)||(key >= 96 && key <= 105))
                 {
                     var idex = indexOf(thang_old,thang_new);   
                     var newChar = String.fromCharCode(e.keyCode);
                     var val = thang_old.substring(0,idex) + newChar + thang_old.substring(idex+1,ngay_old.length) ;
                     
                     if(parseInt(val) > 12 || parseInt(val) == 0)
                     {
                        thanginput.val(thang_old);
                     }
                     else 
                     {
                        thanginput.val(val);
                        thang_old = val ;     
                     }
                     thanginput.focus();
                     
                 }
                 else if(key == 8)
                 {
                     var idex = indexOf(thang_old,thang_new);   
                     var val = thang_old.substring(0,idex) + "0" + thang_old.substring(idex+1,ngay_old.length) ;
                     thanginput.val(val);
                     thanginput.focus();
                     thang_old = val ;
                 }
                 setdate();
             });
   var thang_old = thanginput.val();
   var idex_thang = thang_old.indexOf('0');
   if(idex_thang != -1){
        thang_old = thang_old.substring(1,2)
   }
   
   var datepickerinput = $("<input type=\"text\">")
             .attr('value','')
             .addClass('datepicker_nam')
             .css('width','0px')
              
   var naminput = $("<input type=\"text\">")
             .attr('value',arr[2])
             .addClass('datepicker_nam')
             .focus(function(){
                naminput.removeClass();
                naminput.addClass('datepicker_nam_focus'); 
                
                ngayinput.removeClass();
                ngayinput.addClass('datepicker_ngay');     
                
                thanginput.removeClass();
                thanginput.addClass('datepicker_ngay');      
                
             })
            
             .keydown(function(e) {
                
                    var key = e.charCode || e.keyCode || 0;
                    return ((key >= 48 && key <= 57)||(key >= 96 && key <= 105)||(key == 13)||
                        (key == 190||key == 37||key == 38||key == 40||key == 39||key == 9))
             })
             .keyup(function(e){
                 var nam_new = naminput.val();
                 var key = e.keyCode ;
                 if((key >= 48 && key <= 57)||(key >= 96 && key <= 105))
                 {
                     var idex = indexOf(nam_old,nam_new);   
                     var newChar = String.fromCharCode(e.keyCode);
                     var val = nam_old.substring(0,idex) + newChar + nam_old.substring(idex+1,nam_old.length) ;
                     
                     if(parseInt(val) > 3000 && parseInt(val) < 2000)
                     {
                        naminput.val(nam_old);
                     }
                     else 
                     {
                        naminput.val(val);
                        nam_old = val ;
                     }
                     
                     
                     naminput.focus();
                     
                 }
                 else if(key == 8)
                 {
                     var idex = indexOf(nam_old,nam_new);   
                     var val = nam_old.substring(0,idex) + "0" + nam_old.substring(idex+1,nam_old.length) ;
                     naminput.val(val);
                     naminput.focus();
                     nam_old = val ;
                 }
                 setdate();
             });
   var nam_old = naminput.val();
             
   
   
    var uparrow = $("<span ></span>")
                  .addClass('upArrow')
                  .click(function(){
                        
                        if(ngayinput.attr('class') =='datepicker_ngay_focus')
                        {
                            var ngay_new = parseInt(ngay_old) - 1 ;
                            if(parseInt(ngay_new)<32 && parseInt(ngay_new)>=10){
                                
                                ngayinput.val(ngay_new);
                                ngay_old = ngay_new.toString() ;
                            }
                            else if(parseInt(ngay_new)<10 && parseInt(ngay_new) > 0)
                            {
                                ngayinput.val('0'+ngay_new);
                                ngay_old = ngay_new.toString() ;
                            }
                            ngayinput.focus();
                        } 
                        else if(thanginput.attr('class') == 'datepicker_thang_focus')
                        {
                           
                             var thang_new = parseInt(thang_old.toString()) - parseInt('1') ;
                            // alert(parseInt(thang_old.toString())+":"+thang_new);
                            if(parseInt(thang_new)<=12 && parseInt(thang_new)>=10){
                                
                                thanginput.val(thang_new);
                                thang_old = thang_new.toString() ;
                            }
                            else if(parseInt(thang_new)<10 && parseInt(thang_new) > 0)
                            {
                                thanginput.val('0'+thang_new);
                                thang_old = thang_new.toString() ;
                            }
                            
                            thanginput.focus();
                        }
                        else if(naminput.attr('class') == 'datepicker_nam_focus')
                        {
                            var nam_new = parseInt(nam_old) - 1 ;
                            if(parseInt(nam_new)<=3000 && parseInt(nam_new)>=1500){
                                
                                naminput.val(nam_new);
                                nam_old = nam_new.toString() ;
                            }
                            
                            naminput.focus();
                        }
                        setdate();
                  });
                  
                  
                  
    var downarrow = $("<span ></span>")
                  .addClass('downArrow')
                  .click(function(){
                        if(ngayinput.attr('class') =='datepicker_ngay_focus')
                        {
                            var ngay_new = parseInt(ngay_old) + 1 ;
                            if(parseInt(ngay_new)<32 && parseInt(ngay_new)>=10){
                                
                                ngayinput.val(ngay_new);
                                ngay_old = ngay_new.toString() ;
                            }
                            else if(parseInt(ngay_new)<10)
                            {
                                ngayinput.val('0'+ngay_new);
                                ngay_old = ngay_new.toString() ;
                            }
                            
                            ngayinput.focus();
                        } 
                        else if(thanginput.attr('class') == 'datepicker_thang_focus')
                        {
                            //alert(thang_old);
                            var thang_new = parseInt(thang_old.toString()) + parseInt('1') ;
                             //alert(parseInt(thang_old.toString())+":"+thang_new);
                            if(parseInt(thang_new)<=12 && parseInt(thang_new)>=10){
                                
                                thanginput.val(thang_new);
                                thang_old = thang_new.toString() ;
                            }
                            else if(parseInt(thang_new)<10 && parseInt(thang_new) > 0)
                            {
                                thanginput.val('0'+thang_new);
                                thang_old = thang_new.toString() ;
                            }
                            
                            thanginput.focus();
                        }
                        else if(naminput.attr('class') == 'datepicker_nam_focus')
                        {
                            var nam_new = parseInt(nam_old) + 1 ;
                            if(parseInt(nam_new)<=3000 && parseInt(nam_new)>=1500){
                                
                                naminput.val(nam_new);
                                nam_old = nam_new.toString() ;
                            }
                            
                            naminput.focus();
                        }
                        setdate();
                  });
                   
                   
   var arrow = $("<div/>")
                .css('width','15px')
                .css('height','16px')
                .css('padding-top',"2px")
                .css('float','right')
                .css('margin','0px')
                .append(downarrow)
                .append(uparrow);
                          
    var w = (parseFloat((token_list.width()-18).toString())/parseFloat(token_list.width().toString())*100 - parseFloat('2')).toString()+"%" ;
    
 
    
    if ($.isFunction(settings.onkeydown)) {
            ngayinput.keydown(function(e){
                settings.onkeydown(e);                       
            });                        
    }
   //-------------onblur -----------------------
    if ($.isFunction(settings.onblur)){
            ngayinput.blur(function(){
                settings.onblur();                       
            });                        
    }   
    
  

    datepickerinput.datepicker({
            showButtonPanel: true,
            
            changeMonth: true,
            changeYear: true,
            dateFormat:'dd/mm/yy',
            defaultDate: +0,
            onSelect: function(dateText, inst)
            {
               //jQuery("#Ngaytao_input").val(dateText);	
                ngayinput.focus();
                var arr = dateText.split('/');
                ngayinput.val(arr[0]);
                thanginput.val(arr[1]);
                naminput.val(arr[2]);
                
                ngay_old = ngayinput.val() ;
                var idx_ngay = ngay_old.indexOf('0');
                if(idx_ngay != -1){
                    ngay_old = ngay_old.substring(1,2)
                }
                
                thang_old = thanginput.val();
                var idx_thang = thang_old.indexOf('0');
                if(idx_thang != -1){
                    thang_old = thang_old.substring(1,2)
                }
                
                nam_old = naminput.val();
            }
        })
        
   
    var _span = $("<a href='#'></a>")
            .addClass('listSearch')
        .click(function () {
            
           datepickerinput.datepicker('show')
             
        });


    

    if(settings.picker){
         var input_token = $("<li />")
        .addClass(settings.classes.inputToken)
        .appendTo(token_list)
        .append(ngayinput)
        .append(span)
        .append(thanginput)
        .append(span)
        .append(naminput)
        .append(datepickerinput)
        .append(_span)
        .append(arrow);
    
    }  
    else 
    {
        var input_token = $("<li />")
        .addClass(settings.classes.inputToken)
        .appendTo(token_list)
        .append(ngayinput)
        .append(span)
        .append(thanginput)
        .append(span)
        .append(naminput)
        .append(datepickerinput)
        .append(_span)
        
    }
    
     
    //---------------------------------------------------------------------------------
    
    //-------index char ---------------------------------------------------------------
    function indexOf(str_old,str_new)
    {
        var length = str_old.length;
        var idex = 0, flag= false;
        
        for(var i = 0 ; i<=length- 1; i++)
        {
            var value_new = str_new.charAt(i) ;
            var value_old = str_old.charAt(i) ;
            if(value_new != value_old)
            {
                idex = i ;
                //alert(value_new+":"+value_old +":"+i);
                flag = true;
                break;
            }
        }
        
        if(!flag)
        {
            idex = length -1 ;
        }
        
        return idex ;
    }
    
    function is_printable_character(keycode) {
        if((keycode >= 48 && keycode <= 90) ||      // 0-1a-z
           (keycode >= 96 && keycode <= 111) ||     // numpad 0-9 + - / * .
           (keycode >= 186 && keycode <= 192) ||    // ; = , - . / ^
           (keycode >= 219 && keycode <= 222)       // ( \ ) '
          ) {
              return true;
          } else {
              return false;
          }
    }

    
    
    //---set gia tri ngay----------------
    function setdate()
    {
        var date = ngayinput.val()+"/"+thanginput.val()+"/"+naminput.val() ;
        hidden_input.val(date);
        
    }


};


})(jQuery);
	
	
	
	
	
	
	
	
	
	
	
	