function setDatePicker(field, dateFormat){
	var input = $(field);
	var value = input.val();
	if(!checkDate(value, dateFormat))
		value = '';
	input.DatePicker({
		format: dateFormat,
		date: value,
		current: value,
		locale: datePickerLocale,
		onBeforeShow: function(){
			var v = input.val();
			if(v != '' && checkDate(v, dateFormat))
				input.DatePickerSetDate(v, true);
		},
		onChange: function(formated, dates){
			if(formated != input.val() && formated != 'NaN.NaN.NaN')
				input.val(formated).DatePickerHide().change();
		}
	});	

	var handlers =
		'<a href="#" class="dateHandler"><img src="/cpanel/images/calend.gif" /></a>';
	input.after(handlers);
}

function checkDate(dateString, format){
	var dateParts = getDateParts(dateString, format);

	if(dateParts.day == null || dateParts.month == null || dateParts.year == null)
		return false;

	var date = new Date(dateParts.year, dateParts.month, dateParts.day);

	// If the date is not valid, Date() will change the date to a reasonable guess.
	// So if there are differences below, the original date is not valid.
	return (date.getDate() == dateParts.day && date.getMonth() == dateParts.month && date.getFullYear() == dateParts.year);
}

function getDateParts(dateString, format){
	var result = {day: null, month: null, year: null};	
	var parts = dateString.split(/\W+/);
	var against = format.split(/\W+/);

	for(var i = 0; i < parts.length; ++i){
		switch(against[i]){
			case 'd':
				if(parts[i].match(/^\d{1,2}$/))
					result.day = parseInt(parts[i], 10); //the radix of 10 is explicitly given to avoid octal conversions of numbers with leading 0
				break;
			case 'm':
				if(parts[i].match(/^\d{1,2}$/))
					result.month = parseInt(parts[i], 10) - 1; //months are zero based
				break;
			case 'Y':
			case 'y':
				if(parts[i].match(/^\d{4}$/))
					result.year = parseInt(parts[i], 10);
				break;
		}
	}	
	return result;
}

$('.dateHandler').live('click', function(){
	$(this).prev().click();
	return false;
});

$('.dateRemover').live('click', function(){
	$(this).prev().prev().val('').change();
	return false;
});
