/**
 * jCalendar 0.5
 *
 * Some code based on jQuery Date Picker (http://kelvinluck.com/assets/jquery/datePicker/)
 *
 * Copyright (c) 2007 Theodore Serbinski (http://tedserbinski.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 */
 
jQuery.jcalendar = function() {
	var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
	var months2 = ['Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'];
	var days = ['Вс.', 'Пн.', 'Вт.', 'Ср.', 'Чт.', 'Пт.', 'Сб.'];
	var days2 = ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];
	var navLinks = {t:'Сегодня'};
	var _firstDayOfWeek;
	var _firstDate;
	var _lastDate;

	var _drawCalendar = function(dateIn, a, day, month, year) {
	  
	  var today = new Date();
	  var d;
	  //var emptyT = '<td class="emptyT">&nbsp;</td>';
	  var emptyT = '<td class="emptyT"><!-- --></td>';
	  var emptyTc = '<td colspan="4" class="hi"><div class="jpos"><div class="jcor"><!-- --></div></div></td>';
	  var emptyTc2 = '<td colspan="5" class="hi"><div class="jpos"><div class="jcor2"><!-- --></div></div></td>';

		if (dateIn == undefined) {
			// start from this month.
			d = new Date(today.getFullYear(), today.getMonth(), 1);
		}
		else {
			d = dateIn;
			///updated
			//d.setDate(1);
		}
		
			
		//alert( moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][11]);
		//alert(d.getMonth()); //current month

		// check that date is within allowed limits
		if ((d.getMonth() < _firstDate.getMonth() && d.getFullYear() == _firstDate.getFullYear()) || d.getFullYear() < _firstDate.getFullYear()) {
			d = new Date(_firstDate.getFullYear(), _firstDate.getMonth(), 1);
		}
		else if ((d.getMonth() > _lastDate.getMonth() && d.getFullYear() == _lastDate.getFullYear()) || d.getFullYear() > _lastDate.getFullYear()) {
			d = new Date(_lastDate.getFullYear(), _lastDate.getMonth(), 1);
		}

		var firstMonth = true;
		var firstDate = _firstDate.getDate();

		// create prev and next links
		if (!(d.getMonth() == _firstDate.getMonth() && d.getFullYear() == _firstDate.getFullYear())) {
			// not in first display month so show a previous link
			firstMonth = false;
			var prevMonthLinkVal = d.getMonth() ? d.getMonth() - 1 : 11;
			var prevMonth2 = new Date(d.getFullYear(), d.getMonth(), 1);
			if (prevMonth2.getMonth()==0){
				var p_month = 12;
				var p_year = d.getFullYear() - 1;
			}else{
				var p_month = prevMonth2.getMonth();
				var p_year = d.getFullYear();
			}
			
			var lastMonth = d.getMonth() == 0 ? new Date(d.getFullYear()-1, 11, 1) : new Date(d.getFullYear(), d.getMonth()-1, 1);

			var prevLink = jQuery('<td colspan="4" class="prev-link hi"><div class="jpos"><div class="jcor"><!-- --></div></div><a href="" class="anh"><span>' + months[prevMonthLinkVal] + '</span></a></td>').click(function() {
				$("#for_month").attr("href", "?for_month=1&city="+mcity+"&for_month_val="+p_year+"-"+p_month);
				jQuery.jcalendar.changeMonth(lastMonth, this, day, month, year);
				return false;
			});

			var cPrevYear = prevMonthLinkVal == 11 ? d.getFullYear()-1:d.getFullYear();
	
			if (eventsObj[parseInt(cPrevYear)] == undefined) {
				$('a', prevLink).addClass("notactive");
			}else{
				if (eventsObj[parseInt(cPrevYear)][parseInt(prevMonthLinkVal+1)] == undefined)
				{
						$('a', prevLink).addClass("notactive");
			
				}
			}
		} else {
			prevLink = emptyTc;
		}

		var finalMonth = true;
		var lastDate = _lastDate.getDate();

		if (!(d.getMonth() == _lastDate.getMonth() && d.getFullYear() == _lastDate.getFullYear())) {
			// in the last month - no next link
			finalMonth = false;
			var nextMonth = new Date(d.getFullYear(), d.getMonth()+1, 1);
			var nextMonth2 = new Date(d.getFullYear(), d.getMonth()+2, 1);
			if (nextMonth2.getMonth()>12){
				var n_month = 01;
				var n_year = nextMonth2.getFullYear() + 1;
			}else{
				var n_month = nextMonth2.getMonth();
				var n_year = nextMonth2.getFullYear();
			}
				
			var nextMonthLinkVal = (d.getMonth()+1)%12;
			var nextLink = jQuery('<td colspan="5" class="next-link hi2"><div class="jpos"><div class="jcor2"><!-- --></div></div><a href="" class="anh"><span>'+ months[nextMonthLinkVal] + '</span></a></td>').click(function() {
				$("#for_month").attr("href", "?for_month=1&city="+mcity+"&for_month_val="+n_year+"-"+n_month);
				jQuery.jcalendar.changeMonth(nextMonth, this, day, month, year);
				return false;
			});

			var cNextYear = nextMonthLinkVal == 0 ? d.getFullYear()+1:d.getFullYear();
			if(	eventsObj[parseInt(cNextYear)] == undefined ){
				$('a', nextLink).addClass("notactive");
			}else{
				if (eventsObj[parseInt(cNextYear)][parseInt(nextMonthLinkVal+1)] == undefined) {
					$('a', nextLink).addClass("notactive");
				}
			}
		} else {
			nextLink = emptyTc2;
		}

		var tBody = jQuery("<tbody></tbody>");
		var lastDay = (new Date(d.getFullYear(), d.getMonth()+1, 0)).getDate();
		var curDay = _firstDayOfWeek - d.getDay();
		if (curDay > 0) curDay -= 7;

		var todayDate = today.getDate();
		var thisMonth = d.getMonth() == today.getMonth() && d.getFullYear() == today.getFullYear();
		
		
		do {
 		  var thisRow = jQuery("<tr></tr>");
		  //thisRow.append(emptyT);

  		for (var i=0; i<7; i++) {
  			var weekday = (_firstDayOfWeek + i) % 7;
  			var atts = {'class':(weekday == 0 || weekday == 6 ? 'weekend ' : 'weekday ')};
			
			if(moonDays[parseInt(d.getFullYear())] != undefined &&
				moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined && 
				moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
				atts['class'] +=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
			} 

			
  			if (curDay < 0 || curDay >= lastDay) {
  				dayStr = ' ';
  			}
  			else if (firstMonth && curDay < firstDate-1) {
  				dayStr = curDay+1;
  				atts['class'] += 'inactive';
  			}
  			else if (finalMonth && curDay > lastDate-1) {
  				dayStr = curDay+1;
  				atts['class'] += 'inactive';
  			}
  			else {
  				d.setDate(curDay+1);

				if(eventsObj[parseInt(d.getFullYear())] != undefined &&
				   eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined &&
				   eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined) {
					
					if(moonDays[parseInt(d.getFullYear())] != undefined &&
						moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined && 
						moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
						span_class=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
						
						dayStr = jQuery('<span><a class="'+span_class+'" href="' + eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] + '/" onclick="EventGo(\''+ eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] +'\', this); return false;" rel="'+ d +'">' + (curDay+1) + '</a></span>');
					
					} else {
						
						dayStr = jQuery('<span><a href="' + eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] + '/" onclick="EventGo(\''+ eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] +'\', this); return false;" rel="'+ d +'">' + (curDay+1) + '</a></span>');
					
					}



				} else {

					dayStr = jQuery('<span>' + (curDay+1) + '</span>');
				}

			}
			
			if (thisMonth && curDay+1 == todayDate) {
				atts['class'] += ' today';
				curDay2 = (curDay+1) + ' ' + months2[d.getMonth()] + ', ' + days2[d.getDay()];


				//dayStr = jQuery('<span>' + (curDay+1) + ' ' + months2[d.getMonth()] + '</span>');
				if (eventsObj[parseInt(d.getFullYear())]!= undefined){
					if (eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined){
						if (eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
								
								if(moonDays[parseInt(d.getFullYear())] != undefined &&
									moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined && 
									moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
									span_class=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
																
									dayStr = jQuery('<span class="jsp '+span_class+'"><a href="' + eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] + '/" onclick="EventGo(\''+ eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] +'\', this); return false;" rel="'+ d +'">' + (curDay+1) + '</a></span>');

								} else {
									
									dayStr = jQuery('<span class="jsp"><a href="' + eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] + '/" onclick="EventGo(\''+ eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] +'\', this); return false;" rel="'+ d +'">' + (curDay+1) + '</a></span>');
							
								}

				
						}else{

							if(moonDays[parseInt(d.getFullYear())] != undefined &&
									moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined && 
									moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
									span_class=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
		
									dayStr = jQuery('<span class="jsp2 '+span_class+'">' + (curDay+1) + '</span>');
								} else {
						
									dayStr = jQuery('<span class="jsp2">' + (curDay+1) + '</span>');
								}
						}
					
					}else{
						dayStr = jQuery('<span class="jsp2">' + (curDay+1) + '</span>');
					}
				}
			}
			if (i == 0)
				thisRow.append(jQuery("<td colspan=\"2\" style=\"border-left:none;\"></td>").attr(atts).append(dayStr));
			else if (i == 6)
				thisRow.append(jQuery("<td colspan=\"2\" style=\"border-right:none;\"></td>").attr(atts).append(dayStr));
			else
  				thisRow.append(jQuery("<td></td>").attr(atts).append(dayStr));

  			curDay++;
		}
			//thisRow.append(emptyT);
			tBody.append(thisRow);

		} while (curDay < lastDay);

		var todayLinkVal = '<strong>' + months[d.getMonth()] +'</strong> '+ d.getFullYear();

		var tFoot = jQuery("<tfoot></tfoot>");
		var tFootRow = jQuery("<tr></tr>").append(prevLink).append(nextLink);
		tFoot.append(tFootRow);

		jQuery('div.jcalendar').html('<div class="cur-month-dec"><div><span><!-- --></span></div></div><div class="cur-month"><div><!-- --></div></div><table border="0"></table>');
		jQuery('div.jcalendar .cur-month div').append(todayLinkVal);
		jQuery('div.jcalendar table').append(tFoot,tBody);
		//jQuery('.weekend').css("backgroundColor", "#141414");
	};

	return {
		show: function(a) {
 			_firstDate = a._startDate;
			_lastDate = a._endDate;
			_firstDayOfWeek = a._firstDayOfWeek;

			// pass in the selected form date if one was set
			var selected;
			//* updated *//
			if(dateIn != undefined) {
				selectedDate = dateIn.split("-");
				selected = new Date(selectedDate[0], selectedDate[1]-1, selectedDate[2]);;
			}

			_drawCalendar(selected, a);

			//// /updated
		},
		changeMonth: function(d, e) {
			_drawCalendar(d, e);
		},

		setLanguageStrings: function(aDays, aMonths, aNavLinks) {
			days = aDays;
			months = aMonths;
			navLinks = aNavLinks;
		},

		setDateWindow: function(i, w)  {
			if (w == undefined) w = {};

  			dateParts = w.startDate.split('-');
  			i._startDate = new Date(dateParts[2], Number(dateParts[1])-1, Number(dateParts[0]));

  			dateParts = w.endDate.split('-');
  			i._endDate = new Date(dateParts[2], Number(dateParts[1])-1, Number(dateParts[0]));

			i._firstDayOfWeek = w.firstDayOfWeek == undefined ? 1 : w.firstDayOfWeek;

			////updated
			dateIn = w.dateIn;
			//// /updated

		}
	};
}();

jQuery.fn.jcalendar = function(a) {
	this.each(function() {

	$('div.jcalendar-selects').after('<div class="jcalendar"></div>');
		jQuery.jcalendar.setDateWindow(this, a);
		jQuery.jcalendar.show(this);

	});
	return this;
};
