callendar = function(objName, lang) {

	var d = new Date();

	this.objName = objName;
	/**
	* today
	*/
	this.month = d.getMonth();
	this.day = d.getDate();
	this.year = d.getFullYear();

	/**
	* specifies the day that the week starts
	* 0 = Sunday
	* 1 = Monday
	*/
	this.startDay = 1;

	this.showMonth = d.getMonth();
	this.showYear = d.getFullYear();

	this.daysOfMonth		= new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	this.daysOfMonthLE	= new Array( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	
	this.monthNames			= new Array('Styczeń','Luty','Marzec','Kwiecien','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień');
	this.dayNames				= new Array('N','P','W','Ś','C','P','S');
	
	if(lang == 'en') {
		this.monthNames			= new Array('January','February','March','April','May','June','July','August','September','October','November','December');
		this.dayNames				= new Array('S','M','T','W','T','F','S');		
	}

	this.dayEvents = new Array();

	this.container;

	this.show = function(parent) {
		this.container = parent;

		var div = document.createElement('DIV');
		div.id = 'callendar';

		var dateDiv = document.createElement('DIV');
		dateDiv.className = 'month';
		
		var dateSpan = document.createElement('SPAN');
		dateSpan.innerHTML = this.monthNames[this.showMonth] + ' ' + this.showYear;
		


		var a = document.createElement('A');
		a.innerHTML = '&laquo;';
		a.className = 'back backYear';
		a.href = 'javascript:'+this.objName+'.changeYear(-1)';
		dateDiv.appendChild(a);
		//var a = document.createElement('A');

		a.innerHTML = '<img src="grafika/month-minus.gif" alt="" />';
		a.className = 'backMonth noborder';
		a.href = 'javascript:'+this.objName+'.changeMonth(-1)';
		dateDiv.appendChild(a);

		var a = document.createElement('A');
		a.innerHTML = '..';
		a.className = 'forward forwardYear';
		a.href = 'javascript:'+this.objName+'.changeYear(+1)';
		//dateDiv.appendChild(a);

		var a = document.createElement('A');
		a.innerHTML = '<img src="grafika/month-plus.gif" alt="" />';
		a.className = 'forward noborder';
		a.href = 'javascript:'+this.objName+'.changeMonth(+1)';
		dateDiv.appendChild(a);
		
		dateDiv.appendChild(dateSpan);

		div.appendChild(dateDiv);

		var days = this.getNumberOfDays(this.showMonth, this.showYear % 4);
		var d = new Date();
		
		
		
		d.setYear(this.showYear);
		d.setMonth(this.showMonth);
		d.setDate(1);              
		
		var firstDay = d.getDay();
		//if(navigator.userAgent.indexOf('Opera') > -1) firstDay--;
		for(var i = this.startDay; i < 7 + this.startDay; i++) {
			var span = document.createElement('SPAN');
			span.className = 'day dayName';
			span.innerHTML = ((this.dayNames[i]) ? this.dayNames[i] : this.dayNames[7-i]);
			div.appendChild(span);
		}
		var br = document.createElement('BR');
		br.style.clear = 'both';
		//div.appendChild(br);
		
		var sep = document.createElement('SPAN');
		sep.innerHTML = '&nbsp;';
		sep.className = 'separator';		
		div.appendChild(sep);
        
        var doIlu = firstDay;
        doIlu -= this.startDay;
        if(doIlu < 0) doIlu = 7 + doIlu;
		for(var temp = 0 ; temp < doIlu ; temp++) {
			var span = document.createElement('SPAN');
			span.className = 'day empty';
			div.appendChild(span);  
			
		}
		var spans = firstDay;
		
		
		for(var temp = 1 ; temp <= days ; temp++) {
			spans++;
			var span = document.createElement('SPAN');
			span.className = 'day';
			if(this.month == this.showMonth && this.year == this.showYear && this.day == temp) span.className += ' today';

			if(selected = this.isSelected(this.showMonth, this.showYear, temp)) {
				
				span.className += ' ' + selected.setClassName + ' hasEvent';
				span.title = selected.title + " ("+selected.callbackEvent+")";				
				span.style.backgroundColor = selected.color;
				//span.rel = selected.callbackEvent;
				
				//span.onClick = 'alert(\'?\')';
				if(span.attachEvent) {
					span.attachEvent('onclick', redirectMe);
				}
				else {
					span.addEventListener('click',redirectMe,false);
				}

			}
			span.innerHTML = temp;
			div.appendChild(span);
			if(spans % 7 == 0 + this.startDay){
				var br = document.createElement('BR');
				br.style.clear = 'both';
				var sep = document.createElement('SPAN');
				sep.innerHTML = '&nbsp;';
				sep.className = 'separator';
				
				div.appendChild(br);
				div.appendChild(sep);				
			}
		}

		parent.appendChild(div);
	}

	this.getNumberOfDays = function(month, year) {
		if(year != 0) return this.daysOfMonth[month];
		else return this.daysOfMonthLE[month];
	}

	this.destroy = function() {
		this.container.removeChild(document.getElementById('callendar'));
	}

	this.changeYear = function(i) {
		this.showYear += i;
		this.destroy();
		this.show(this.container);
	}

	this.changeMonth = function(i) {
		this.showMonth += i;
		if(this.showMonth == -1) {
			this.showMonth = 11;
			this.showYear--;
		}
		if(this.showMonth == 12) {
			this.showMonth = 0;
			this.showYear++;
		}
		this.destroy();
		this.show(this.container);
	}

	this.registerEventAtDay = function(year, month, day, className, eventCallback, title, color) {
		
		if(!this.dayEvents[year]) this.dayEvents[year] = new Array();
		if(!this.dayEvents[year][month]) this.dayEvents[year][month] = new Array();
		if(!this.dayEvents[year][month][day]) this.dayEvents[year][month][day] = new Array();


		this.dayEvents[year][month][day]['className'] = className;
		this.dayEvents[year][month][day]['callback'] = eventCallback;
		this.dayEvents[year][month][day]['title'] = title;
		this.dayEvents[year][month][day]['color'] = color;
	}

	this.isSelected = function(month, year, day) {
		month++;
		var returnObjectClass = function() {
			this.setClassName = '';
			this.callbackEvent = '';
		}

		var returnObject = new returnObjectClass;


		if(this.dayEvents[year] && this.dayEvents[year][month] && this.dayEvents[year][month][day]) {			
			returnObject.setClassName = this.dayEvents[year][month][day]['className'];
			returnObject.callbackEvent = this.dayEvents[year][month][day]['callback'];
			returnObject.title = this.dayEvents[year][month][day]['title'];
			returnObject.color = this.dayEvents[year][month][day]['color'];
			return returnObject;
		}


	}
}


function redirectMe(e) {
	
	if(this.title) {
		document.location = this.title.toString().split(' (')[1].split(')')[0];
	}
	else if(event.srcElement.title) document.location = event.srcElement.title.toString().split(' (')[1].split(')')[0];
}

