//declaring the global variables
/*
  Color of the calendar!! Set these variables!!
*/
var mainCalBody  = "white";  var mainCalBorder = "#857032";
var bodyColor = "white";
var bodyBorder = "#857032";
var calHeader = "white"; var monthHeader = "#8d9070";
var calHeaderColor = "black"; var monthHeadColor = "white";
var closeColor = "#ff7800";
var selMonthBack = "black";
var selMonthColor = "#ff7800";
var otherMonthColor = "#857032";  var calCellBorder = "white"; var calCellColor = "black"; var calPastCellColor = "#CCCCCC";
var daysOfWeekColor = "#857032";

var baseCalender=new Array(5,1,1,4,6,2,4,0,3,5,1,3); //Base calendar of the Reference Year
var feb=new Array(28,29);
var daysInMnth=new Array(31,feb,31,30,31,30,31,31,30,31,30,31);
var lisOfMonth=new Array('Jan',
                         'Feb',
                         'Mar',
                         'Apr',
                         'May',
                         'Jun',
                         'Jul',
                         'Aug',
                         'Sep',
                         'Oct',
                         'Nov',
                         'Dec'
);

var weekDays = new Array("Sun",
                         "Mon",
                         "Tue",
                         "Wed",
                         "Thu",
                         "Fri",
                         "Sat"
);
var GLOBALfieldName = "";
var GLOBALtype = "";
var GLOBALargs = "";
var IMAGE_folder = "http://www.ytss.edu.sg/image/";

var monthList = new Array();

var newDate = new Date();
var firstMonth = newDate.getMonth(); var firstYear = newDate.getFullYear();
var duration = 12;

var m=firstMonth; var y=firstYear;
for(var x=1; x<=duration;x++){
	monthList[monthList.length]= new Array(m,y);
	m = m+1;
	if(m==12){
		m=0; y=y+1;
	}
}

var lastMonth = monthList[monthList.length-1][0]; var lastYear = monthList[monthList.length-1][1];

var one_day=1000*60*60*24; //one day represented in milliseconds

//Returns the Index of the Element of the Array
function getIndex(lisname,itemname){
indexIt='None';
counter=lisname.length;
for(var i=0;i<counter;i++){
	if(lisname[i]==itemname){
	indexIt=i;
	break;
	}
}
return indexIt;
}


//***** generating the first day of the month and the number of days in the month *****
function stDay(year,month){
   var yearId=year;
   var leapYears=parseInt(yearId/4 +1);

   //choosing year type
   if(parseInt(yearId/4)==(yearId/4)){
      yearType=1;
   }else{
      yearType=0;
   }

   //getting first day of the month
   if(yearType==1){
	    if(month==0){
	       var baseDay=baseCalender[0];
	       var newDay=baseDay+(yearId+1)+(leapYears-1);
	       var newDay=newDay-7*parseInt(newDay/7);
       }else if(month==1){
	       var baseDay=baseCalender[0];
	       var newDay=baseDay+(yearId+1)+(leapYears-1);
	       var newDay=newDay-7*parseInt(newDay/7);
       }else{
	       var baseDay=baseCalender[month];
	       var newDay=baseDay+(yearId+1)+leapYears;
	       var newDay=newDay-7*parseInt(newDay/7);
       }
   }else{
       var baseDay=baseCalender[month];
       var newDay=baseDay+(yearId+1)+leapYears;
       var newDay=newDay-7*parseInt(newDay/7);
   }

   //getting number of days in the month
   if(month==1){
	   if(yearType==0){
    	   var numDays=daysInMnth[1][0];
      }else if(yearType==1){
	      var numDays=daysInMnth[1][1];
      }
   }else{
      var numDays=daysInMnth[month];
   }
   var  firstDayInstance = new Date(); firstDayInstance.setFullYear(year,month,1);
   var firstDay = (firstDayInstance.getDay() +1)%7;
   firstDayInstance = null
   return Array(firstDay, numDays);
}
//end of stDay(year,month)


//***** gives the calender and returns a Array containing the weeks *****
function returnMonth(newDay,numDays){
   if(newDay==0){
       newDay=6;
   }else{
       newDay=newDay-1;
   }

   var m=newDay;
   var weeks = new Array();
   var week = new Array();
   for(var i=1;i<=numDays;i++){
	   week[m] = i;
      m=m+1;
      if(m==7 || i==numDays){
         m=0;
         weeks[weeks.length] = week;
         week = new Array();
      }
   }

   return weeks;
}


