/*
 *	Script author: Bartlomiej Nosal
 *	WWW: www.bartlomiejnosal.com
 */

$(document).ready(function(){
	$("#nextMonth").click( setNextMonth );
	$("#prevMonth").click( setPrevMonth );
	
	if (intLeftMonth == 12) {	// znajdujemy nastepny miesiac i przypisujemy date prawemu kalendarzowi
		intRightMonth = 1;
		intRightYear = intLeftYear+1;
	} else {
		intRightMonth = intLeftMonth+1;
		intRightYear = intLeftYear
	}
	
	var calendarLeft = $("#calendars div.calendar")[0];
	var calendarRight = $("#calendars div.calendar")[1];
	
	var idLeftCalendar 	= createCalendarId(intLeftYear, intLeftMonth);
	var idRightCalendar = createCalendarId(intRightYear, intRightMonth);
	
	$( calendarLeft ).attr("id", idLeftCalendar);
	$( calendarRight ).attr("id", idRightCalendar);
	
	displayCalendar( intLeftYear, intLeftMonth, calendarLeft );
	displayCalendar( intRightYear, intRightMonth, calendarRight );
});


if ( lang == "fr" ) {

	var dayName = new Array(7);
	dayName[0] = "dim";
	dayName[1] = "lun";
	dayName[2] = "mar";
	dayName[3] = "mer";
	dayName[4] = "jeu";
	dayName[5] = "ven";
	dayName[6] = "sam";

	var MonthName = new Array(12);
	MonthName[0] = "Janvier";
	MonthName[1] = "Février";
	MonthName[2] = "Mars";
	MonthName[3] = "Avril";
	MonthName[4] = "Mai";
	MonthName[5] = "Juin";
	MonthName[6] = "Juillet";
	MonthName[7] = "Aout";
	MonthName[8] = "Septembre";
	MonthName[9] = "Octobre";
	MonthName[10] = "Novembre";
	MonthName[11] = "Décembre";

} else if ( lang == "en" ) {

	var dayName = new Array(7);
	dayName[0] = "Su";
	dayName[1] = "Mo";
	dayName[2] = "Tu";
	dayName[3] = "We";
	dayName[4] = "Th";
	dayName[5] = "Fr";
	dayName[6] = "Sa";

	var MonthName = new Array(12);
	MonthName[0] = "January";
	MonthName[1] = "February";
	MonthName[2] = "March";
	MonthName[3] = "April";
	MonthName[4] = "May";
	MonthName[5] = "June";
	MonthName[6] = "July";
	MonthName[7] = "August";
	MonthName[8] = "September";
	MonthName[9] = "October";
	MonthName[10] = "November";
	MonthName[11] = "December";

} else {

	var dayName = new Array(7);
	dayName[0] = "Ni";
	dayName[1] = "Po";
	dayName[2] = "Wt";
	dayName[3] = "Śr";
	dayName[4] = "Cz";
	dayName[5] = "Pi";
	dayName[6] = "So";

	var MonthName = new Array(12);
	MonthName[0] = "Styczeń";
	MonthName[1] = "Luty";
	MonthName[2] = "Marzec";
	MonthName[3] = "Kwiecień";
	MonthName[4] = "Maj";
	MonthName[5] = "Czerwiec";
	MonthName[6] = "Lipiec";
	MonthName[7] = "Sierpień";
	MonthName[8] = "Wrzesień";
	MonthName[9] = "Październik";
	MonthName[10] = "Listopad";
	MonthName[11] = "Grudzień";

}

	
	
var intLeftMonth 	= intActualMonth;	// okresla ktory miesiac w kalendarzu jest wyswietlany. przy przesowaniu kalendarza wartosc sie zmienia. zmienna tworzymy w php
var intLeftYear 	= intActualYear;	// -||-
var intRightMonth;
var intRightYear;


var blockLinkPrevNext = false;

