(function($){
	var str_jan = '一';
	var str_feb = '二';
	var str_mar = '三';
	var str_apr = '四';
	var str_may = '五';
	var str_june = '六';
	var str_july = '七';
	var str_aug = '八';
	var str_sept = '九';
	var str_oct = '十';
	var str_nov = '十一';
	var str_dec = '十二';	
	var str_monday = '一';
	var str_tuesday = '二';
	var str_wednesday = '三';
	var str_thursday = '四';
	var str_friday = '五';
	var str_saturday = '六';
	var str_sunday = '日';
	var str_canceled = '已取消';
	var str_are_you_sure = '是否确认?';
	var str_choose_date = '选择日期';
	var str_year = '年';
	var str_month = '月';
	var str_current_time = '当前时间';
	var str_close = '关闭';

    var ___d = new Date(); 
    $.extend({ 
        selectDateSettings:{ 
            date:___d.getFullYear()+"-"+(___d.getMonth()+1)+"-"+___d.getDate(),  //当前时间格式为yyyy-mm-dd
            startYear:___d.getFullYear()-20, //设置日期范围的开始年 
            endYear:___d.getFullYear()+5, //设置日期范围的结束年 
            dateFormat:"yyyy-mm-dd", //默认的日期格式为yyyy-mm-dd,你可以设置为你自己想要的格式，如mm/dd/yyyy 
            autoclose:false, //选择完成日期后自动关闭日期选择器
			callback:null
        }, 
        selectDateSetup: function( settings ) { 
            $.extend( $.selectDateSettings, settings ); 
        } 
    }) 
    $.fn.extend({ 
        selectDate:function(){ 
            var _d = new Date(); 
            var _tem = Math.floor(Math.random() * (999 + 1)) + Math.floor(Math.random() * (999 + 1)) + Math.floor(Math.random() * (999 + 1)) ; 
            var isUse = false;
            var nowDate = eval("new Date("+$.selectDateSettings.date.replace(new RegExp("-","gm"),",")+")"); 
            nowDate.setMonth(nowDate.getMonth()-1); 

			var _select_year,_select_month;//为了google的补丁，因为select触发change事件以后没有变化

            return this.each(function(){ 
                var __showDate = function(_obj) 
                { 
                	if(isUse){
                	   return;
                    }else{
                 		isUse = true;   	
                    }
                
                    var _strYear = new Array(); 
                    var _strMonth = new Array(); 
                    var _mon = new Array(str_jan, str_feb, str_mar, str_apr, str_may, str_june, str_july, str_aug, str_sept, str_oct, str_nov, str_dec); 
                    var _left = parseInt($(_obj).offset().left); 
                    var _top = parseInt($(_obj).offset().top); 
                    var _width = parseInt($(_obj).width()); 
                    var _height = parseInt($(_obj).height()); 
                     
                    var _maxindex = function(){ 
                        var ___index = 0; 
                        $.each($("*"),function(i,n){ 
                             var __tem = $(n).css("z-index"); 
                             if(__tem>0) 
                             { 
                                if(__tem > ___index) 
                                { 
                                    ___index = __tem + 1;    
                                } 
                             } 
                         }); 
                        return ___index; 
                    }(); 
                    
                    for(var i = 0 ; i < 12 ; i++) 
                    { 
                        if(i == nowDate.getMonth()) 
                        { 
                            _strMonth.push('<option value="'+(i+1)+'" selected="selected">'+_mon[i]+'</option>'); 
							_select_month = (i+1);
                        } 
                        else 
                        { 
                            _strMonth.push('<option value="'+(i+1)+'">'+_mon[i]+'</option>'); 
                        } 
                    } 
					var nowYear = nowDate.getYear();
					if(nowYear<1900){
						nowYear+=1900;
					}
					for(var j = $.selectDateSettings.startYear ; j <= $.selectDateSettings.endYear ; j++) 
                    { 
                        if(j == nowYear) 
                        { 
                            _strYear.push('<option value="'+j+'" selected="selected">'+j+'</option>'); 
							_select_year = j;
                        } 
                        else 
                        { 
                            _strYear.push('<option value="'+j+'">'+j+'</option>'); 
                        } 
                    } 
                    var getDayStr = function(y,m) 
                    { 
                        var year; 
                        var month; 
                        var nextyear; 
                        var nextmonth; 
                        if(y=="" || y==undefined) 
                        { 							
                            year = parseInt(_select_year);//parseInt($("select[id=year_"+_tem+"] option[selected]").val()); 
                            month = parseInt(_select_month);//parseInt($("select[id=mon_"+_tem+"] option[selected]").val()); 
                        } 
                        else 
                        { 
                            year = parseInt(y); 
                            month = parseInt(m); 
                        } 
                        var _selectD = new Date(year,month-1,1); 
                        if(month==12){ 
                            nextyear = year+1; 
                            nextmonth = 0; 
                        } 
                        else 
                        { 
                            nextyear = year; 
                            nextmonth = month; 
                        } 
                        var _nextD = new Date(nextyear,nextmonth,1); 

                        var __day = parseInt(Math.abs(_nextD - _selectD) / 1000 / 60 / 60 /24); 
                        var __str__ = new Array(); 
						
                        __str__.push('<tr>'); 
						
                        for(var ii = 0 ; ii < _selectD.getDay(); ii++) 
                        { 
                            __str__.push('<td width="22" align="center" valign="middle" bgcolor="#EDF2FC"> </td>'); 
                        }
                        for(var nn = 1 ; nn <= __day; nn++) 
                        {							
                            var _DD_ = new Date(year,month-1,nn); 
                            __str__.push('<td width="22" align="center" valign="middle" style="cursor:pointer; background-color:#EDF2FC;height:22px;" class="king_date_css" onmouseover="this.style.backgroundColor=\'#1061c6\'; this.style.color=\'#fff\'" onmouseout="this.style.backgroundColor=\'#EDF2FC\';this.style.color=\'#000\'" style="color:#000000">'+nn+'</td>'); 
                            if(_DD_.getDay()==6) 
                            { 
                                __str__.push('</tr>'); 
                                if(nn<__day) 
                                { 
                                    __str__.push('<tr>'); 
                                } 
                            } 
                        } 
                        var __NN__ = _selectD.getDay() + __day; 
                        var __mod__ = __NN__%7 
                        if(__mod__!=0){ 
                            for(var mm = 0 ; mm < (7-__mod__) ; mm++) 
                            { 
                                __str__.push('<td width="22" align="center" valign="middle" bgcolor="#EDF2FC" style="height:22px;"> </td>'); 
                            } 
                            __str__.push('</tr>'); 
                        } 
                        return '<table cellpadding="0" cellspacing="1" style="background-color:#CCCCCC; font-size:12px;color:#000000;"><tr><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_sunday+'</td><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_monday+'</td><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_tuesday+'</td><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_wednesday+'</td><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_thursday+'</td><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_friday+'</td><td width="22" align="center" valign="middle" bgcolor="#EDF2FC">'+str_saturday+'</td></tr>'+__str__.join("")+'</table>'; 
                    } 

                    
					var __changeDate = function(obj) { 
                        $("#daystr_"+_tem).empty(); 
                        $("#daystr_"+_tem).append(getDayStr()); 
						
						$(".king_date_css").click(function(){ 
                            var _y_ = ""+_select_year;//$("select[id=year_"+_tem+"] option[selected]").val(); 
                            var _m_ = ""+_select_month;//$("select[id=mon_"+_tem+"] option[selected]").val(); 
						    var _d_ = $(this).text(); 
                            _m_ = _m_.length < 2 ? "0"+_m_ : _m_; 
                            _d_ = _d_.length < 2 ? "0"+_d_ : _d_; 
                            var returndate = $.selectDateSettings.dateFormat.replace("yyyy",_y_).replace("mm",_m_).replace("dd",_d_); 
                            $(_obj).val(returndate); 
							if($.selectDateSettings.callback){
								if (typeof $.selectDateSettings.callback == 'function'){
									$.selectDateSettings.callback($(_obj).val());
								}
							}
							if($.selectDateSettings.autoclose){
								$(document).trigger("click");								
							}
                        }); 
                    } 
					
                    
					var _str = '<div id="dateShowDiv_'+_tem+'" style="width:154px;position:absolute;color:#000000;z-index:'+_maxindex+';left:'+(_left+_width)+'px;top:'+(_top+_height)+'px;"><table cellpadding="0" cellspacing="3" width="154" style="background-color:#7093bf;"><tr><td><table cellpadding="0" cellspacing="1" style="background-color:#EDF2FC; font-size:12px; width:100%;"><tr style="height:25px;"><td>  <select id="year_'+_tem+'">'+_strYear.join("")+'</select> '+str_year+'</td><td><select id="mon_'+_tem+'">'+_strMonth.join("")+'</select> '+str_month+' </td></tr></table></td></tr><tr><td><span id="daystr_'+_tem+'"></span></td></tr><tr>  <td><div style="text-align:center; height:22px; line-height:22px;"><a href="javascript:void(null);" id="currentdate_'+_tem+'" style="font-size:12px; color:#fff; text-align:center; text-decoration:none;">'+str_current_time+'</a> <a href="javascript:void(0)" onclick="$(document).trigger(\'click\');" style="color:#fff">'+str_close+'</a></div></td></tr></table></div>'; 
                    $("body").append(_str); 
					$("#daystr_"+_tem).append(getDayStr()); 
                    $("#year_"+_tem).change(function(){
						_select_year = this.value;
                        __changeDate(this); 
                    }); 
                    $("#mon_"+_tem).change(function(){ 
						_select_month = this.value;
                        __changeDate(this); 
                    }); 
                    $(".king_date_css").click(function(){ 
                        var _y_ = ""+_select_year;//$("select[id=year_"+_tem+"] option[selected]").val(); 
                        var _m_ = ""+_select_month;//$("select[id=mon_"+_tem+"] option[selected]").val(); 
                        var _d_ = $(this).text(); 
						
                        _m_ = _m_.length < 2 ? "0"+_m_ : _m_; 
                        _d_ = _d_.length < 2 ? "0"+_d_ : _d_; 
						
                        var returndate = $.selectDateSettings.dateFormat.replace("yyyy",_y_).replace("mm",_m_).replace("dd",_d_); 
                        $(_obj).val(returndate); 
						if($.selectDateSettings.callback){
							if (typeof $.selectDateSettings.callback == 'function'){
								$.selectDateSettings.callback($(_obj).val());
							}
						}
						if($.selectDateSettings.autoclose){
							$(document).trigger("click");								
						}								
                    }); 
                    $("#currentdate_"+_tem).click(function(){
                        var _m_ = (nowDate.getMonth()+1).toString(); 
                        var _d_ = nowDate.getDate().toString(); 
                        _m_ = _m_.length < 2 ? "0"+_m_ : _m_; 
                        _d_ = _d_.length < 2 ? "0"+_d_ : _d_; 
                        var returndate = $.selectDateSettings.dateFormat.replace("yyyy",nowDate.getFullYear()).replace("mm",_m_).replace("dd",_d_); 
                        $(_obj).val(returndate); 
						if($.selectDateSettings.callback){
							if (typeof $.selectDateSettings.callback == 'function'){
								$.selectDateSettings.callback($(_obj).val());
							}
						}
						if($.selectDateSettings.autoclose){
							$(document).trigger("click");								
						}
                    }); 
                }

                $(this).click(function(){ 
                    __showDate(this); 
                }); 
                var _sobj = this; 
                $(document).click(function(e){ 
                    e = e ? e : window.event; 
                    var tag = e.srcElement || e.target; 
                    if(_sobj.id==tag.id)return; 
                    var _temObj = tag; 
                    while(_temObj) 
                    { 
                        if(_temObj.id=="dateShowDiv_"+_tem)return; 
                        _temObj = _temObj.parentNode; 
                    } 
                    $("#dateShowDiv_"+_tem).remove();     
                    isUse =false ;          
                }); 
            }); 
        } 
    }); 
})(jQuery);

