(function(){
	angular.module("app")
		.directive("myDatepicker",["ToolService","DateService","UtilService",myDatepicker])
		.directive("singleDatepicker",singleDatepicker)
		.directive("myDateweek",['UtilService',myDateweek])
		.directive("myDatemonth",['UtilService',myDatemonth]);

		var tempVersion = new Date().getTime();
		/*日期 多日期*/
		function myDatepicker(ToolService,DateService,UtilService) {
		    var today = Date.today();
		    var defaultOpsn = {
		        abbrWeeks: ['日', '一', '二', '三', '四', '五', '六'],
		        format: 'YYYY-MM-DD',
		        min: null,
		        max: today,
		        start: today,
		        end: today,
		        current: today,
		        months: 2, //默认显示2个面板
		        chooseCls: 'is-choose',
		        todayCls: 'is-today'
		    };

		    return {
		        restrict: 'EA',
		        transclude: true,
		        replace:true,
		        templateUrl: '/template/common/datepicker.html?r='+tempVersion,
		        scope: {
		            dateName:'@', //日期传递名称
		            noMax:"@", //是否有最大日期限制
		            rangeDays:"@", //最多日期范围 -1:不需要控制范围
		            rangeDays2:"=", //最多日期范围,动态
		            initDay:"=", //初始化显示日期
		            maxDay:'@',  //最大日期选择,默认为今天,-1为昨天。。。
		            maxDay2:"=", //同上,动态传参
		            operationSel:"=", //当前可否操作
		            min:"="
		        },
		        link: function(scope, elem, attrs) {
		        	scope.maxDay = scope.maxDay || scope.maxDay2;

		        	var ddd = -1;
		        	if(UtilService.isNullStr(scope.maxDay)){
		        		ddd = 0;
		        	}
		        	var cacheDates = {
		            	'yesday':DateService.getYesDay(),
		            	'd7':DateService.getLastDays(-7,ddd),
		            	'd14':DateService.getLastDays(-14,ddd),
		            	'd30':DateService.getLastDays(-30,ddd),
		            	'-w1':DateService.getWeekRangeDate(-1,ddd),
		            	'w0':DateService.getWeekRangeDate(0,ddd),
		            	'-m1':DateService.getMonthRangeDate(-1,ddd),
		            	'm0':DateService.getMonthRangeDate(0,ddd)
		            }
		            scope.$watch("operationSel",function(n){
		             	if(angular.isUndefined(scope.operationSel)){
			             	scope.operSel = true;
			            }
			            else{
			            	scope.operSel = n;
			            }
		            });
		            //根据选择日期设置相对时间范围flag
		            scope.getRelativeFlag = function(startDate,endDate){
		            	var relFlag = "";
		            	for(var k in cacheDates){
	                		var range = cacheDates[k];
	                		if(startDate == range.startDate && endDate == range.endDate){
	                			relFlag = k;
	                			break;
	                		}
	                	}
	                	scope.selDayflag = relFlag;
		            }
		            //把初始化日期赋值到日期框里面
		            scope.$watch("initDay",function(n){
		            	if(angular.isDefined(n) && n.startDate){
		            		if(!scope.options.start.isSameDay(new Date(n.startDate)) || !scope.options.end.isSameDay(new Date(n.endDate))){
		            			scope.getRelativeFlag(n.startDate,n.endDate);
			            		scope.options.start = scope.completeStrat = new Date(n.startDate);
			            		scope.options.end = scope.completeEnd = new Date(n.endDate);
		            		}
		            	}
		            });
		        	scope.selme = false;
		        	scope.$watch("rangeDays+rangeDays2",function(e){
		        		var rds = scope.rangeDays || scope.rangeDays2;
		        		if(angular.isDefined(rds)){
			        		scope.rgDays = Number(rds);
			        	}else{
			        		scope.rgDays = 31;
			        	}
		        	});
		        	
		            var maxTime = today,emitName = scope.dateName || "dateCustos";
		            if(scope.maxDay && scope.maxDay == -1){
		            	maxTime = Date.yesterday();
		            }
		            //如果最大可选日期不是当天,则在当前年上加上100年
		            if(scope.noMax && scope.noMax == 'true'){
		                var future = Date.today();
		                future.setFullYear(today.getFullYear()+100);
		                maxTime = future;
		            }

		            var minTime = "";
		            scope.$watch("min",function(n){
		            	if(angular.isDefined(n)){
		            		minTime = new Date(n).addDays(-1);
		            	}
		            });
		            var defaultOps = UtilService.cloneJSON(defaultOpsn);
		            var setOption = function() {
		                defaultOps.start = maxTime;
		                defaultOps.end = maxTime;
		                defaultOps.max = maxTime;
		                defaultOps.current = today;
		                scope.options = angular.extend(defaultOps, scope.options || {});
		                //清除时分秒毫秒
		                scope.options.start.clearTime();
		                scope.options.end.clearTime();

		                scope.completeStrat = scope.options.start;
		                scope.completeEnd = scope.options.end;
		                scope.customStrat = scope.options.start.toFormat(scope.options.format);
		                scope.customEnd = scope.options.end.toFormat(scope.options.format);

		                //最后一个日期面板的日期
		                scope.panelEndDate = Date.getFirstDay(scope.options.end); 
		            };
		            setOption();
		            var render = function(date) {
		                var panels = [],
		                    months = scope.options.months,
		                    date = (date || scope.panelEndDate).clone();
		                for (var p = 0; p < months; p++) {
		                    var weeks = [],
		                        dateOfPanel = date.clone().addMonths(-(months - 1 - p)), //每个日期面板的日期
		                        firstDay = Date.getFirstDay(dateOfPanel), //该月的第一天
		                        firstWeekDay = firstDay.getDay(), //该月的一个星期
		                        daysOfMonth = Date.getDaysInMonth(dateOfPanel.getFullYear(), dateOfPanel.getMonth()), //该月有几天
		                        rowNums = Math.ceil((firstWeekDay + daysOfMonth) / 7), //该月日历的行数
		                        curDate = firstDay.clone().addDays(-firstWeekDay); //循环遍历的日期

		                    for (var i = 0; i < rowNums; i++) {
		                        // weeks.push([])
		                        var days = [];
		                        for (var j = 0; j < 7; j++) {
		                            var tmp = curDate.clone();
		                            days.push({
		                                day: tmp,
		                                choose: tmp.between(scope.options.start, scope.options.end),
		                                other: tmp.getMonth() != dateOfPanel.getMonth(),
		                                today: Date.isSameDay(tmp, today) //是否是今日
		                            });
		                            curDate = curDate.addDays(1);
		                        }

		                        weeks.push(days);
		                    }

		                    panels.push({
		                        date: dateOfPanel,
		                        weeks: weeks
		                    });
		                }
		                //可选最大时间不是今天,禁用"今天,昨天,最近七天按钮,默认显示最大天数"
		                // if (maxTime !== today) {
		                //     scope.complete();
		                //     $(elem).parent().prevAll().hide();
		                // } else {
		                    $(elem).parent().prevAll().show();
		                // }
		                scope.panels = panels;
		                scope.wstyle = {"width":(months*274 + 80)+"px"};
		            };
		            //初始化面板上日期的css
		            scope.cellClass = function(cell) {
		            	if(cell.other){
		            		return "other-month";
		            	}
		            	else if(cell.day.isSameDay(scope.options.start) || cell.day.isSameDay(scope.options.end)){
		            		return "start_end";
		            	}
		            	else if(cell.day.between(scope.options.start, scope.options.end)){
		            		return "choose";
		            	}
		            	else if(cell.day.isSameDay(scope.options.current) && cell.day.isSameDay(maxTime)){
		            		return "is-today";
		            	}
		            	else if(cell.day.isAfter(maxTime) || (minTime!='' && cell.day.isBefore(minTime))){
		            		return "disabled";
		            	}
		            	else{
		            		return "";
		            	}
		            };
		            //切换月份
		            scope.changeMonth = function(index, date, num) {
		                scope.dateMonth = scope.panelEndDate.addMonths(num);
		                render(scope.dateMonth);
		            };
		            //点击显示或隐藏日期面板
		            scope.showDateTable = function() {
		            	if(!scope.operSel){return false;}

		            	var curDateWrap = $(elem).find(".dateTabRange");
		            	$(".dateTabRange").each(function(){
		            		if($(this)!==curDateWrap){
		            			$(this).addClass("ng-hide");
		            		}
		            	});
		            	if(curDateWrap.hasClass("ng-hide")){
		            		scope.showFlag = true;
		            		curDateWrap.removeClass("ng-hide")
		            	}
		            	else{
		            		scope.showFlag = false;
		            		curDateWrap.addClass("ng-hide")
		            	}

		                // if (typeof scope.showFlag == 'undefined') {
		                // 	$(".dateTabRange").addClass("ng-hide");
		                //     scope.showFlag = true;
		                // } else if (scope.showFlag == true) {
		                //     scope.showFlag = false;
		                // } else if (scope.showFlag == false) {
		                // 	$(".dateTabRange").addClass("ng-hide");
		                //     scope.showFlag = true;
		                // }
		            }


		            //选择具体日期
		            var chooseCounts = 0;
		            scope.chooseDate = function(cell) {
		                //是否大于今天
		                // if (cell.day.isAfter(today)) { 
		                //     return;
		                // }
		                //是否大于可选择最大时间
		                if (cell.day.isAfter(maxTime)) { 
		                    return;
		                }
		                //是否小于可选择最小时间
		                if (minTime!='' && cell.day.isBefore(minTime)) { 
		                    return;
		                }
		                if (chooseCounts >= 2) chooseCounts = 0;
		                chooseCounts++;

		                if (chooseCounts === 1) {
		                    scope.options.end = scope.options.start = cell.day;
		                } else if (chooseCounts === 2) {
		                    cell.day.isAfter(scope.options.start) ? scope.options.end = cell.day : scope.options.start = cell.day;
		                }
		            };
		            
		            scope.setRelDate = function(flag){
		            	
		            	var daterange = cacheDates[flag];
		            	if(scope.rgDays!=-1){
		            		var diff = diffDate(daterange.startDate,daterange.endDate);
			            	if(diff > scope.rgDays){
			            		ToolService.showTips("日期范围不能大于"+scope.rgDays+"天");
			            		return false;
			            	}
		            	}

		            	scope.selDayflag = flag;
		            	if(minTime!='' && new Date(daterange.startDate).isBefore(minTime)){
		            		ToolService.showTips("超出最小可选日期限制了");
		            		return;
		            	}
		            	else{
		            		scope.options.start = new Date(daterange.startDate);
		            	}

		            	if(minTime!='' && new Date(daterange.endDate).isBefore(minTime)){
		            		ToolService.showTips("超出最小可选日期限制了");
		            		return;
		            	}
		            	else{
		            		scope.options.end = new Date(daterange.endDate);
		            	}
		            	
		            	scope.complete(1);
		            }
		            //点击确定,完成日期选择,传递日期
		            scope.complete = function(isrel) {
		            	if(angular.isUndefined(isrel) && scope.rgDays!=-1){
		            		var diff = diffDate(scope.options.start,scope.options.end)
			            	if(diff > scope.rgDays){
			            		ToolService.showTips("日期范围不能大于"+scope.rgDays+"天");
			            		return false;
			            	}
		            	}
		            	
		            	scope.completeStrat = scope.options.start;
		                scope.completeEnd = scope.options.end;

		                var startDate = scope.completeStrat.toFormat(scope.options.format),endDate = scope.completeEnd.toFormat(scope.options.format);
		                if(angular.isUndefined(isrel)){
		                	scope.getRelativeFlag(startDate,endDate);
		                	
		                }
		               	scope.$emit(emitName, {"startDate":startDate,"endDate":endDate,"dateflag":scope.selDayflag});
		                
		                scope.showFlag = false;
		            };
		            //取消选择,关闭面板
		            scope.cancel = function() {
		            	if(scope.options.start != scope.completeStrat || scope.options.end != scope.completeEnd){
		            		scope.options.start = scope.completeStrat;
			                scope.options.end = scope.completeEnd;
			                scope.getRelativeFlag(scope.completeStrat.toFormat(scope.options.format),scope.completeEnd.toFormat(scope.options.format));
		            	}
		            	scope.showFlag = false;
		            };
		            //检测选择日期操作
		            scope.$watch('options.start+options.end', function() {
		            	scope.customStrat = scope.options.start.toFormat(scope.options.format);
		                scope.customEnd = scope.options.end.toFormat(scope.options.format);
		            });
		            render();

		            $(document).on("click",function(){
		                scope.cancel();
		                scope.$apply();
		            });
		        }
		    };
		};

		/*单日期控件*/
		function singleDatepicker() {
		    var today = Date.today();
		    var defaultOps = {
		        abbrWeeks: ['日', '一', '二', '三', '四', '五', '六'],
		        format: 'YYYY-MM-DD',
		        min: null,
		        max: today,
		        start: today,
		        end: today,
		        current: today,
		        months: 1, 
		        chooseCls: 'is-choose',
		        todayCls: 'is-today'
		    };

		    return {
		        restrict: 'EA',
		        transclude: true,
		        replace:true,
		        templateUrl: '/template/common/datepicker.html?r='+tempVersion,
		        scope: {
		            dateName:"@",
		            campareDays:"=",
		            operationSel:"=" //当前可否操作
		        },
		        link: function(scope, elem, attrs) {
		        	scope.$watch("operationSel",function(n){
		             	if(angular.isUndefined(scope.operationSel)){
			             	scope.operSel = true;
			            }
			            else{
			            	scope.operSel = n;
			            }
		            });

		             var maxTime = today,emitName = scope.dateName;
		             var setOption = function() {
		                defaultOps.start = maxTime;
		                defaultOps.end = maxTime;
		                defaultOps.max = maxTime;
		                defaultOps.current = maxTime;
		                scope.options = angular.extend(defaultOps, scope.options || {});
		                //清除时分秒毫秒
		                scope.options.start.clearTime();
		                scope.options.end.clearTime();

		                scope.completeStrat = scope.options.start;
		                scope.completeEnd = scope.options.end;
		                scope.customStrat = scope.options.start.toFormat(scope.options.format);
		                scope.customEnd = scope.options.end.toFormat(scope.options.format);

		                //最后一个日期面板的日期
		                scope.panelEndDate = Date.getFirstDay(scope.options.end); 
		            };
		            setOption();
		            var render = function(date) {
		                var panels = [],
		                    months = scope.options.months,
		                    date = (date || scope.panelEndDate).clone();

		                months = 1;
		                for (var p = 0; p < months; p++) {
		                    var weeks = [],
		                        dateOfPanel = date.clone().addMonths(-(months - 1 - p)), //每个日期面板的日期
		                        firstDay = Date.getFirstDay(dateOfPanel), //该月的第一天
		                        firstWeekDay = firstDay.getDay(), //该月的一个星期
		                        daysOfMonth = Date.getDaysInMonth(dateOfPanel.getFullYear(), dateOfPanel.getMonth()), //该月有几天
		                        rowNums = Math.ceil((firstWeekDay + daysOfMonth) / 7), //该月日历的行数
		                        curDate = firstDay.clone().addDays(-firstWeekDay); //循环遍历的日期

		                    for (var i = 0; i < rowNums; i++) {
		                        // weeks.push([])
		                        var days = [];
		                        for (var j = 0; j < 7; j++) {
		                            var tmp = curDate.clone();
		                            days.push({
		                                day: tmp,
		                                choose: tmp.between(scope.options.start, scope.options.end),
		                                other: tmp.getMonth() != dateOfPanel.getMonth(),
		                                today: Date.isSameDay(tmp, today) //是否是今日
		                            });
		                            curDate = curDate.addDays(1);
		                        }

		                        weeks.push(days);
		                    }

		                    panels.push({
		                        date: dateOfPanel,
		                        weeks: weeks
		                    });
		                }
		                //可选最大时间不是今天,禁用"今天,昨天,最近七天按钮,默认显示最大天数"
		                if (maxTime !== today) {
		                    scope.complete();
		                    $(elem).parent().prevAll().hide();
		                } else {
		                    $(elem).parent().prevAll().show();
		                }
		                scope.panels = panels;
		                scope.wstyle = {"width":months*274+"px"};
		            };
		            scope.cellClass = function(cell) {
		                return cell.other ? "other-month" :
		                    cell.day.between(scope.options.start, scope.options.end) ? "choose" :
		                    cell.day.isSameDay(maxTime) ? "is-today" :
		                    cell.day.isAfter(maxTime) ? "disabled" : '';
		            };
		            scope.changeMonth = function(index, date, num) {
		                scope.dateMonth = scope.panelEndDate.addMonths(num);
		                render(scope.dateMonth);
		            };
		            
		            scope.showDateTable = function() {
		            	if(!scope.operSel){return false;}
		            	
		                if (typeof scope.showFlag == 'undefined') {
		                    scope.showFlag = true;
		                } else if (scope.showFlag == true) {
		                    scope.showFlag = false;
		                } else if (scope.showFlag == false) {
		                    scope.showFlag = true;
		                }
		            }

		            var chooseCounts = 0;
		            scope.chooseDate = function(cell) {
		                //是否大于今天
		                if (cell.day.isAfter(today)) { 
		                    return;
		                }
		                //是否大于可选择最大时间
		                if (cell.day.isAfter(maxTime)) { 
		                    return;
		                }
		                if (chooseCounts >= 2) chooseCounts = 0;
		                chooseCounts++;

		                //如果有对比日期,用所选日期-去对比天数=对比开始日期
		                if(angular.isDefined(scope.campareDays) && scope.campareDays>0){
		                    scope.options.end = cell.day;
		                    scope.options.start = new Date(addDate(cell.day,-scope.campareDays));
		                }else{
		                    scope.options.end = scope.options.start = cell.day;
		                }
		                scope.complete();
		            };
		            scope.complete = function() {
		                scope.completeStrat = scope.options.start;
		                scope.completeEnd = scope.options.end;
		              
		                if(angular.isDefined(scope.campareDays) && scope.campareDays>0){
		                    scope.$emit(emitName, scope.completeStrat.toFormat(scope.options.format) + ' - ' + scope.completeEnd.toFormat(scope.options.format));
		                }else{
		                    scope.$emit(emitName, scope.completeStrat.toFormat(scope.options.format));
		                }
		                scope.showFlag = false;
		            };
		            scope.cancel = function() {
		                scope.options.start = scope.completeStrat;
		                scope.options.end = scope.completeEnd;
		                scope.showFlag = false;
		            };
		            scope.$watch('options.start+options.end', function() {
		                scope.customStrat = scope.options.start.toFormat(scope.options.format);
		                scope.customEnd = scope.options.end.toFormat(scope.options.format);
		            });
		            render();

		            $(document).on("click",function(){
		                scope.cancel();
		                scope.$apply();
		            });
		        }
		    };
		};


	/*日期 选择周*/
	function myDateweek(UtilService) {
	    var today = Date.yesterday();

	    return {
	        restrict: 'EA',
	        transclude: true,
	        replace:true,
	        templateUrl: '/template/common/dateweek.html?r='+tempVersion,
	        scope: {
	            dateName:"@",
	            weeks:"@"
	        },
	        link: function(scope, elem, attrs) {
	            scope.options = {};
	            if(scope.weeks){
	                scope.options.weeks = scope.weeks;
	            }else{
	                scope.options.weeks = 1;
	            }

	            scope.showDateTable = function() {
	                if (typeof scope.showFlag == 'undefined') {
	                    scope.showFlag = true;
	                } else if (scope.showFlag == true) {
	                    scope.showFlag = false;
	                } else if (scope.showFlag == false) {
	                    scope.showFlag = true;
	                }
	            }

	            var nyear = scope.nowyear = today.getFullYear();
	            var selectday = today.clone();

	            var nowW = new Date().getDay();
	            nowW = nowW == 0 ? 7 : nowW;
	            scope.options.start = scope.options.end = {
	                week : getNowWeek(),
	                date : new Date().clone().addDays(7 - nowW),
	                year : scope.nowyear
	            }

	            scope.setWeeklist = function(){
	                scope.weeklist = [];
	                var weeknum = 7;
	                var firstDay = new Date(scope.nowyear, 0, 1),fw = firstDay.getDay();
	                var maxDay = new Date(scope.nowyear, 11, 31),rowweek = [];

	                fw = fw == 0 ? 7 :fw;
	                var endDay = firstDay.clone().addDays(7 - fw),w = 0;
	                if(fw > 0 && fw < 5){ //当年的第一天为周五周六周日并到上一年
	                    w = 1;
	                    rowweek.push({
	                        week : w,
	                        // date : endDay.toFormat("YYYY-MM-DD"),
	                        date : endDay,
	                        year : scope.nowyear
	                    });
	                }

	                while(endDay < maxDay && !maxDay.isSameDay(endDay)){
	                    w ++ ;
	                    endDay = endDay.clone().addDays(7);
	                    rowweek.push({
	                        week : w,
	                        // date : endDay.toFormat("YYYY-MM-DD"),
	                        date : endDay,
	                        year : scope.nowyear
	                    });

	                    if(w % weeknum == 0){
	                        scope.weeklist.push(rowweek);
	                        rowweek = [];
	                    }
	                }
	   
	                var lastDay = new Date(scope.nowyear, 11, 31),lastW = lastDay.getDay();
	                //当年最后一天是周五周六或者周日时,移到下一年
	                if(lastW > 0 && lastW < 4){
	                    if(rowweek.length == 0){
	                        scope.weeklist[scope.weeklist.length-1].pop();
	                    }else{
	                        rowweek.pop();
	                    }
	                }

	                if(rowweek.length > 0){
	                    scope.weeklist.push(rowweek);
	                }
	            }

	            scope.changeYear = function(n){
	                scope.nowyear+=n;
	                scope.setWeeklist();
	            }
	            scope.setWeeklist();

	            var chooseCounts = 0;
	            scope.chooseDate = function(cell) {
	                if(cell.date.clone().addDays(-6).isAfter(today)){
	                    return false;
	                }
	                if(scope.options.weeks == 1){
	                    selectday = cell.date;
	                    scope.options.start = scope.options.end = cell;
	                    scope.$emit(scope.dateName,cell.year+""+getStr(cell.week));
	                    scope.cancel();
	                }else{ //2
	                    if (chooseCounts >= 2) chooseCounts = 0;
	                    chooseCounts++;

	                    if(chooseCounts == 1){
	                        scope.options.start = scope.options.end = cell;
	                    }else{
	                        var preCell = scope.options.start;
	                        if(preCell.date > cell.date){
	                            scope.options.start = cell;
	                        }else{
	                            scope.options.end = cell;
	                        }
	                    }
	                }
	                
	            }
	            scope.complete = function(){
	                var start = scope.options.start.year + "" + UtilService.getStr(scope.options.start.week);
	                var end = scope.options.end.year + "" + UtilService.getStr(scope.options.end.week);
	                scope.$emit(scope.dateName,{start:start,end:end});
	                scope.cancel();
	            }
	            scope.cellClass = function(cell) {
	                if(cell.date.between(scope.options.start.date,scope.options.end.date)){
	                    return "choose";
	                }
	                else if((cell.year == scope.options.start.year && cell.week == scope.options.start.week) || (cell.year == scope.options.end.year && cell.week == scope.options.end.week)){
	            		return "start_end";
	            	}
	                else if(today.between(cell.date.clone().addDays(-6),cell.date)){
	                    return "is-now";
	                }
	                else if(cell.date.isAfter(today)){
	                    return "disabled";
	                }
	                else{
	                    return '';
	                }
	            };
	            scope.cancel = function() {
	                scope.showFlag = false;
	            };

	            $(document).on("click",function(){
	                scope.cancel();
	                scope.$apply();
	            });
	        }
	    };
	};
	/*日期 选择月*/
	function myDatemonth(UtilService) {
	    var today = Date.yesterday();
	    return {
	        restrict: 'EA',
	        transclude: true,
	        replace:true,
	        templateUrl: '/template/common/datemonth.html?r='+tempVersion,
	        scope: {
	            dateName:"@",
	            months:"@"
	        },
	        link: function(scope, elem, attrs) {
	            var nyear = scope.nowyear = today.getFullYear();
	            var selectmonth = scope.nowMonth = today.getMonth() + 1;

	            scope.options = {};
	            if(scope.months){
	                scope.options.months = scope.months;
	            }else{
	                scope.options.months = 1;
	            }
	           
	            scope.showDateTable = function() {
	                if (typeof scope.showFlag == 'undefined') {
	                    scope.showFlag = true;
	                } else if (scope.showFlag == true) {
	                    scope.showFlag = false;
	                } else if (scope.showFlag == false) {
	                    scope.showFlag = true;
	                }
	            }
	            scope.changeYear = function(n){
	                scope.nowyear+=n;
	                scope.setmonthList();
	            }
	            scope.setmonthList = function(){
	                scope.monthList = [];
	                var rowNums = 4,row = [];
	                for(var i=1;i<=12;i++){
	                    row.push({
	                        month : i,
	                        year : scope.nowyear,
	                        date : new Date(scope.nowyear,i-1,1)
	                    });

	                    if(angular.isUndefined(scope.options.start) && i == selectmonth && scope.nowyear == nyear){
	                        scope.options.start = scope.options.end = row.slice(-1)[0];
	                    }

	                    if(i%rowNums == 0){
	                        scope.monthList.push(row);
	                        row = [];
	                    }
	                }
	            }
	            scope.setmonthList();

	            var chooseCounts = 0;
	            scope.chooseDate = function(cell) {
	                if(cell.year > nyear || (cell.month > scope.nowMonth && cell.year == nyear)){
	                    return false;
	                }

	                if(scope.options.months == 1){
	                    selectmonth = cell.month;
	                    scope.options.start = scope.options.end = cell;
	                    scope.$emit(scope.dateName,cell.year+""+ UtilService.getStr(cell.month));
	                    scope.cancel();
	                }else{ //2
	                    if (chooseCounts >= 2) chooseCounts = 0;
	                    chooseCounts++;

	                    if(chooseCounts == 1){
	                        scope.options.start = scope.options.end = cell;
	                    }else{
	                        var preCell = scope.options.start;
	                        if(preCell.year > cell.year || (preCell.year == cell.year && preCell.month > cell.month)){
	                            scope.options.start = cell;
	                        }else{
	                            scope.options.end = cell;
	                        }
	                    }
	                }
	            }
	            scope.complete = function(){
	                var start = scope.options.start.year + "" + UtilService.getStr(scope.options.start.month);
	                var end = scope.options.end.year + "" + UtilService.getStr(scope.options.end.month);
	       
	                scope.$emit(scope.dateName,{start:start,end:end});
	                scope.cancel();
	            }
	            scope.cellClass = function(cell) {
	                if(cell.date.between(scope.options.start.date,scope.options.end.date)){
	                    return "choose";
	                }
	                else if(cell.month == scope.nowMonth && cell.year == nyear){
	                    return "is-today";
	                }
	                else if(cell.year > nyear || (cell.month > scope.nowMonth && cell.year == nyear)){
	                    return "disabled";
	                }
	                else{
	                    return '';
	                }
	            };
	            scope.cancel = function() {
	                scope.showFlag = false;
	            };
	            $(document).on("click",function(){
	                scope.cancel();
	                scope.$apply();
	            });
	        }
	    };
	};
})();