// ==UserScript==
// @name          del.icio.us:Add Date Tag & Cal ShortCut
// @namespace     http://an-k.jp/
// @description   When you post URL for del.icio.us.. This script set the Date Tag for Default.
// @include       http://delicious.com/*
// ==/UserScript==
//Ver 5.0.1

/******************************
*ZeroFormat
******************************/
function ZeroFormat(num,max){
	var tmp=''+num;
	while(tmp.length<max){
	tmp='0'+tmp;
	}
return tmp;
}

/******************************
*ckLeapDate
******************************/
function ckLeapDate(ckYear,ckMonth){

	monthMaxDate = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if(( ckYear%4 == 0 && ckYear%100 != 0) || ckYear%400 == 0){
		monthMaxDate[1] = 29;
	}
	return monthMaxDate[ckMonth-1];
}

/******************************
*rtYesterdayDate
******************************/
function rtYesterdayDate(TodayYear,TodayMonth,TodayDate){
	var Year,Month,Date;
	
	if(TodayDate == 1){
		if(TodayMonth == 1){
			Year	= TodayYear - 1;
			Month	= 12;
			Date	= ckLeapDate(Year,Month);
		}else{
			Month	= TodayMonth - 1;
			Year	= TodayYear;
			Date	= ckLeapDate(TodayYear,TodayMonth-1);
		}
	}else{
		Date	= TodayDate - 1;
		Month	= TodayMonth;
		Year	= TodayYear;
	}
	
	YesterdayYMD = Year + "-" + ZeroFormat(Month,2) + "-" + ZeroFormat(Date,2);
	
	return YesterdayYMD;
}

/******************************
*SCGetCookieStr
*Rt:Original Cookie String
******************************/
function GetCookieStr(strCookieName){
	var RtOrgCookie = "";
	var CookieFlg = 0;
	var arrOrgCookie = document.cookie.split(";");
	strCookieName = strCookieName + '=';

	for(i = 0;i<arrOrgCookie.length;i++){
		if(arrOrgCookie[i].indexOf(strCookieName)!=-1){
			RtOrgCookie = arrOrgCookie[i].replace(strCookieName,'');
			if(RtOrgCookie.indexOf(" ")!=-1){
				RtOrgCookie = RtOrgCookie.replace(' ','');
			}
			CookieFlg++;
			break;
		}
	}
	
	if(CookieFlg != 0){
		return RtOrgCookie;
	}else{
		return -1;
	}
}

/******************************
*SCGetCookieStr
*Get ID from cookie
******************************/
function getUserID(){
	var strUserCookie	= GetCookieStr("_user");
	if(strUserCookie == -1){
		return "FALSE";
	}
	strUserCookie		= unescape(strUserCookie);
	var point			= strUserCookie.indexOf(" ",0);
	strUserCookie		= strUserCookie.substring(0,point);
	return	strUserCookie;
}

/******************************
*drawCalender
******************************/
function drawCalender(setNodeId,targetYear,targetMonth){
	var arrWeekTable	= new Array('S','M','T','W','T','F','S');
	var arrMonth		= new Array();
	var maxMonthDate	= ckLeapDate(targetYear,targetMonth);
	
	var dateTargetDate	= new Date();
	dateTargetDate.setFullYear(targetYear);
	dateTargetDate.setMonth(targetMonth-1);
	dateTargetDate.setDate(1);
	var todayWeek		= dateTargetDate.getDay();
	var MonthLine		= Math.ceil((todayWeek+maxMonthDate)/7);
	
	var monthDate = 1;
	for(k = 0;k < MonthLine; k++){
		arrMonth[k]		= new Array();
		for(m=0;m<7;m++){
			if(k == 0 && m < todayWeek){
				arrMonth[k][m]	= " ";
			}else if(monthDate > maxMonthDate){
				arrMonth[k][m]	= " ";
			}else{
				arrMonth[k][m]	= monthDate;
				monthDate ++;
			}
		}
	}

	TableElementTable = document.createElement('table');
	TableElementTable.setAttribute('style','border-collapse:collapse;border:1px #CCCCCC solid;width: 180px;');
	TableElementTbody = document.createElement('tbody');
	for(j=0;j<MonthLine+1;j++){
		TableElementTr = document.createElement('tr');
		for(i=0;i<7;i++){
					TableElementTd = document.createElement('td');
			if(j == 0){
				TableElementTd.setAttribute('style','border:1px #CCCCCC solid;padding: 3px;text-align:center;background-color:#EEEEEE;font-weight: bold;');
				currenttext=document.createTextNode(arrWeekTable[i]);
			}else{
				if(targetYear == nowYear & targetMonth == nowMonth & nowDate == arrMonth[j-1][i]){
					TableElementTd.setAttribute('style','border:1px #CCCCCC solid;padding: 3px;text-align:center;background-color:#FFE0A5');
				}else if(i == 0){
					TableElementTd.setAttribute('style','border:1px #CCCCCC solid;padding: 3px;text-align:center;background-color:#FFE5E5');
				}else if(i == 6){
					TableElementTd.setAttribute('style','border:1px #CCCCCC solid;padding: 3px;text-align:center;background-color:#CBCBFF');
				}else{
					TableElementTd.setAttribute('style','border:1px #CCCCCC solid;padding: 3px;text-align:center;background-color:#FFFFFF');
				}
				currenttext=document.createElement('a');
				currenttext.setAttribute('href',strOrgURL + targetYear + "-" + ZeroFormat(targetMonth,2) + "-" + ZeroFormat(arrMonth[j-1][i],2));
				currenttext.innerHTML = arrMonth[j-1][i];
			}
			TableElementTd.appendChild(currenttext);
			TableElementTr.appendChild(TableElementTd);
		}
		TableElementTbody.appendChild(TableElementTr);
	}
	TableElementTable.appendChild(TableElementTbody);
	setNodeId.appendChild(TableElementTable);


	NaviTableElementTable	= document.createElement('table');
	NaviTableElementTable.setAttribute('style','border-collapse:collapse;border:1px #CCCCCC solid;width: 180px;');
	NaviTableElementTbody	= document.createElement('tbody');
	NaviTableElementTr		= document.createElement('tr');
	NaviTableElementTd		= document.createElement('td');
	NaviTableElementAnchor	= document.createElement('a');
	NaviTableElementAnchor.addEventListener('click',_callPrevious,true);
	NaviTableElementAnchor.innerHTML = "<<";
	NaviTableElementTd.appendChild(NaviTableElementAnchor);
	NaviTableElementTr.appendChild(NaviTableElementTd);

	NaviTableElementTd		= document.createElement('td');
	NaviTableElementTd.setAttribute('style','text-align:center;width: 50%;');
	NaviTableElementTd.innerHTML = targetYear + "-" + ZeroFormat(targetMonth,2);
	NaviTableElementTr.appendChild(NaviTableElementTd);
	
	NaviTableElementTd		= document.createElement('td');
	NaviTableElementTd.setAttribute('style','text-align:right;');
	NaviTableElementAnchor	= document.createElement('a');
	NaviTableElementAnchor.addEventListener('click',_callNext,true);
	NaviTableElementAnchor.innerHTML = ">>";
	NaviTableElementTd.appendChild(NaviTableElementAnchor);
	NaviTableElementTr.appendChild(NaviTableElementTd);
	
	NaviTableElementTbody.appendChild(NaviTableElementTr);
	NaviTableElementTable.appendChild(NaviTableElementTbody);
	setNodeId.appendChild(NaviTableElementTable);

}
/******************************
*setCalender
******************************/
function setCalender(targetYear,targetMonth){
	var CalIdNode = document.getElementById('greasemonkeyCal');
	if(CalIdNode){
		while(CalIdNode.hasChildNodes()){
			CalIdNode.removeChild(CalIdNode.lastChild);
		}
		drawCalender(CalIdNode,targetYear,targetMonth);
	}
}

