

Calendar = {
	
	cache: new Array(),
	
	load:	function(room, time, id) {
				Calendar.clear();
				var url = 'ssi/event.php?';
				count = 0;
				if(room != null) {
					url += 'location='+room;    
					count++;
				}				
				if(time != null) {
				    if(count > 0) {
					url += '&';
				    }
				    url += 'time='+time;    
				    count++;
				}				
				if(time != null) {
				    if(count > 0) {
					url += '&';
			            }
				    url += 'id='+id; 
				}			
				
				response = new Ajax.Request(url, {
					method: 'get',
					//evalJSON: true,
					onSuccess: function(xmlHTTP) {
						es = xmlHTTP.responseText.evalJSON();
						es.each(function(e){
							e = $H(e);
							Calendar.cache.push(e);							
						});
						$('calendar').update(Calendar.table());
						
					},
					onFailure: function(xmlHTTP) {
						error = xmlHTTP.responseText.evalJSON();
						alert(error.error);
					}
				});
			},
		
	unload:	function(room) {
				var es = new Array();
				es = Calendar.cache.findAll(function(e){
					return e.location == room;	
				});
				es.each(function(e){
					i = Calendar.cache.indexOf(e);
					Calendar.cache[i] = null;
				});
				Calendar.cache = Calendar.cache.compact();
				$('calendar').update('');
			},
			
	reload: function(id) {
				var i = Maintenance.loaded(id);
				response = new Ajax.Request('kim/maintenance/'+id, {
					method: 'get',
					//evalJSON: true,
					onSuccess: function(xmlHTTP) {
						m = xmlHTTP.responseText.evalJSON();
						Maintenance.cache[i] = $H(m);
						$('maintenance_table').update(Maintenance.table());
					},
					onFailure: function(xmlHTTP) {
						error = xmlHTTP.responseText.evalJSON();
						alert(error.error);
					}
				});
			},
			
	loaded:	function(id) {
				var m = Maintenance.cache.indexOf(Maintenance.cache.find(function(m){
							return m.get('report_id') == id;
						}));
				if (m < 0) {
					return false;
				} else {
					return m;
				}
			},
			
	clear:	function(){
				this.cache.clear();
				$('calendar').update('');
			},
	
	table:	function() {				
				var table = '<h3>Events for '+Room.cache.label+'</h3>'+"\n";
				table += '<table><tr><th class="col1">Name</th><th>Start Time</th><th>End Time</th></tr>';
				this.cache.each(function(e){
				    	if(e.get('location') == Room.cache.id) {
				    		var start = new Date();
				    		start.setISO8601(e.get('start'));
				    		var end = new Date();
				    		end.setISO8601(e.get('end'));
				    		var linkstart  = '';
				    		var linkend = '';
				    		if(e.get('wikipage') != null) {
						    linkstart = '<a href="'+e.get('wikipage')+'">';
						    linkend = '</a>';
						} 						    
						table += "<tr>";
						table += '<td class="col1">'+linkstart+e.get('summary')+linkend+'</td>';
						table += "<td>"+start.toUTCString()+"</td>";
						table += "<td>"+end.toUTCString()+"</td>";
						table += "</tr>";
					}
				});
				table += "</table>";
				return table;
			},
			
	
};

Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
    "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
    "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));
    
    var offset = 0;
    var date = new Date(d[1], 0, 1);
    
    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
	offset = (Number(d[16]) * 60) + Number(d[17]);
	offset *= ((d[15] == '-') ? 1 : -1);
	}
	
	offset -= date.getTimezoneOffset();
	time = (Number(date) + (offset * 60 * 1000));
	this.setTime(Number(time));
}