//**********************************************************************************//
function getPos(obj){
   var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	var x=curleft;
	var y=curtop;
	return Array(x,y);
}

//************************** runs the functions
function popupCal(fieldName,obj,type,args){

    var time=new Date();

    var currentDate = document.getElementById(fieldName).value;
    if(currentDate == ""){
        month=parseInt(time.getMonth());
        year=parseInt(time.getYear());
    }else{
        currentDateArr = currentDate.split("/");
        if(currentDateArr.length !=3){
          currentDateArr = currentDate.split("-");
          if(currentDateArr.length !=3){
               month=parseInt(time.getMonth());
               year=parseInt(time.getYear());
          } else {
               year=parseInt(currentDateArr[0]);
               month=parseInt(currentDateArr[1]) - 1;
          }
        } else {
          year=parseInt(currentDateArr[0]);
          month=parseInt(currentDateArr[1]) - 1;
        }
        

    }

    if(month==-1){
       month =0;
    }
    
    GLOBALfieldName = fieldName;
    GLOBALtype = type;
    GLOBALargs = args;
    
    var coords = getPos(obj);
    var x = coords[0];
    var y = coords[1];
    
    if (year<2000){
      year=year+1900;
    }


   if(month==-1){

   }else{

      if (year<1000){
          year=year+1900;
      }
      //Creating the Seed
      var seedMonth = stDay(year, month);
      newDay = seedMonth[0];
      numDays = seedMonth[1];
      
      //Fetching the Week
      var weeks = returnMonth(newDay, numDays);

      var HTML = writeCalender(fieldName,weeks,year,month,type,args,-1);
      
      if(month==11){
         var newMonth = 0;
         var newYear = year + 1;
      }else{
         var newMonth =  month + 1;
         var newYear = year;
      }
      
      var newSeedMonth = stDay(newYear, newMonth);
      newDay = newSeedMonth[0];
      numDays = newSeedMonth[1];
      
      //Fetching the Week
      var newWeeks = returnMonth(newDay, numDays);
      var HTML2 = writeCalender(fieldName,newWeeks,newYear,newMonth,type,args,1);
      
      var HTML = twoMonthCal(HTML,HTML2)
      
      document.getElementById('calenderIt').contentWindow.document.body.innerHTML=HTML;
      document.getElementById('calenderIt').style.position="absolute";
      document.getElementById('calenderIt').style.left=x+20+"px";
      document.getElementById('calenderIt').style.top=y+"px";
      document.getElementById('calenderIt').style.width=370+"px";
      document.getElementById('calenderIt').style.height=250+"px";
      document.getElementById('calenderIt').style.visibility="visible";
      document.getElementById('calenderIt').style.zIndex=9;
   }
}
//**********************************************************************************//
function decYear(fieldName,year,month,type,args){
   if (year<1000){
      year=year+1900;
   }
   month = month-1; 
   if(month==-1){month=11; year=year+-1;}
   
   //Creating the Seed
      var seedMonth = stDay(year, month);
      newDay = seedMonth[0];
      numDays = seedMonth[1];
      
      //Fetching the Week
      var weeks = returnMonth(newDay, numDays);

      var HTML = writeCalender(fieldName,weeks,year,month,type,args,-1);
      
      if(month==11){
         var newMonth = 0;
         var newYear = year + 1;
      }else{
         var newMonth =  month + 1;
         var newYear = year;
      }
      
      var newSeedMonth = stDay(newYear, newMonth);
      newDay = newSeedMonth[0];
      numDays = newSeedMonth[1];
      
      //Fetching the Week
      var newWeeks = returnMonth(newDay, numDays);
      var HTML2 = writeCalender(fieldName,newWeeks,newYear,newMonth,type,args,1);
      
      var HTML = twoMonthCal(HTML,HTML2)
      
      document.getElementById('calenderIt').contentWindow.document.body.innerHTML=HTML;
      

}

//**********************************************************************************//
function incYear(fieldName,year,month,type,args){
   if (year<1000){
      year=year+1900;
   }
   /*
   month = month+1; 
   if(month==12){month=0; year=year+1;}
*/
   	//Creating the Seed
      var seedMonth = stDay(year, month);
      newDay = seedMonth[0];
      numDays = seedMonth[1];
      
      //Fetching the Week
      var weeks = returnMonth(newDay, numDays);

      var HTML = writeCalender(fieldName,weeks,year,month,type,args,-1);
      
      if(month==11){
         var newMonth = 0;
         var newYear = year + 1;
      }else{
         var newMonth =  month + 1;
         var newYear = year;
      }
      
      var newSeedMonth = stDay(newYear, newMonth);
      newDay = newSeedMonth[0];
      numDays = newSeedMonth[1];
      
      //Fetching the Week
      var newWeeks = returnMonth(newDay, numDays);
      var HTML2 = writeCalender(fieldName,newWeeks,newYear,newMonth,type,args,1);
      
      var HTML = twoMonthCal(HTML,HTML2)
      
      document.getElementById('calenderIt').contentWindow.document.body.innerHTML=HTML;
      

}

