//-----------------------------------------------------//
//------ 版权所有。所有权归属于无忧物流.---------------//
//------ @copyright by 565u. --------------------------//
//------ 引用、修改、发布， 必须保留本信息-------------//
//-----------------------------------------------------//
var SLS_C_x,SLS_C_y;
var SLS_C_timeset=null;
var SLS_C_divObj=null;
var SLS_C_Obj;

function SLS_C() //构建对象
{
var _Date = new Date();
this.year = _Date.getFullYear();
this.month = _Date.getMonth()+1;
this.date = _Date.getDate();
this.style = this._Style(1);　
}
SLS_C.prototype._Style = function(num) //设置样式
{
	if(!num||isNaN(num)){num=1;}
	　var style = new Array();
	style[1]=".week{background-color:#DfDfff;font-size:12px;width:140px;}"
	+".ds{width:140px;cursor:pointer;font-size:12px;}"
	+".mover{border:1px solid #000;background-color:#f4f4f4;}"
	+".move1{border:1px solid #5d5d5d;background-color:#f4f4f4;color:#909eff;font-size:12px}"
	+".tit{background-color:#909EFF;width:140px;font-size:12px;font-color:#fff;cursor:default}"
	+".cs{position:absolute;border:1px solid #909eff;width:142px;left:0px;top:0px;z-index:9999;background-color:#fff;}"
	+".shadow{position:absolute;left:0px;top:0px;font-size:50px;color:#d4d4d4;z-index:1;text-align:center;font-family: Arial Black;}";
	document.write("<style type='text/css'>");
	document.write(style[num]);
	document.write("</style>");
}
SLS_C.prototype.initCalendar = function(obj)
{
	this.SLS_C_Top = "<tr><td width=10 onmouseover='this.style.color=\"#000\"' onmouseout='this.style.color=\"#fff\"' onclick='SLS_C.PreY()' style='cursor:pointer;' title='" + obj.params[0] + "'>&#9668;</td><td align=center onmouseover=this.className='move1'; onmouseout=this.className='';SLS_C.divHidden(document.getElementById(\"_CC\").parentNode.nextSibling); onclick='SLS_C.createyear("+obj.year+",this);SLS_C.divShow(document.getElementById(\"_CC\").parentNode.nextSibling);'></td><td width=10 style='cursor:pointer;' onmouseover='this.style.color=\"#000\"' onmouseout='this.style.color=\"#fff\"' onclick='SLS_C.NextY()' title='" + obj.params[1] + "'>&#9658;</td><td title='"+ obj.params[2] + "' onmouseover='this.style.color=\"#000\"' onmouseout='this.style.color=\"#fff\"' onclick='SLS_C.PreM()' width=10 align='right' style='cursor:pointer;'>&#9668;</td><td align=center onclick='SLS_C.createmonth(this);SLS_C.divShow(document.getElementById(\"_CC\").parentNode.nextSibling)' onmouseover=this.className='move1'; onmouseout=this.className='';SLS_C.divHidden(document.getElementById(\"_CC\").parentNode.nextSibling);></td><td width=10 onmouseover='this.style.color=\"#000\"' onmouseout='this.style.color=\"#fff\"' onclick='SLS_C.NextM()' style='cursor:pointer;' title='"+ obj.params[3] +"'>&#9658;</td></tr>";
  
  var _bottomStr = ("<td height=16 align=center onmouseover='SLS_C.mOver(this)' onmouseout='SLS_C.mOut(this)' onclick='if(this.innerHTML!=\"\"){SLS_C.getValue(SLS_C_Obj,this.innerHTML);SLS_C_div.style.display=\"none\";}'></td>");
	_bottomStr +="<td height=16 align=center onmouseover='SLS_C.mOver(this)' onmouseout='SLS_C.mOut(this)' onclick='if(this.innerHTML!=\"\"){SLS_C.getValue(SLS_C_Obj,this.innerHTML);SLS_C_div.style.display=\"none\";}'></td>";
	_bottomStr +="<td style={cursor:'default'}></td><td colspan=2 align=center onmouseover='SLS_C.mOver(this)' onmouseout='SLS_C.mOut(this)' onclick='SLS_C.getValue(SLS_C_Obj,\"\");SLS_C_div.style.display=\"none\";'>"+ obj.params[4]+"</td>";
	_bottomStr +="<td colspan=2 align=center onmouseover='SLS_C.mOver(this)' onmouseout='SLS_C.mOut(this)' onclick='SLS_C_div.style.display=\"none\";'>"+obj.params[5]+"</td>";
  this.SLS_C_Bottom = _bottomStr;

}
SLS_C.prototype.createCalendar = function()
{
	this.setParams();
	this.initCalendar(this);
	var week = this.week;
	document.write("<div class='cs' onselectstart='return false' oncontextmenu='return false' onmousedown='if(event.button==2)this.style.display=\"none\"' id='SLS_C_div'>");
	document.write("<div class='shadow'></div><div style='position:absolute;left:0px;top:0px;z-index:1;'>");
	//创建头部
	document.write("<table class='tit' id='SLS_C_Top' onmousedown='SLS_C_x=event.x-parentNode.parentNode.style.pixelLeft;SLS_C_y=event.y-parentNode.parentNode.style.pixelTop;' onmousemove='SLS_C._CMove(this.parentNode.parentNode);'>");
	document.write(this.SLS_C_Top);
	document.write("</table>");
	//创建星期条目
	document.write("<table class='week'><tr>");
	for(i=0;i<7;i++)
	document.write("<td align=center>"+week[i]+"</td>");
	document.write("</tr></table>");
	//创建日期条目
	document.write("<table class='ds' id='_CC' cellspacing=0 cellpadding=0>");
	for(i=0;i<5;i++)
	{
	document.write("<tr>");
	for(j=0;j<7;j++)
	document.write("<td width=10% height=16 align=center onmouseover='SLS_C.mOver(this)' onmouseout='SLS_C.mOut(this)' onclick='if(this.innerHTML!=\"\"){SLS_C.getValue(SLS_C_Obj,this.innerHTML);document.getElementById(\"SLS_C_div\").style.display=\"none\";}'></td>");
	document.write("</tr>");
	}
//创建table的最后一行
	document.write("<tr id='SLS_C_Bottom'>");
	document.write(this.SLS_C_Bottom);
	document.write("</tr>");
	document.write("</table>");
	//建水印
	document.write("</div>");
	//创建选择图层
	document.write("<div style='position:absolute;left:0px;top:0px;z-index:3' onmouseover=SLS_C.divShow(this) onmouseout=SLS_C.divHidden(this)></div>");
	document.write("</div>");
	//显示日期
	this.showDate(this.year,this.month);
	document.getElementById("SLS_C_div").style.display='none';
}
// utility function
SLS_C.prototype.padZero = function(num)
{
  return ((num <= 9) ? ("0" + num) : num);
}
// Format short date
SLS_C.prototype.formatDate = function(y,m,d)
{
  var fd = this.format;
  fd = fd.replace ('dd', this.padZero(d))
  fd = fd.replace ('d', d)
  fd = fd.replace ('MM', this.padZero(m))
  fd = fd.replace ('M', m)
  fd = fd.replace ('yyyy', y)
  fd = fd.replace ('yy', this.padZero(y%100))
  return fd;
}

