/**
 * @author Skylin
 * AnShe CHUNG STUDIOS
 */
function Calendar(obj,m,d,y,game){
  if (!document.getElementById(obj)) {
    alert("obj does not exist");
    return;
  }
  this.game = game==undefined?'imvu':game;
  this.obj = document.getElementById(obj);
  var date = new Date();
  this.months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
  this.weeks = ['S','M','T','W','T','F','S'];
  this.monthday = [31,30,31,30,31,30,31,31,30,31,30,31];
  
  this.Outmonth = this.month = m==undefined?date.getMonth():parseInt(m)-1;
  this.Outday = this.day = d==undefined?date.getDate():parseInt(d);
  this.Outyear = this.year = y==undefined?date.getFullYear():parseInt(y);
 
  this.daywidth = parseInt(parseInt(this.obj.style.width)/this.weeks.length);

}

Calendar.prototype.Show = function()
{
  this.CreateCalendar();
}

//创建日历
Calendar.prototype.CreateCalendar = function()
{
   var div = document.createElement('DIV');
   div.className = "calendar";
   div.style.width = (this.daywidth*this.weeks.length)+"px";
   this.obj.appendChild(div);

   //创建日历头部
   var headerdiv = document.createElement('DIV');
   headerdiv.className = "header";
   headerdiv.style.width = (this.daywidth*this.weeks.length)+"px";
   div.appendChild(headerdiv);
   var leftspan = document.createElement('SPAN');
   leftspan.className = "left";
   headerdiv.appendChild(leftspan);
   this.select = document.createElement('SELECT');
   this.select.className = "month";
   this.select.name = "month";
   this.select.size = "1";
   var selectmethod = this.MonthChanged;
   var obj = this;
   this.select.onchange = function(){
       selectmethod.call(obj)
   };
   leftspan.appendChild(this.select);
   for(var i =0;i < this.months.length;i++)
   {
       var op = new Option();
       op.value = i;
       op.innerHTML = this.months[i];
       if(this.month==i)
       {
           op.selected = true;
       }
       this.select.appendChild(op);
   }
   var rightspan = document.createElement('SPAN');
   rightspan.className = "right";
   headerdiv.appendChild(rightspan);
   this.input = document.createElement('INPUT');
   this.input.className = "year";
   this.input.name = "year";
   this.input.type = "text";
   this.input.size = "8";

   this.input.value = this.year;
   var method = this.YearChanged;
   var obj = this;
   this.input.onchange = function(){
       method.call(obj)
   };
   rightspan.appendChild(this.input);
   var clearspan = document.createElement('SPAN');
   clearspan.className = "clear";
   headerdiv.appendChild(clearspan);

   //创建日历显示星期与日期部分
   var bodydiv = document.createElement('DIV');
   bodydiv.className = "body";
   bodydiv.style.width = (this.daywidth*this.weeks.length)+"px";
   div.appendChild(bodydiv);
   var weekul = document.createElement('UL');
   weekul.className = "week";

   bodydiv.appendChild(weekul);
   for(var i =0;i < this.weeks.length;i++)
   {
      var li = document.createElement('li');
      li.style.width = this.daywidth+"px";
      li.innerHTML = this.weeks[i];
      weekul.appendChild(li);
   }
   this.dayul = document.createElement('UL');
   bodydiv.appendChild(this.dayul);
   var clearspan = document.createElement('SPAN');
   clearspan.className = "clear";
   bodydiv.appendChild(clearspan);
   this.ShowDay(this.year,this.month);
}

Calendar.prototype.MonthChanged = function()
{
	
   this.Outmonth = this.select.selectedIndex;

   this.ShowDay(this.Outyear,this.Outmonth);
}

Calendar.prototype.YearChanged = function()
{
   if(!(/^[1-9][0-9]{3}$/.test(this.input.value)))
   {
   	  this.input.value = this.Outyear;
   }
   this.Outyear = this.input.value;
   this.ShowDay(this.Outyear,this.Outmonth);
}

Calendar.prototype.Load = function(readyState,value)
{
	this.dayul.innerHTML = '<li style="text-align:center;">waiting...</li>';
}