function setNextMonth(){
	if (blockLinkPrevNext) {
		return;
	} else {
		blockLinkPrevNext = true;	// zakładamy blokade i kontunuujemy
	}
	

	
	idLeftCalendar = createCalendarId(intLeftYear, intLeftMonth);
	idRightCalendar = createCalendarId(intRightYear, intRightMonth);
	
	var nextRightMonth = intRightMonth;
	var nextRightYear = intRightYear;
	
	if (nextRightMonth == 12) {	// szukamy nastepnego miesiaca
		nextRightMonth = 1;
		nextRightYear += 1;
	} else {
		nextRightMonth += 1;
	}
	var nextId = createCalendarId(nextRightYear, nextRightMonth);
	
	var rightCalendar = $("#calendars div.calendar")[1];
	$( rightCalendar ).after("<div id=\"" + nextId + "\"></div>");
	var handNewCalendar = $("#" + nextId);

	// ukrywanie i nadawanie wspolzednych
	$( handNewCalendar ).addClass("calendar");
	$( handNewCalendar ).css({
		display: "none",
		left: "260px"});
		
	displayCalendar( nextRightYear, nextRightMonth, handNewCalendar );	// tworzymy kalendarz

	
	// przesuwanie
	$("#" + idLeftCalendar).hide("slide", {direction: "left"}, 800);
	$("#" + idRightCalendar).animate({"left": "35px"}, 1000);
	$( handNewCalendar ).show("slide", {direction: "right"}, 1000);
	
	window.setTimeout("deleteElement('" + idLeftCalendar + "')", 1000);	// usuwamy ukryty kalndarz
	window.setTimeout("deleteBlockOnLinkNextPrev()", 1000);	// usuwamy ukryty kalndarz
	window.setTimeout("setClickingOnDaysIfCan()", 1010);	// umozliwiamy klikanie na nowo stworzony kalendarz
		
	intLeftMonth = intRightMonth
	intLeftYear = intRightYear;
	intRightMonth = nextRightMonth;
	intRightYear = nextRightYear;
	
}



function setPrevMonth(){
	if ( !checkMonthIsset() ) {
		return;
	}
	if (blockLinkPrevNext) {
		return;
	} else {
		blockLinkPrevNext = true;	// zakładamy blokade i kontunuujemy
	}

	idLeftCalendar = createCalendarId(intLeftYear, intLeftMonth);
	idRightCalendar = createCalendarId(intRightYear, intRightMonth);
	
	var nextLeftMonth = intLeftMonth;
	var nextLeftYear = intLeftYear;
	
	if (nextLeftMonth == 1) {	// szukamy poprzedniego miesiaca
		nextLeftMonth = 12;
		nextLeftYear -= 1;
	} else {
		nextLeftMonth -= 1;
	}

	
	var nextId = createCalendarId(nextLeftYear, nextLeftMonth);
	var leftCalendar = $("#calendars div.calendar")[0];
	$( leftCalendar ).before("<div id=\"" + nextId + "\"></div>");
	var handNewCalendar = $("#" + nextId);

	// ukrywanie i nadawanie wspolzednych
	$( handNewCalendar ).addClass("calendar");
	$( handNewCalendar ).css({
		display: "none",
		left: "35px"});
		
	displayCalendar( nextLeftYear, nextLeftMonth, handNewCalendar );	// tworzymy kalendarz
	
	// przesuwanie
	$( handNewCalendar ).show("slide", {direction: "left"}, 1000);
	$("#" + idLeftCalendar).animate({"left": "260px"}, 1000);
	$("#" + idRightCalendar).hide("slide", {direction: "right"}, 800);
	
	window.setTimeout("deleteElement('" + idRightCalendar + "')", 1000);	// usuwamy ukryty kalndarz
	window.setTimeout("deleteBlockOnLinkNextPrev()", 1000);	// usuwamy ukryty kalndarz
	window.setTimeout("setClickingOnDaysIfCan();", 1001);	// umozliwiamy klikanie na nowo stworzony kalendarz

	intRightMonth = intLeftMonth;
	intRightYear = intLeftYear;
	intLeftMonth = nextLeftMonth;
	intLeftYear = nextLeftYear;
}

function checkMonthIsset() {
	/*
	 * funckja sprawdza czy istnieje miesiac. 
	 * nie istnieja miesiace starsze od poprzedniego.
	 * czyli jest dzis mamy wrzesien, to istnieje jeszcze sierpień, ale lipiec, czewiec juz nie
	 */
	 
	 var m = intLeftMonth;
	 var y = intLeftYear;
	 
	if (m == 1) {	// szukamy poprzedniego miesiaca
		m = 12;
		y -= 1;
	} else {
		m -= 1;
	}
	
	var mNotIsset = intActualMonth;
	var yNotIsset = intActualYear;
	
	if (mNotIsset == 1) {	// szukamy poprzedniego miesiaca
		mNotIsset = 12;
		yNotIsset -= 1;
	} else {
		mNotIsset -= 1;
	}
	
	if (mNotIsset == 1) {
		mNotIsset = 12;
		yNotIsset -= 1;
	} else {
		mNotIsset -= 1;
	}
	
	if (y == yNotIsset) {
		if (m <= mNotIsset) {
			return false;
		} else {
			return true;
		}
	}
	if (y > yNotIsset) {
		return true;
	}
	if (y < yNotIsset) {
		return false;
	}
}