SLS_C.prototype.getValue = function (obj,value)
{
  if(value=="")
  	obj.value = this.formatDate(this.year,this.month,this.date);
  else
  	obj.value = this.formatDate(parseInt(GetTC("SLS_C_Top",1).innerHTML),this.getM(GetTC("SLS_C_Top",4).innerHTML),value);
}
SLS_C.prototype.getM = function (val)
{
		var _mm = 0;
		for(ii=0;ii<this.months.length;ii++)
	  if(this.months[ii]+"" == ""+val){ _mm = ii+1; break;}
	  return _mm;
}
SLS_C.prototype.showDate = function ()
{
	var _yy = this.showDate.arguments[0];
	var _mm = this.showDate.arguments[1];
	var _dd = this.showDate.arguments[2];
	if(typeof _dd == "undefined") _dd = 1;
	var _Date = new Date(_yy,_mm-1,_dd);
	var today = new Date();
	var day = _Date.getDay();
	var length = new Array(31,30,31,30,31,30,31,31,30,31,30,31);
	length[1] = ((_yy%4==0)&&(_yy%100!=0)||(_yy%400==0))?29:28;


	for(i=0;i<38; i++) GetTC("_CC",i).innerHTML = ""; //38 表示日历表格的数据 扣除 today，close

	for(i=0;i<length[_mm-1];i++)
	{
			cellsObj = GetTC("_CC",i+day);
			cellsObj.innerHTML = (i+1);
			if(new Date(_yy,_mm-1,i+1).getDay()==6||new Date(_yy,_mm-1,i+1).getDay()==0){cellsObj.style.color='red';}
	}
	GetTC("SLS_C_Top",1).innerHTML=_yy+ this.params[8];
	GetTC("SLS_C_Top",4).innerHTML=this.months[_mm-1];

	var _CC = document.getElementById("_CC");
	with(_CC.parentNode.previousSibling.style)
	{
		left=_CC.offsetLeft;
		top=_CC.offsetTop;
		height = _CC.clientHeight;
		width = _CC.clientWidth;
	}
	_CC.parentNode.parentNode.style.height=_CC.parentNode.offsetHeight;
	_CC.parentNode.previousSibling.innerHTML=_yy;
}
	
