// MiniCal.JS
// Hitesh Tailor Dec 2009.
// for UCL Surgical Society

var monthNames = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var dayNames=new Array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");

//========= FUNCTION WRITE CALENDAR ========= 
function calwrite(y,m){

div=document.getElementById('calendar');
t=0;
if(y>0 && m!==''){
	t=new Date(y,m);
}
else{
	t=new Date();
}

ct=new Date();
cyear=ct.getFullYear();
cmonth=ct.getMonth(); //january=0
cday=ct.getDate();

year=t.getFullYear();
month=t.getMonth();
day=t.getDate(); //day of month 1-31
dow=t.getDay(); //todays day of week 0=monday
fdom=new Date(year,month,1).getDay(); //first day of month 0=sunday
if(fdom==0){fdom=7;}
dim=32-new Date(year,month,32).getDate(); //total days in month

//Month names
nextm= (month==11) ? monthNames[0]:monthNames[month+1];
currm=monthNames[month];
prevm= (month==0) ? monthNames[11]:monthNames[month-1];

towrite='';
towrite+='<table id="calheader" cellspacing="0" cellpadding="0" align="center" border="0" style="border: 0px" width="190px">';
towrite+='<tr><td colspan="3" class="todaybar"><p align="center"><a onclick="javascript:calwrite();">Events Calendar</a> <img src="../../events/ico-key.gif" onclick="javascript:showkey(year,month);" style="cursor:pointer;"/></p></tr><tr id="calnav">';
towrite+='<td class="month" align="left" width="54px" id="boxheader"><a onclick="javascript:calwrite('+year+','+(month-1)+');">&#171; '+prevm+'</a></td>';
towrite+='<td class="month" align="center" id="boxheader" width="90px"><b>'+currm+' '+year+'</b></td>';
towrite+='<td class="month" align="right" id="boxheader" width="54px"><a onclick="javascript:calwrite('+year+','+(month+1)+');">'+nextm+' &#187;</a></td>';
towrite+='</tr>';
towrite+='<tr>';
towrite+='<td id="grid" colspan="3" height="194px"><p align="center"><img src="'+pathtoroot+'events/loading.gif"></p></td></tr>';
towrite+='</table>';

div.innerHTML=towrite;
qdays(year,month);
}



//========= FUNCTION WRITE GRID ========= 
function writegrid(edays){
eval(edays);
towrite='<table align="center" id="tgrid" border="0" cellspacing="0" cellpadding="0">';
towrite+='<tr>';
// write day names
for(i=0;i<7;i++){
	towrite+='<td align="center" width="27px" class="daynames">'+dayNames[i]+'</td>';
}

nrows=1;
//generate extra spaces at begining of month
towrite+="</tr><tr>";
if(fdom==1){fdom=8;}
for(i=1;i<fdom;i++){
   towrite+='<td class="blank" height="30px">&nbsp;</td>';
   if(i==7){
      towrite+="</tr><tr>\n";
      nrows++;
   }
}

//generate days of the month
for(i=1;i<=dim;i++){
	datei=year.toString()+month.toString()+(new Date(year,month,i).getDate()).toString();
	datec=cyear.toString()+cmonth.toString()+cday.toString();

   //if(edays.search("-"+i+"-")>0){
   if(mevents[i].length){
      towrite+='<td height="30" class="has_event"><a onclick="javascript:qevent('+year.toString()+','+month.toString()+','+i+');"><div>';
      if(datei==datec){
        towrite+='<b><u>'+i+'</u></b>';
      }else{
        towrite+=i;
      }
      towrite+='<br />';
      for(var eventj in mevents[i]){
        towrite+='<span class="ecat'+mevents[i][eventj]+'">&#9679;</span>';
      } 
      towrite+='</div></a>'+"\n";
   }else if(datei==datec){
      towrite+='<td height="30" class="today"><a><div><b>'+i+'</b></div></a>';
   }else{
      towrite+='<td height="30" class="no_event"><a><div>'+i+'</div></a>';
   }
   
   towrite+="</td>\n";


   //terminates current row of cells
   if(new Date(year,month,i).getDay()==0){
      towrite+="</tr><tr>\n";
      nrows++;
   }
}

//generate blank spaces in last row
nrows=7-nrows;
//if(new Date(year,month,dim).getDay()){
	for(i=new Date(year,month,dim).getDay();i<(7*nrows);i++){
	   towrite+='<td class="blank" height="30px">&nbsp;</td>';
	   if(i==6){towrite+="</tr><tr>\n";}
	}
//}



document.getElementById('grid').innerHTML=towrite+"</tr></table>";
}

//========= FUNCTION AJAX-RESPONSE =========  
function stateChanged() { 
	var ajaxres=null;	
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
		ajaxres=xmlHttp.responseText;
		if(ajaxres.substr(0,3)=="RES"){
			writegrid(ajaxres.substr(4));
		}else if(ajaxres.substr(0,3)=="EVE"){
			document.getElementById('grid').vAlign="top";
			document.getElementById('grid').innerHTML=ajaxres.substr(4);
		}else{
			alert("Error!\n\n Please refresh your page.");
			writegrid(ajaxres);
		}
	}
}

//========= FUNCTION SHOW KEY=========  
function showkey(y,m){
	document.getElementById('grid').innerHTML='<p align="center">Loading Key... <br><img src="../events/loading.gif"></p>';
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null){
		alert ("Browser does not support HTTP Request");
		return;
	}
	parameters="?y="+y+"&m="+m+"&key=1";
	xmlHttp.onreadystatechange=stateChanged;
	xmlHttp.open("GET","../events/minical-query.php"+parameters, true);
	//xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//xmlHttp.setRequestHeader("Content-length", parameters.length);
	//xmlHttp.setRequestHeader("Connection", "close");
	//xmlHttp.send(parameters); 
	xmlHttp.send(null); 
}

//========= FUNCTION QUERY MONTH ========= 
function qdays(y,m){
	//document.getElementById('calnav').style.display='';
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null){
		alert ("Browser does not support HTTP Request");
		return;
	}
	parameters="?y="+y+"&m="+m;
	xmlHttp.onreadystatechange=stateChanged;
	xmlHttp.open("GET","../events/minical-query.php"+parameters, true);
	//xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//xmlHttp.setRequestHeader("Content-length", parameters.length);
	//xmlHttp.setRequestHeader("Connection", "close");
	//xmlHttp.send(parameters); 
	xmlHttp.send(null); 
}


//========= FUNCTION QUERY EVENT ========= 
function qevent(y,m,d){
	//document.getElementById('calnav').style.display='none';
	document.getElementById('grid').innerHTML='<p align="center">Loading Details... <br><img src="../events/loading.gif"></p>';
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null){
		alert ("Browser does not support HTTP Request");
		return;
	}
	parameters="?y="+y+"&m="+m+"&d="+d;
	xmlHttp.onreadystatechange=stateChanged;
	xmlHttp.open("GET","../events/minical-query.php"+parameters, true);
	//xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//xmlHttp.setRequestHeader("Content-length", parameters.length);
	//xmlHttp.setRequestHeader("Connection", "close");
	//xmlHttp.send(parameters); 
	xmlHttp.send(null); 
}
