/*
 * For adding calendar to Bankman.com.ua
 * Began: March 13, 2008
 * Developer: Marat
 *
 */


// Months' array
months = new Array(
	'',
	'Январь',
	'Февраль',
	'Март',
	'Апрель',
	'Май',
	'Июнь',
	'Июль',
	'Август',
	'Сентябрь',
	'Октябрь',
	'Ноябрь',
	'Декабрь'
);

// dayNames array
dayNames = ['ПН','ВТ','СР','ЧТ','ПТ','СБ','ВС'];




function inArray(value, arrValues){
	var bln = false;
	for (i = 0; i < arrValues.length; i++) {
		if (value == arrValues[i]) {
			bln = true;
			break;
		}
	}

	return bln;
}


function getMonthDays(month, year) {

	// number of days of month
	d31 = [1,3,5,7,8,10,12];

	if (inArray(month, d31)) {
		days = 31;

	} else {
		if (month == 2) {

			if ((year % 4) == 0) days = 29;
			else days = 28;

		} else days = 30;
	}

	return days;
}


function calendar(strDate, strDays){

	// set mode debug
	var debug = false;

	// Initialize output variable
	var output = '';

	// Eval strDays to get active days
	var activeDays = eval(strDays);

	// Get calendar div
	divCalendar = document.getElementById('calendar');

	// Initialize d-date object
	var d = new Date();

	// Get current month, year
	if (strDate != null) {
		var arrDate = strDate.split('-');

		var numCurrentMonth = parseInt(arrDate[1], 10);
		var numCurrentYear = parseInt(arrDate[0], 10);

		if (arrDate.length == 3)
			var numCurrentDay = parseInt(arrDate[2], 10);

	} else {
		var numCurrentMonth = d.getMonth() + 1;
		var numCurrentYear = d.getFullYear();
		var numCurrentDay = false;
		var numDefaultDay = d.getDate();
	}

	// Last month, year
	if (numCurrentMonth == 1)
		var numLastYear = numCurrentYear - 1;
	else
		var numLastYear = numCurrentYear;

	if (numCurrentMonth == 1) var numLastMonth = 12;
	else var numLastMonth = numCurrentMonth - 1;

	// Is last month active?
	var inactiveLast = false;
	if (numLastYear <= 2007 && numLastMonth < 10)
		inactiveLast = true;

	// Next month, year
	if (numCurrentMonth == 12)
		var numNextYear = numCurrentYear + 1;
	else
		var numNextYear = numCurrentYear;

	if (numCurrentMonth == 12) var numNextMonth = 1;
	else var numNextMonth = numCurrentMonth + 1;

	// Is next month active?
	var inactiveNext = false;
	if (numNextYear >= d.getFullYear()
			&& numNextMonth > (d.getMonth() + 1))
		inactiveNext = true;

	// Current month name
	var currentMonth = months[numCurrentMonth];

	// Next month args
	if (numNextMonth < 10)
		var nextMonth = '0' + numNextMonth;
	else
		var nextMonth = numNextMonth;

	var strNextMonth = numNextYear + "" + '-' + nextMonth;

	// Last month args
	if (numLastMonth < 10)
		var lastMonth = '0' + numLastMonth;
	else
		var lastMonth = numLastMonth;

	var strLastMonth = numLastYear + "" + '-' + lastMonth;

	// Current month args
	if (numCurrentMonth < 10)
		var currMonth = '0' + numCurrentMonth;
	else
		var currMonth = numCurrentMonth;

	var strCurrentMonth = "" + numCurrentYear +
		'-' + currMonth;

	//alert(strLastMonth + '|' + strCurrentMonth + '|' + strNextMonth);

	// The day of 1st day of month
	fd = new Date(numCurrentYear, numCurrentMonth - 1, 1);
	fday = fd.getDay();

	// Number of empty cells before the 1st day
	if (fday != 1 && fday != 0) var numEmptyCells = fday - 1;
	else if (fday == 0) var numEmptyCells = 6;
	else var numEmptyCells = 0;

	// The last day of the month
	lday = getMonthDays(numCurrentMonth, numCurrentYear);

	// Initialize currentDay
	var currentDay = fday-1;


	// Cal-body
	output += '<div id="cal-body">' + "\n";

	// Begin header
	output += '<div id="cal-header">' + "\n";

	// Last month
	if (inactiveLast) {
		output += '<img src="/media/images/last-inactive.gif"';
		output += ' id="l-month" />';
	} else {
		output += '<a href="/rates/' + strLastMonth + '">';
		output += '<img src="/media/images/last.gif"';
		output += ' id="l-month" /></a>';
	}

	// Next month
	if (inactiveNext) {
		output += '<img src="/media/images/next-inactive.gif"';
		output += ' id="n-month" />';
	} else {
		output += '<a href="/rates/' + strNextMonth + '">';
		output += '<img src="/media/images/next.gif"';
		output += ' id="n-month" /></a>';
	}

	// Current month, year
	output += '<h3>' + currentMonth +
		' ' + numCurrentYear + '</h3>';

	// End header
	output += "</div>\n";

	// Begin calendar table
	output += '<table id="days" cellspacing="0">' + "\n";

	// Begin weekdays panel
	output += '<tr>';

	// Add weekday names
	for (i = 0; i < 7; i++) {
		output += '<th>' + dayNames[i] + "</th>\n";
	}

	// End weekdays panel
	output += '</tr>';


	// Add empty cells
	if (numEmptyCells) {
		output += "\n<tr>\n";
		for (i = 0; i < numEmptyCells; i++){
			output += "<td>&nbsp;</td>\n";
		}
	} else {
		output += "\n<tr>\n";
	}

	var active = false;

	// Add day numbers
	for (i = 1; i <= lday; i++){

		// Initialize the weekBreak variable
		var weekBreak = false;

		// Check if the day is sunday
		if ((fday + (i - 1)) % 7 == 0) weekBreak = true;
	
		// Count the days
		if (weekBreak) currentDay = 0;
		else currentDay++;

		// Begin adding the day
		output += '<td';

		// Add class name
		if (numCurrentDay || numDefaultDay) {
			if (i == numCurrentDay || i == numDefaultDay)
				output += ' class="current"';
		}

		if (i < 10) var day = '0' + i;
		else var day = i;

		// If there is information for this day
		active = false;
		for (d = 0; d < activeDays.length; d++) {
			if (activeDays[d] == i) active = true;	
		}

		if (active) {
			output += '><a href="/rates/';
			output += strCurrentMonth + '-' + day + '/">';
		} else output += '>';

		// Add days
		output += i;

		// Close a
		if (active) {
			output += "</a>";
		}

		// Close tags
		output += "</td>\n";

		// Table row end and beginning
		if (weekBreak && i != lday) output += "</tr>\n<tr>\n";

		// Close tr at the end of loop
		if (i == lday && weekBreak == false) {
			numCell = 7 - currentDay;

			// Add empty cells to fill the row
			for (j = 0; j < numCell; j++)
				output += "<td>&nbsp;</td>\n";

			output += "</tr>\n";
		}
	}

	// End days part
	output += "\n</table><!--/days-->\n";

	// Add clear element
	output += '<div style="clear: both"></div>';

	// End cal-body
	output += "</div><!--/cal-body-->\n";

	// Add generated output to HTML DOM
	divCalendar.innerHTML = output;

	if (debug){
		alert (
				numCurrentYear + '-' +
				numCurrentMonth + '-' +
				numCurrentDay + '|' +
				strDate);
	}

}