SLS_C.prototype.mOver = function (obj){if(obj.innerHTML!="")obj.className = 'mover';else obj.style.cursor = 'default';}
SLS_C.prototype.mOut = function(obj) {if(obj.className=='mover')obj.className = '';}
SLS_C.prototype.NextY = function(){var year = parseInt(GetTC("SLS_C_Top",1).innerHTML);var month = this.getM(GetTC("SLS_C_Top",4).innerHTML); year++;this.showDate(year,month);}
SLS_C.prototype.NextM = function (){var year = parseInt(GetTC("SLS_C_Top",1).innerHTML);var month = this.getM(GetTC("SLS_C_Top",4).innerHTML);month++;if(month>12){month=1;year++;}this.showDate(year,month);}
SLS_C.prototype.PreY = function (){var year = parseInt(GetTC("SLS_C_Top",1).innerHTML);var month = this.getM(GetTC("SLS_C_Top",4).innerHTML);year--;this.showDate(year,month);}
SLS_C.prototype.PreM =function (){var year = parseInt(GetTC("SLS_C_Top",1).innerHTML);var month = this.getM(GetTC("SLS_C_Top",4).innerHTML);month--;if(month<1){month=12;year--;}this.showDate(year,month);}
SLS_C.prototype.divS =function (obj)
{
	if(obj!=SLS_C_divObj)
	{
	obj.style.backgroundColor="#909eff";
	obj.style.color='#000';
	}
	if(SLS_C_divObj!=null)
	{
	SLS_C_divObj.style.backgroundColor='';
	SLS_C_divObj.style.color='';
	}
	SLS_C_divObj = obj;
}
SLS_C.prototype.divShow = function (obj)
{ if (SLS_C_timeset!=null) clearTimeout(SLS_C_timeset);
  obj.style.display='block';
}
SLS_C.prototype.divHidden =function (obj){SLS_C_timeset=window.setTimeout(function(){obj.style.display='none'},500);}
SLS_C.prototype.createyear =function (year,obj)//创建年份选择
{
	var ystr;
	var oDiv;
	ystr="<table class='move1' cellspacing=0 cellpadding=2 width="+obj.offsetWidth+">";
	ystr+="<tr><td nowrap style='cursor:pointer;' onclick='SLS_C.createyear("+(year-5)+",GetTC(\"SLS_C_Top\",1))' align=center>"+this.params[6]+"</td></tr>";
	for(i=year-5;i<year+5;i++)
	if(i==parseInt(GetTC("SLS_C_Top",1).innerHTML))
	ystr+="<tr style='background-color:#909eff'><td nowrap style='color:#000;height:16px;cursor:pointer;' align=center onclick='GetTC(\"SLS_C_Top\",1).innerHTML=this.innerHTML;SLS_C.showDate("+i+","+ this.getM(GetTC("SLS_C_Top",4).innerHTML)+");	document.getElementById(\"_CC\").parentNode.nextSibling.innerHTML=\"\"'>"+i+this.params[8]+"</td></tr>";
	else
	ystr+="<tr><td align=center nowrap style='cursor:pointer;' onmouseover=SLS_C.divS(this) onclick='GetTC(\"SLS_C_Top\",1).innerHTML=this.innerHTML;SLS_C.showDate("+i+","+this.getM(GetTC("SLS_C_Top",4).innerHTML)+");document.getElementById(\"_CC\").parentNode.nextSibling.innerHTML=\"\"'>"+i+this.params[8]+"</td></tr>";
	ystr+="<tr><td style='cursor:pointer;' nowrap onclick='SLS_C.createyear("+(year+5)+",GetTC(\"SLS_C_Top\",1))' align=center>"+this.params[7]+"</td></tr>";
	ystr+="</table>";
	oDiv = document.getElementById("_CC").parentNode.nextSibling;
	oDiv.innerHTML = ystr;
	this.showDiv(oDiv,obj);
}
SLS_C.prototype.createmonth = function(obj)//创建月份选择
{
	var mstr;
	var oDiv;
	mstr="<table class='move1' cellspacing=0 cellpadding=2 width="+(obj.offsetWidth+5)+">";
	for(i=1;i<13;i++)
	if (this.months[i-1] == GetTC("SLS_C_Top",4).innerHTML)
	mstr+="<tr style='background-color:#909eff'><td nowrap style='color:#000;height:16px;cursor:pointer;' align=center onclick='GetTC(\"SLS_C_Top\",4).innerHTML=this.innerHTML;SLS_C.showDate(parseInt(GetTC(\"SLS_C_Top\",1).innerHTML),"+i+");document.getElementById(\"_CC\").parentNode.nextSibling.innerHTML=\"\"'>"+this.months[i-1]+"</td></tr>";
	else
	mstr+="<tr><td nowrap align=center style='cursor:pointer;' onmouseover='SLS_C.divS(this)' onclick='GetTC(\"SLS_C_Top\",4).innerHTML=this.innerHTML;SLS_C.showDate(parseInt(GetTC(\"SLS_C_Top\",1).innerHTML),"+i+");document.getElementById(\"_CC\").parentNode.nextSibling.innerHTML=\"\"'>"+this.months[i-1]+"</td></tr>";
	mstr+="</table>";
	oDiv = document.getElementById("_CC").parentNode.nextSibling;
	oDiv.innerHTML = mstr;
	this.showDiv(oDiv,obj);
}
SLS_C.prototype.showDiv = function (oDiv,obj)
{
//	var point = this.fGetXY(obj);
	oDiv.style.top= obj.offsetTop + obj.offsetHeight;
	oDiv.style.left=obj.offsetLeft;
}
SLS_C.prototype._CMove = function (obj)
{
	return;
	if(1==event.button ||0==event.button)
	{
	var X = obj.clientLeft;
	var Y = obj.clientTop;
	obj.style.pixelLeft= X+(event.x-SLS_C_x);
	obj.style.pixelTop= Y+(event.y-SLS_C_y);
	window.status=SLS_C_y;
	}
}

