﻿
//****************************
// calendar,edit by reikokong
// name: object name
// fname: id_prefix,can be null
// gData: set init data
//****************************
if(typeof(HTMLElement)!="undefined" )	
 {	 
	 HTMLElement.prototype.__defineGetter__("outerHTML",function()	 
	 {	 
		 var   a=this.attributes,	str="<"+this.tagName,	i=0;for(;i<a.length;i++)   
		 if(a[i].specified)   str+="   "+a[i].name+'="'+a[i].value+'"';   
		 if(!this.canHaveChildren)	 
		 	return   str+"   />";	 
		 return   str+">"+this.innerHTML+"</"+this.tagName+">";   
	 });   
	 HTMLElement.prototype.__defineSetter__("outerHTML",function(s)   
	 {	 
		 var   d   =   document.createElement("DIV");	d.innerHTML   =   s;   
		 for(var   i=0;   i<d.childNodes.length;   i++)   
				 this.parentNode.insertBefore(d.childNodes[i],	 this);   
		 this.parentNode.removeChild(this);   
	 });   
	 HTMLElement.prototype.__defineGetter__("canHaveChildren",function()   
	 {	 
		 return   !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());   
	 });   
 }	 



function calendar(name,fName,  bAutoGetData, qq, year, month, date)
{
	this.name = name;
	this.fName = fName || "calendar";
	//this.gData = gData || null;
	this.bAutoGetData = bAutoGetData ? true: false;
	this.year = new Date().getFullYear();
	this.month = new Date().getMonth();
	this.date = new Date().getDate();
	this.qq = qq;
	
	this.year = year || this.year;
	this.month = month || this.month;
	this.date = date || this.date;
	
	//private
	this.toString = function()
	{
		var str = "";
		str += "<table border=\"0\" cellspacing=\"3\" cellpadding=\"0\" onselectstart=\"return false\">";
		str += "<tr>";
		str += "<td>";
		str += this.drawMonth();
		str += "</td>";
		str += "<td align=\"right\">";
		str += this.drawYear();
		str += "</td>";
		str += "</tr>";
		str += "<tr>";
		str += "<td colspan=\"2\">";
		str += "<div class=\"c_frameborder\">";
		str += "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"c_dateHead\">";
		str += "<tr>";
		str += "<td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td>";
		str += "</tr>";
		str += "</table>";
		str += this.drawDate();
		str += "</div>";
		str += "</td>";
		str += "</tr>";
		str += "</table>";

		return str;
	}
	//private
	this.drawYear = function()
	{
		var str = "";
		str += "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
		str += "<tr>";
		str += "<td>";
		str += "<input class=\"c_year\" maxlength=\"4\" value=\""+this.year+"\" name=\""+this.fName+"\" id=\""+this.fName+"_year\" readonly>";
		//DateField
		str += "<input type=\"hidden\" name=\""+this.fName+"\" value=\""+this.date+"\" id=\""+this.fName+"_date\">";
		str += "</td>";
		str += "<td>";
		str += "<table cellspacing=\"2\" cellpadding=\"0\" border=\"0\">";
		str += "<tr>";
		str += "<td style=\"background:#d7e7f6;border:#7f9db9 1px solid;\"><button class=\"c_arrow\" onfocus=\"this.blur()\" onclick=\"event.cancelBubble=true;document.getElementById('"+this.fName+"_year').value++;"+this.name+".redrawDate()\">5</button></td>";
		//str += "<td style=\"background:#d7e7f6;border:#7f9db9 1px solid;\"><button class=\"c_arrow\" onfocus=\"this.blur()\" onclick=\"alert('you can not change year...')\">5</button></td>";
		str += "</tr>";
		str += "<tr>";
		//str += "<td style=\"background:#d7e7f6;border:#7f9db9 1px solid;\"><button class=\"c_arrow\" onfocus=\"this.blur()\" onclick=\"alert('you can not change year...')\">6</button></td>";
		str += "<td style=\"background:#d7e7f6;border:#7f9db9 1px solid;\"><button class=\"c_arrow\" onfocus=\"this.blur()\" onclick=\"event.cancelBubble=true;document.getElementById('"+this.fName+"_year').value--;"+this.name+".redrawDate()\">6</button></td>";
		str += "</tr>";
		str += "</table>";
		str += "</td>";
		str += "</tr>";
		str += "</table>";
		return str;
	}
	//priavate
	this.drawMonth = function()
	{
		var aMonthName = ["一","二","三","四","五","六","七","八","九","十","十一","十二"];
		var str = "";
		str += "<select class=\"c_month\" name=\""+this.fName+"\" id=\""+this.fName+"_month\" onchange=\""+this.name+".redrawDate()\">";
		for(var i=0;i<aMonthName.length;i++) 
		{
			str += "<option value=\""+(i+1)+"\" "+(i==this.month?"selected":"")+">"+aMonthName[i]+"月</option>";
		}
		str += "</select>";
		return str;
	}
	//private
	this.drawDate = function()
	{
		var str = "";
		//first day of this month, day
		var fDay = new Date(this.year,this.month,1).getDay();
		var fDate = 1-fDay;
		//last day of this month, day, date
		var lDay = new Date(this.year,this.month+1,0).getDay();
		var lDate = new Date(this.year,this.month+1,0).getDate();
		//var gData = this.gData;
	
		str += "<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\" class=\"dkdate\" id=\""+this.fName+"_dateTable"+"\">";
		var j;
		
		
		var gData = null;
		if(this.bAutoGetData)
		{
			gData = dk_GetUserPubDate(this.qq, this.year, this.month);
			//alert("got data:"+gData);
		}
		for(var i=1,j=fDate;i<7;i++)
		{
			str += "<tr>";
			for(var k=0;k<7;k++)
			{
				
				//str += "<td>";
				if(!isDate(j))
				{
					//do nothing
					str += "<td>";
					str += "&nbsp;";
					str += "</td>";
				}
				else
				{
					str += "<td ";
					var cls = "";
					if(j == this.date)
					{
						//sel day...
						cls += "mouseon_l";
					}
					if(isToday(this.year, this.month, j))
					{
						//today...
						cls += (cls!="") ? (" todaylaodao") : ( "todaylaodao");
					}
					//has data
					//get data
					//str += "<td><span style=\"cursor:hand\" "+(j==this.date?" class=\"selected\"":"")+" onclick=\""+this.name+".redrawDate(this.innerText);SetDate('"+this.fName+"')\">"+(isDate(j++))+"</span></td>";
					if(gData && gData.length>0)
					{
						var bin = gData[j-1];
						var tp = (bin=="1") ?  "have_l":"";
						cls += (cls!="") ? (" "+tp) : (tp);
						str +=  (cls!="") ? ("class=\""+cls+"\""):("");
						str += (bin=="1") ? (" style='cursor:hand' onclick=\""+this.name+".resetDate(this.innerText);SetDate('"+this.fName+"')\"") : ("");
					}
					else 
					{
						
						str +=  (cls!="") ? ("class=\""+cls+"\""):("");
						str +=(" style='cursor:hand' onclick=\""+this.name+".resetDate(this.innerText);SetDate('"+this.fName+"')\"") ;
					}
					str += "><span>"+j+"</span>";
					str += "</td>";
				}
				//str += "</td>";
				j++;
				
			}
			str += "</tr>";
		}
		str += "</table>";
		//alert("draw data:"+str);
		return str;

		function isDate(n)
		{
			return (n>=1&&n<=lDate)?n:"";
		}
		function isToday(y, m, d)
		{
			//cur day...
			var curYear = new Date().getFullYear();
			var curMonth = new Date().getMonth();
			var curDate = new Date().getDate();
			return (curYear == y && curMonth == m && curDate == d)?true:false;
		}
	}
	//private
	this.resetDate = function(d)
	{
		this.year = document.getElementById(this.fName+"_year").value;
		this.month = document.getElementById(this.fName+"_month").value-1;
		this.date = d || this.date;
	}
	//public
	this.redrawDate = function(d, m, y)
	{
		
		if(m)
		{
			m = m-1;
		}
		var curYear = new Date().getFullYear();
		var curMonth = new Date().getMonth();
		var curDate = new Date().getDate();

		this.year = document.getElementById(this.fName+"_year").value;
		this.month = document.getElementById(this.fName+"_month").value-1;
		this.year = y || this.year;
		this.month = m || this.month;
		this.date = d || this.date;

		
		//alert("year:"+this.year+"&&mon:"+this.month+"&&date:"+this.date);	
		if(this.date>curDate &&this.month>=curMonth && this.year >= curYear)
		{
			//alert("...");
			//return;
		}
		if(this.month>curMonth && this.year>=curYear)
		{
			//alert("you can not sel this month...");
			//return;
		}
		if(this.year>curYear)
		{
			//alert("you can not sel this year...");
			//return;
		}
		document.getElementById(this.fName+"_year").value = this.year;
		document.getElementById(this.fName+"_month").selectedIndex = this.month;
		document.getElementById(this.fName+"_date").value = this.date;
		if(this.date>new Date(this.year,this.month+1,0).getDate()) 
		{
			this.date = new Date(this.year,this.month+1,0).getDate();
		}
		document.getElementById(this.fName+"_dateTable").outerHTML = this.drawDate();
		//alert("redrawDate");
	}
	//public
	this.getDate = function()
	{
		var delimiter = "-";
		var aValue = [this.year,(this.month+1),this.date];
		return aValue.join(delimiter);
	}
}

