// Get Element By Id
function ds_getel(id)
{
    return document.getElementById(id);
}

// Get the left and the top of the element.
function ds_getleft(el)
{
    var tmp = el.offsetLeft;
    el = el.offsetParent
    while(el)
	{
        tmp += el.offsetLeft;
        el = el.offsetParent;
    }
    return tmp;
}

function ds_gettop(el)
{
    var tmp = el.offsetTop;
    el = el.offsetParent
    while(el)
	{
        tmp += el.offsetTop;
        el = el.offsetParent;
    }
    return tmp;
}

// Output Element
var ds_oe = ds_getel('ds_calclass');
// Container
var ds_ce = ds_getel('ds_conclass');

// Output Buffering
var ds_ob = ''; 
function ds_ob_clean()
{
    ds_ob = '';
}
function ds_ob_flush()
{
    ds_oe.innerHTML = ds_ob;
    ds_ob_clean();
}
function ds_echo(t)
{
    ds_ob += t;
}

var ds_element; // Text Element...

var ds_monthnames = ['1¿ù','2¿ù','3¿ù','4¿ù','5¿ù','6¿ù','7¿ù','8¿ù','9¿ù','10¿ù','11¿ù','12¿ù','1¿ù'];

var ds_daynames = ['<font color="#CC3300">ÀÏ</font>', '¿ù', 'È­', '¼ö', '¸ñ', '±Ý', 'Åä'];

// Calendar template
function ds_template_main_above(t)
{
	return '<table width="206" height="40" border="0" cellpadding="0" cellspacing="0">'
		+ '<tr>'
		+ '<td align="center" valign="top" background="/image/calender_1.gif">'
		+ '<p style="margin-top:17">'
		+ '<table width="181" border="0" cellspacing="0" cellpadding="0">'
		+ '<tr>'
		+ '<td width="34"><img src="/image/but_pre1.gif" width="17" height="16" onclick="ds_py();"><img src="/image/but_pre.gif" width="17" height="16"onclick="ds_pm();"></td>'
		+ '<td align="center">'+ t + '</td>'
		+ '<td width="34"><img src="/image/but_next.gif" width="17" height="16" onclick="ds_nm();"><img src="/image/but_next1.gif" width="17" height="16" onclick="ds_ny();"></td>'
		+ '</tr>'
		+ '</table>'
		+ '</td>'
		+ '</tr>'
		+ '</table>'
		+ '<table width="206" border="0" cellpadding="0" cellspacing="0">'
		+ '<tr>'
		+ '<td align="center" valign="top"><img src="/image/calender_2.gif" width="206" height="17"></td>'
		+ '</tr>'
		+ '<tr>'
		+ '<td align="center" valign="top" background="/image/calender_3.gif">'
		+ '<table width="150" border="0" cellspacing="0" cellpadding="0">'
		+ '<tr align="center">'
}

function ds_template_day_row(t)
{
    return '<td height="20" class="style1">'+ t +'</td>';
    // Define width in CSS, XHTML 1.0 Strict doesn't have width property for it.
}

function ds_template_new_week1()
{
    return '</tr>'
		+ '<tr align="center" bgcolor="#349AAD">'
		+ '<td height="1" colspan="7"></td>'
		+ '</tr>'
		+ '<tr align="center" valign="bottom">';
}

function ds_template_new_week2()
{
    return '</tr>'
		+ '<tr align="center" valign="bottom">';
}

function ds_template_blank_cell(colspan)
{
    return '<td height="19" colspan="' + colspan + '"></td>'
}

function ds_template_day(d, m, y)
{
    return '<td height="19" onclick="ds_onclick(' + d + ',' + m + ',' + y + ')" style="cursor:hand">' + d + '</td>';
    // Define width the day row.
}

function ds_template_day_week(d, m, y)
{
    return '<td height="19" class="style2" onclick="ds_onclick(' + d + ',' + m + ',' + y + ')" style="cursor:hand">' + d + '</td>';
    // Define width the day row.
}

function ds_template_day_now(d, m, y)
{
    return '<td height="19" onclick="ds_onclick(' + d + ',' + m + ',' + y + ')" style="cursor:hand"><font color="#CC0000"><b>' + d + '</b></font></td>';
    // Define width the day row.
}

function ds_template_main_below()
{
	return '</tr>'
		+ '</table>'
		+ '</td>'
		+ '</tr>'
		+ '<tr>'
		+ '<td height="40" align="center" valign="top" background="/image/calender_4.gif">'
		+ '<table width="187" height="33" border="0" cellpadding="0" cellspacing="0">'
		+ '<tr>'
		+ '<td align="right" valign="bottom"><img src="/image/but_close.gif" width="46" height="12" onclick="ds_hi();"></td>'
		+ '</tr>'
		+ '</table>'
		+ '</td>'
		+ '</tr>'
		+ '</table>'
}

