/*
 * ISKCalendar
 */

function ISKCalendar(container_id) {
	this.container = document.getElementById(container_id);
	this.date = new Date();
	this.locale_code = 'en';
	this.locale = new Object();
	this.locale['en'] = new Object();
	this.locale['en']['m'] = new Array();
	this.locale['en']['m'][0] = 'Jan';
	this.locale['en']['m'][1] = 'Feb';
	this.locale['en']['m'][2] = 'Mar';
	this.locale['en']['m'][3] = 'Apr';
	this.locale['en']['m'][4] = 'May';
	this.locale['en']['m'][5] = 'Jun';
	this.locale['en']['m'][6] = 'Jul';
	this.locale['en']['m'][7] = 'Aug';
	this.locale['en']['m'][8] = 'Sep';
	this.locale['en']['m'][9] = 'Oct';
	this.locale['en']['m'][10] = 'Nov';
	this.locale['en']['m'][11] = 'Dec';
	this.locale['en']['d'] = new Array();
	this.locale['en']['d'][0] = 'M';
	this.locale['en']['d'][1] = 'T';
	this.locale['en']['d'][2] = 'W';
	this.locale['en']['d'][3] = 'T';
	this.locale['en']['d'][4] = 'F';
	this.locale['en']['d'][5] = 'S';
	this.locale['en']['d'][6] = 'S';
	this.events = new Array();
	this.event_log = new Object();
}
function Event(description, type) {
	this.description = description;
	this.type = type;
}

ISKCalendar.prototype.addEvent = function(date, description, type) {
	this.events[date] = new Event(description, type);
}

ISKCalendar.prototype.loadEvents = function(month, year) {
	// make a ajax call to the file with the events
	// reference the call so it can be aborted
	var month = this.date.getMonth()+1;
	var year = this.date.getFullYear();
	var calendar = this;
	date = year+''+month;
	if (calendar.event_log[date]!=null) { 
		// if a month was already processed, load the information from the cache	and exit
		calendar.render();
		return;
	}
	var loader = document.getElementById('calendar_loading_container');
	if (loader) loader.style.display="block";
	
	if (this.request) {
		if (this.request.readyState!=0) this.request.abort();
	}
	url = 'scripts/calendar/calendar.php?m='+month+'&y='+year;
	
	this.request = cougar.ajax.get('scripts/calendar/calendar.php?m='+month+'&y='+year, function(data) {
		//alert(data);
			
		if (data==null || data=='') { 
			calendar.render();	
			return;
		}
		
		
		events = eval('('+data+')');
		///alert(events.events[0].type);
		//alert(calendar);
		
		for (x=0;x<events.events.length;x++) {
				
			date = events.events[x].date.replace(/-/g,'');
			if (calendar.events[date]==null) {
				calendar.addEvent(date, events.events[x].description, events.events[x].type);
			}
		}
		
		
		if (loader) loader.style.display="none";
		//
	
		calendar.render();
		
		
		//alert(date);
		date = year+''+month;
		calendar.event_log[date] = 1;
		
	});
}

ISKCalendar.prototype.renderEvents = function() {
	var month = this.formatDecimal(this.date.getMonth()+1);

	if (!document.getElementById('debug_area')) {
		//document.body.innerHTML += '<textarea id="debug_area" style="width:600px;height:300px;"></textarea>';
		
	}
	//document.getElementById('debug_area').innerHTML = '';
	for (date in this.events) {
		// only render visible ones
		if (month==date.substr(4,2)) {
			document.getElementById('calendar_date_number_'+date).className="number event_present "+this.events[date].type;
			//document.getElementById('debug_area').innerHTML+=this.events[date].type + ' - ' +this.events[date].description+"\n";
			document.getElementById('calendar_date_'+date+'')._date = date;
			document.getElementById('calendar_date_'+date+'').innerHTML += '<span class="description desc_'+this.events[date].type+'" id="calendar_date_description_'+date+'">'+this.events[date].description+'<span>';
			
			// if IE 6 - attach popups to events
			if (window.external && typeof window.XMLHttpRequest == "undefined") { 
				document.getElementById('calendar_date_'+date+'').onmouseover = function() {
					//alert(this._date);
					document.getElementById('calendar_date_description_'+this._date+'').style.display="block";
				}
				
				document.getElementById('calendar_date_'+date+'').onmouseout = function() {
					document.getElementById('calendar_date_description_'+this._date+'').style.display="none";
				}
			}
		}
	}
	
}
ISKCalendar.prototype.render = function() { 
	// get first day of the current month
	var firstDay = this.date;
	firstDay.setDate(1);
	day = firstDay.getDay();
	delete firstDay;
	
	if (day==0) day = 7;
	
	content = '<table class="calendar">';
	//
	content += '<tr><td colspan="2" class="prev"><a href="javascript:void()" onclick="cal.prevMonth()"><img src="templates/default/img/arrow.calendar.left.gif" alt="" /></a></td><td colspan="3" class="info">'+this.locale[this.locale_code]['m'][this.date.getMonth()]+' ' + this.date.getFullYear() + '</td><td colspan=2"  class="next"><a href="javascript:void()" onclick="cal.nextMonth()"><img src="templates/default/img/arrow.calendar.right.gif" alt="" /></a></td></tr>';
	content += '<tr>';
	// generate the empty cells
	for (x=0;x<7;x++) {
		content += '<td align="center">'+this.locale['en']['d'][x]+'</td>';
	}
	content += '</tr>';
	content += '<tr>';
	// generate the empty cells
	for (x=1;x<day;x++) {
		content += '<td></td>';
	}
	
	daysinmonth = this.daysInMonth(this.date.getMonth(), this.date.getFullYear());
	//alert(daysinmonth);
	for (x=1;x<=daysinmonth;x++) {
		id = this.date.getFullYear()+''+this.formatDecimal(this.date.getMonth()+1)+''+this.formatDecimal(x);
		content += '<td class="date"><a href="javascript:void(0)" class="calendar_date" id="calendar_date_'+id+'"><span class="number" id="calendar_date_number_'+id+'">'+x+'</span><a></td>'+"\n";
		
		if (day==7) {
			content += '</tr><tr>';
			day = 0;
		}
		day++;
	}
	content += '</tr><table>';
	// alert(content);
	this.container.innerHTML = content;
	//alert( this.daysInMonth(1, 2008) )
	this.renderEvents();
}

ISKCalendar.prototype.formatDecimal = function(integer) {
	if (integer<10) return '0'+integer;
	return integer;
}
ISKCalendar.prototype.prevMonth = function() {
	// foolproof for Safari
	month = this.date.getMonth()-1;
	if (month==-1) {
		this.date.setMonth(11);
		this.date.setFullYear(this.date.getFullYear()-1);
	} else {
		this.date.setMonth(month);
	}
	
	this.loadEvents();
	this.render();
}

ISKCalendar.prototype.nextMonth = function() {
	// foolproof for Safari
	month = this.date.getMonth()+1;
	if (month==12) {
		this.date.setMonth(1);
		this.date.setFullYear(this.date.getFullYear()+1);
	} else {
		this.date.setMonth(month);
	}
	this.loadEvents();
	this.render();
}

ISKCalendar.prototype.daysInMonth = function(month,year) {
var dd = new Date(year, month+1, 0);
return dd.getDate();
} 