//**********************************************************************************//
function loadMonth(year,month){
   if (year<1000){
      year=year+1900;
   }

   //Creating the Seed
   var seedMonth = stDay(year, month);
   newDay = seedMonth[0];
   numDays = seedMonth[1];

   //Fetching the Week
   var weeks = returnMonth(newDay, numDays);

   var HTML = writeCalender(GLOBALfieldName,weeks,year,month,GLOBALtype,GLOBALargs,1);
   document.getElementById('calenderIt').contentWindow.document.body.innerHTML=HTML;

}
//**********************************************************************************//
function closePopupCal(){
document.getElementById('calenderIt').style.width=0+"px";
document.getElementById('calenderIt').style.height=0+"px";
GLOBALfieldName = "";
}

//**********************************************************************************//
function selDate(fieldName,day,month,year,type,args){
document.getElementById(fieldName).value= String(year)+"/"+String(month+1)+"/"+String(day);
document.getElementById('calenderIt').style.width=0+"px";
document.getElementById('calenderIt').style.height=0+"px";
if(type==2){
  args = args.split("-");
  setSelect(args[0],day);
  setSelect(args[1],month+1);
  setSelect(args[2],year);
}else if(type==3){
	args = args.split("-");
	var nextDateField = args[3];
	var curdate = new Date(year,month,day);
	curdate.setDate(curdate.getDate()+2);
	var y = curdate.getFullYear();
	var m = curdate.getMonth()+1;
	var d = curdate.getDate();
	var newdate = y+"/"+m+"/"+d;
	document.getElementById(nextDateField).value = newdate;
}
GLOBALfieldName = "";
}

//**************************creates sub-window with calender

function twoMonthCal(HTML,HTML2){

var chee="<html><head></head><body>";
chee+="<table id='mainCal' cellspacing='0' cellpadding='0' bgcolor='"+mainCalBody+"' style='border: 1px solid "+mainCalBorder+"' width='100%'>";
chee+="    <tr><td width='50%' valign='top' height='100%' style=\"border-right: solid 1px "+bodyBorder+";\">"+HTML+"</td><td width='50%' valign='top' height='100%'>"+HTML2+"</td></tr>";
chee+="<tr><td colspan='2' bgcolor='"+calHeader+"' align='center' style='border-top: 1px solid "+mainCalBorder+"'>&nbsp;<a style=\"text-decoration:none\" href=\"javascript:window.parent.closePopupCal()\"><font color='"+closeColor+"' face=Arial style=\"font-size: 8pt; font-weight:bold\">";
chee+="Close";
chee+="</font></a>&nbsp;</td></tr>"
chee+="</table></body></html>";

return chee;
}

