(function($) {
    
    var $activeElm = null;
    
    $.fn.calendar = function(settings) {
    	var config = {};

    	if (settings) $.extend(config, settings);
          
    	this.each(function() {
        
        if(config.minYear) {
          $(this).data('minYear', settings.minYear);
        }
        
        if(config.maxYear) {
          $(this).data('maxYear', settings.maxYear);
        }
        
        if(config.noYear === true) {
          $(this).data('noYear', 'true');
        }
        
    		$(this).focus(function() {
    			calendarPopup($(this));
    		}).keydown(function() {
    			calendarPopup($(this));
    			return false;
    		});
    	});

    	return this;

    };


   var calendarPopup = function($elm) {
        
        $activeElm = $elm;
       
       if($('.calendarPopup').length == 0) {
           var months = ['','January','February','March','April','May','June','July','August','September','October','November','December'];
           $('body').append('<div class="calendarBlinder"></div><div class="calendarPopup"><div class="inner"></div></div>');

           var monthOptions = '';
           for(var i=1; i<13; i++) {
               monthOptions += '<option value="'+months[i]+'">'+months[i]+'</option>'
           }
           $('.calendarPopup .inner').append('<select class="months"><option value="" selected="selected">month</option>'+monthOptions+'</ul>');

           var yearOptions = '';
           for(var i=2010; i>1899; i--) {
               yearOptions += '<option value="'+i+'">'+i+'</option>'
           }
           $('.calendarPopup .inner').append('<select class="year"><option value="" selected="selected">Year (optional)</option>'+yearOptions+'</select>');

           var daysLi = '';
           for(var i=1; i<32; i++) {
               daysLi += '<li><a href="#" rel="'+i+'">'+i+'</a></li>'
           }
           $('.calendarPopup .inner').append('<div style="clear: both"></div><ul class="days">'+daysLi+'</ul>'); 

           $('.calendarPopup .year').uniform().change(function(){
               if($('.calendarPopup .days li a.active').length != 0 && $('.calendarPopup .months').val() != '') {
                   calendarClose();
               }
           });         

           $('.calendarPopup .months').uniform().change(function(){
               if($('.calendarPopup .days li a.active').length != 0) {
                   calendarClose();
               }
           }); 

           $('.calendarPopup .days a').click(function(){
               $('.calendarPopup .days a').removeClass('active');
               $(this).addClass('active');
               if($('.calendarPopup .months').val() != '' && $('.calendarPopup .months').val() != null) {
                   calendarClose();
               }
               return false;
           });
       }
              
       $('.calendarPopup .year').val('');
       $('.calendarPopup .months').val('');
       $('.calendarPopup a').removeClass('active');
       
       if($elm.data('minYear') && $elm.data('maxYear')) {
         var yearOptions = '<option value="" selected="selected">Year (optional)</option>';
          for(var i=$elm.data('minYear'); i<$elm.data('maxYear')+1; i++) {
              yearOptions += '<option value="'+i+'">'+i+'</option>'
          }
          $('select.year').empty().append(yearOptions);
       } else {
         var yearOptions = '<option value="" selected="selected">Year (optional)</option>';
          for(var i=2010; i>1899; i--) {
              yearOptions += '<option value="'+i+'">'+i+'</option>'
          }
          $('select.year').empty().append(yearOptions);
       }
       
       $.uniform.update();
       
       if($activeElm.data('noYear') === 'true') {
         $('.calendarPopup .year').val('').parent().hide();
       } else {
         $('.calendarPopup .year').parent().show();
       }
       

       
       if($elm.val() != '' && $elm.val() != $elm.attr('default')) {
           var date = $elm.val().replace(',','').split(' ');
           if(date[0] != '') {
               $('.calendarPopup .months').val(date[0]);
           }   
           if(date[1] > 0) {
               $('.calendarPopup .days li a[rel='+date[1]+']').addClass('active');
           }
           if(date[2] > 0) {
               $('.calendarPopup .year').val(date[2]);
           }
           $.uniform.update();
       }
       
       $('.calendarBlinder').height($(document).height()).show().click(function(){
           calendarClose();
       });
       
       var left = $elm.offset().left
              
       if(left + $('.calendarPopup').width() > $(window).width() - 20) {
         left = $(window).width() - $('.calendarPopup').outerWidth() - 20;        
       }
       
       $('.calendarPopup').css({top: $elm.offset().top+$elm.height(), left: left }).show();

   }
   
   var calendarClose = function() {
                  
       $cal = $('.calendarPopup');
       
       if($('.month',$cal).val() == '' || $('.days li a.active', $cal).length == 0) {
           $activeElm.val('');
           $activeElm.addClass('default');
           $cal.hide();
           $activeElm.blur();
           $('.calendarBlinder').hide();
           return true;
       }   
       
       var year = $('.year', $cal).val();
       var month = $('.months', $cal).val();
       var day = $('.days li a.active', $cal).text();
       
       $activeElm.val(month+' '+day);
       
       if(year != '') {
           $activeElm.val($activeElm.val() + ', '+year);
       }
       
       $activeElm.removeClass('default');
       $activeElm.change();
       $('.calendarBlinder').hide();
       $cal.hide();
   }
   
 })(jQuery);
