/*
Author: Arturas Piksrys(arturas@ring.lt)
*/

Date.prototype.toISO = function()
{
	var month = parseInt(this.getMonth()) + 1;
	month = (month < 10)? '0' + month : month;
	var day = (this.getDate() < 10)? '0' + this.getDate() : this.getDate();
	return this.getFullYear() + '-' + month + '-' + day;
}






function Calendar()
{
	var cdate = new Date();
	var cday = cdate.getDate();
	var cmonth = cdate.getMonth();
	var cyear = cdate.getFullYear();
	var min_year = 2005;
	var max_year = 2010;
	
	
	
	var prev_ico = 'uploads/images/kalendorius_left.gif',
	next_ico = 'uploads/images/kalendorius_right.gif';
	
	this.linkTo = null;
	this.active_dates = []
	this.tableStyle = 'calendarTable';
	this.onMouseOver = 'calendarOnMouse';
	this.todayStyle = 'todayDate';
	this.weekdaysStyle = 'weekDays';
	
	this.return_obj = null;
	
	this.calendarDiv = 'div';
	
	var weekdays = new Array('P', 'A', 'T', 'K', 'P', 'Š', 'S');
	var months = new Array('Sausis', 'Vasaris', 'Kovas', 'Balandis', 'Gegužė', 'Birželis', 'Liepa', 'Rugpjūtis', 'Rugsėjis', 'Spalis', 'Lapkritis', 'Gruodis');
	
	this.set_date = function(date)
	{
		this.active_dates.push(date);
	}
	
	this.resetDates = function()
	{
		cdate = new Date();
		cday = cdate.getDate();
		cmonth = cdate.getMonth();
		cyear = cdate.getFullYear();
	}
	
	this.setYear = function(year)
	{
		cyear = parseInt(year);
	}
	this.setMonth = function(month)
	{
		cmonth = parseInt(month) - 1;
	}
	
	this.setMinYear = function(year)
	{
		min_year = parseInt(year);
	}
	
	this.setMaxYear = function(year)
	{
		max_year = parseInt(year);
	}
	
	this.setDate = function(year, month, day)
	{
		cdate = new Date(year, month - 1, day);
		cday = cdate.getDate();
		cmonth = cdate.getMonth();
		cyear = cdate.getFullYear();
		this.reloadCalendar();
	}
	
	this.setCalendarYear = function(year){
		cyear = parseInt(year);
		this.reloadCalendar();
	}
	
	this.setCalendarMonth = function(month){
		cmonth = parseInt(month);
		this.reloadCalendar();
	}
	
	this.dc = function(obj_name){
		return document.createElement(obj_name);
	}
	
	this.build = function()
	{
		
		var html = '<div class="head">';
			html += '<div class="top_year">' + cyear + '</div>';
			html += '<div class="top_month">' + months[cmonth] + '</div>';
			html + '</div>';
			
			html += '<div class="left_div">';
		
		html += '<a href="javascript:void(0);" onclick="calendar.goBack();"><img src="' + prev_ico + '" style="margin:0;" class="cback" /></a>';
		html += '<a href="javascript:void(0);" onclick="calendar.goNext();"><img src="' + next_ico + '" style="margin:0;" class="cnext" /></a>';
		
		html += '</div>';
			
			
			html += '<table class="'+ this.tableStyle +'"><tr>';
		
		
		for(var dn = 0; dn < weekdays.length; dn++){
			html += '<th>' + weekdays[dn] + '</th>';
		} 
			html += '</tr>';
		
		
		//braizom tbody
		var firstMonthDay = new Date(cyear, cmonth, 1);
		var start = new Date(cyear, cmonth,  2 - firstMonthDay.getDay(), 12);;

		var weeks_start = 0;
		var week_days = 5;
		
		
		switch(firstMonthDay.getDay())
		{
			case 0:
				weeks_start = -1;
				if(this.monthDaysNumber() == 28) week_days = 4;
			break;
			
			case 6:
				if(this.monthDaysNumber() == 31) week_days = 6;
			break;
		
		}
		
		for(var weeks = weeks_start; weeks < week_days; weeks++)
		{
				html += '<tr>';
			
			for(var days = 0; days < 7; days++)
			{
				
				var this_date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + (weeks * 7 + days));			
				html += '<td onmouseover="calendar.toogleClassName(this)" onmouseout="calendar.toogleClassName(this)" onclick="calendar.showEvent(\''+ this_date.toISO() +'\')"';
				
				
				html += 'style="';
				//savaitgalio
				if(days > 4) html += 'color:red;';
				//aktyvi data
				if(jQuery.inArray(this_date.toISO(), this.active_dates) != -1) html += 'background:#FFBE00;color:#000;';
				html += '"';
				
				html += '>';
				
				html += (this_date.getMonth() == cmonth) ? this_date.getDate() : '&nbsp;';
				
				html += '</td>';
			}
			
			html += '</tr>';
		}
		
		html += '</table>';
		
		
		
		return html;
	}
	
	this.reloadCalendar = function()
	{
		$('#cObj').empty().append(this.build());
	}
	
	this.show = function(id)
	{
		var h = $('<div>').attr({id:"cObj"}).append(this.build());
		$(id).empty().append(h);
	}
	
	
	this.monthDaysNumber = function(){
		var months = new Array(3, 5, 8, 10);
		
		//jei vasaris, tai ziurim ar perkeltiniai metai
		if(cmonth == 1){
			if (cyear/4 - parseInt(cyear/4) != 0) return 28;
			else return 29;
		}
		
		//if(months.inArray(this.cmonth)) return 30;
		for(i in months)
		{
			if(months[i] == cmonth) return 30;
		}
		
		return 31;
	}
	
	this.toogleClassName = function(obj)
	{
		var styles = new Array(this.onMouseOver, this.todayStyle);
		
		if(obj.className == this.onMouseOver)
		{
			obj.className = null;
		}
		
		else if(obj.className != this.onMouseOver && obj.className != this.todayStyle)
		{
			obj.className = this.onMouseOver;
		}
		 
	}
	
	this.goBack = function()
	{
		if(cmonth == 0){
			this.setDate(cyear - 1, 12, cday);
		}else{
			this.setCalendarMonth(cmonth - 1);
		}
	}
	
	this.goNext = function()
	{
		if(cmonth == 11){
			this.setDate(cyear + 1, 1, cday);
		}else{
			this.setCalendarMonth(cmonth + 1);
		}
	}

	
	this.showEvent = function(date){
		$.ajax({
		  url: "modules/Calendar/by_date.php",
		  data: {date:date},
		  success: function(html){
    			$("#content").empty().append(html);
				$('html,body').animate({ scrollTop: 250 }, "slow");
			}
		});
		
	}
	
}

calendar = new Calendar();