// This one draws calendar...
function ds_draw_calendar(d, m, y)
{
    // First clean the output buffer.
    ds_ob_clean();
    // Here we go, do the header
    //ds_echo (ds_template_main_above(ds_monthnames[m - 1] + ' ' + y));
	ds_echo(ds_template_main_above('<b><font color="ffffff">'+ y +'</font><font color="E3E3E3">³â</font> <font color="ffffff">'+ m +'</font><font color="E3E3E3">¿ù</font> <font color="ffffff">'+ d +'</font><font color="E3E3E3">ÀÏ</font></b>'));

    for (i = 0; i < 7; i ++) {
        ds_echo(ds_template_day_row(ds_daynames[i]));
    }
    // Make a date object.
    var ds_dc_date = new Date();
    ds_dc_date.setMonth(m - 1);
    ds_dc_date.setFullYear(y);
    ds_dc_date.setDate(1);
    if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
	{
        days = 31;
    }
	else if (m == 4 || m == 6 || m == 9 || m == 11)
	{
        days = 30;
    }
	else
	{
        days = (y % 4 == 0) ? 29 : 28;
    }
    var first_day = ds_dc_date.getDay();
    var first_loop = 1;
    // Start the first week
    ds_echo(ds_template_new_week1());
    // If sunday is not the first day of the month, make a blank cell...
    if (first_day != 0)
	{
        ds_echo(ds_template_blank_cell(first_day));
    }
    var j = first_day;
	var ds_dc_date_week = new Date();
    ds_dc_date_week.setMonth(m - 1);
    ds_dc_date_week.setFullYear(y);
    for (i = 0; i < days; i ++)
	{
        // Today is sunday, make a new week.
        // If this sunday is the first day of the month,
        // we've made a new row for you already.
        if (j == 0 && !first_loop)
		{
            // New week!!
            ds_echo(ds_template_new_week2());
        }
        // Make a row of that day!
        ds_dc_date_week.setDate(i + 1);
		if (i == d-1)
		{
			ds_echo(ds_template_day_now(i + 1, m, y));
		}
		else
		{
			if (ds_dc_date_week.getDay() == 0)
			{
				ds_echo(ds_template_day_week(i + 1, m, y));
			}
			else
			{
				ds_echo(ds_template_day(i + 1, m, y));
			}
		}
        // This is not first loop anymore...
        first_loop = 0;
        // What is the next day?
        j ++;
        j %= 7;
    }
    // Do the footer
    ds_echo(ds_template_main_below());
    // And let's display..
    ds_ob_flush();
    // Scroll it into view.
    //ds_ce.scrollIntoView();
}

// A function to show the calendar.
// When user click on the date, it will set the content of t.
function ds_sh(t)
{
	// Set the element to set...
    ds_element = ds_getel(t)

    // Make a new date, and set the current day and month and year.
    //var ds_sh_date = new Date();
	//ds_c_day = ds_sh_date.getDate();
    //ds_c_month = ds_sh_date.getMonth() + 1;
    //ds_c_year = ds_sh_date.getFullYear();

	yearObj = eval(document.getElementById(t +"Year"));
	monthObj = eval(document.getElementById(t +"Month"));
	dayObj = eval(document.getElementById(t +"Day"));
	ds_c_day = dayObj.value;
    ds_c_month = monthObj.value;
    ds_c_year = yearObj.value;

    // Draw the calendar
    ds_draw_calendar(ds_c_day, ds_c_month, ds_c_year);

    // To change the position properly, we must show it first.
    ds_ce.style.display = '';

    // Move the calendar container!
    the_left = ds_getleft(ds_element);
    the_top = ds_gettop(ds_element) + ds_element.offsetHeight;
    ds_ce.style.left = the_left + 'px';
    ds_ce.style.top = the_top + 'px';

    // Scroll it into view.
    //ds_ce.scrollIntoView();
}

// Hide the calendar.
function ds_hi()
{
    ds_ce.style.display = 'none';
}

// Moves to the next month...
function ds_nm()
{
    // Increase the current month.
    ds_c_month ++;
    // We have passed December, let's go to the next year.
    // Increase the current year, and set the current month to January.
    if (ds_c_month > 12) {
        ds_c_month = 1; 
        ds_c_year++;
    }
    // Redraw the calendar.
    ds_draw_calendar(ds_c_day, ds_c_month, ds_c_year);
}

// Moves to the previous month...
function ds_pm()
{
    ds_c_month = ds_c_month - 1; // Can't use dash-dash here, it will make the page invalid.
    // We have passed January, let's go back to the previous year.
    // Decrease the current year, and set the current month to December.
    if (ds_c_month < 1) {
        ds_c_month = 12; 
        ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid.
    }
    // Redraw the calendar.
    ds_draw_calendar(ds_c_day, ds_c_month, ds_c_year);
}

// Moves to the next year...
function ds_ny()
{
    // Increase the current year.
    ds_c_year++;
    // Redraw the calendar.
    ds_draw_calendar(ds_c_day, ds_c_month, ds_c_year);
}

// Moves to the previous year...
function ds_py()
{
    // Decrease the current year.
    ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid.
    // Redraw the calendar.
    ds_draw_calendar(ds_c_day, ds_c_month, ds_c_year);
}

// Format the date to output.
function ds_format_date(d, m, y)
{
    // 2 digits month.
    m2 = '00' + m;
    m2 = m2.substr(m2.length - 2);
    // 2 digits day.
    d2 = '00' + d;
    d2 = d2.substr(d2.length - 2);
    // YYYY-MM-DD
	// return y + '-' + m2 + '-' + d2;
	return '<b><font color="DE3900">'+ y +'</font></b>³â <b><font color="DE3900">'+ m +'</font></b>¿ù <b><font color="DE3900">'+ d +'</font></b>ÀÏ'
}

// When the user clicks the day.
function ds_onclick(d, m, y)
{
    // Hide the calendar.
    ds_hi();
    // Set the value of it, if we can.
    if (typeof(ds_element.value) != 'undefined')
	{
        ds_element.value = ds_format_date(d, m, y);
    // Maybe we want to set the HTML in it.
    }
	else if (typeof(ds_element.innerHTML) != 'undefined')
	{
        ds_element.innerHTML = ds_format_date(d, m, y);
    // I don't know how should we display it, just alert it to user.
    } 
	else
	{
        alert(ds_format_date(d, m, y));
    }

	dayObj.value = d;
    monthObj.value = m;
    yearObj.value = y;
}