var MonthDays =  new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var Now = new Date();
var BaseYear = 2003;
var BaseMonth = 1;
var ExcludeCurrentMonth = false;
var BeforeClosing = false;

// html select id - 1: sYear, 2: eYear, 3: sMonth, 4: eMonth, 5: sDay, 6: eDay
var setPeriod = function(id)
{
	var startYear, endYear, startMonth, endMonth, startDay;

	startYear = parseInt(document.getElementById("sYear").options[document.getElementById("sYear").selectedIndex].value, 10);
    if(id == 1) // start year changed
    {
    	setStartMonth(-1);
    	setEndYear(0);
    }
    else if(id == 2) // end year changed
    {
    	setEndMonth(-1);
    }	
    else if(id == 3) // start month chaged
    {
    	setStartDay(0);
    	setEndMonth(-1);
    }
    else if(id == 4) // end month chaged
    {
		setEndDay(-1);
    }
    else if(id == 5) // start day changed
    {
		setEndDay(-1);
    }
};

var changeBaseYear = function(baseYear)
{
	BaseYear = baseYear;
	setStartYear(0);
};

var setStartYear = function(year)
{
	if(year == 0)
		year = getStartYear();
    var select = document.getElementById("sYear");
    for(var i = 0; i < select.length;)
        select.remove(0);
    
    var end = Now.getFullYear();
    if(ExcludeCurrentMonth && Now.getMonth() == 0) // 현재년 1월
    	end--;
    else if(BeforeClosing && Now.getMonth() == 1) // 현재년 2월이지만, 1월마감자료를 보여주기 전.
    	end--;
    
    var option = null;
    for(var i = BaseYear; i <= end; i++)
    {
        option = document.createElement('option');
        option.text = String(i);
        option.value = option.text;
        if(i == year)
            option.selected = true;
        else
        	option.selected = false;
        try
        {
            select.add(option, null);
        }
        catch(ex)
        {
            select.add(option);
        }
    }
    if(select.selectedIndex < 0)
    	select.selectedIndex = select.options.length - 1;
    
    setStartMonth(-1);
};

var getStartYear = function()
{
	return parseInt(document.getElementById("sYear").options[document.getElementById("sYear").selectedIndex].value, 10);
};

var setEndYear = function(year)
{
	if(year == 0)
		year = getEndYear();
	var select = document.getElementById("eYear");
    var i = 0;
    for(; i < select.length;)
        select.remove(0);
    
	var startYear = getStartYear();
    var end = Now.getFullYear();
    if(ExcludeCurrentMonth && Now.getMonth() == 0) // 현재 1월
    	end--;
    else if(BeforeClosing && Now.getMonth() == 1) // 현재년 2월이지만, 1월마감자료를 보여주기 전.
    	end--;
    var option = null;
    for(i = startYear; i <= end; i++)
    {
        option = document.createElement('option');
        option.text = String(i);
        option.value = option.text;
        if(i == year)
            option.selected = true;
        
        try
        {
            select.add(option, null);
        }
        catch(ex)
        {
            select.add(option);
        }
    }
    if(select.selectedIndex < 0)
    	select.selectedIndex = select.options.length - 1;
    
    setEndMonth(-1);
};

var getEndYear = function()
{
	return parseInt(document.getElementById("eYear").options[document.getElementById("eYear").selectedIndex].value, 10);
};

var setStartMonth = function(month)
{
	var startYear = getStartYear();
    var start = (startYear == BaseYear) ? BaseMonth : 1;
    var end = (startYear == Now.getFullYear()) ? Now.getMonth() + 1 : 12;
    if(ExcludeCurrentMonth && startYear == Now.getFullYear())
    {
    	end--; // end가 0인 경우는 year에서 막는다.
    }
    
    if(BeforeClosing) // 마감이 오픈전(Admin 제외) 
    {
    	if(startYear == Now.getFullYear())
    	{
	    	if(Now.getMonth() == 1)//2월일 경우
	    	{
	    		end = 12;
	    	}else
	    	{
	    		end--;
	    	}
    	}
    }

    if(month == -1)
    {
    	var curr = getStartMonth();
    	month = (curr > end) ? end : curr;
    }
    else if(month == 0) // 현재 월 유지
		month = getStartMonth();
    
    var select = document.getElementById("sMonth");
    var i = 0;
    for(; i < select.length;)
        select.remove(0);

    var option = null;
    for(i = start; i <= end; i++)
    {
        option = document.createElement('option');
        option.text = (i < 10 ? "0" + i : String(i));
        option.value = option.text;
        if(i == month)
            option.selected = true;
        
        try
        {
            select.add(option, null);
        }
        catch(ex)
        {
            select.add(option);
        }
    }
    if(select.selectedIndex < 0)
    	select.selectedIndex = 0;
    
    setStartDay(0);
};