function writeCalender(fieldName,weeks,year,month,type,args,navi){

if(navi==-1){
var chee="<TABLE id=\"popupCalParent\" cellspacing='0' cellpadding='0' width='100%' bgcolor=\""+bodyColor+"\">";
}else{
var chee="<TABLE id=\"popupCalParent\" cellspacing='0' cellpadding='0' width='100%' bgcolor=\""+bodyColor+"\" style=\"border-top: solid 0px "+bodyBorder+";\">";	
}
/*chee+='<TR><TD>' // Printing of Header

chee+="<TABLe width=100% bgcolor='"+calHeader+"'>";
chee+="<tr>";
chee+="<td align=left><font color='"+calHeaderColor+"' face=Arial style=\"font-size: 8pt; font-weight:bold\">";
chee+="Date Selector";
chee+="</font></td>";
chee+="<td align=right><a style=\"text-decoration:none\" href=\"javascript:window.parent.closePopupCal()\"><font color='"+closeColor+"' face=Arial style=\"font-size: 8pt; font-weight:bold\">";
chee+="Close<img src=\"" +IMAGE_folder+ "popup_close.gif\"  border=0>";
chee+="</font></a></td>";
chee+="</tr>";
chee+='</TABLe>';

chee+='</TD></TR>';

chee+='<TR><TD>' // Printing Months of the Year

chee+='<TABLe width=100%>';
var row_counter=1;
for(var i=0; i < lisOfMonth.length; i++){
    if(row_counter == 1){
       chee+="<Tr>";
    }
    
    if(i==month){
       chee+="<Td bgcolor='"+selMonthBack+"' class=monthName width=28 align=center><font color='"+selMonthColor+"' face=Arial style=\"font-size: 9pt; font-weight:bold\">" + lisOfMonth[i] +"</font></Td>";
    }else{
       chee+="<Td class=monthName width=28 align=center><a style=\"text-decoration:none\" href=\"javascript:window.parent.loadMonth("+String(year)+","+String(i)+")\"><font color='"+otherMonthColor+"' face=Arial style=\"font-size: 9pt; font-weight:bold\">" + lisOfMonth[i] +"</font></a></Td>";
    }
    

    if(row_counter == 6){
       chee+="</Tr>";
       row_counter=1;
    }else{
       row_counter++;
    }
}
chee+='</TABLe>';

chee+='</TD></TR>';
*/

chee+="<TR><TD>" // Printing Year Navigation Panel

chee+="<Table width=100%  bgcolor=\""+monthHeader+"\">";
chee+="<Tr><Td width='12'>";

if(navi==-1 && (month!=firstMonth || year!=firstYear) ){ // Adding the previous month navigation
	chee+= "<a href=\"javascript:window.parent.decYear('"+fieldName+"',"+String(year)+","+String(month)+","+String(type)+",'"+args+"')\" ><img src=\""+IMAGE_folder+"arrow_back.gif\" border=0></a>";
}else{
	chee+="&nbsp;";
}

chee+="</Td>";

chee+="<Td align=center><font color='"+monthHeadColor+"' face=Arial style=\"font-size: 9pt;font-weight: bold\">"+lisOfMonth[month]+",&nbsp;"+String(year) +"</font></Td>"
chee+="<Td align=\"right\" width='12'>";
if(navi==1 && (month!=lastMonth || year!=lastYear) ){ // Adding the previous month navigation
	chee+= "<a href=\"javascript:window.parent.incYear('"+fieldName+"',"+String(year)+","+String(month)+","+String(type)+",'"+args+"')\" ><img src=\""+IMAGE_folder+"arrow_next.gif\" border=0></a>";
}else{
	chee+="&nbsp;";
}
chee+="</Td>";
chee+="</Table>";

chee+="</TD></TR>"
//End of Year Navigation


chee+="<TR><TD>"

chee+="<Table width=100%>";
chee+='<Tr>';
for(var i=0;i < weekDays.length; i++){
   chee+="<Td align=center><font face=Arial  color="+daysOfWeekColor+" style=\"font-size: 9pt;font-weight: bold\">"+String(weekDays[i])+ "</font></Td>"
}
chee+="</Tr>";

var pastFLAG = 0;
for(var i=0;i<weeks.length;i++){
   chee+="\n<Tr>";
   week = weeks[i];

	for(var j=0;j < week.length; j++ ){	
	   if(week[j]){
         chee+="<Td width=24 align=right style=\"border-top: solid 1px "+calCellBorder+";   border-left: solid 1px "+calCellBorder+";   border-right: solid 1px "+calCellBorder+"; border-bottom: solid 1px "+calCellBorder+";\">";
      if(isPast(week[j],month,year)){
		  chee+="<font face=Arial color='"+calPastCellColor+"' style=\"font-size: 9pt;font-weight: bold\">"+String(week[j])+"</font></Td>";  
	  }else{
	  	 chee+="<a href=\"javascript:window.parent.selDate('"+fieldName+"',"+String(week[j])+","+String(month)+","+String(year)+","+type+",'"+args+"')\" style=\"text-decoration: none\"><font face=Arial color='"+calCellColor+"' style=\"font-size: 9pt;font-weight: bold\">"+String(week[j])+"</font></a></Td>";	
	  }
	  
	  }else{
         chee+='<Td width=24>&nbsp;</Td>';	
      }
	}
	chee+="\n</Tr>";
}

chee+="</Table>";

chee+="</TD></TR></TABLE>";


return chee;
}
function isPast(d,m,y){
		var today = new Date();
		var today_date = today.getDate();
		var today_month = today.getMonth();
		var today_year = today.getFullYear();
		var today = new Date(today_year,today_month,today_date);
		
		var day = new Date(y,m,d);
		
		if(today.getTime() <= day.getTime()){
			return false;	
		}
		return true;
}
