
HJ.MiniCalendar = Class.create();

HJ.MiniCalendar.prototype = Object.extend(new HJ.Calendar(), {

	initialize: function(blockPastDateFlag) {
	    blockPastDateFlag!=null ? this.blockPastDateFlag = true : this.blockPastDateFlag = false;
	    this.miniPrevious = document.getElementById("miniPrevious");
	    this.miniNext = document.getElementById("miniNext");
	    this.miniCalHeading = document.getElementById("miniCalHeading");
	    this.table = document.getElementById("miniCalTable");
	    
	    this.miniPrevious.onclick = this.previous.bind(this);
	    this.miniNext.onclick = this.next.bind(this);
	    	    
	    this.smallDays = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
	    
	    this.table.onclick = this.tableClicked.bindAsEventListener(this);

	    if (this.table.tBodies.length > 0) {
			this.tbody = this.table.tBodies[0];
	    } else {
	        this.tbody = document.createElement('tbody');
	        this.table.appendChild(this.tbody);
	    }
	    
	},
		
	render: function(schedules, date) {
	   this.schedules = schedules;
	   this.date = date;
	   
       if (date == null) {
           // nothing to render.  happens during startup from
           // Schedule.shownScheduleListChanged,
           // which probably means that a listener is set too early.
           return;
       }
       if (app.schedule != null) {
           app.schedule.loadEventData(this.date);
       }

	   var tempDate = new Date(date.getTime());
	   tempDate.setDate(1);
	   this.miniCalHeading.innerHTML = this.months[tempDate.getMonth()] + " " + tempDate.getFullYear();
	   
	   this.startTime = new Date(tempDate.getTime());
	   
	   var day = tempDate.getDay();
	   
	   this.startTime.setDate(this.startTime.getDate() - day);
	   
	   var wkSt = new Date();
	   wkSt.setHours(0,0,0,0);
	   var todayDate = wkSt.getTime();
	   var day2 = wkSt.getDay();
	   wkSt.setDate(wkSt.getDate() - day2);
	   var wkEnd = new Date(wkSt.getTime());
	   wkEnd.setDate(wkSt.getDate() + 7);
	   wkSt = wkSt.getTime();
	   wkEnd = wkEnd.getTime();

	   tbl = this.table;
	   var tbody = this.tbody;
	   removeAll(tbody);
	   
	   var tr = document.createElement("tr");
	   tbody.appendChild(tr);
	   
	   for (var i=0; i<7; i++) {
	      var td = document.createElement("td");
	      td.className = "weekDays";
	      td.innerHTML = this.smallDays[i];
	      tr.appendChild(td);
	   }
	   
	   var m = tempDate.getMonth();
	   var y = tempDate.getFullYear();
	   var temp = this.startTime;
	   var dt = new Date(this.startTime.getTime());
	   while((dt.getMonth() <= m && dt.getFullYear() == y) || (dt.getMonth() > m && dt.getFullYear() < y)) {
	      var tr = document.createElement("tr");
	      tbody.appendChild(tr);
	      for (var j=0; j<7; j++) {
	          var temp = dt.getTime();
			  td = document.createElement("td");
			  td.id = "" + temp;
			  if (dt.getMonth() != m) {
			      td.innerHTML = "&nbsp;";
			  } 
			  else if (this.blockPastDateFlag==true && temp < todayDate ) {
			      var a = document.createElement("span");
				  a.innerHTML = "" + dt.getDate();
				  a.id = "" + temp;
				  td.appendChild(a);
				  td.className = "miniCalCurrentWeek";			  	
			  }
			  else{
			      var a = document.createElement("a");
			      a.href="#"
				  a.innerHTML = "" + dt.getDate();
				  a.id = "" + temp;
				  td.appendChild(a);
				  
				  if (temp >= wkSt && temp < wkEnd && this.blockPastDateFlag==false) {
				     td.className = "miniCalCurrentWeek";
				  }

			  }
			  tr.appendChild(td);
			  dt.setDate(dt.getDate() + 1);
	      }
	   }
	   this.endTime = dt;
	   if (this.schedules != null) {
	      this.renderEvents(tbl);
	   }
	},
	
	renderEvents: function(tbl) {
	   return;
	   var tempDate = new Date(this.date.getTime());
	   tempDate.setDate(1);
	   var dayOffset = tempDate.getDay();
	   
	   var dt1 = new Date(this.startTime.getTime());
	   while(dt1.getTime() < this.endTime.getTime()) {
	     var dt2 = new Date(dt1.getTime());
	     dt2.setDate(dt2.getDate() + 1);
	     
	     var t1 = dt1.getTime();
	     var t2 = dt2.getTime();
	     for (var i=0; i<this.schedules.length; i++) {
	       var sc = this.schedules[i];
	       var l = sc["event"];
	       
	       if (l != null) {
	       
	          for (var j=0; j<l.length; j++) {
	              var event = l[j];
	              var s = parseInt(event["startDT"]);
	              var e = parseInt(event["endDT"]);
	              var tempDt = new Date(s);
	              tempDt.setHours(0,0,0,0);
	              if (tempDt.getTime() <= t1 && (event["repeatFlag"] + "" == "true")) {
	                 if (event["deletedSeqList"] == null) {
	                    setEventDeleteSeqList(event);
	                 }
	                 if (event["modifiedSeqList"] == null) {
	                    setEventModifySeqList(event);
	                 }
	                 if (!isEventInSeq(event, dt1.getTime())) {
	                    continue;
	                 }
	                 event = this.getRpt(event, dt1, dt1, dt2);
	                 if (event == null) {
	                    continue;
	                 }
	                 s = dt1.getTime();
	              } else if (s < t1 || s >= t2) {
	                 continue;
	              }
	              
	              
                  var temp = new Date(s);
                  var nday = this.getDayNumber(s) - 1;
                  if (nday < 0) {
                     continue;
                  }
                  var r = parseInt(nday / 7);
                  var c = nday % 7;
                  var cell = tbl.rows[r+1].cells[c];
                  cell.style.fontWeight = "bold";
	             
	          }
	       }
	     }
	     dt1 = dt2;
	   }
	},
	
	next: function(evt) {
	   var m = this.date.getMonth();
	   var y = this.date.getFullYear();
	   m += 1;
	   if (m > 11) {
	     m = 0;
	     y++;
	   }
	   this.date.setFullYear(y);
	   this.date.setMonth(m);
	   this.render(this.schedules, this.date);
	   HJ.stopEvent(evt);
	   return false;
	},
	
	previous: function(evt) {
	   var m = this.date.getMonth();
	   var y = this.date.getFullYear();
	   m -= 1;
	   if (m < 0) {
	     m = 11;
	     y--;
	   }
	   this.date.setFullYear(y);
	   this.date.setMonth(m);
	   this.render(this.schedules, this.date);
	   HJ.stopEvent(evt);
	   return false;
	},
	
	updateMiniCalendar: function(event) {
	   var s = parseInt(event["startDT"]);
	   if (s >= this.startTime.getTime() && s <= this.endTime.getTime()) {
		  this.render(this.schedules, this.date);
	   }
	}
	
});