function deleteBlockOnLinkNextPrev() {
	blockLinkPrevNext = false;
	return true;
}

function deleteElement( elId ) {
	$( elId ).remove();
}

function createCalendarId(y, m) {
	return "m" + y + "-" + m;
}




function getMonthName( month ) {
	month = deleteZeroFromBegin(month);
	return MonthName[ month-1 ];
}
	
function deleteZeroFromBegin( month ) {
	if ( month.length == 2 && month.substring(0,1) == '0' ) {
		month = month.substring(1,2);	// usuwamy zero z poczatku
	}
	return parseInt(month);
}
function addZeroBeforeIfNotIsset( val ) {
	str = new String( val );
	if ( str.length == 1) {
		str = "0" + str;
	}
	return str;
}
	
function getDaysFromMonth( year, month ) {
	var arrDays = new Array();
	var j = 0;
	
	for (var i=0; i < booksDats.length; i++) {
		if ( getMonth( booksDats[ i ]['date'] ) == month 
			&& getYear( booksDats[ i ]['date'] ) == year ) {
			
			arrDays[ j++ ] = getDay( booksDats[ i ]['date'] );
		}
	}
	return arrDays;
}

function getYear( date ) {
	var y = date.substring(0,4);
	return deleteZeroFromBegin(y);
}
function getMonth( date ) {
	var m = date.substring(5,7);
	return deleteZeroFromBegin(m);
}
function getDay( date ) {
	var d = date.substring(8,10);
	return deleteZeroFromBegin(d);
}

function getStartingPos( year, month ) {
	
	var weekday = new Array(7);
		weekday[0] = 6;	// niedziela
		weekday[1] = 0;	// poniedzialek
		weekday[2] = 1;	// wtorek
		weekday[3] = 2;
		weekday[4] = 3;
		weekday[5] = 4;
		weekday[6] = 5;
	
	var firstOfMonth = new Date (year, parseInt(month)-1, 1);	// dlaczego -1?
	var startingPos = firstOfMonth.getDay();
	return weekday[ startingPos ];
}

function generateCalendar( year, month ) {
	var booksDays = getDaysFromMonth( year, month );
	var bookOrNot;
	var monthName = getMonthName( month );
	var days = getDaysInMonth(month, year);
	var startingPos = getStartingPos( year, month );
	days += startingPos;
	
	var html = '<div class="calendarCaption">' + monthName + ' ' + year + '</div>';
		html += '<table cellpadding="0" cellspacing="1" border="0">';
		html += '<tr class="' + lang + '"><th>' + dayName[1] + '</th><th>' + dayName[2] + '</th><th>' + dayName[3] + '</th><th>' + dayName[4] + '</th><th>' + dayName[5] + '</th><th>' + dayName[6] + '</th><th>' + dayName[0] + '</th></tr>';
		html += '<tr>';
	
	
	for (var i = 0; i < startingPos; i++) {
		html += '<td>&nbsp;</td>';
	}
	
	var day = 0;
	for (var i = startingPos; i < days; i++) {
		day++;
		if ( i%7 == 0 ) {
			html += '</tr><tr>';
		}
		var dateDay = year + '-' + addZeroBeforeIfNotIsset(month) + '-' + addZeroBeforeIfNotIsset(day);
		bookOrNot = ( inArray(booksDays, day) || inArrAddedToBooks(dateDay) );
		html += '<td class="calendarDay ' + (bookOrNot ? 'dayIsBook' : 'dayIsNotBook') + '" id="date' + dateDay + '">' + day + '</td>';
	}
	
	html += '</tr></table>';
	return html;

}

function inArrAddedToBooks(val) {		// w tablicach zarezerwowanych

	var len = daysAddedToBooks.length;
	for (var i = 0; i < len; i++ ) {
		if (daysAddedToBooks[ i ] == val) {
			return true;
		}
	}
	return false;
}

function inArray(arr, val) {

	for (var i = 0; i < arr.length; i++ ) {
		if (arr[ i ] == val) {
			return true;
		}
	}
	return false;
}
function displayCalendar( year, month, hanlderCalendar ) {

	var html = generateCalendar( year, month );
	$( hanlderCalendar ).html( html );
}

function getDaysInMonth(month,year)  {
	var days;
	if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) {
		days=31;
	} 
	else if (month==4 || month==6 || month==9 || month==11) {
		days=30;
	}
	else if (month==2)  {
		if (isLeapYear(year)) { 
			days=29;
		} else { 
			days=28; 
		}
	}
	return (days);
}
function isLeapYear (Year) {
	if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
		return (true);
	} else { 
		return (false); 
	}
}