/******************************
*setNavigationDate
******************************/
function setNavigationDate(){
	if(defMonth==1){
		PreviousYear	= defYear-1;
		PreviousMonth	= 12;
	}else{
		PreviousYear	= defYear;
		PreviousMonth	= defMonth-1;
	}
	if(defMonth==12){
		NextYear		= defYear+1;
		NextMonth		= 1;
	}else{
		NextYear		= defYear;
		NextMonth		= defMonth+1;
	}
}

/******************************
*onclickEvent
******************************/
_callPrevious = function(){
	defYear		= PreviousYear;
	defMonth	= PreviousMonth;
	setCalender(defYear,defMonth);
	setNavigationDate();
}
_callNext = function(){
	defYear		= NextYear;
	defMonth	= NextMonth;
	setCalender(defYear,defMonth);
	setNavigationDate();
}

/******************************
*Main
******************************/
var userID = getUserID();
if(userID == "FALSE"){
	var strOrgURL		= "/tag/";
}else{
	var strOrgURL		= "/" + userID + "/";
}
var TxtAreaBefore,strTodayYMD,strYesterdayYMD;

var now			= new Date();
var nowDate		= now.getDate();
var nowMonth	= now.getMonth() + 1;
var nowYear		= now.getFullYear();

strTodayYMD		= now.getFullYear() + "-" +  ZeroFormat(now.getMonth() + 1,2) + "-" + ZeroFormat(nowDate,2);
strYesterdayYMD	= rtYesterdayDate(now.getFullYear(),now.getMonth() + 1,now.getDate());

TxtAreaBefore = document.getElementsByName('tags');
if(TxtAreaBefore[0]){
	if(TxtAreaBefore[0].value.indexOf(strTodayYMD) == -1){
		TxtAreaBefore[0].value	= TxtAreaBefore[0].value + strTodayYMD + " ";
	}
}

/**
var InsertIdNode = document.getElementById('new-post');
**/
var InsertIdNode = document.getElementById('alt_message');
if(InsertIdNode){
	newElement0 = document.createTextNode(' | ');

	newElement1 = document.createElement('a');
	newElement1.setAttribute('href', strOrgURL + strTodayYMD);
	newElement1.innerHTML = 'today';
	
	newElement2 = document.createTextNode(' | ');
	
	newElement3 = document.createElement('a');
	newElement3.setAttribute('href', strOrgURL + strYesterdayYMD);
	newElement3.innerHTML = 'yesterday';
	
	newElement4 = document.createTextNode(' | ');
	
	/**
	InsertIdNode.parentNode.insertBefore(newElement1, InsertIdNode.nextSibling);
	**/
	InsertIdNode.appendChild(newElement0);
	InsertIdNode.appendChild(newElement1);
	InsertIdNode.appendChild(newElement2);
	InsertIdNode.appendChild(newElement3, InsertIdNode.nextSibling);
	InsertIdNode.appendChild(newElement4, InsertIdNode.nextSibling);
	
}

var defYear			= nowYear;
var defMonth		= nowMonth;

var PreviousYear,PreviousMonth,NextYear,NextMonth;
setNavigationDate();

var SidebarIdNode = document.getElementById('sidebar');
if(SidebarIdNode){
	TableDiv			= document.createElement('div');
	TableDiv.setAttribute('style','float:right;');
	TableDiv.setAttribute('id','greasemonkeyCal');
	SidebarIdNode.parentNode.insertBefore(TableDiv,SidebarIdNode.nextSibling);
}

setCalender(defYear,defMonth);
