function isValidEmail(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
}

function ParseDate(dt) { // YYYYMMDD
	if (!dt) { return null; }
	dt = dt.toString();
	var pattern = /^[0-9]{8,14}$/i;
	if (!pattern.test(dt)) { return null; }
	return new Date(dt.substring(0, 4), dt.substring(4, 6) - 1, dt.substring(6, 8));
}

function ParseDateTime(dt) { // YYYYMMDDHHNNSS
	if (!dt) { return null; }
	dt = dt.toString();
	var pattern = /^[0-9]{14}$/i;
	if (!pattern.test(dt)) { return null; }
	return new Date(dt.substring(0, 4), dt.substring(4, 6) - 1, dt.substring(6, 8), dt.substring(8, 10), dt.substring(10, 12), dt.substring(12, 14));
}

function GetDate(dt) { // YYYYMMDDHHNNSS
	if (!dt) { return null; }
	dt = dt.toString();
	var pattern = /^[0-9]{8,14}$/i;
	if (!pattern.test(dt)) { return ''; }
	return dt.substring(0, 8);
}

function GetTime(dt) { // YYYYMMDDHHNNSS
	if (!dt) { return null; }
	dt = dt.toString();
	var pattern = /[0-9]{14}/i;
	if (!pattern.test(dt)) { return ''; }
	return dt.substring(8, 14);
}

function RememberLogin(login) {
	return $.cookie('login', login.toLowerCase(), {'expires' : 1 * 24 * 60 * 60});
}


function SaveLang(lang) {
	return $.cookie('langId', lang, {'expires' : 365 * 24 * 60 * 60});
}

function ReadLang() {
	return $.cookie('langId');
}

function Trim(text) {
	return jQuery.trim(text);
}

function GetDuration(a, b, suffix) {
	if (a < b) { var c = a; a = b; b = c; }
	var delta = ParseDateTime(a).getTime() - ParseDateTime(b).getTime();
	var result = Math.round(delta / 1000 / 60).toFixed(0);
	suffix = (suffix == '') ? '' : ' ' + suffix;
	return (result > 0) ? result + suffix : '';
}

function IsOverlappedTime(timeBegin1, timeEnd1, timeBegin2, timeEnd2) { 
	
	// timeEnd1 and timeEnd2 == '', when end time is not set 
	if((timeEnd1 == '') && (timeBegin2 >= timeBegin1)) {
		return true;
	}
	if((timeEnd2 == '') && (timeBegin1 >= timeBegin2)) {
		return true;
	}
	if((timeBegin1 >= timeBegin2) && (timeBegin1 < timeEnd2)) {
		return true;
	}
	if((timeBegin1 <= timeBegin2) && (timeEnd1 > timeBegin2)) {
		return true;
	}
	return false;
}

function ActivityGetTimeEnd(timeBegin, eventDuration) {
	var objDate = ParseDateTime(timeBegin.toString());
	objDate.setMinutes(parseInt(objDate.getMinutes()) + parseInt(eventDuration));
	return objDate.toString('yyyyMMddHHmmss');
}

function isInt(x) {
   var y = parseInt(x);
   if (isNaN(y)) return false;
   return x==y && x.toString()==y.toString();
}

function isValidTime(str) {
	var regex = /^(2[0-3])|[01][0-9]:[0-5][0-9]$/;
	if(str != "") {
		if(!regex.test(str)) {
			return false;
		}
		return true;
	}
	return false;
}

function IsDateInPast(testDate) {
	if (allowPastBookings) { return false; }
	if (!testDate) { return true; }
	var now = (new Date()).toString('yyyyMMddHHmmss');
	// allow 1H and 5 minutes late.
	return now > testDate.toString();
}

function Now() {
	return (new Date()).toString('yyyyMMddHHmmss');
}

function ShowDateTime(dt, format) { // YYYYMMDDHHNNSS
	if (!dt) { return ''; }
	dt = dt.toString();
	var d = null;
	if (/^[0-9]{14}$/.test(dt)) { 
		d = new Date(dt.substring(0, 4), dt.substring(4, 6) - 1, dt.substring(6, 8), dt.substring(8, 10), dt.substring(10, 12), dt.substring(12, 14));
	}
	if (/^[0-9]{8}$/.test(dt)) {
		d = new Date(dt.substring(0, 4), dt.substring(4, 6) - 1, dt.substring(6, 8), 0, 0, 0);
	}
	return d ? d.toString(format) : '';
}


function AsHTML(node) {
	return $('<div></div>').append(node).html()
}

function IsArray(obj) {
	return typeof obj == 'object' && obj != null && obj.length;
}

