(function ($) {
	jQuery.fn.extend({
		drawCalendar: function (cal) {
		
			return this.each(function (i) {
			
				var area = this;
				
				area.className = 'ui-kcal';
				
				var cPerc = 100 / cal.c;
				var rPerc = 100 / cal.r;
				
				headerArea = document.createElement('div');
				headerArea.className = 'headers';
				area.appendChild(headerArea);
					
				for (var c = 0; c < cal.c; c++) {
					if (c > 0) headerArea.innerHTML += '<div class="kvr ui-b2" style="left:'+(cPerc*c)+'%\"></div>';
					headerArea.innerHTML += '<div class="kch ui-c4" style="left:'+(cPerc*c)+'%;width:'+cPerc+'%;">' + '' + cal.headers[c] + '</div>';
				}
				
				gridArea = document.createElement('div');
				gridArea.className = 'grid';
				gridArea.onselectstart = function (){return false;};
				gridArea.onmousedown = function (){return false;};
				area.appendChild(gridArea);
				
				var gridW = gridArea.clientWidth;
				var gridH = gridArea.clientHeight;
				
				gridArea.style.display = 'none';
				
				gridArea.innerHTML = '';
				
				var cPx = gridW / cal.c;
				var rPx = gridH / cal.r;
				
				for (var c = 1; c < cal.c; c++)
					gridArea.innerHTML += '<div class="kvr ui-b2" style="left:'+(cPerc*c)+'%\"></div>';
				for (var r = 1; r < cal.r; r++)
					gridArea.innerHTML += '<div class="khr ui-b2" style="top:'+(rPerc*r)+'%\"></div>';
				
				var i = 0;
				for (var r = 0; r < cal.r; r++) {
					for (var c = 0; c < cal.c; c++) {
						gridArea.innerHTML +=
							'<div class="kdb'+(cal.d[i].alt ? ' kalt ui-c2' : '')+'" style="top:'+(rPerc*r)+'%;left:'+(cPerc*c)+'%;width:'+cPerc+'%;height:'+rPerc+'%;">' +
								'<div class="kdbt ui-c3"><a href="'+cal.agenda_path+cal.d[i].s+'">'+cal.d[i].n+'</a></div>' +
							'</div>';
						i++;
					}
				}
				
				var gridLen = cal.c*cal.r;
				
				for (var i = 0; i < cal.events.length; i++) {
					var e = cal.events[i];
					e.l = e.l ? e.l : 1;
					
					var barCount = 0;
					var pos = e.p;
					var len = e.l;
					
					do {
						var c = pos%cal.c;
						var r = Math.floor(pos/cal.c);
						
						var cutLen = ((r+1)*cal.c)-pos;
						var barLen = len < cutLen ? len : cutLen;
						
						var div = document.createElement('div');
						
						for (var yPos = 0; cal.d[pos].e && cal.d[pos].e[yPos]; yPos++);
						
						for (var x = 0; x < barLen; x++) {
							if (!cal.d[pos+x].e) {
								cal.d[pos+x].e = [];
							}
							cal.d[pos+x].e[yPos] = {e:e, ele:div, bar_l:barLen};
						}
						
						div.className = 'keb';
						div.className += e.allDay ? ' kallday' : '';
						with (div.style)
						{
							top = Math.ceil(r * rPx + (18 * (yPos + 1))) + 'px';
							width = (barLen * cPerc) + '%';
							left = (c * cPerc) + '%';
						}
						var innerDiv = document.createElement('div');
						
						if (e.allDay) innerDiv.className = 'ui-c5';
						
						var pos = (r + 1) * cal.c;
						var len = len-barLen;
						
						if (barCount || e.cont)
						{
							$('<img />')
								.attr('src', '/calendar/images/arrowl.gif')
								.addClass('kebal')
								.appendTo(innerDiv);
						}
						if (len)
						{
							$('<img />')
								.attr('src', '/calendar/images/arrowr.gif')
								.addClass('kebar')
								.appendTo(innerDiv);
						}
						innerDiv.innerHTML += '<a href="'+e.path+'">'+e.title+'</a>';
						div.appendChild(innerDiv);
						
						gridArea.appendChild(div);
						
						barCount++;
					} while (len && pos < gridLen)
				}
				
				gridArea.style.display = '';
				
				if (cal.events.length)
				{
					var db_h = $('.kdb').height();
					var dbt_h = $('.kdbt').height();
					var eb_h = $('.keb').height();
					
					eb_max = Math.floor((db_h - dbt_h) / eb_h);
					
					for (var i = 0; i < cal.d.length; i++) {
						if (cal.d[i].e && cal.d[i].e.length > eb_max) {
							for (var j in cal.d[i].e) {
								if (parseInt(j) + 2 > eb_max) {
									cal.d[i].e[j].ele.style.display = 'none';
									
									if (!cal.d[i].hidden) cal.d[i].hidden = [];
									cal.d[i].hidden.push(cal.d[i].e[j].ele);
								}
							}
						}
					}
					
					for (var i = 0; i < cal.d.length; i++) {
						if (cal.d[i].hidden) {
							var hidden_ele = document.createElement('div');
							cal.d[i].hidden_ele = hidden_ele;
							
							hidden_ele.className = 'kht';
							hidden_ele.innerHTML = '<a href="'+cal.agenda_path+cal.d[i].s+'">+ '+cal.d[i].hidden.length+' more</a>';
							with (hidden_ele.style) {
								top = (Math.floor(i/cal.c)*rPx+(db_h-eb_h))+'px';
								width = cPerc+'%';
								left = (i%cal.c*cPerc)+'%';
							}
							gridArea.appendChild(hidden_ele);
						}
					}
				}
			});
		}
	});
})(jQuery);



