var _arr=new Array();
var _year;
var _month;
var _day;
var v_uid;

var _name;
function goto_log(v_uid,v_lastday)
{
	var year_goto = $('c_year').value;
	var month_goto = $('c_month').value;
	var day_goto = $('c_day').value;
	if(!isNumber(year_goto))
	{
		$('c_year').focus();
		return;
	}
	if(!isNumber(month_goto))
	{
		$('c_month').focus();
		return;
	}
	else
	{
		if(month_goto==''||parseInt(month_goto)<1||parseInt(month_goto)>12)
		{
			alert("您輸入的月份不合法");
			$('c_month').focus();
			return;
		}
	}
	
	if(!isNumber(day_goto))
	{
		$('c_day').focus();
		return;
	}
	else
	{
		if(day_goto==''||parseInt(day_goto)<1||parseInt(day_goto)>v_lastday)
		{
			alert("您輸入的時間不合法");
			return;
		}
	}
	searchArticleList(year_goto,month_goto,day_goto,v_uid);
}

function isNumber(_sCode){
	_sCode = _sCode.toString();
	var validChars = "0123456789";
	var startFrom = 0;
	for (var n = startFrom; n < _sCode.length; n++) {
		if (validChars.indexOf(_sCode.substring(n, n+1)) == -1){
			alert("您輸入的 ["+ _sCode + "] 不是一個數字！");
			return false;
		}
	}
	return true;
}

function contain(_arry,d)
{
	for(var i=0;i<_arry.length;i++)
	{
		if(_arry[i]==d)
		{
			return true;
		}
	}
	return false;
}
function julianDay( Y, M, D )
{
	var y,m,d;
	y=parseInt(Y);
	m=parseInt(M);
	d=parseInt(D);
	var jy,ja,jm;
	if( y==0 )
	{
		alert("There was no year zero in the Julian calendar.");
		return "invalid";
	}
	if( y==1582 && m==10 && d>4 && d<15 )
	{
		alert("October 5th to 14th were skipped in October of 1582\nwhen Pope Gregory XIII implemented the calendar reforms\nof the commission headed by the Jesuit mathematician and astronomer\nChristoph Clavius.");
		return "invalid";
	}
	if(y<0) y++;
	if(m>2)
	{
		jy=y;
		jm=m+1;
	}
	else
	{
		jy=y-1;
		jm=m+13;
	}
	
	var julian = Math.floor( Math.floor(365.25*jy) + Math.floor(30.6001*jm) + d + 1720995 );
	var gregorianStart = 15 + 31*( 10 + 12*1582 );
	
	if( d + 31*(m + 12*y) >= gregorianStart )
	{
		ja = Math.floor(0.01*jy);
		julian += 2 - ja + Math.floor(0.25*ja);
	}
	
	return julian;
}

function julianGregorianDate( julian )
{
	var j1, j2, j3, j4, j5;
	var gregorianStart  = 2299161;
	if( julian >= gregorianStart )
	{
		var tmp = Math.floor( ( (julian - 1867216) - 0.25 ) / 36524.25 );
		j1 = julian + 1 + tmp - Math.floor(0.25*tmp);
	}
	else
	{
		j1 = julian;
	}
	
	j2 = j1 + 1524;
	j3 = Math.floor( 6680.0 + ( (j2 - 2439870) - 122.1 )/365.25 );
	j4 = Math.floor(j3*365.25);
	j5 = Math.floor( (j2 - j4)/30.6001 );
	
	var d = Math.floor(j2 - j4 - Math.floor(j5*30.6001));
	var m = Math.floor(j5 - 1);
	if( m > 12 ) m -= 12;
	var y = Math.floor(j3 - 4715);
	if( m > 2 ) y--;
	if( y <= 0 ) y--;
	return formatISODate(y,m,d);
}

function dayOfWeek( julian )
{
	return (julian+1)%7;
}


function padWithZeros(number,length) 
{
	 var str = "" + number;
	 while( str.length < length ) str = '0' + str;
	 return str;
}


function formatISODate( year, month, day )
{
	var delimiter=".";
	if(year<0)
	{
		year= -year; year = "-" + padWithZeros(year,4);
	}
	else
	{
		year = padWithZeros(year,4);
	}
	return year + delimiter + padWithZeros(month,2) + delimiter + padWithZeros(day,2);
}

       
function setToday( objectId )
{
	var today = new Date();
	document.getElementById( objectId ).value = formatISODate( today.getFullYear(), today.getMonth()+1, today.getDate() );
}

/**
 * 將給定ID的元素的值解析為年月日, 然後調用頁面定義的dateview(year,month,uid)方法.
 * @param objectId 頁面DOM元素ID
 * @param lanmu 無用參數(TODO: Remove)
 * @param uid 用戶ID
 */
