function daysPerMonth(month, year) {
	switch(month) {
		case 1:
			return 31;
		case 2:
			return (year % 4 == 0) ? 29 : 28;
		case 3:
			return 31;
		case 4:
			return 30;
		case 5:
			return 31;
		case 6:
			return 30;
		case 7:
			return 31;
		case 8:
			return 31;
		case 9:
			return 30;
		case 10:
			return 31;
		case 11:
			return 30;
		case 12:
			return 31;
		default:
			return 'Error';
	}
}

function monthNumeralToMonthString(month) {
	switch(month) {
		case 1:
			return 'Januar';
		case 2:
			return 'Februar';
		case 3:
			return 'Marts';
		case 4:
			return 'April';
		case 5:
			return 'Maj';
		case 6:
			return 'Juni';
		case 7:
			return 'Juli';
		case 8:
			return 'August';
		case 9:
			return 'September';
		case 10:
			return 'Oktober';
		case 11:
			return 'November';
		case 12:
			return 'December';
		default:
			return 'Error';
	}
}

function insertTime(input, time, hours, minutes, clock) {
	var date = time.getFullYear() + '-' + (time.getMonth() + 1) + '-' + input.attr('picked_date');
	if(clock) {
		date = date + ' ' +  hours.val() + ':' + minutes.val() + ':00';
	}
	input.val(date);
}

function setupCalendar(calendar, time, input, current, container, hours, minutes) {
	current.html(monthNumeralToMonthString(time.getMonth() + 1) + ' ' + time.getFullYear());
	container.empty();
	var cleanTime = new Date();
	cleanTime.setMonth(time.getMonth(), 1);
	cleanTime.setFullYear(time.getFullYear());
	var day = cleanTime.getDay();
	if(day == 0) {
		day = 7;
	}
	if(day > 1) {
		for(var i = 0; i < day - 1; i++) {
			container.append($('<div class="cc_fill">&nbsp;</div>'));
		}
	}
	for(var i = 1; i <= daysPerMonth(time.getMonth() + 1, time.getFullYear()); i++) {
		var date = $('<div class="cc_date">' + i + '</div>');
		if(input.attr('picked_date') == i) {
			date.attr('class', 'cc_date cc_date_selected');
		}
		date.click(function() {
			input.attr('picked_date', $(this).html());
			container.children('.cc_date').each(function() {
				$(this).attr('class', 'cc_date');
			});
			$(this).attr('class', 'cc_date cc_date_selected');
		});
		container.append(date);
	}	
	container.append($('<div style="clear:both;"></div>'));
}	

function cc_calendar(id) {
	$('input[type=text].' + id).each(function() {
		var input = $(this);
		var calendar = $('<div style="display: none;" class="cc_calendar"></div>');
		var using = false;
		
		// disable input
		input.bind('keydown keyup keyrelease', function(e) {
			e.preventDefault();
		});
		
		// generate calender
		if(input.val() != '') {
			var now = new Date(input.val());
			if(isNaN(now)) {
				now = new Date();
			}
		} else {
			var now = new Date();
		}

		var current = $('<div class="cc_current"></div>');
		var clear = $('<input type="button" class="cc_clear" value="Ryd" />');
		var close = $('<input type="button" class="cc_close" value="Luk" />');
		var ok = $('<input type="button" class="cc_ok" value="OK" />');
		var last = $('<input type="button" class="cc_last" value=" &laquo; " />');
		var next = $('<input type="button" class="cc_next" value=" &raquo; " />');
		var hours = $('<select class="cc_hours"><option value="00">00</option><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option></select>');
		var minutes = $('<select class="cc_minutes"><option value="00">00</option><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option><option value="32">32</option><option value="33">33</option><option value="34">34</option><option value="35">35</option><option value="36">36</option><option value="37">37</option><option value="38">38</option><option value="39">39</option><option value="40">40</option><option value="41">41</option><option value="42">42</option><option value="43">43</option><option value="44">44</option><option value="45">45</option><option value="46">46</option><option value="47">47</option><option value="48">48</option><option value="49">49</option><option value="50">50</option><option value="51">51</option><option value="52">52</option><option value="53">53</option><option value="54">54</option><option value="55">55</option><option value="56">56</option><option value="57">57</option><option value="58">58</option><option value="59">59</option></select>');
		var container = $('<div class="cc_container"></div>');
		var no_clock = $('<input type="checkbox" />');
		
		clear.click(function() {
			calendar.hide();
			input.val('');
		});
		
		close.click(function() {
			calendar.hide();
		});
		
		ok.click(function() {
			calendar.hide();
			insertTime(input, now, hours, minutes, no_clock.attr('checked') == true ? false : true);
		});

		last.click(function() {
			now.setMonth(now.getMonth() - 1);
			setupCalendar(calendar, now, input, current, container, hours, minutes);
		});

		next.click(function() {
			now.setMonth(now.getMonth() + 1);
			setupCalendar(calendar, now, input, current, container, hours, minutes);
		});
		
		minutes.css('margin-left', '5px');

		calendar.append(last);
		calendar.append(next);
		calendar.append(current);

		setupCalendar(calendar, now, input, current, container, hours, minutes);
		calendar.append(container);
		
		calendar.append($('<span>Udelad klokkeslæt:</span>'));
		calendar.append(no_clock);
		calendar.append($('<br />'));
		calendar.append(hours);
		calendar.append(minutes);
		calendar.append($('<br />'));
		calendar.append(close);
		calendar.append(clear);
		calendar.append(ok);
		
		input.after(calendar);
		input.focus(function() {
			calendar.show('fast');
			if(using) {
				using = false;
			}
		});
		input.blur(function() {
			if(!using) {
				calendar.hide('fast');
			}
		});
		calendar.mouseenter(function() {
			using = true;
		});
		calendar.mouseleave(function() {
			using = false;
		});
	});
}