function init_form () {
	if ($('#eventform').length) {
		$('#all_day').change(function (e) {
			if (this.checked) {
				$('#time_start').hide();
				$('#time_end').hide();
			} else {
				$('#time_start').show();
				$('#time_end').show();
			}
		});
		
		$('#repetition_type').change(function (e) {
			if (this.value != '0') $('#rep_opts').show();
			else $('#rep_opts').hide();
			
			$('#rep_daily_opts').hide();
			$('#rep_weekly_opts').hide();
			$('#rep_monthly_opts').hide();
			
			switch (this.value) {
			case '1': $('#rep_daily_opts').show(); break;
			case '2': $('#rep_weekly_opts').show(); break;
			case '3': $('#rep_monthly_opts').show(); break;
			}
		});
		
		$('#replimituntil').change(function (e) {
			$('#rependfield').css('display', (this.value == 'on') ? 'none' : '');
		});
		$('#replimitnone').change(function (e) {
			$('#rependfield').css('display', (this.value == 'on') ? '' : 'none');
		});
		
		$('.date-selector').click(function (e) {
			$(this).dateSelectorShow();
		});
		$('.time-selector').click(function (e) {
			$(this).timeSelectorShow();
		});
		
		
		/*
		
		$.validator.addMethod('date', function(value, elem, params) {
			return $(elem).val().match(/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/) ? true : false;
		}, '');
		$.validator.addMethod('time', function(value, elem, params) {
			return $(elem).val().match(/^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/i) ? true : false;
		}, '');
		$.validator.addMethod('dateEnd', function(value, elem, params) {
			var d1 = Date.parse($('#eventform input[name=date_start]').val() + ' ' + $('#eventform input[name=time_start]').val()) / 1000;
			var d2 = Date.parse($('#eventform input[name=date_end]').val() + ' ' + $('#eventform input[name=time_end]').val()) / 1000;
			
			return d1 < d2;
		}, '');
		$.validator.addMethod('repDateEnd', function(value, elem, params) {
			if (!$('#replimituntil').attr('checked')) return true;
						
			var d1 = Date.parse($('#eventform input[name=date_start]').val() + ' ' + $('#eventform input[name=time_start]').val()) / 1000;
			var d2 = Date.parse($('#eventform input[name=rep_date_end]').val()) / 1000;
			
			return d1 < d2;
		}, 'Your event\'s repetition can not end before the event starts.');
		
		$("#eventform").validate({
			errorClass: 'ui-validation-error',
			rules: {
				title: 'required',
				date_start: 'date',
				time_start: 'time',
				date_end: {dateEnd: true, date: true},
				time_end: 'time',
				rep_date_end: {repDateEnd: true, date: true},
			},
			messages: {
				title: 'You have to title your event.',
				
			},
			submitHandler: function(form) { return false; }
		});
		
		*/
	}
}

