function validateDateFormat(dateStr){
	// trim
	// dateStr = dateStr.trim();
	// check format with Regexp
	if(!dateStr.match(/^\d{1,2}\.\d{1,2}\.\d{2}$/)){
		alert("Sorry, value of 'Sort Date' must be in DD.MM.YY format. Got: '" + dateStr + "' Please check it again");
		return false;
	}
	// extract year, months and day:
	var dateParts = dateStr.split(".");
	var day = parseInt(dateParts[0]);
	var month = parseInt(dateParts[1]);
	var year = parseInt(dateParts[2]);
	// if date is entered as two digits, treat it as:
	// [0;29] - 2000-2029
	// [30;99] - 1930-1999
	if(year <= 29){
		year += 2000;
	} else{
		year += 1900;
	}
	// check month range
	if(month < 1 || month > 12){
		alert("Sorry, month value can be 1 to 12 but got: " + month);
		return false;
	}
	var isLeap = (2 == month) && isLeapYear(year);// no matter to evaluate for any other month
	
	var dayMax = 31; // Most months have 31 days. Refine this:
	if(4==month || 6==month || 9==month || 11==month){
		// April, June, Sept, Nov
		dayMax = 30;
	}else if(2==month){
		//February
		if(isLeap){
			dayMax = 29;
		}else{
			dayMax = 28;
		}
	}
	if(day < 1 || day > dayMax){
		var errMsg = "Sorry, day number for month " + monthName(month);
		if(2 == month){
			errMsg += " for " + (isLeap ? "" : "non-") + "leap year " + year;
		}
		errMsg += " must be 1 to " + dayMax + " but got: " + day;
		alert(errMsg);
		return false;
	}
	return true;
}

function monthName(month){
	var MONTHS = new Array(12);
		MONTHS[0] = "Jan";
		MONTHS[1] = "Feb";
		MONTHS[2] = "Mar";
		MONTHS[3] = "Apr";
		MONTHS[4] = "May";
		MONTHS[5] = "Jun";
		MONTHS[6] = "Jul";
		MONTHS[7] = "Aug";
		MONTHS[8] = "Sep";
		MONTHS[9] = "Oct";
		MONTHS[10] = "Nov";
		MONTHS[11] = "Dec";
	return MONTHS[month-1];
}
function isLeapYear(year){
// Although not too difficult, algorithm is taken from:
// http://en.wikipedia.org/wiki/Leap_year#Leap_year_rules
	if(0 == year % 400){
		return true;
	}else if(0 == year %100 ){
		return false;
	}else if(0 == year % 4){
		return true;
	}
	return false;
}