function callCalendar( objectId ,lanmu,uid)
{
	var dateString=document.getElementById( objectId ).value;
	var re = new RegExp( '[/\.\ ]', 'gi' );
	dateString=dateString.replace( re, "-" );
	dateComponents=dateString.split("-");
	var year,month,day;
	year=dateComponents[0];
	month=dateComponents[1];
	day=dateComponents[2];
	_year = year;
	_month= month;
	_day = day;
	dateview(year,month,uid);
	
}

function setDate(day,lanmu)
{
	var _url;
	year =document.getElementById("currentYear").value;
	month=document.getElementById("currentMonth").value;
	var today = new Date();
	var currentYear = today.getFullYear();
	var currentMonth = today.getMonth()+1;
	var currentDate = today.getDate();	
	isoDateString=formatISODate(year,month,day);
	if(currentYear==year&&currentMonth==month&&currentDate==day)
	{
		_url = '';
	}
	else
	{
		_url = '';
	}
	window.open(_url,"_blank","");
}

function previousYear(lanmu)
{
	year =parseInt(document.getElementById("currentYear").value);
	month=parseInt(document.getElementById("currentMonth").value);
	day  =parseInt(document.getElementById("currentDay").value);
	destination = document.getElementById("destinationId").value;
	year -= 1;
	if( year==0 ) year = -1;
	_year = year;
	_month= month;
	_day = day;
	dateview(year,month,v_uid);
}

function previousMonth(lanmu)
{
	year =parseInt(document.getElementById("currentYear").value);
	month=parseInt(document.getElementById("currentMonth").value);
	day  =parseInt(document.getElementById("currentDay").value);
	destination = document.getElementById("destinationId").value;
	month -= 1;
	if(month<1)
	{ 
		month = 12;
		year -= 1;
		if( year==0 ) year = -1;
	}
	_year = year;
	_month= month;
	_day = day;
	dateview(year,month,v_uid);
}


function nextMonth(lanmu)
{
	year =parseInt(document.getElementById("currentYear").value);
	month=parseInt(document.getElementById("currentMonth").value);
	day  =parseInt(document.getElementById("currentDay").value);
	destination = document.getElementById("destinationId").value;
	month += 1;
	if(month>12)
	{
		month = 1;
		year += 1;
		if( year==0 ) year = 1;
	}
	_year = year;
	_month= month;
	_day = day;
	dateview(year,month,v_uid);
}


function nextYear(lanmu)
{
	year =parseInt(document.getElementById("currentYear").value);
	month=parseInt(document.getElementById("currentMonth").value);
	day  =parseInt(document.getElementById("currentDay").value);
	destination = document.getElementById("destinationId").value;
	year += 1;
	if( year==0 ) year = 1;
	_year = year;
	_month= month;
	_day = day;
	
	dateview(year,month,v_uid);
}

