//
var maxCalendarShift=null;
var rangeLimit=0;
//var secLevel=-1; //this variable must be set by the environment before executing setLimit();
setLimit();
//
function setLimit(){
	if(secLevel>=4){
		if((new Date()).getDate()<20){
			maxCalendarShift=-2;
			rangeLimit=2;
		}else{
			maxCalendarShift=-1;
			rangeLimit=1;
		}
	}
}
//
function limitFYear(y,flag){
	var nowD = new Date();
	var cm = nowD.getMonth()+1;
	var fy = nowD.getFullYear();
	var  limit = 9;
	if(cm>limit){
		fy++;
	}
	if(secLevel>=4){
		if(y<(fy-1))
			return y;
		else if(y==(fy-1) && cm<=limit)
			return y;
		else if(y==(fy-1) && cm>limit)
			return y-1;
		else if(y==fy && cm<=limit)
			return flag==0?y-1:3000;
		else if(y==fy && cm>limit)
			return flag==0?y-2:3000;
		else
		return y;
	}else{
		return y;
	}
}
//
function limitCYear(y,flag){
	var nowD = new Date();
	var cm = nowD.getMonth()+1;
	var cy = nowD.getFullYear();
	var limit=rangeLimit;
	if(secLevel>=4){
		if(y<(cy-1))
			return y;
		else if(y==(cy-1) && cm>=limit)
			return y;
		else if(y==(cy-1) && cm<limit)
			return y-1;
		else if(y==cy && cm>=limit)
			return flag==0?y-1:3000;
		else if(y==cy && cm<limit)
			return flag==0?y-2:3000;
		else
			return y;
	}else{
		return y;
	}
}
//
function limitMonth(n,flag){
	var nowD = new Date();
	var m = nowD.getMonth()+1;
	var y = nowD.getFullYear();
	var limit=rangeLimit;
	var lm;
	var ly;
	var r;
	if(secLevel>=4){
		if((m - limit)<0){
			lm = 12 + (m - limit);
			ly = y - 1;
		}else{
			lm = m - limit;
			ly = y + 0;
		}
		r=Math.min(n,parseInt(ly+zeropad(lm)));
		if(flag==0)
			return r;
		else if(flag!=0 && n<=parseInt(ly+zeropad(lm)))
			return r;
		else
			return 300000;
	}else{
		return n;
	}
}

function limitRange(n,flag){
	var nowD = new Date();
	var d = nowD.getDate();
	var m = nowD.getMonth()+1;
	var y = nowD.getFullYear();
	var limit=rangeLimit;
	var ld=1;
	var lm;
	var ly;
	var r;
	if(secLevel>=3){
		if((m - limit)<0){
			lm = 12 + (m - limit);
			ly = y - 1;
		}else{
			lm = m - limit;
			ly = y + 0;
		}
		r=Math.min(n,parseInt(ly+zeropad(lm)+zeropad(getDaysPerMonth(lm,ly))));
		if(flag==0)
			return r;
		else if(flag!=0 && n<=parseInt(ly+zeropad(lm)+zeropad(getDaysPerMonth(lm,ly))))
			return r;
		else
			return 30000000;
	}else{
			return n;
	}
}

function getDaysPerMonth(m,y) {
	var days;
	switch(m)
	{
		case 1:
			days = 31;
			break;
		case 2:
			//Correct for a leap year
			if((y % 4) == 0) // Could be leap
			{
				if((y % 100) == 0 && // Centuries aren't
				(y % 400) != 0)   // Except every 4th
					days = 28;
				else
					days = 29;
				break;
			}
			days = 28;
			break;
		case 3:
			days = 31;
			break;
		case 4:
			days = 30;
			break;
		case 5:
			days = 31;
			break;
		 case 6:
			days = 30;
			break;
		 case 7:
			days = 31;
			break;
		 case 8:
			days = 31;
			break;
		 case 9:
			days = 30;
			break;
		 case 10:
			days = 31;
			break;
		 case 11:
			days = 30;
			break;
		 case 12:
			days = 31;
			break;
		 default:
			days = 31;
			break;
		 }
	return days;
}
