// calendar functions

var Calendar = new function() { 
    this.ajax = null;
	this.dotSpan = null;
	this.msgSpan = null;
	 this.dots = '';
	  this.promptInterval = null;
	this.week_days = ['sun','mon','tue','wed','thu','fri','sat'];
	this.calendar_months =['january','february','march','april','may','june','july','august','september','october','november','december']
	this.days_in_months = ['31','28','31','30','31','30','31','31','30','31','30','31'];
	this.classes =['All Day Training','Multiple Trainings','Other Training','Daily Progress Notes', 'Adult CPR', 'Diversity', 'Beyond Tolerance', 'Suicide Prevention', 'PACE/Rule Consolidation', 'First Aid', 'VA', 'OSHA', 'Med Review/OSHA', 'Nutrition II','PACE II','Medication Administration I','Medication Administration II','Nutrition','Med Equip','CPR','Sexual Harrassment','About BHCS, Inc. And Our Ethical Expectations'];
	this.classColors =['#00336A','#8CA93E','#D9DB56','#AAB6A2','#F398E9','#7F171F','#91C3DC','#91C3DC','#FE4902','#22287F','#CBFFFA','#87907D','#FFDC8A','#7F5417','#F4E6CC','#B6212D','#CC9752','#872D7D','#FF6600','#008F00','#FFFF00','#443266'];
	this.generatedColors = [];
	this.dateObj = null;
	this.firstDayOfMonth = null; // if value==7 then ==0	
	this.lastDayOfMonth = null;
	this.currentMonth = null;
	this.currentMonthIndex = null;
	this.currentFirstDay = null;
	this.currentLastDay = null;
	this.firstDayOfNextMonth = null;
	this.firstDayOfPrevMonth = null;
	this.mainDiv = null;
	this.calendarDiv = null;
	this.colorDiv = null;
	this.colorCodeDiv = null;
	this.calendar = null;
	this.prevDiv = null;
	this.nextDiv = null;
	this.weekday = null;
	this.opaqueCover = null;
	this.scheduleBox = null;
	this.classObj = {};
	this.classGroupsArray = {};
	this.currOpacity = 20;
	this.initMonth = 0;
	this.currentYear = null;
	
	this.createRandomUpperCaseLetter = function(){
		
		return String.fromCharCode(65 + Math.round(Math.random() * 5));
	}
	
	this.createRandomNumber = function(){
		
		return Math.round(Math.random() * 9);
	}
	
	this.getRandomColor = function(){
		var self = Calendar;
		var pound = '#';
		
		do{
			var letter = self.createRandomUpperCaseLetter();
			var number = self.createRandomNumber();
			var charArray = [letter,number];
			var ranNum= Math.floor(Math.random()*2);
			var newChar = charArray[ranNum]; 
            pound = pound+newChar; 
		}
		while(pound.length < 7)
		
		return pound;
		
	};
	
	
	this.init = function() {
		if (!document.getElementById || !document.getElementsByTagName ){
			alert('Please download a newer browser version')
			return;
		}		
		var self = Calendar;
		self.dateObj = new Date();
		self.mainDiv = document.getElementById('mainDiv');
		self.dotSpan = document.getElementById('dotSpan');
	    self.msgSpan = document.getElementById('msgSpan');
		self.colorDiv = document.getElementById('rightTableDiv');
		self.calendarDiv = document.getElementById('leftTableDiv');
		self.colorCodeDiv = document.createElement('div');
		self.calendar = document.createElement('div');
		self.prevDiv = document.createElement('div');
		self.nextDiv = document.createElement('div');
		self.infoSpan = document.getElementById('infoSpan');	
		
		self.currentYear = self.dateObj.getFullYear();		
		if(self.checkleapyear(self.currentYear)){
			self.days_in_months[1] = 29;
			
		}
		self.showStatusPrompt();
		self.getFirstDayOfMonth();		
		self.ajax = new Ajax();    		       
	    self.ajax.doGet('xml/training.xml', self.handleResp,'xml');		
		
	};
	
	this.addEvent = function (elm, evType, fn, useCapture) {
	  if (elm.addEventListener) {
		  elm.addEventListener(evType, fn, useCapture);
		  return true; 
	  }else if (elm.attachEvent) {
		  var r = elm.attachEvent('on' + evType, fn);
		  return r;
	  }else {
		  elm['on' + evType] = fn;
	  }
  };
	
	this.getFirstDayOfMonth = function(){// finds out what the first day of the month is
		var self = Calendar;
		self.currentMonth = self.dateObj.getMonth();
		self.firstDayOfMonth = (self.dateObj.getDay() +(7-(self.dateObj.getDate()%7)))%7 +1;		
		
		if(self.firstDayOfMonth ==7){
			self.firstDayOfMonth =0;
		}
		self.currentFirstDay = self.firstDayOfMonth;
		
		self.getLastDayOfMonth();
		
	};
	
	this.getLastDayOfMonth = function(){// finds out what the first day of the month is
	    var self = Calendar;
		
		self.currentLastDay = ((self.currentFirstDay-1)+ (self.days_in_months[self.currentMonth]%7))%7  ;		
		if(self.currentLastDay >5){
			self.firstDayOfNextMonth = 0;
		}else{
			self.firstDayOfNextMonth = self.currentLastDay+1;
		}
	
	};
	
	
	this.handleResp = function(xmlObject) {
	   var self = Calendar;	   
	   self.classObj = CalendarXMLParse.xml2ObjArray(xmlObject,'trainings');	  
	   self.removeStatusPrompt();
	   self.createHeaderText();
	   self.groupClassesByDate();
	   self.theWorks();
	   
	   
  };
  
  this.theWorks = function() {
	  var self = Calendar;
	  self.getCurrentMonthIndex();
	  self.createColorCodes();
	  self.createCalendar();
	  
  }
  
    this.groupClassesByDate = function(){
		var self = Calendar;
		var date = self.classObj[0][0].date;
		var month = self.classObj[0][0].month;
		var monthCount = 0;
		var innerCount = 0;
		var outerCount = 0;
		var tempGroupByMonth =[];
		var tempOuterArray = [];
		var tempInnerArray = [];
		
		
		for (var j = 0; j < self.classObj.length; j++) {
			
			for (var k = 0; k < self.classObj[j].length; k++) {							
				
				var arrayIndex = k;
				do{
						
					do{
						tempInnerArray[innerCount]= self.classObj[j][arrayIndex];
						innerCount++;
						arrayIndex++;
					}while (arrayIndex <self.classObj[j].length && self.classObj[j][arrayIndex].date == date)
					
					tempOuterArray[outerCount]= tempInnerArray;
					
					tempInnerArray = [];
					if(arrayIndex <self.classObj[j].length){
						date = self.classObj[j][arrayIndex].date;						
					}
					innerCount = 0;
					outerCount++;					
					
				}while (arrayIndex <self.classObj[j].length && self.classObj[j][arrayIndex].month == month)
				
				 tempGroupByMonth[monthCount] = tempOuterArray;
				 tempOuterArray = [];
				 if(arrayIndex <self.classObj[j].length){				 
						month = self.classObj[j][arrayIndex].month;						
				 }
				 outerCount = 0;
				 monthCount++;
				 k = arrayIndex-1;
					
			}
		}		
		self.classGroupsArray = tempGroupByMonth;
		
		self.getCurrentMonthIndex();
	};
	
	this.getCurrentMonthIndex = function(){
		var self = Calendar;
		self.currentMonthIndex =-1;
		
		for (var q = 0; q < self.classGroupsArray.length; q++) {
			for (var r = 0; r < self.classGroupsArray[q].length; r++) {
				if(self.classGroupsArray[q][r][0].month.search(self.calendar_months[self.currentMonth]) !=-1){
					self.currentMonthIndex = q;
					
				}
			}
		}
		
		
	};
	
	
	this.createColorCodes = function(){
		var self = Calendar;
		var colorCodeDiv = null;
		var boxDiv = null;
		var oMainDiv = null;
		var oColorCaption = null;
		var oColorContainer = null;
		var oColorText = null; 
		var oColorBox = null;
		
		colorCodeDiv = self.colorCodeDiv;
		
		if (colorCodeDiv.firstChild) {
		  colorCodeDiv.removeChild(colorCodeDiv.firstChild);
		}
		
		oMainDiv = document.createElement("div");
		
		oTable = document.createElement('table');
		oTable.className = 'oCCTable';
		
		oColorCaption = document.createElement("div");
		oColorCaption.className = 'caption';
		oColorCaption.appendChild(document.createTextNode('color codes'));
		oMainDiv.appendChild(oColorCaption);
		
		col_1 = document.createElement("COL");
		col_1.setAttribute('span',1);
		
		col_2 = document.createElement("COL");
		col_2.setAttribute('span',1);
		
		oTBody = document.createElement('tbody');
				
		if(self.currentMonthIndex >=0){
			
			for (var j = 0; j < self.classGroupsArray[self.currentMonthIndex].length; j++) {
				oColorContainer = document.createElement("tr");
				oColorContainer.className = 'oColorContainer';
				oRowBox = document.createElement("td");
				oRowBox.className = 'oRowColorBox';
				oRowText = document.createElement("td");
				oRowText.className = 'oRowColorText';
				oColorText = document.createElement("div");
				oColorText.className = 'oColorText';
				oColorBox = document.createElement("div");
				oColorBox.className = 'colorBox';			
				
				if(self.classGroupsArray[self.currentMonthIndex][j].length >3){ //if date has more than four classes in it				
					oColorText.appendChild(document.createTextNode(self.classes[0]));
					oColorBox.style.backgroundColor = self.classColors[0];
					oRowBox.appendChild(oColorBox);
					oRowText.appendChild(oColorText);					
					oColorContainer.appendChild(oRowBox);
					oColorContainer.appendChild(oRowText);	
					oTBody.appendChild(oColorContainer);
				}else if(self.classGroupsArray[self.currentMonthIndex][j].length >1){ //if date has more then one class in it				
					oColorText.appendChild(document.createTextNode(self.classes[1]));
					oColorBox.style.backgroundColor = self.classColors[1];
					oRowBox.appendChild(oColorBox);
					oRowText.appendChild(oColorText);					
					oColorContainer.appendChild(oRowBox);
					oColorContainer.appendChild(oRowText);
					oTBody.appendChild(oColorContainer);
				}else{
					
					var foundClass = false;
					
					for (var k = 0; k < self.classes.length; k++) {
						
						if(self.classGroupsArray[self.currentMonthIndex][j][0].classId.toLowerCase() == self.classes[k].toLowerCase()) {
							foundClass = true;
							oColorBox.style.backgroundColor = self.classColors[k];
							oColorText.appendChild(document.createTextNode(self.classGroupsArray[self.currentMonthIndex][j][0].classId));
							oRowBox.appendChild(oColorBox);
							oRowText.appendChild(oColorText);					
							oColorContainer.appendChild(oRowBox);
							oColorContainer.appendChild(oRowText);
							oTBody.appendChild(oColorContainer);
						}
					}
					
					if(!foundClass){
						var index = self.generatedColors.length;
						if(isNaN(index)){
							index = 0;
						}						
						var newClass = new Object();
						newClass.name = self.classGroupsArray[self.currentMonthIndex][j][0].classId;
						newClass.color = self.getRandomColor();
						
						self.generatedColors[index] = newClass;						
						oColorBox.style.backgroundColor = self.generatedColors[index].color;
						oColorText.appendChild(document.createTextNode(self.generatedColors[index].name));
						oRowBox.appendChild(oColorBox);
						oRowText.appendChild(oColorText);					
						oColorContainer.appendChild(oRowBox);
						oColorContainer.appendChild(oRowText);
						oTBody.appendChild(oColorContainer);
					}
				}//end else				
			}
		}else{
			oColorContainer = document.createElement("tr");
			oColorContainer.className = 'oColorContainer';
			oRow = document.createElement("td");
			oRow.className = 'oRowColorBox';
			oColorText = document.createElement("div");
			oColorText.className = 'oColorTextError';
			oColorText.appendChild(document.createTextNode('Training schedule is unavailable'));							
			oRow.appendChild(oColorText);
			oColorContainer.appendChild(oRow);
			oTBody.appendChild(oColorContainer);
			
		}
		oTable.appendChild(oTBody);
		oMainDiv.appendChild(oTable);
		colorCodeDiv.appendChild(oMainDiv);
		self.colorDiv.appendChild(colorCodeDiv);
		
	};
	
	this.createCalendar = function(){
		var self = Calendar;
		var calendar = null;
		var no_weeks = null; //number of rows that each month has
		var no_days = 7;
		var class_link = null;
		var link_present = false;
		var oCaption = null;
		var col_1 = null;
		var col_2 = null;
		var col_3 = null;
		var oTHead = null;
		var oRow_th = null;
		var oCol_th = null;
		var oTBody = null;
		var oRow_tb = null;
		var oDiv_tb = null;
		var selectionDiv = null;
		var oTable = null;		
		
		calendar = self.calendar;
		
		if (calendar.firstChild) {
		  calendar.removeChild(calendar.firstChild);
		}
		
		oTable = document.createElement('table');
		oTable.className = 'oTable';
			
		
		oCaption = document.createElement("caption");
		
		oCaption.appendChild(document.createTextNode(self.calendar_months[self.currentMonth] + ' ' + self.currentYear));
		oTable.appendChild(oCaption);
		
		col_1 = document.createElement("COL");
		col_1.className = 'weekend';
		col_1.setAttribute('span',1);
		
		col_2 = document.createElement("COL");
		col_2.className = 'weekday';
		col_2.setAttribute('span',5);
		
		col_3 = document.createElement("COL");		
		col_3.className = 'weekend';
		col_3.setAttribute('span',1);	
		
		oTable.appendChild(col_1);
		oTable.appendChild(col_2);
		oTable.appendChild(col_3);
			
		selectionDiv = document.createElement('div'); // parent div containing results from this function
		selectionDiv.className='selectionDiv';
		
		
		//header
		oTHead = document.createElement("thead");
		oTHead.className = 'days_of_week';
		
		oRow_th = document.createElement("tr");
		
		for (var j = 0; j < self.week_days.length; j++) {
			oCol_th = document.createElement('th');
			oCol_th.className = 'thcalendar';
			oCol_th.appendChild(document.createTextNode(self.week_days[j]));
			oRow_th.appendChild(oCol_th);														
		}
		oTHead.appendChild(oRow_th);
		
		//body
		oTBody = document.createElement('tbody');
		
		
		if(self.currentMonth ==1){
			if(self.currentFirstDay>6 || self.currentFirstDay==0 ){
				no_weeks = 4;
			}else{no_weeks = 5;}
		}else if((self.days_in_months[self.currentMonth] ==30 && self.currentFirstDay <=5) || (self.days_in_months[self.currentMonth] ==31 && self.currentFirstDay <=4)){			
			no_weeks = 5;
			
		}else{
			no_weeks = 6;
		}
		
		var dateIndex = '';
		var loopInside = true;
		var monthDateloop = false;
		for (var j = 0; j < no_weeks; j++) {
			oRow_tb = document.createElement("tr");
			oRow_tb.className = 'trcalendar';
			
			for (var k = 0; k <no_days; k++) {
				oCol_tb = document.createElement('td');
				oCol_tb.className = 'nodate';
				oDiv_tb = document.createElement('div');
				oDiv_tb.className = 'day';				
				
				if(self.currentFirstDay == k && loopInside){
					oCol_tb.className = 'tdcalendar';
					//oCol_tb.style.backgroundColor = '#dddddd';
					dateIndex = 1;					
					loopInside = false;
					monthDateloop = true;
				}
				if(dateIndex <=self.days_in_months[self.currentMonth] &&  monthDateloop){
					oCol_tb.className = 'tdcalendar';
					//oCol_tb.style.backgroundColor = '#dddddd';
					link_present = false;
					// begin to put ahref in dates with classes
					if(self.currentMonthIndex >=0){
						for (var z = 0; z < self.classGroupsArray[self.currentMonthIndex].length; z++) {
							if(self.classGroupsArray[self.currentMonthIndex][z][0].date == dateIndex){
								class_link = document.createElement('a');
								class_link.className = 'class_link';
								class_link.setAttribute('name',dateIndex);							
								if(self.classGroupsArray[self.currentMonthIndex][z].length >4){
									class_link.style.backgroundColor = self.classColors[0];
								}else if(self.classGroupsArray[self.currentMonthIndex][z].length >1){
									class_link.style.backgroundColor = self.classColors[1];
								}else{
									var foundClassId = false;
									for (var w = 0; w < self.classes.length; w++) {
										if(self.classGroupsArray[self.currentMonthIndex][z][0].classId.toLowerCase() == self.classes[w].toLowerCase()) {
											foundClassId = true;
											class_link.style.backgroundColor = self.classColors[w];
										}
									}
									if(!foundClassId){										
										for (var q = 0; q < self.generatedColors.length; q++) {											
											if(self.classGroupsArray[self.currentMonthIndex][z][0].classId.toLowerCase() == self.generatedColors[q].name.toLowerCase()) {
												class_link.style.backgroundColor = self.generatedColors[q].color;
											}
										
										}
									}
								}
								class_link.appendChild(document.createTextNode(dateIndex));
								self.addEvent(class_link, 'click', self.createProxyTarget, false);
								link_present = true;
								oDiv_tb.appendChild(class_link);
							}
							
						}
					}
					if(!link_present){//for dates with no classes
					oDiv_tb.appendChild(document.createTextNode(dateIndex));
					}					
					if(dateIndex>0){dateIndex++;}
					
					
				}
				oCol_tb.appendChild(oDiv_tb);
				oRow_tb.appendChild(oCol_tb);				
			}			
			oTBody.appendChild(oRow_tb);
			
		}
			  
		selectionDiv.appendChild(oTHead);
		selectionDiv.appendChild(oTBody);
		oTable.appendChild(selectionDiv);
		calendar.appendChild(oTable);
		self.calendarDiv.appendChild(calendar);
		self.createSubmitButton();
		
		
		var infoSpan = document.getElementById('infoSpan');
		if (infoSpan.firstChild) {
			infoSpan.removeChild(infoSpan.firstChild);
		}
		var infoSpan_txt = document.createElement("h5");
		infoSpan_txt.appendChild(document.createTextNode('Register Now.  Call: Scott Boston 651-714-6294'));
		infoSpan.appendChild(infoSpan_txt);
		
		window.onresize = self.setHeightColumn();
	};
	
	this.createSubmitButton = function(){
		var self = Calendar;
		var prevDiv = null;
		var nextDiv = null;
		var prev_btn = null;
		var next_btn = null;		
		
		
		prevDiv =document.getElementById('prevDiv');
		if (prevDiv.firstChild) {
		  prevDiv.removeChild(prevDiv.firstChild);
		}
		prevDiv.className ='prevDiv';
		
		nextDiv = document.getElementById('nextDiv');
		if (nextDiv.firstChild) {
		  nextDiv.removeChild(nextDiv.firstChild);
		}
		nextDiv.className ='nextDiv';
		
		prev_btn = document.createElement("a");
		prev_btn.appendChild(document.createTextNode('<< prev'));
		prev_btn.setAttribute('name','prev_btn');
		next_btn = document.createElement("a");		
		next_btn.appendChild(document.createTextNode('next >>'));
		next_btn.setAttribute('name','next_btn');
		
		if(self.initMonth == 0){
			prev_btn.className ='disable_btn';
			next_btn.className ='able_btn';
			self.addEvent(next_btn, 'click', self.createMonth, false);			
			self.displayOpacity(prevDiv,25);			
			self.displayOpacity(nextDiv,100);
			
		}else if(self.initMonth == 1){
			prev_btn.className ='able_btn';
			next_btn.className ='able_btn';
			self.addEvent(prev_btn, 'click', self.createMonth, false);
			self.addEvent(next_btn, 'click', self.createMonth, false);
			self.displayOpacity(prevDiv,100);
			self.displayOpacity(nextDiv,100);
		}
		else{
			prev_btn.className ='able_btn';
			next_btn.className ='disable_btn';
			self.addEvent(prev_btn, 'click', self.createMonth, false);
			self.displayOpacity(prevDiv,100);
			self.displayOpacity(nextDiv,25);
		}
		
		prevDiv.appendChild(prev_btn);
		nextDiv.appendChild(next_btn);
		
		
		
	};
	
	this.createMonth = function(e) {
		var el = window.event ? window.event.srcElement : e ? e.target : null;
    if (!el) return;
	
		var self = Calendar;
		
		if(self.initMonth ==0){
			self.initMonth++;
			self.currentMonth++;
			if(self.currentMonth > 11){
				self.currentYear++;
				
				if(self.checkleapyear(self.currentYear)){
					self.days_in_months[1] = 29;
				}
				self.currentMonth = 0;
			}
			
			self.currentFirstDay = self.firstDayOfNextMonth;
			self.getLastDayOfMonth();
			
			self.getCurrentMonthIndex();
			self.createColorCodes();
			self.createCalendar();
			
			
		}else if(self.initMonth ==1){
			
			if(el.name == 'prev_btn'){
				self.initMonth--;
				self.currentMonth--;
				if(self.currentMonth < 0){
					self.currentYear--;
					if(self.checkleapyear(self.currentYear)){
						self.days_in_months[1] = 29;
					}
					self.currentMonth = 11;
				}
				self.getFirstDayOfMonth();
				
			}else{
				
				self.initMonth++;
				self.currentMonth++;
				self.firstDayOfPrevMonth = self.currentFirstDay;
				if(self.currentMonth > 11){
					self.currentYear++;
					
					if(self.checkleapyear(self.currentYear)){
						self.days_in_months[2] = 29;						
					}
					self.currentMonth = 0;
				}
				
				self.currentFirstDay = self.firstDayOfNextMonth;
				if(self.currentFirstDay>6){
					self.currentFirstDay = 0;
				}				
							
			}
			self.getCurrentMonthIndex();
			self.createColorCodes();
			self.createCalendar();
			
		}else{
			
			self.initMonth--;
			self.currentMonth--;
			if(self.currentMonth < 0){
				self.currentMonth = 11;
			}			
			self.currentFirstDay = self.firstDayOfPrevMonth;
			//self.getLastDayOfMonth();
			self.getCurrentMonthIndex();
			self.createColorCodes();
			self.createCalendar();
		}
		
	};
	
	this.removeProxyTarget = function() {
		var self = Calendar;
		var t = document.getElementById('right');
		t.removeChild(self.opaqueCover);
		t.removeChild(self.scheduleBox);
		
	};
	
	this.displayOpacity = function(obj,currOpacity) {
		var self = Calendar;
		var decOpac = currOpacity / 100;
    if (document.all && typeof window.opera == 'undefined') {
		obj.filters.alpha.opacity = currOpacity;
    }
    else {
      obj.style.MozOpacity = decOpac;
    }
    obj.style.opacity = decOpac;
  };
	
	this.createProxyTarget = function(e) {
		var el = window.event ? window.event.srcElement : e ? e.target : null;
    if (!el) return;
		
		var self = Calendar;    
        self.opaqueCover = document.createElement('div'); //invisible cover
		var t = document.getElementById('right');
        self.opaqueCover.className = 'opaqueCover';
        self.opaqueCover.style.left = self.findPosX(t) + 'px';
        self.opaqueCover.style.top = self.findPosY(t) + 'px';
        self.opaqueCover.style.width = t.offsetWidth + 'px';
        self.opaqueCover.style.height = t.offsetHeight + 'px';		
		t.appendChild(self.opaqueCover);		
		self.createScheduleTarget(el); 
     
  };
  
  this.createScheduleTarget = function(e) {
	  var self = Calendar;
	  var index = e.name;
	  var t = document.getElementById('right');
	  
	  self.scheduleBox = document.createElement('div');	  
	  self.scheduleBox.id = 'scheduleBox';
	  self.scheduleBox.style.left = (self.findPosX(t)+t.offsetWidth/8.5) + 'px';
	  self.scheduleBox.style.top = (self.findPosY(t)+75) + 'px';	  
	  self.scheduleBox.setAttribute('title','DRAG');
	  var oRow = null;
	  var oCol = null;
	  var oCol2 = null;
	  var header = null;
	  var content = null;
	  var wrapper = null;
	  
	 for (var z = 0; z < self.classGroupsArray[self.currentMonthIndex].length; z++) {		  
		  
		  if(parseInt(self.classGroupsArray[self.currentMonthIndex][z][0].date) == index){
			  
			  var closeBtn = document.createElement('div');
			  closeBtn.className = 'closeBtn';
			  var icon_btn = document.createElement('a');
			  icon_btn.className = 'icon_btn';			  
			  icon_btn.setAttribute('title','CLOSE');
			  icon_btn.appendChild(document.createTextNode('close'+' ' + 'x'));			  
			  self.addEvent(icon_btn, 'click', self.removeProxyTarget, false);
			  closeBtn.appendChild(icon_btn);
			  self.scheduleBox.appendChild(closeBtn);
			  
		      header = document.createElement('h2');
			  header.appendChild(document.createTextNode(self.classGroupsArray[self.currentMonthIndex][z][0].classDate));
			  self.scheduleBox.appendChild(header);			 			  
			 	 
			  wrapper = document.createElement('div');
			  wrapper.className = 'wrapper';
			  
			  
			  
			  for (var x = 0; x < self.classGroupsArray[self.currentMonthIndex][z].length; x++) {
				  content = document.createElement('h3');
				  
				  content.appendChild(document.createTextNode((self.classGroupsArray[self.currentMonthIndex][z][x].time) + '   ' +(self.classGroupsArray[self.currentMonthIndex][z][x].classId) ));
				  
				  wrapper.appendChild(content);
				  
				  
			  }
			  
			  self.scheduleBox.appendChild(wrapper);
			  
			  if(self.classGroupsArray[self.currentMonthIndex][z].length >4){
				  self.scheduleBox.style.top = (self.findPosY(t)+5) + 'px';
			  }			 
		  }
	  }
	  Drag.init(self.scheduleBox, null, self.findPosX(t), self.findPosX(t) + t.offsetWidth/2, self.findPosY(t), self.findPosY(t)+t.offsetHeight/2);
	  t.appendChild(self.scheduleBox);
  }
	
	this.checkleapyear = function(year){
		year = parseInt(year);
		
		if(year%4 == 0){
			if(year%100 != 0){
				return true;
			}else{
				if(year%400 == 0)
				  return true;
				else
				  return false;
			}
		}
		return false;
	};
	
	this.setHeightColumn = function() {
	  var self = Calendar;
	  var elm = document.getElementById('main_body');
	  elm.style.height = 'auto';
	  var x = elm.offsetHeight;	  
	  elm.style.height = x + "px";
  };
	
	this.removeStatusPrompt = function() {
		var self = Calendar;
		var dotSpan = self.dotSpan;
		var msgSpan = self.msgSpan;
		clearInterval(self.promptInterval);
		
		if(msgSpan.firstChild) {
		  msgSpan.removeChild(msgSpan.firstChild);
		}
		
		if(dotSpan.firstChild) {
		  dotSpan.removeChild(dotSpan.firstChild);
		}
	};
	
	this.createHeaderText = function(){
		var self = Calendar;
		var headerDiv = document.getElementById('headerDiv');
	    headerDiv.id='headerDiv';
		var instructSpan = document.createElement('h4');
		instructSpan.appendChild(document.createTextNode('<< click on colored-dates for class information >>'));
		headerDiv.appendChild(instructSpan);
	}
  
	this.setPrompt = function(stat, msg) {
		var self = Calendar;    
		var msgSpan = self.msgSpan;
		
		msgSpan.className = stat + 'Prompt'; // 'base', 'proc' or 'err'
		if (msgSpan.firstChild) {
		  msgSpan.removeChild(msgSpan.firstChild);
		}
		msgSpan.appendChild(document.createTextNode(msg));
		self.mainDiv.appendChild(msgSpan);
	};

	
	this.showStatusPrompt = function() {
    var self = Calendar;
    self.dots = '';
    self.setPrompt('proc', 'Loading data');
    self.promptInterval = setInterval(self.showStatusDots, 200);
  };
	
	this.showStatusDots = function() {
		var self = Calendar;
		var dotSpan = self.dotSpan;
		self.dots += '.';
		if (self.dots.length > 4) {
		  self.dots = '';
		}
		if (dotSpan.firstChild) {
		  dotSpan.removeChild(dotSpan.firstChild);
		}
		dotSpan.appendChild(document.createTextNode(' ' + self.dots));
		self.mainDiv.appendChild(dotSpan);
	};
  
  this.findPosX = function(obj) {
    var curLeft = 0;
    if (obj.offsetParent) {
      do {
        curLeft += obj.offsetLeft;
      } while (obj = obj.offsetParent);
    }
    else if (obj.x) {
      curLeft += obj.x;
    }
    return curLeft;
  };
  
  this.findPosY = function(obj) {
    var curTop = 0;
    if (obj.offsetParent) {
      do {
        curTop += obj.offsetTop;
      } while (obj = obj.offsetParent);
    }
    else if (obj.y) {
      curTop += obj.y;
    }
    return curTop;
  }
};

window.onload = Calendar.init;