function generateCalendar( Y, M, D, targetId,lanmu)
{

var Month = new Array("01","02","03","04","05","06","07","08","09","10","11","12");	
var Day = new Array("日","一","二","三","四","五","六");
var daysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var daysInAWeek=7;
var OutputString;
var currentYear;
var currentMonth;
var currentDate;	

var today = new Date();
currentYear = today.getFullYear();
currentMonth = today.getMonth()+1;
currentDate = today.getDate();
if( Y=="" || isNaN(Y) )
{
	thisYear=today.getFullYear();
}
else
{
	thisYear=parseInt(Y);
}
if( M=="" || isNaN(M) )
{
	thisMonth=today.getMonth()+1;
}
else
{
	thisMonth=parseInt(M);
	if(thisMonth<1) thisMonth=1;
	if(thisMonth>12) thisMonth=12;
}

	// Get day:
if( D=="" || isNaN(D) )
{
	thisDay=today.getDate();
}
else
{
	thisDay=parseInt(D);
	if(thisDay<0) thisDay=1;
	if(thisDay>31) thisDay=31;
}
	
	// Calculate the number of days in February:
if ((thisYear % 4) == 0)
{
	daysInMonth[ 1 ] = 29;
	if((thisYear % 100) == 0 && (thisYear % 400) != 0)
	{
		daysInMonth[ 1 ] = 28;
	}
}
	
	// Document header:
OutputString = "";
OutputString += "<span><h1 style='text-align:center;background:transparent;'>\n";
OutputString += " <a class='color_white' onclick='previousYear()' style='cursor:pointer;'>&lt;&lt;</a>\n&nbsp;&nbsp;";
OutputString += " <a class='color_white' onclick='previousMonth()' style='cursor:pointer;'>&lt;</a>\n&nbsp;";

// 輸出年份和月份
if( thisYear < 0 ) 
{
	yearString = -thisYear + " BCE";
}
else if( thisYear < 1000 ) 
{
	yearString = thisYear + " CE";
}
else 
{
	yearString = thisYear;
}
OutputString += yearString +"."+Month[ thisMonth-1 ];
OutputString += "\n&nbsp;";

OutputString += "<a class='color_white'";
if((currentYear==thisYear&&currentMonth>thisMonth)||(currentYear>thisYear))
{
		OutputString +=" onclick='nextMonth("+lanmu+")' style='cursor:pointer'>&gt;</a>\n&nbsp;";
}
else
{
		OutputString +=">&gt;</a>\n&nbsp";
}

OutputString += " <a class='color_white' ";
if(currentYear>thisYear)
{
	OutputString +="onclick='nextYear("+lanmu+")'  style='cursor:pointer'>&gt;&gt;</a>\n";
}
else
{
		OutputString +=">&gt;&gt;</a>\n";
}
	
OutputString += " </h1>\n";

OutputString += "<h2>\n <table width='100%' border='0' cellpadding='0' cellspacing='0' class='calendar'><tr class='week'>\n";
for(i=0;i<daysInAWeek;i++)
{
		OutputString += "  <td>" + Day[i] + "</td>\n";
}
OutputString += " </tr>\n <tr>\n";
	
	// Get the day of week of the first of the month:
var firstDay=dayOfWeek( julianDay( thisYear, thisMonth, 1 ) ); 
	
	// First week:
for(i=0;i<firstDay;i++)
{
	OutputString += "  <td>&nbsp;</td>\n";
}
for(d=1;i<daysInAWeek;i++,d++)
{
		// Special handling for October of 1582:
	if( d==5 && thisMonth==10 && thisYear==1582 ) d+=10;
	OutputString += "  <td><a ";
	if(d==thisDay&&thisMonth==(today.getMonth()+1)&&thisYear==(today.getYear()))
	{
		if(contain(_arr,d))
		{
			OutputString += " href='javascript://' class='current' style='cursor:pointer'  onclick='searchArticleList("+thisYear+","+thisMonth+","+d+","+v_uid+");return false;'>"+ d + "</a></td>\n";
		}
		else
		{
			OutputString += " class='current'>"+ d + "</a></td>\n";
		}
	}
	else
	{
			if(contain(_arr,d))
			{
				OutputString += " href='javascript://' class='record' style='cursor:pointer'  onclick='searchArticleList("+thisYear+","+thisMonth+","+d+","+v_uid+");return false;'>" + d + "</a></td>\n";
			}
			else
			{
				OutputString += " class='noDate'>" + d + "</a></td>\n";
			}
	}
}
	
	// Subsequent weeks;
var lastDayOfMonth=daysInMonth[thisMonth-1];
for(j=1;j<6 && d<=lastDayOfMonth;j++)
{
	OutputString += " </tr>\n <!-- Week " + (j+1) + " -->\n<tr>\n";
		// Days in this month:
	for( i=0; i<daysInAWeek && d<=lastDayOfMonth;i++,d++)
	{  
		OutputString += "  <td><a ";
		if(d==thisDay&&thisMonth==(today.getMonth()+1)&&thisYear==(today.getYear())) 
		{
			if(contain(_arr,d))
			{
				OutputString += " href='javascript://' class='current' style='cursor:pointer'  onclick='searchArticleList("+thisYear+","+thisMonth+","+d+","+v_uid+");return false;'>"+ d + "</a></td>\n";
			}
			else
			{
				OutputString += " class='current'>"+ d + "</a></td>\n";
			}
		}
		else
		{
			if(contain(_arr,d))
			{
				OutputString += " href='javascript://' class='record' style='cursor:pointer' onclick='searchArticleList("+thisYear+","+thisMonth+","+d+","+v_uid+");return false;'>" + d + "</a></td>\n";
			}
			else
			{
				OutputString += " class='noDate'>" + d + "</a></td>\n";
			}
		}
	}
	// Finish out the row:
	for(;i<daysInAWeek;i++)
	{
			OutputString += "  <td>&nbsp;</td>\n";      
	}
}
	// Finish the HTML, with hidden vars:
	OutputString += "  </tr>\n";
	OutputString += " </table></h2>\n";
	OutputString += "<h3><form action='#'><input id='c_year' name='c_year' type='text' class='box01' value='" + currentYear + "' />年 <input id='c_month' name='c_month' type='text' class='box01' value='" + currentMonth + "' />月 <input name='c_day' id='c_day' type='text' class='box01' value='" + currentDate + "' />日 <img src='http://big5.xinhuanet.com/gate/big5/misc.home.news.cn/blog/images/blank.gif' width='22' style='margin-left:6px;cursor:pointer;border:0px;' height='14' border='0' align='absmiddle' onclick='goto_log("+v_uid+","+lastDayOfMonth+")'/></form></h3></span>";

	OutputString += "  <input type=\"hidden\" id=\"currentYear\" value=\"" + thisYear + "\">\n";
	OutputString += "  <input type=\"hidden\" id=\"currentMonth\" value=\"" + thisMonth + "\">\n";
	OutputString += "  <input type=\"hidden\" id=\"currentDay\" value=\"" + thisDay + "\">\n";
	OutputString += "  <input type=\"hidden\" id=\"destinationId\" value=\"" + targetId + "\">\n";   
	OutputString += "  ";
	$('selectBox').innerHTML=OutputString;
}
