var calShowing=null;
var openEvent=null;
var selectedrecipients=new Array();
function calShowSummary(d) {
	if (openEvent) {
		calShowing=ob("dayEvents"+openEvent);
		openEvent=null;
	}
	//if (calShowing) alert(calShowing.style.display);
	if (calShowing) calShowing.style.display='none';
	if (d==0) {
		ds=ob('dayDetail');
		ds.style.display='none';
		calShowing=null;
	}else{
		ds=ob('dayDetail');
		ds.style.display='block';
		//if (calShowing) calShowing.style.display='none';
		calShowing=ob("dayEvents"+d);
		calShowing.style.display='block';
	}
}
function calAttend(srcObj,eid,state) {
	srcObj.parentNode.innerHTML="<img src='/skin/loading.gif' align='absmiddle' />&nbsp;Saving...";
	vars='cmd=includefunction&includefile=calendar&handler=setAttendance&eventid='+eid+'&attending='+state;
	sPR('/index.php',vars,rSC);
}
var newEventStartDate=null;
var newEventFinishDate=null;
function addNewEvent(d) {
	dd=d.split("-");
	dt=new Date(dd[0],dd[1]-1,dd[2],0,0,0,0);
	newEventStartDate=newEventFinishDate=dt;
	ins="<div id='newEvent'><img src='/skin/loading.gif' align='absmiddle' />&nbsp;Loading...</div>";
	ins=rRB('newEventDialog',"Add an Event",ins,false,5,400,null,true,false,true);
	startFadeUp();
	pRH(ins,document.body);
	cO(ob("newEventDialog"));
	vars='cmd=includefunction&includefile=calendar&handler=newEventDialog&start=08:00 '+d+'&finish=08:30 '+d;
	sPR('/index.php',vars,fillNewEventDialogue);
}
function addDefinedEvent(from,to,title,url,description) {
	ins="<div id='newEvent'><img src='/skin/loading.gif' align='absmiddle' />&nbsp;Loading...</div>";
	ins=rRB('newEventDialog',"Add an Event",ins,false,5,400,null,true,false,true);
	startFadeUp();
	pRH(ins,document.body);
	cO(ob("newEventDialog"));
	vars='cmd=includefunction&includefile=calendar&handler=newEventDialog&start='+from+'&finish='+to;
	vars+='&title='+title;
	vars+='&url='+url;
	vars+='&details='+description;
	//alert(vars);
	sPR('/index.php',vars,fillNewEventDialogue);
}
function fillNewEventDialogue(reply) {
	bits=reply.split("<sections>");
	sIHCentered('newEvent',bits[0],'newEventDialog');
	if (bits.length>1) {
		for (i=1;i<bits.length;i++) rSC(bits[i]);
	}
}
function calCheckLayout() {
	
}
function showMonth(srcObj,m,y) {
	srcObj.parentNode.innerHTML="<img src='/skin/loading.gif' align='absmiddle' /> Loading...";
	sPR('/index.php','cmd=includefunction&includefile=calendar&handler=showMonth&month='+m+'&year='+y,rSC);
}
var newEventDate=null;
var newEventDateFinish=null;
var selectingDate=null;
var startDateLimit=null;
function editThisDate(srcObj,startvalue,dm,dy) {
	months=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	dim=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	con=ob('dateSelector');
	if (startvalue!=null) startDateLimit=returnDateObject(startvalue.getFullYear(),startvalue.getMonth(),startvalue.getDate());
	if (startvalue==null && selectingDate!=null) {
		selectingDate.setMonth(dm);
		selectingDate.setYear(dy);
	}else{
		if (selectingDate==null) selectingDate=startvalue;
		if (selectingDate==null) selectingDate=new Date();
	}
	firstDayInMonth=selectingDate;
	firstDayInMonth.setDate(1);
	y=selectingDate.getFullYear();
	m=selectingDate.getMonth();
	d=selectingDate.getDate();
	w=firstDayInMonth.getDay()-1;
	if (w<0) w+=7;
	ins="";
	//ins+=startDateLimit.toString();
	//ins+=dm+","+dy;
	ins+="<table id='minical'>";
	c="<img src='/skin/close.png' style='cursor:pointer;float:right' onclick='cancelDateEdit()' />";
	
	ins+="<tr><td colspan=7>"+c+y+"</td></tr>";
	ins+="<tr><td colspan=7>";
	my=y;
	mm=m-1;
	if (mm<0) {
		mm+=12;
		my--;
	}
	ay=y;
	am=m+1;
	if (am>11) {
		am-=12;
		ay++;
	}
	monthlimit=false;
	if (startDateLimit.getFullYear()==y && startDateLimit.getMonth()==m) monthlimit=true;
	if (!monthlimit) ins+="<span class='leftLink' onclick='editThisDate(this,null,"+mm+","+my+")'>&nbsp;&nbsp;</span> ";
	ins+=months[m];
	ins+=" <span class='rightLink' onclick='editThisDate(this,null,"+am+","+ay+")'>&nbsp;&nbsp;</span>";
		
	ins+="</td></tr>";
	ins+="<tr><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td><td>S</td></tr>";
	ins+="<tr>";
	for(i=0;i<w;i++) ins+="<td></td>";
	if (checkleapyear(y)) dim[1]=29;
	for(i=1;i<=dim[m];i++) {
		if (monthlimit && startDateLimit.getDate()>i) {
			ins+="<td>"+i+"</td>";
		}else{
			ins+="<td class='seldate' onclick='setSelectingDate("+y+","+m+","+i+")'>"+i+"</td>";
		}
		w++;
		if (w==7) {
			w=0;
			ins+="</tr><tr>";
		}
	}
	ins+="</tr></table>";
	//ins+=startDateLimit.toString();
	con.innerHTML=ins;
	ob('dateDropBox').style.display='block';
}
function checkleapyear(datea) {
	r=false;
	if(datea%4 == 0) r=((datea%100 != 0)?true:((datea%400 == 0)?true:false));
	return r;
}
function cancelDateEdit() {
	ob('dateDropBox').style.display='none';
}
function setSelectingDate(y,m,d) {
	newEventFinishDate=returnDateObject(y,m,d);
	o="<div class='blockLink' onclick='editThisDate(this,returnDateObject("+returnDateString(newEventFinishDate,'Y,m-1,d')+"),null,null)'>"+returnDateString(newEventFinishDate,'D jS M Y')+"</div>";
	ob('eventFinishSummary').innerHTML=o;
	cancelDateEdit();
}
function returnDateObject(y,m,d) {
	return new Date(y,m,d,0,0,0,0);
}
function returnDateString(theDate,format) {
	op="";
	for(f=0;f<format.length;f++) {
		l=format.substr(f,1);
		switch(l) {
			case "d":
				c=theDate.getDate();
				if (c.length==1) c="0"+c;
				break;
			case "D":
				a=new Array("Mon","Tues","Wed","Thu","Fri","Sat","Sun");
				d=theDate.getDay()-1;
				if (d<0) d+=7;
				c=a[d];
				break;
			case "j":
				c=theDate.getDate();
				break;
			case "l":
				a=new Array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
				d=theDate.getDay()-1;
				if (d<0) d+=7;
				c=a[d];
				break;
			case "N":
				d=theDate.getDay()-1;
				if (d<0) d+=7;
				c=d+1;
				break;
			case "S":
				a=new Array("st","nd","rd","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","st","nd","rd","th","th","th","th","th","th","th","st");
				c=a[theDate.getDate()-1];
				break;
			case "w":
				c=theDate.getDay();
				break;
			case "z":
				dim=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
				if (checkleapyear(theDate.getFullYear())) dim[1]=29;
				c=0;
				for(m=0;m<theDate.getMonth();m++) c+=dim[m];
				c+=theDate.getDate();
				break;
			case "F":
				a=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
				c=a[theDate.getMonth()];
				break;
			case "m":
				c=theDate.getMonth()+1;
				if (c.length==1) c="0"+c;
				break;
			case "M":
				a=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
				c=a[theDate.getMonth()];
				break;
			case "n":
				c=theDate.getMonth()+1;
				break;
			case "t":
				dim=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
				if (checkleapyear(theDate.getFullYear())) dim[1]=29;
				c=dim[theDate.getMonth()];
				break;
			case "L":
				c=checkleapyear(theDate.getFullYear())?"1":"0";
				break;
			case "Y":
				c=theDate.getFullYear();
				break;
			case "y":
				c=theDate.getFullYear().toString();
				c=c.substr(2,2);
				break;
			default:
				c=l;
			break;
		}	
		op+=c;
	}
	return op;
}
function checkTimeInput(srcObj,e) {
    if (window.event) {
        e=window.event;
        keycode=window.event.keyCode;
    }else{
        keycode=e.which;
    }
	reply=false;
	if (keycode>=96 && keycode<=105) reply=true;
	if (keycode>=48 && keycode<=57) reply=true;
	if (keycode==190 || keycode==110) reply=true;
	if (keycode==9 || keycode==8 || keycode==46 || keycode==36 || keycode==35 || keycode==37 || keycode==39) reply=true;
	nonnumeric=/[^0-9]/;
	if (!nonnumeric.test(srcObj.value)) reply=true;
	return reply;
}
function checkValidTime(srcObj) {
	ok=valIsATime(srcObj);
	srcObj.className=ok?"normalinput":"failedinput";
	if (ok && srcObj.value.length==5) checkEventTimes(srcObj)
}
function valIsATime(srcObj) {
	t=srcObj.value.split(/[^0-9]/);
	ok=true;
	if (t.length!=2) {
		ok=false;
	}else if (t[0]<0 || t[0]>23) {
		ok=false;
	}else if (t[1]<0 || t[1]>59) {
		ok=false;
	}
	return ok;
}
function sameStartFinish() {
	same=false;
	if (newEventStartDate!=null && newEventFinishDate!=null) {
		if (newEventStartDate.getFullYear()==newEventFinishDate.getFullYear()) {
			if (newEventStartDate.getMonth()==newEventFinishDate.getMonth()) {
				if (newEventStartDate.getDate()==newEventFinishDate.getDate()) same=true;
			}
		}
	}
	return same;
}
function checkEventTimes(lastEdit) {
	start=ob("timeFrom");
	finish=ob("timeTo");
	both=true;
	if (valIsATime(start)) {
		st=parseTime(start.value);
		if (st!=start.value) start.value=st;
	}else{
		both=false;
	}
	if (valIsATime(finish)) {
		ft=parseTime(finish.value);
		if (ft!=finish.value) finish.value=ft;
	}else{
		both=false;
	}
	if (both && sameStartFinish()) {
		sm=timeToMins(start.value);
		fm=timeToMins(finish.value);
		if (sm>fm) {
			if (lastEdit==start) {
				finish.value=start.value;
			}else{
				start.value=finish.value;
			}
		}
	}
		
}
function parseTime(ip) {
	t=ip.split(/[^0-9]/);
	if (t.length==2) {
		if (t[0].length!=2) t[0]="0"+(t[0]*1);
		if (t[1].length!=2) t[1]="0"+(t[1]*1);
	}
	return t[0]+":"+t[1];
}
function timeToMins(ip) {
	mins=0;
	t=ip.split(/[^0-9]/);
	if (t.length==2) mins=(t[0]*60)+t[1];
	return mins;
}
function checkEmptyInput(srcObj) {
	srcObj.className=((srcObj.value=="")?"failedinput":"normalinput");
}
var myFriends=new Array();
function findFriends(srcObj,e) {
	scored=new Array();
	val=srcObj.value;
	for(i=0;i<myFriends.length;i++) {
		if (selectedrecipients.indexOf(myFriends[i]["id"])<0) {
			scored.push(new Array(searchScore(val,myFriends[i]),myFriends[i]));	
		}
	}
	scored.sort(sortByScore);
	scored.reverse();
	maxf=scored.length;
	if (maxf>10) maxf=10;
	fcontent=new Array();
	for(f=0;f<maxf;f++) if (scored[f][0]>0) fcontent.push(scored[f][1]["id"]+"-datasplit-"+scored[f][1]["name"]+" <em>["+scored[f][1]["username"]+"]</em>");
	content=fcontent.join("-optionsplit-");
	checkShortlistKeys(srcObj,e,addRecipient,null,true,content);
}
function sortByScore(a,b)
{
return a[0] - b[0];
}
function searchScore(val,person) {
	score=0;
	vals=val.split(" ");
	names=person["name"].split(" ");
	for(v=0;v<vals.length;v++) {
		for(n=0;n<names.length;n++) {
			score+=scoreMatch(vals[v],names[n]);
		}
		score+=scoreMatch(vals[v],person["username"]);
	}
	return score;
}
function scoreMatch(val,word) {
	s=0;
	if (word!="" && val!="") {
		eval("m=/^"+val+"/i;");
		//eval("m=new RegExp('/^"+val+"/','i');");
		if (m.test(word)) {
			s+=10;
		}else{
			eval("m=/"+val+"/i;");
			//eval("m=new RegExp('/"+val+"/','i');");
			if (m.test(word)) s+=5;
		}
	}
	return s;
}
function addRecipient(id) {
	if (id!=null) {
		selectedrecipients.push(id);
		recipientList();
		ob("friendSearch").value="";
	}
}
function recipientList() {
	reply="";
	for(i=0;i<myFriends.length;i++) {
		if (selectedrecipients.indexOf(myFriends[i]["id"])>=0) {
			reply+="<div class=\"recipient\" title=\""+myFriends[i]["username"]+"\">"+myFriends[i]["name"]+" | <span class=\"blockLink\" onclick=\"removeRecipient('"+myFriends[i]["id"]+"')\">X</span></div>";
		}
	}
	ob("Listrecipients").innerHTML=reply;
}
function removeRecipient(id) {
	i=selectedrecipients.indexOf(id);
	selectedrecipients.splice(i,1);
	recipientList();
}
function saveEvent(srcObj,eid) {
	vars="";
	if (ob("allday")) {
		ad=ob("allday").checked;
		tf=ob("timeFrom");
		tt=ob("timeTo");
		if (ad || (valIsATime(tf) && valIsATime(tt))) {
			if (ad) {
				vars+="&ad=1";
				vars+="&start="+returnDateString(newEventStartDate,'Y-m-d')+" 00:00:00";
				vars+="&finish="+returnDateString(newEventStartDate,'Y-m-d')+" 23:59:59";
			}else{
				checkEventTimes(tf);
				vars+="&start="+returnDateString(newEventStartDate,'Y-m-d')+" "+tf.value+":00";
				vars+="&finish="+returnDateString(newEventFinishDate,'Y-m-d')+" "+tt.value+":00";
				vars+="&ad=0";
			}
			vars+="&title="+encodeUpload(ob("newEventTitle").value);
			vars+="&details="+encodeUpload(ob("newEventComment").value);
			vars+="&url="+encodeUpload(ob("newEventURL").value);
			shared=false;
			if (se=ob("shareevent")) shared=se.checked;
			if (shared) {
				vars+="&share=1";
				vars+="&friends="+(ob("shareall").checked?"all":selectedrecipients.join(","));
				vars+="&attendance="+(ob("recordattendance").checked?"1":"0");
			}else{
				vars+="&share=0";
			}
		}
	}else{
		vars+="&share=1";
		if (ob("recordattendance")) vars+="&attendance="+(ob("recordattendance").checked?"1":"0");
		if (selectedrecipients.length>0) vars+="&friends="+selectedrecipients.join(",");
	}
	//alert(vars);
	srcObj.parentNode.innerHTML="<img src='/skin/loading.gif' align='absmiddle' />&nbsp;Saving...";
	vars='cmd=includefunction&includefile=calendar&handler=addEvent'+vars+"&eventid="+eid;
	sPR('/index.php',vars,rSC);
}
function eventSaved(reply) {
	if (reply=="ok") {
		removeTheNode('newEventDialog');
		startFadeDown();
	}else{
		dropThisMessage(reply);
	}
}
function calRemoveEvent(srcObj,eid,title) {
	if (window.confirm("Remove "+title+" from my Calendar?")) {
		srcObj.parentNode.innerHTML="<img src='/skin/loading.gif' align='absmiddle' /> Removing...";
		vars='cmd=includefunction&includefile=calendar&handler=removeEvent&eventid='+eid;
		sPR('/index.php',vars,rSC);
	}
}
function calEditEvent(eid) {
	ins="<div id='newEvent'><img src='/skin/loading.gif' align='absmiddle' />&nbsp;Loading...</div>";
	ins=rRB('newEventDialog',"Event Editor",ins,false,5,400,null,true,false);
	startFadeUp();
	pRH(ins,document.body);
	cO(ob("newEventDialog"));
	vars='cmd=includefunction&includefile=calendar&handler=newEventDialog&eventid='+eid;
	sPR('/index.php',vars,fillNewEventDialogue);	
}
function calShareEvent(eid) {
	ins="<div id='newEvent'><img src='/skin/loading.gif' align='absmiddle' />&nbsp;Loading...</div>";
	ins=rRB('newEventDialog',"Share Event",ins,false,5,400,null,true,false);
	startFadeUp();
	pRH(ins,document.body);
	cO(ob("newEventDialog"));
	vars='cmd=includefunction&includefile=calendar&handler=shareEventDialog&eventid='+eid;
	sPR('/index.php',vars,fillNewEventDialogue);	
}
function addToCalendar(srcObj,calid) {
	srcObj.parentNode.innerHTML="<img src='/skin/loading.gif' align='absmiddle' /> Adding to calendar...";
	vars='cmd=includefunction&includefile=calendar&handler=addToCalendar&calid='+calid;
	sPR('/index.php',vars,rSC);
}
function ignoreCalendar(srcObj,calid) {
	if (window.confirm("Ignore this event?")) {
		srcObj.parentNode.innerHTML="<img src='/skin/loading.gif' align='absmiddle' /> Ignoring event...";
		vars='cmd=includefunction&includefile=calendar&handler=ignoreCalendar&calid='+calid;
		sPR('/index.php',vars,rSC);
	}
}