﻿/// <reference path="jquery-latest-vsdoc.js" />
(function ($) {
	$.fn.datefield = function (options) {
		var defaults = {
			changeMonth: true,
			changeYear: true,
			gotoCurrent: true,
			duration: 0,
			showOn: 'button',
			buttonImageOnly: true,
			buttonText: 'select date',
			yearRange: (new Date().getFullYear() - 10) + ':' + (new Date().getFullYear() + 10),

			onSelect: function (dateText, inst) {
				inst.input.removeClass('example').focus();
				inst.input.change();
			},

			beforeShow: function (input, inst) {
				// Make sure it's always at the top
				$(this).datepicker("widget").appendTo(document.body);

				var minMax = inst.input.data('yearRange')
				if (minMax == null) {
					minMax = inst.settings.yearRange.split(':');
					inst.input.data('yearRange', minMax);
				}
				var date = Date.parseDisplayString(inst.input.val());
				if (date == null) return;
				var year = date.getFullYear();
				var min = parseInt(minMax[0]);
				var max = parseInt(minMax[1]);
				if (year < min) min = year;
				if (year > max) max = year;
				inst.input.datepicker('setDate', date);
				return { yearRange: min + ':' + max }
			},

			onChangeMonthYear: function (year, month, inst) {
				var day = inst.currentDay
				switch (month) {
					case 2: //february
						if (day > 28) {
							if (year % 400 == 0) day = 29
							else if (year % 100 == 0) day = 28
							else if (year % 4 == 0) day = 29
							else day = 28
						}
						break;
					case 4: // April
					case 6: // June
					case 9: // september
					case 11: // november
						if (day > 30) day = 30;
						break;
				}
				inst.input.datepicker('setDate', new Date(year, month - 1, day));
				inst.input.change();
			}
		}

		var opts = $.extend({}, defaults, options);

		var suggestOpts = {};
		if (opts.minDate != null) {
			suggestOpts.minDate = opts.minDate
		} else suggestOpts.minDate = new Date(parseInt(opts.yearRange.split(':')[0]), 0, 1);
		if (opts.maxDate != null) {
			suggestOpts.maxDate = opts.maxDate
		} else suggestOpts.maxDate = new Date(parseInt(opts.yearRange.split(':')[1]), 11, 31);

		if (opts.dateSelected != null) {
			suggestOpts.itemSelected = opts.dateSelected;
			var optsOnSelect = opts.onSelect;
			opts.onSelect = function (dateText, inst) {
				optsOnSelect(dateText, inst);
				opts.dateSelected();
			};
		}

		return this.each(function () {
			$(this)
				.datepicker(opts)
				.datesuggest(suggestOpts)
				.example('dd-MMM-yyyy')
				.vldpopup({
					validate: function (field, args) {
						var str = field.val();
						if (str != "dd-MMM-yyyy" && str != "" && Date.parseDisplayString(str) == null) {
							return "invalid date";
						} else return null;
					},
					args: {}
				});
		});
	};
})(jQuery);

function SetDefaultDateRange(idA, idB, value, type) {
	$('#' + idA).change(function() {
		if(!$('#' + idB).hasClass("example")) return;

		var date = Date.parseDisplayString($(this).val());
		if(date != null) {
			switch(type) {
				case "Days":
					date.setDate(date.getDate() + value);
					break;
				case "Months":
					date.setMonth(date.getMonth() + value);
					break;
				case "Years":
					date.setFullYear(date.getFullYear() + value);
					break;
			}

			$('#' + idB).val(date.toDisplayString());
			$('#' + idB).removeClass("example");
		}
	});
}

function SetDefaultTimeRange(idA, idB, minutes) {
	$("#" + idA).change(function() {
		if(!$('#' + idB).hasClass("example")) return;

		var timeVal = time.parseString($(this).val());
		if(timeVal != null) {
			timeVal.addMinutes(minutes);
			$("#" + idB).val(timeVal.toString());
			$("#" + idB).removeClass("example");
		}
	});
}