Calendar.prototype.Result = function(requester,value)
{
	var year = this.Showyear;
    var month = this.Showmonth;

	var xmlobj = requester.responseXML.getElementsByTagName("months")[0];

	var maxday = this.monthday[month];
    if(month==1)maxday = this.IsPinYear(year)?29:28;
    var date = new Date(year,month,1);
    var startweek = parseInt(date.getDay()%7);
    this.dayul.innerHTML = '';
    //alert(year+"|"+(month+1)+"|"+1+"|"+startweek+"|"+date.getDay())
    for(var i=0;i<startweek;i++)
    {
       var li = document.createElement('li');
       li.style.width = this.daywidth+"px";
       this.dayul.appendChild(li);
    }
    for(var i=0;i<maxday;i++)
    {
       var li = document.createElement('li');
       //li.innerHTML = i+1;
       li.style.width = this.daywidth+"px";
       if(this.year==year&&this.month==month&&this.day==i+1)
       {
	  	 //li.style.border = '1px solid #FEFEFE';
           if(xmlobj.getElementsByTagName("month"+(i+1))[0]!=undefined)
		   {
		   	  li.innerHTML = "<a style=\"display:block;width:"+(this.daywidth-7)+"px;height:18px;line-height:18px;text-align:center;margin-top:2px;margin-left:2px;border:2px solid #000000;color:#ffffff;background:#D33534;\">"+(i+1)+"</a>";
		   }
		   else
		   {
		   	  li.innerHTML = "<a style=\"display:block;width:"+(this.daywidth-7)+"px;height:18px;line-height:18px;text-align:center;margin-top:2px;margin-left:2px;border:1px solid;color:#000000;\">"+(i+1)+"</a>";
		   }
		   
       }
	   else
	   {
	   	   if(xmlobj.getElementsByTagName("month"+(i+1))[0]!=undefined)
		   {
		   	  li.innerHTML = "<a style=\"display:block;width:"+(this.daywidth-7)+"px;height:18px;line-height:18px;text-align:center;margin-top:2px;margin-left:2px;color:#ffffff;background:#D33534;\">"+(i+1)+"</a>";
		   }
		   else
		   {
		   	  li.innerHTML = "<a style=\"display:block;width:"+(this.daywidth-7)+"px;height:18px;line-height:18px;text-align:center;margin-top:2px;margin-left:2px;color:#000000;\">"+(i+1)+"</a>";
		   }
	  	   
	   }
	   var method = this.ClickEvent;
	   var obj = this;
	   li.getElementsByTagName('A')[0].onclick = function(ev){method.call(obj,ev)};
       this.dayul.appendChild(li);
    }
	delete this.ajax;
}

Calendar.prototype.HistorieslistLoad = function(readyState,value)
{
	var ul = document.getElementById("Historieslist").getElementsByTagName("UL")[0];
	ul.innerHTML = "<li>waiting...</li>";
}

Calendar.prototype.HistorieslistResult = function(requester,value)
{
	var ul = document.getElementById("Historieslist").getElementsByTagName("UL")[0];
	//alert(requester.responseText);
	//alert(ul.innerHTML);
	ul.innerHTML = requester.responseText;
	delete this.ajax;
}

Calendar.prototype.ClickEvent = function(ev)
{
	ev = ev || window.event;
	if(window.ActiveXObject)
	{
		var target = ev.srcElement;
	}
	else
	{
		var target = ev.target;
	}
	var year = this.Showyear;
    var month = this.Showmonth;
	//alert(target.innerHTML);
	if(this.ajax!=undefined)
	{
		this.ajax.requester.abort();
		delete this.ajax;
	}
	var load = this.HistorieslistLoad;
    var result = this.HistorieslistResult;
    var obj = this;
    this.ajax = new Ajax(function(requester,value){
   	 result.call(obj,requester,value);
    }, function(readyState,value){
   	 load.call(obj,readyState,value);
    });
	var parameters = "game=" + this.game + "&year=" + year + "&month=" + month + "&day=" + parseInt(target.innerHTML);
	this.ajax.process("index.php?cmd=Historieslist", parameters,'POST');
}

Calendar.prototype.ShowDay = function(year,month)
{
	if(this.ajax!=undefined)
	{
		this.ajax.requester.abort();
		delete this.ajax;
	}
	this.Showyear = year;
	this.Showmonth = month;
   var load = this.Load;
   var result = this.Result;
   var obj = this;
   this.ajax = new Ajax(function(requester,value){
   	result.call(obj,requester,value);
   }, function(readyState,value){
   	load.call(obj,readyState,value);
   });
   var parameters = "game=" + this.game + "&year=" + year + "&month=" + month;
   this.ajax.process("index.php?cmd=monthlog", parameters,'POST');
   
   /*var maxday = this.monthday[month];
   if(month==1)maxday = this.IsPinYear(year)?29:28;
   var date = new Date(year,month,1);
   var startweek = parseInt(date.getDay()%7);
   this.dayul.innerHTML = '';
   //alert(year+"|"+(month+1)+"|"+1+"|"+startweek+"|"+date.getDay())
   for(var i=0;i<startweek;i++)
   {
      var li = document.createElement('li');
      li.style.width = this.daywidth+"px";
      this.dayul.appendChild(li);
   }
   for(var i=0;i<maxday;i++)
   {
      var li = document.createElement('li');
      //li.innerHTML = i+1;
      li.style.width = this.daywidth+"px";
      if(this.year==year&&this.month==month&&this.day==i+1)
      {
	  	//li.style.border = '1px solid #FEFEFE';

		  li.innerHTML = "<a style=\"display:block;width:"+(this.daywidth-7)+"px;height:18px;line-height:18px;text-align:center;margin-top:2px;margin-left:2px;border:1px solid;color:#000000;\">"+(i+1)+"</a>";
      }
	  else
	  {
	  	li.innerHTML = "<a style=\"display:block;width:"+(this.daywidth-7)+"px;height:18px;line-height:18px;text-align:center;margin-top:2px;margin-left:2px;color:#000000;\">"+(i+1)+"</a>";
	  }
      this.dayul.appendChild(li);
   }*/

}

Calendar.prototype.IsPinYear = function(year)
{
    if (((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))) {//闰年2月有29天
		return true;
	}
	else {//平年2月有28天
		return false;
	}
}