var getStartMonth = function()
{
	return parseInt(document.getElementById("sMonth").options[document.getElementById("sMonth").selectedIndex].value, 10);
};

var setEndMonth = function(month)
{
	var startYear = getStartYear();
	var endYear = getEndYear();
	var start = (startYear < endYear) ? 1 : getStartMonth();
	
	var end = (endYear == Now.getFullYear()) ? Now.getMonth() + 1 : 12;
    if(ExcludeCurrentMonth && endYear == Now.getFullYear())
    {
    	end--; // end가 0인 경우는 year에서 막는다.
    }
    
    if(BeforeClosing) // 마감이 오픈전(Admin 제외) 
    {
    	if(endYear == Now.getFullYear())
    	{
	    	if(Now.getMonth() == 1)//2월일 경우
	    	{
	    		end = 12;
	    	}else
	    	{
	    		end--;
	    	}
    	}
    }
    
    if(month == -1)
    {
    	var curr = getEndMonth();
    	month = (curr > end) ? end : curr;
    }
    else if(month == 0) // 현재 월 유지
		month = getEndMonth();

    var select = document.getElementById("eMonth");
	var i = 0;
	for(; i < select.length;)
	    select.remove(0);

	var option = null;
	for(i = start; i <= end; i++)
	{
	    option = document.createElement('option');
	    option.text = (i < 10 ? "0" + i : String(i));
	    option.value = option.text;
	    if(i == month)
	        option.selected = true;
	    
	    try
	    {
	        select.add(option, null);
	    }
	    catch(ex)
	    {
	        select.add(option);
	    }
	}
    if(select.selectedIndex < 0)
    	select.selectedIndex = 0;
	
	setEndDay(-1);
};

var getEndMonth = function()
{
	return parseInt(document.getElementById("eMonth").options[document.getElementById("eMonth").selectedIndex].value, 10);
};

var setStartDay = function(day)
{
    if(day == 0)
    	day = getStartDay();
    var select = document.getElementById("sDay");
    var i = 0;
    for(; i < select.length;)
        select.remove(0);
    
    var startYear = getStartYear();
    var startMonth = getStartMonth();
    var option = null;
    var end = ((startYear == Now.getFullYear() && startMonth == Now.getMonth() + 1) ? Now.getDate() : getLastDay(startYear, startMonth)); 
    for(i = 1; i <= end; i++)
    {
        option = document.createElement('option');
        option.text = (i < 10 ? "0" + i : String(i));
        option.value = option.text;
        if(i == day)
            option.selected = true;
        
        try
        {
            select.add(option, null);
        }
        catch(ex)
        {
            select.add(option);
        }
    }
    if(select.selectedIndex < 0)
    	select.selectedIndex = 0;
};

var getStartDay = function()
{
	return parseInt(document.getElementById("sDay").options[document.getElementById("sDay").selectedIndex].value, 10);
};

var setEndDay = function(day)
{
	if(day == 0)
		day = getEndDay();
    var select = document.getElementById("eDay");
    var i = 0;
    for(; i < select.length;)
        select.remove(0);
    
    var endYear = getEndYear();
    var endMonth = getEndMonth();
    var startDay = getStartDay();
    var option = null;
    var end = ((endYear == Now.getFullYear() && endMonth == Now.getMonth() + 1) ? Now.getDate() : getLastDay(endYear, endMonth)); 
    if(day == -1) // 마지막 일자 선택
    	day = end;
    for(i = startDay; i <= end; i++)
    {
        option = document.createElement('option');
        option.text = (i < 10 ? "0" + i : String(i));
        option.value = option.text;
        if(i == day)
            option.selected = true;
        
        try
        {
            select.add(option, null);
        }
        catch(ex)
        {
            select.add(option);
        }
    }
    /*if(select.selectedIndex < 0)
    	select.selectedIndex = select.options.length - 1;*/
};

var getEndDay = function()
{
	return parseInt(document.getElementById("eDay").options[document.getElementById("eDay").selectedIndex].value, 10);
};

var getLastDay = function(year, month)
{
    var isLeap = (year % 4 == 0) ? ((year % 100 == 0) ? ((year % 400 == 0) ? true : false) : true) : false;
    if(isLeap && month == 2)
        return 29;
    else
        return MonthDays[month - 1];
};

