$().ready(function() {

	/*
	################################################################################
	format template
	*/
	$.format = function(source, params) {
		if ( arguments.length == 1 )
		return function() {
			var args = $.makeArray(arguments);
			args.unshift(source);
			return $.format.apply( this, args );
		};
		if ( arguments.length > 2 && params.constructor != Array  ) {
			params = $.makeArray(arguments).slice(1);
		}
		if ( params.constructor != Array ) {
			params = [ params ];
		}
		$.each(params, function(i, n) {
			source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
		});
		return source;
	};

	var template_dayevent = window.template_dayevent = $.format($('#template-dayevent').val());

	/*
	################################################################################
	window.dayevents
	*/

	var tID = null;
	var dayevents = window.dayevents = {
		td: null,
		elem: null,
		settings: {
			delay: 1000,
			top: 31,
			left: 31
		},
		show: function(day, $td)	{
			hide();
			this.elem = $('#day-'+day);
			this.td = $td;

			if (this.elem[0] == null)
			{
				if (month_events[day] === null || typeof month_events[day] == 'undefined') return false;
				// add day div
				$('#days_events').append('<div id="day-'+day+'" class="day" style="display:none;"></div>');
				this.elem = $('#day-'+day);
				
				var closeBtn=$('<img id="close-day-btn" src="/img/del_filter.gif" title="закрыть окно">').click(hide)
				$('<div class="close_day"></div>').prepend(closeBtn).appendTo('#day-'+day)
				//$('<div class="close_day"><img id="close-day-btn" src="/img/del_filter.gif" title="закрыть окно"></div>').click(hide).appendTo('#day-'+day);
				
				$.each(month_events[day], function(i, event){
					// add event div
					var edate = '';
					if (event.start_time) edate = '<span class="event-start-time">'+event.start_time+'</span>';
					if (event.start_date != event.end_date || event.end_time) edate = edate+'&ndash;';
					if (event.start_date != event.end_date) edate = edate+'<span class="event-end-day">'+event.end_date+'</span>';
					edate = edate+'<span class="event-end-time">'+event.end_time+'</span>';
					$(template_dayevent(event.event_id, event.start_date, event.start_time, edate, event.published, event.published_name, event.name, (event.cancel=='t'?'cancelled'+(event.not_read=='t'?' not_read':''):''), _fcolor[event.filter_id])).appendTo('#day-'+day).data('filter_id', event.filter_id);
				});
			}
			var arroffset = this.td.offset();
			var left = arroffset.left;
			var top = arroffset.top;

			left = left + this.settings.left;
			top = top + this.settings.top;
			var right='auto';
			this.elem.css({
				left: left,
				right: right,
				top: top
			});

			var v = viewport();
			var setTimeout = true;
			// check horizontal position
			if (v.x + v.cx < this.td[0].offsetLeft + this.elem[0].offsetWidth) {
				setTimeout = false;
				this.elem.addClass("viewport-right");
			}
			// check vertical position
			if (v.y + v.cy < top + $(this.elem[0]).height()) {
				setTimeout = false;
				this.elem.addClass("viewport-bottom");
			}
			this.elem.show()
			.mouseover(clearTimeOut)
			//.click(hide);
			//if (setTimeout) {
			//	this.elem.mouseout(timeOutHide);
			//	this.td.mouseout(timeOutHide);
			//}
		}
	};

	function timeOutHide() {
		if(tID)
		clearTimeout(tID);
		tID = setTimeout(hide, dayevents.settings.delay);
	}

	function clearTimeOut() {
		if(tID)
		clearTimeout(tID);
	}

	function viewport() {
		return {
			x: $(window).scrollLeft(),
			y: $(window).scrollTop(),
			cx: $(window).width(),
			cy: $(window).height()
		};
	}

	function hide() {
		clearTimeOut();
		if (dayevents.elem)
		dayevents.elem.hide();
		dayevents.elem = null;
		
	}


	$("#datepicker")
	.datePicker({inline:true, startDate:"2009-01-01", endDate:"2019-12-31", loadUrl:"/events/", calendarOnYearUrl:"/calendaronyear/"})
	.bind(
	"dateSelected", function(e, selectedDate, $td) {
		dayevents.show(''.concat(selectedDate.getFullYear(), '-', selectedDate.getMonth() + 1, '-', selectedDate.getDate()), $td);
	}
	)

	var CheckLength = window.CheckLength = {
		dataField: null,
		infoField: null,
		button: null,
		minLent: null,
		maxLenth: null,
		strLength: null,
		init: function(fieldId, infoId, minLenth, maxLenth, button) {
			CheckLength.minLenth = minLenth;
			CheckLength.maxLenth = maxLenth;
			CheckLength.dataField = $('#' + fieldId);
			CheckLength.infoField = $('#' + infoId);
			CheckLength.button = $('#' + button);
			var str = CheckLength.dataField.val();
			CheckLength.strLength = str.length;
			CheckLength.infoField.html(""+CheckLength.strLength+" ");
			if (CheckLength.strLength >= CheckLength.minLenth)
			CheckLength.button.removeAttr('disabled');
			else CheckLength.button.attr('disabled','disabled');

			CheckLength.dataField.keydown(function (e) {
				if ((CheckLength.strLength >= CheckLength.maxLenth) && e.keyCode != 8 &&
				(e.keyCode != 45) && (e.keyCode != 46) && (e.keyCode < 33 || e.keyCode > 40))
				return false;
			});

			CheckLength.dataField.keyup(function (e) {
				var str = $(this).val();
				CheckLength.strLength = str.length;
				CheckLength.infoField.html(""+CheckLength.strLength+" ");
				if ((CheckLength.strLength > CheckLength.maxLenth))
				CheckLength.infoField.addClass('errors');
				else CheckLength.infoField.removeClass('errors');
				if (CheckLength.strLength >= CheckLength.minLenth)
				CheckLength.button.removeAttr('disabled');
				else CheckLength.button.attr('disabled','disabled');
			});
		}
	}

	/*
	################################################################################
	Additional search
	*/
	tsId=null;
	$("#additional_search").hide();
	$('#sitesearch-text').focus(function(){
		this.select();

		var arroffset = $(this).offset();
		var left = arroffset.left;
		var top = arroffset.top;
		top=top+20;
		var right='auto';
		$("#additional_search").css({
			left: left,
			right: right,
			top: top
		});
		$("#additional_search").show();
		/*$("#additional_search").mouseout(function(){
			if(tsId)
			clearTimeout(tsId);
			tsId = setTimeout('$("#additional_search").hide()', 1000);
		});*/
	});
	$("#close_additional_search").click(function(){
		$("#additional_search").hide();
	});

	/*
	################################################################################
	opacity
	*/
	jQuery.fn.extend({
		opacity: function(p) {
			if (typeof p == 'undefined') p = 100;
			var n = p / 100;
			if (n == 1) {
				this.css({
				'filter': '',
				'-moz-opacity': '',
				'opacity': ''
				});
			} else {
				this.css({
				'filter': 'alpha(opacity=' + p + ')',
				'-moz-opacity': n,
				'opacity': n
				});
			}
			return this;
		}
	});


	/*
	################################################################################
	window.screen
	*/
	window.screenWidth = function() {
		return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
	}
	window.screenHeight = function() {
		return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
	}

	/*
	################################################################################
	screen
	*/
	jQuery.extend({
		screen: jQuery('<div/>')
	});

	jQuery.screen.isConstruct = false;
	jQuery.screen.construct = function() {
		if (this.isConstruct) return;
		this.isConstruct = true;

		var b = $('body');

		this
		.appendTo(b)
		.opacity(45)
		.css({
		'display': 'none',
		'position': $.browser.msie ? 'absolute' : 'fixed',
		'height': '100%',
		'width': '100%',
		'top': 0,
		'left': 0,
		'background-color': '#ccc',
		'z-index': '9991'
		});

		//if (typeof document.body.style.maxHeight == 'undefined') {
		if (!$.browser.mozilla) {
			$('<iframe/>')
			.appendTo(this)
			.opacity(0)
			.css({
			'position': $.browser.msie ? 'absolute' : 'fixed',
			'height': '100%',
			'width': '100%',
			'top': 0,
			'left': 0,
			'background-color': '#fff',
			'border': 'none'
			});
		}

		this.window = $('<div/>')
		.appendTo(b)
		.css({
		'display': 'none',
		'position': $.browser.msie ? 'absolute' : 'fixed',
		'top': 0,
		'left': 0,
		'margin': 'auto',
		'border': '2px solid #faf4e8',
		'background-color': '#fff',
		'z-index': '9992'
		});

		$(window).resize(this.updateSize);
	}

	jQuery.screen.show = function(inner) {
		this.construct();
		this.inner = $(inner).css({
		'position': $.browser.msie ? 'absolute' : 'fixed',
		'display': 'block',
		'overflow': 'hidden',
		'z-index': '9998'
		});

		if ($.browser.msie) {
			jQuery('html, body').css('overflow', 'hidden');
		}

		this.updateSize();

		$('body').append(this.inner);

		this.window.css('display', 'block');
		this.css('display', 'block');
	}

	jQuery.screen.hide = function() {
		if ($.browser.msie) {
			jQuery('html, body').css('overflow', '');
		}
		jQuery.screen.inner.css('display', 'none');
		jQuery.screen.window.css('display', 'none');
		jQuery.screen.css('display', 'none');
	}

	jQuery.screen.updateSize = function() {
		var w = jQuery(window);
		var s = jQuery.screen;
		var w_w = window.screenWidth();
		var w_h = window.screenHeight();

		//if (typeof document.body.style.maxHeight == 'undefined') {
		if (!$.browser.mozilla) {
			s.width(w_w);
			s.height(w_h);
		}

		var sw = s.window;
		var si = s.inner

		var e = si.get(0);

		with (si) {
			si.w = e.offsetWidth
			+ (parseInt(css('margin-left')) || 0)
			+ (parseInt(css('margin-right')) || 0)
			+ (parseInt(css('border-left-width')) || 0)
			+ (parseInt(css('border-right-width')) || 0)
			+ (parseInt(css('padding-left')) || 0)
			+ (parseInt(css('padding-right')) || 0);
			si.h = e.offsetHeight
			+ (parseInt(css('margin-top')) || 0)
			+ (parseInt(css('margin-bottom')) || 0)
			+ (parseInt(css('border-top-width')) || 0)
			+ (parseInt(css('border-bottom-width')) || 0)
			+ (parseInt(css('padding-top')) || 0)
			+ (parseInt(css('padding-bottom')) || 0);
		}

		var si_l = (w_w - si.w) / 2;
		var si_t = (w_h - si.h) / 3;
		if (si_l < 20) si_l = 20;
		if (si_t < 20) si_t = 20;

		if ($.browser.msie) {
			var l = document.documentElement.scrollLeft + document.body.scrollLeft;
			var t = document.documentElement.scrollTop + document.body.scrollTop;
			s.css({'top': t, 'left': l});
			si_l += l
			si_t += t;
		}

		sw.css({
		'left': (si_l - 2),
		'top': (si_t - 2),
		'width': si.w,
		'height': si.h
		});

		si.css({
		'left': si_l,
		'top': si_t
		});
	}

	filterToggle = window.filterToggle = function(filter_id) {
		$('#filtertoggle #filter_id').val(filter_id);
		$('#filtertoggle').submit();
	}
})