SLS_C.prototype.Point = function (iX, iY){this.x = iX;this.y = iY;}

SLS_C.prototype.fGetXY = function (aTag){
	var oTmp = aTag;
	var pt = new this.Point(0,0);
	do{pt.x += oTmp.offsetLeft;	pt.y += oTmp.offsetTop;	oTmp = oTmp.offsetParent;	} 
	while(oTmp.tagName!="BODY");
	return pt;
}

// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
SLS_C.prototype._isInteger = function(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
	}
SLS_C.prototype._getInt = function(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (this._isInteger(token)) { return token; }
		}
	return null;
	}

SLS_C.prototype.getDateFromFormat = function(val,format) 
{
	if(val.length < 6)
		return 0;
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=1;
		
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=this._getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MM"||token=="M") {
			month=this._getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=this._getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	if (i_val != val.length) { return 0; }
	if (month==2) {
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return 0; }
		}
	var newdate=new Date(year,month-1,date);
	return newdate;
}
SLS_C.prototype.setFormat = function(format)
{
	if(typeof format != "undefined" && format != "")
		this.format = format;
	else
		this.format = "yyyy-MM-dd";
}
SLS_C.prototype.setParams = function()
{
  var _week = this.setParams.arguments[0];
  var _months = this.setParams.arguments[1];
  var _params = this.setParams.arguments[2];
	if (_week == "" || typeof _week == "undefined")
		this.week = new Array('日','一','二','三','四','五','六');
	else
		this.week = _week.split(",");
	if (_months == "" || typeof _months == "undefined")
		this.months = new Array('1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月');
	else
		this.months = _months.split(",");
	if (_params == "" || typeof _params == "undefined")
		this.params = new Array('上一年','下一年','上一月','下一月','今天','关闭','上翻','下翻','年');
	else
		this.params = _params.split(",");
}
//为了兼容firefox，对table的cells的引用
GetTC = function(TableObj,CellNum)
{
		if(CellNum == "undefined")
		return;
		
		var	rows = parseInt((CellNum)/7); //因为表的列数是7
		var	cols = (CellNum)%7;
		return document.getElementById(TableObj).rows[rows].cells[cols];
	
}
//程序入口，参数1:引用的object(必填),参数2:日期格式,参数3:周参数,参数4:月参数,参数5:其他一些参数
SLS_showCalendar = function()
{
	SLS_C_Obj = SLS_showCalendar.arguments[0];
	if (typeof(SLS_C_Obj)  == "undefined")
		return;
	SLS_C.setFormat(SLS_showCalendar.arguments[1]);
  SLS_C.setParams(SLS_showCalendar.arguments[2],SLS_showCalendar.arguments[3],SLS_showCalendar.arguments[4]);
	var point=SLS_C.fGetXY(SLS_C_Obj);
	var _Date = SLS_C.getDateFromFormat(SLS_C_Obj.value,SLS_C.format);
	if(_Date == 0)
	  _Date = new Date();  
  var _yy = _Date.getFullYear();
  var _mm = _Date.getMonth() + 1;
  var _dd = _Date.getDate();
  
	with (document.getElementById("SLS_C_div").style) 
	{
		left = point.x;
		top  = point.y + SLS_C_Obj.offsetHeight + 1;
		display = 'block';
	}
	SLS_C.showDate(_yy,_mm);
	SLS_C_Obj.focus();
}
// --------------End ---------------------

var SLS_C = new SLS_C; 
SLS_C.createCalendar();
