// inCMS common js
// (c)2008 Spika David, Inexes

var inCMS = new Object();

// Fce vrátí html prvek
// parametry: ID nebo prvek
inCMS.getObj = function (x) {
	if (typeof x != 'string') return x;
	else if (Boolean(document.getElementById)) return document.getElementById(x);
		else return null;
	}

// Fce vrátí pole všech html prvků v daném prvku, jejichž className obsahuje zadaný řetězec
// parametry: ID prvku ve kterém hledat, název prvku který hledat (možno použít *), podřetězec className
inCMS.getElementsByClass = function (p,t,c) {
	var o = inCMS.getObj(p);
	var tempField = new Array();
	var elements = o.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			tempField[tempField.length] = elements[i];
			}
		}
	return tempField;
	}

// Fce přidá skript (před nebo za stávající funkce) navázaný na definovanou událost html prvku
// použití: addEvent(window,'onload','alert(o.id);');
// parametry: ID nebo prvek, název události, skript navázaný na událost (pravidla pro skript: na daný prvek neodkazovat přes this, ale přes o), příznak jestli má být nový skript vložen před/za stávající
inCMS.addEvent = function (obj,e,s,before) {
	var o = inCMS.getObj(obj);
	eval('var oldEvent = o.' + e + ';');
	if (!before) eval('o.' + e + ' = function (' + (inCMS.browser.IE ? '' : 'event') + ') { ' + (oldEvent ? 'oldEvent(' + (inCMS.browser.IE ? '' : 'event') + ');' : '') + s + ' };');
	else eval('o.' + e + ' = function (' + (inCMS.browser.IE ? '' : 'event') + ') { ' + s + (oldEvent ? 'oldEvent(' + (inCMS.browser.IE ? '' : 'event') + ');' : '') + ' };');
	}

// Fce přidá skript navázaný na definovanou událost všem html prvkům, jejichž className obsahuje zadaný řetězec
// parametry: ID prvku ve kterém hledat, název prvku (možno použít *), podřetězec className, název události, skript navázaný na událost, příznak jestli má být nový skript vložen před/za stávající
inCMS.addEventByClass = function (p,t,c,e,s,before) {
	var o = inCMS.getObj(p);
	var elements = o.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			inCMS.addEvent(elements[i],e,s,before);
			}
		}
	}

// Fce přidá skript navázaný na definovanou událost všem formulářovým prvkům, jejichž className obsahuje zadaný řetězec
// parametry: název prvku (možno použít *), podřetězec className, název události, skript navázaný na událost, příznak jestli má být nový skript vložen před/za stávající
inCMS.addEventToForm = function (t,c,e,s,before) {
	var elements = document.forms[0];	
	for (var i=0; i<elements.length; i++) {
		if (elements[i].nodeName.toLowerCase() == t && elements[i].className.indexOf(c) != -1) {
			inCMS.addEvent(elements[i],e,s,before);
			}
		}
	}

// Fce nahradí chybějící podporu css pseudotřídy :hover pro IE6- všem html prvkům, jejichž className obsahuje zadaný řetězec
// parametry: ID prvku ve kterém hledat, název prvku (možno použít *), podřetězec className
inCMS.hoverByClass = function (p,t,c) {
	if (inCMS.browser.IE6) {
		var o = inCMS.getObj(p);
		var elements = o.getElementsByTagName(t);
		for (var i=0; i<elements.length; i++) {
			if (elements[i].className.indexOf(c) != -1) {
				inCMS.addEvent(elements[i],'onmouseover','o.className += \' hover\';');
				inCMS.addEvent(elements[i],'onmouseout','o.className = o.className.replace(\' hover\',\'\');');
				}
			}
		}
	}

// Fce nastaví html prvku css styl
// parametry: ID nebo prvek, 'vlastnost', 'hodnota'
inCMS.setObjStyle = function (obj,prop,val) {
	var o = inCMS.getObj(obj);
	if (o && o.style) {
		eval ('o.style.'+prop+'="'+val+'"');
		return true;
		}
	else return false;
	}

// Fce vrátí hodnotu css parametru u html prvku
// parametry: ID nebo prvek, 'vlastnost'
inCMS.getObjStyle = function (obj,prop) {
	var o = inCMS.getObj(obj);
	if (document.defaultView) var val = window.document.defaultView.getComputedStyle(o,null).getPropertyValue(prop); // Mozilla
	else if (o.currentStyle) var val = eval('o.currentStyle.' + prop); // IE
	return val;
	}

// Fce nastaví css styl všem html prvkům, jejichž className obsahuje zadaný řetězec
// parametry: název prvku (možno použít *), podřetězec className, 'vlastnost', 'hodnota'
inCMS.setObjStyleByClass = function (p,t,c,prop,val) {
	var o = inCMS.getObj(p);
	var elements = o.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			inCMS.setObjStyle(elements[i],prop,val);
			}
		}
	}

// Fce na zobrazení/zneviditelnění html prvku
// parametry: ID nebo prvek, zobrazení - true/false
inCMS.showObj = function (obj,on) {
	return inCMS.setObjStyle(obj,'visibility',(on) ? 'visible':'hidden');
	}

// Fce na zobrazení/skrytí html prvku
// parametry: ID nebo prvek, zobrazení - true/false, hodnota css vlastnosti display (není povinná, pokud 2. parametr = false)
inCMS.displayObj = function (obj,on,type) {
	if (on && !type) { 
		if (!inCMS.browser.IE && inCMS.getObj(obj) && inCMS.getObj(obj).nodeName.toLowerCase() == 'tr') type = 'table-row';
		else if (!inCMS.browser.IE && inCMS.getObj(obj) && inCMS.getObj(obj).nodeName.toLowerCase() == 'tbody') type = 'table-row-group';
		else type = 'block';
		}
	return inCMS.setObjStyle(obj,'display',(on) ? type:'none');
	}

// Konstruktor na vytvoření kopie objektu (pro uživatelské objekty příjímané přes AJAX, jejichž struktura není známa)
// použití: novy_objekt = new cloneObj(stary_objekt)
// parametry: objekt
inCMS.cloneObj = function (obj) {
	for (var property in obj) {
		if (typeof obj[property] == 'object') { 
			if (obj.length) this.length = obj.length;
			this[property] = new cloneObj (obj[property]);
			}
		else this[property] = obj[property];
		}
	}

// Fce na porovnání 2 objektů (pro uživatelské objekty příjímané přes AJAX, jejichž struktura není známa)
// Pokud se liší, vrací true
// parametry: objekt1, objekt2
inCMS.compareObjs = function (obj1,obj2) {
	var isChange = false;
	var maxCount = (obj1.length >= obj2.length) ? obj1.length : obj2.length;
	for (var i=0; i<maxCount; i++) {
		var item = obj1[i]; // 1
		if (!item) { isChange = true; break; }
		else for (var property in item) {
			item = obj1[i]; // 1
			var val1 = item[property]; // 1 - vlastnost
			item = obj2[i]; // 2
			if (!item) { isChange = true; break; }
			else {
				var val2 = item[property]; // 2 - vlastnost
				if (typeof val1 != 'object' && typeof val2 != 'object' && val1 != val2) { isChange = true; break; }
				}
			}
		}
	return isChange;
	}

// Fce vrátí pole indexů, na kterých se v zadaném poli vyskytuje zadaná hodnota
// parametry: pole, hodnota, příznak podle kterého se testuje rovnost(substring=false) nebo jen obsah podřetězce(substring=true)
inCMS.findFieldIndexesByValue = function (field,value,substring) {
	var fieldIndexes = new Array();
	for (var i=0; i<field.length; i++) {
		if (field[i] == value && !substring) {
			fieldIndexes.length++;
			fieldIndexes[fieldIndexes.length-1] = i;
			}
		if (field[i].indexOf(value) != -1 && substring) {
			fieldIndexes.length++;
			fieldIndexes[fieldIndexes.length-1] = i;
			}
		}
	return fieldIndexes;
	}

// Fce odstraní zadanou hodnotu z pole
// parametry: pole; hodnota
inCMS.removeValueFromField = function (field,value) {
	var position = field.length+1;
	for (var i=0; i<field.length; i++) if (field[i] == value) position = i;
	for (var i=position; i<field.length-1; i++) field[i] = field[i+1];
	field.length--;
	}

// Fce odstraní zadanou hodnotu z pole
// parametry: pole; hodnota
inCMS.addValueToField = function (field,value) {
	field.length++;
	field[field.length-1] = value;
	}	

// Fce vrátí hodnotu zadaného parametru z url
// použití: hodnota = getParamsFromUrl()['parametr']
inCMS.getParamsFromUrl = function () {
	var field  = window.location.search.substr(1).split('&');
	var params = new Array(); 
	for (var i=0; i<field.length; i++) {
		params[field[i].split('=')[0]] = unescape(field[i].split('=')[1]); 
		}
	return params;
	}

// Objekt pro práci s popup okny
inCMS.popup = {
	// Odkaz na popup okno otevřené metodou open()
	win : null,
	// Metoda na otevření nového popup okna 
	// parametry: url, šířka okna, výška okna, posuvníky a proměnná velikost okna - true/false, název okna
	open : function (src,width,height,fixedSize) {
		if (fixedSize) var param = 'no';
		else var param = 'yes';
		var p = 'toolbar=no,menubar=no,location=no,directories=no,scrollbars=' + param + ',resizable= ' + param + ',status=no,width=' + width + ',height=' + height + ',left=' + (screen.availWidth/2-width/2) + ',top=' + (screen.availHeight/2-height/2);
		if (this.win) this.win.close();
		this.win = window.open(src,'',p);
		this.win.focus();
		},
	// Metoda vrátí odkaz na html prvek umístěný v rodičovském okně do popup okna
	// parametry: ID nebo prvek
	getObj : function (x) {
		return inCMS.getObj(x);
		}
	};

// Detail obrázku v novém okně:
inCMS.imagePopupWindow = null;
inCMS.imagePopup = function (src,title,width,height) {
	if (inCMS.imagePopupWindow) inCMS.imagePopupWindow.close();
	var imageWidth = width;
	var imageHeight = height;
	if (width < 400)  width = 400;
	if (height < 300) height = 300;
	if (width > 990 || height > 700) var s = 'scrollbars=yes';
	else var s = 'scrollbars=no';
	if (width > 990)  width = 990;
	if (height > 700) height = 700;
	var p = 'toolbar=no,menubar=no,location=no,resizable=yes,directories=no,status=no,width=' + width + ',height=' + height + ',left=' + (screen.availWidth/2-width/2) + ',top=' + (screen.availHeight/2-height/2) + ',' + s;
	inCMS.imagePopupWindow = window.open(appWWWRoot + 'admin/PreviewImage.html?src='+escape(src)+'&title='+escape(title)+'&width='+imageWidth+'&height='+imageHeight,'',p);
	inCMS.imagePopupWindow.focus();		
	}

// Objekt na detekci prohlížeče
inCMS.browser = {
	IE : navigator.appName == 'Microsoft Internet Explorer',
	IE6 : navigator.userAgent.indexOf('MSIE 6') != -1,
	IE7 : navigator.userAgent.indexOf('MSIE 7') != -1,
	opera : navigator.userAgent.indexOf('Opera') != -1,
	gecko : navigator.userAgent.indexOf('Gecko') != -1,
	safari : navigator.userAgent.indexOf('Safari') != -1
	}
// Opera se může tvářit i jako jiný prohlížeč, proto oprava:
if (inCMS.browser.opera) {
	for (var property in inCMS.browser) {
		if (property != 'opera') inCMS.browser[property] = false;
		}
	}

// Fce vrátí souřadnice html prvku vůči stránce (každý prohlížeč může vracet jiné)
// parametry: ID nebo prvek
inCMS.getObjCoords = function (obj) {
	var element = inCMS.getObj(obj);
	var coords = { x : 0, y : 0 };
	while (element) {
		coords.x += element.offsetLeft;
		coords.y += element.offsetTop;
		element = element.offsetParent;
	}
	return coords;
}

// Fce vrátí souřadnice kurzoru vůči stránce (každý prohlížeč může vracet jiné)
// parametry: event
inCMS.getMouseCoords = function (e) {
	if (e.pageX || e.pageY) {
		return {x:e.pageX, y:e.pageY};
		}
	return {
		x:e.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:e.clientY + document.body.scrollTop  - document.body.clientTop
		};
	}

// Fce vrátí aktuální velikost okna
inCMS.windowSize = function () {
	if (document.documentElement && document.documentElement.clientWidth)	{
		var size = { width : document.documentElement.clientWidth, height : document.documentElement.clientHeight };
		return size;
		}
	else if (document.body && document.body.clientWidth) {
		var size = { width : document.body.clientWidth,	height : document.body.clientHeight	};
		return size;
		}
	else var size = { width : 0, height : 0 };
	return size;
	}

// Fce vrátí aktuální pozici stránky
inCMS.pagePosition = function () {
	var left = (window.pageXOffset) ? window.pageXOffset
		: (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft
		: (document.body) ? document.body.scrollLeft
		: 0;
	var top = (window.pageYOffset) ? window.pageYOffset
		: (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop
		: (document.body) ? document.body.scrollTop
		: 0;
	var position = { x : left, y : top };
	return position;
	}

// Fce vrátí aktuální velikost stránky
inCMS.pageSize = function () {
	var w = (window.innerWidth && window.scrollMaxX) ? window.innerWidth + window.scrollMaxX
		: (document.body.scrollWidth > document.body.offsetWidth) ? document.body.scrollWidth
		: document.body.offsetWidth;
	var h = (window.innerHeight && window.scrollMaxY) ? window.innerHeight + window.scrollMaxY
		: (document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollHeight
		: document.body.offsetHeight;
	if (w < inCMS.windowSize().width) w = inCMS.windowSize().width;
	if (h < inCMS.windowSize().height) h = inCMS.windowSize().height;
	var size = { width : w, height : h };
	return size;
	}

// Metoda nastaví průhlednost html prvku
// parametry: html prvek (nebo jeho ID), hodnota průhlednosti 0-100
inCMS.setOpacity = function (obj,val) {
	var o = inCMS.getObj(obj);
	if (inCMS.browser.IE) o.style.filter = (val == 100) ? 'none' : 'alpha(opacity=' + val + ')';
	else {
		o.style.MozOpacity = val/100;
		o.style.KHTMLOpacity = val/100;
		o.style.opacity = val/100;
		}
	}

// Fce uloží do cookies zadanou hodnotu
inCMS.setCookie = function (name,value,path,domain,secure) {
	expires = new Date();
	expires.setTime(expires.getTime() + (24 * 60 * 60 * 1000 * 31));
	document.cookie = escape(name) + "=" + escape(value) +
	((expires) ? "; expires=" + expires.toGMTString() : "") +
	((path) ? "; path=" + path : "") +
	((domain) ? "; domain=" + domain : "") +
	((secure) ? "; secure" : "");
	}

// Fce vrátí z cookies hodnotu podle jména
inCMS.getCookie = function (name) {
	var cookieList = document.cookie.split("; ");
	for (var i=0; i<cookieList.length; i++){
		var cookie = cookieList[i].split("=");
		if (unescape(cookie[0]) == name) {
			return unescape(cookie[1]);
			break;
			}
		}
	return null;
	}

inCMS.preloadImages = new Array();
inCMS.preloadImages[0] = new Image();
inCMS.preloadImages[0].src = 'Design/Progress.gif';

// *********************************
// Kód pro jednotlivé moduly a menu:
// *********************************

// inCMS module: form

var forms = {
	charWidth: 8, // průměrná šířka jednoho znaku v px pro výpočet celkové šířky prvků input[text], textearea a select
	horizontalPaddingAndBorder: 12, // součet border-left + padding-left + padding-right + border-right u prvku input[text] pro výpočet celkové šířky prvku select
	lineHeight: 14 // výška řádku pro výpočet výšky prvku textarea
};

// Inicializační metoda, spuštěná až po načtení stránky
inCMS.addEvent(window, 'onload', 'forms.postInit();');
forms.postInit = function() {
	inCMS.addEventByClass(document, 'input', 'format:', 'onblur', 'forms.validateOne(o);');
	inCMS.addEventByClass(document, 'input', 'required:', 'onblur', 'forms.validateOne(o);');
	inCMS.addEventByClass(document, 'textarea', 'format:', 'onblur', 'forms.validateOne(o);');
	inCMS.addEventByClass(document, 'textarea', 'required:', 'onblur', 'forms.validateOne(o);');
	inCMS.addEventByClass(document, 'select', 'required:', 'onblur', 'forms.validateOne(o);');
	inCMS.addEventByClass(document, 'input', 'focusStyle', 'onfocus', 'if (!o.disabled) o.className += \' text-focus\';');
	inCMS.addEventByClass(document, 'input', 'focusStyle', 'onblur', 'o.className = o.className.replace(\'text-focus\',\'\');');
	inCMS.addEventByClass(document, 'textarea', 'focusStyle', 'onfocus', 'if (!o.disabled) o.className += \' text-focus\';');
	inCMS.addEventByClass(document, 'textarea', 'focusStyle', 'onblur', 'o.className = o.className.replace(\'text-focus\',\'\');');
	var textareas = inCMS.getElementsByClass(document, 'textarea', 'maxLength:');
	for (var i = 0; i < textareas.length; i++) {
		var textarea = textareas[i];
		var partClass = textarea.className.split(' ');
		var maxLength = partClass[inCMS.findFieldIndexesByValue(partClass, 'maxLength:', true)].split(':')[1];
		inCMS.addEvent(textarea, 'onclick', 'MaxLengthCount(o,' + maxLength + ');');
		inCMS.addEvent(textarea, 'onmousemove', 'MaxLengthCount(o,' + maxLength + ');');
		inCMS.addEvent(textarea, 'onfocus', 'MaxLengthCount(o,' + maxLength + ');');
		inCMS.addEvent(textarea, 'onblur', 'MaxLengthCount(o,' + maxLength + ');');
		inCMS.addEvent(textarea, 'onkeyup', 'MaxLengthCount(o,' + maxLength + ');');
		inCMS.addEvent(textarea, 'onchange', 'MaxLengthCount(o,' + maxLength + ');');
		inCMS.addEvent(textarea, 'onafterupdate', 'MaxLengthCount(o,' + maxLength + ');');
		var progressBar = document.createElement('div');
		progressBar.id = textarea.id + '_pBar';
		progressBar.className = 'progressBar';
		textarea.parentNode.appendChild(progressBar);
	}
	/*var focusElements = document.forms[0];
	for (var i = 0; i < focusElements.length; i++) {
		if (focusElements[i].className.indexOf('onloadFocus') != -1) {
			if (!(focusElements[i].readonly || focusElements[i].disabled)) {
				focusElements[i].focus();
				if (focusElements[i].className.indexOf('focusStyle') != -1)
					focusElements[i].select();
			}
			break;
		}
	}*/
	if (typeof (ValidatorUpdateDisplay) != "undefined") {
		var __funcbody, newfunc;
		__funcbody = ValidatorUpdateDisplay.toString();
		__funcbody = __funcbody.substring(__funcbody.indexOf("{") + 1, __funcbody.lastIndexOf("}"));
		newfunc = new Function("val", "ChangeLabelColor(val); " + __funcbody);
		ValidatorUpdateDisplay = newfunc;
	}
}

var isFormActive = false;
forms.showForm = function() { $('.formBox').css('opacity', 1); }
forms.hideForm = function() { $('.formBox').css('opacity', 0.7); }

// Inicializační metoda, spouštěná při načítání modulu
forms.init = function(number) {
	if ($('.infoBox-info').length > 0) { setTimeout(function() { $('.infoBox-info').hide(500); }, 2000); setTimeout(forms.hideForm, 2200); }
	else { forms.hideForm(); }
	$('.formBox .form label').each(function() {
		var initText = $(this).text();
		$(this).next().val(initText).focus(function() {
			if ($(this).val() == initText) { $(this).val(''); }
		}).blur(function() { if ($(this).val() == '') { $(this).val(initText); } }); $(this).hide();
	});
	$(document).click(function(e) {
		if ((e.pageX < $('.formBox').offset().left) || (e.pageX > $('.formBox').offset().left + 263) || (e.pageY < $('.formBox').offset().top) || (e.pageY > $('.formBox').offset().top + 249)) {
			forms.hideForm();
		}
	});
	$('.formBox').click(forms.showForm).mouseover(function() { forms.showForm(); }).mouseout(function() { if (!isFormActive) { forms.hideForm(); } });
	$('.formBox .form input, .formBox .form textarea').focus(function() { isFormActive = true; forms.showForm(); }).blur(function() { isFormActive = false; });
}

forms.validateDefNameSurname = function(oSrc, args) {
	args.IsValid = (args.Value != 'Jméno a příjmení: *');
}

forms.validateDefEmail = function(oSrc, args) {
	args.IsValid = (args.Value != 'E-mail: *');
}

forms.validateOne = function(field) {
	var obj = inCMS.getObj(field);
	var isRequired = false;
	if (obj.className.indexOf('required:') != -1) {
		var partClass = obj.className.split(' ');
		var label = obj.parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
		isRequired = true;
		var okRequired = obj.value != '';
		if (!okRequired) {
			label.className = 'red';
		}
		else {
			label.className = '';
		}
	}
	if (obj.className.indexOf('format:') != -1) {
		var partClass = obj.className.split(' ');
		var type = partClass[inCMS.findFieldIndexesByValue(partClass, 'format:', true)].split(':')[1];
		var label = obj.parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
		var okFormat = true;
		switch (type) {
			case 'date': okFormat = forms.validateDate(obj); break;
			case 'number': okFormat = forms.validateNumber(obj); break;
			case 'fullName': okFormat = forms.validateFullName(obj); break;
			case 'telephone': okFormat = forms.validateTelephone(obj); break;
			case 'email': okFormat = forms.validateEmail(obj); break;
			case 'url': okFormat = forms.validateUrl(obj); break;
		}
		if (!okFormat || (isRequired && !okRequired)) {
			label.className = 'red';
		}
		else {
			label.className = '';
		}
	}
}

forms.validateAll = function(number) {
	var elements = document.forms[0];
	var errorMessage = '';
	for (var i = 0; i < elements.length; i++) {
		var isRequired = false;
		if (elements[i].className.indexOf('required:') != -1) {
			var partClass = elements[i].className.split(' ');
			var index = partClass[inCMS.findFieldIndexesByValue(partClass, 'required:', true)].split(':')[1];
			if (index == number) {
				var label = elements[i].parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
				isRequired = true;
				var okRequired = elements[i].value != '';
				if (!okRequired) {
					label.className = 'red';
					errorMessage += label.innerHTML.replace(': *', '') + ' musí být vyplněn.<br />';
				}
				else {
					label.className = '';
				}
			}
		}
		if (elements[i].className.indexOf('format:') != -1) {
			var partClass = elements[i].className.split(' ');
			var type = partClass[inCMS.findFieldIndexesByValue(partClass, 'format:', true)].split(':')[1];
			var index = partClass[inCMS.findFieldIndexesByValue(partClass, 'format:', true)].split(':')[2];
			if (index == number) {
				var label = elements[i].parentNode.parentNode.getElementsByTagName('th')[0].getElementsByTagName('label')[0];
				var okFormat = true;
				switch (type) {
					case 'date': okFormat = forms.validateDate(elements[i]); break;
					case 'number': okFormat = forms.validateNumber(elements[i]); break;
					case 'fullName': okFormat = forms.validateFullName(elements[i]); break;
					case 'telephone': okFormat = forms.validateTelephone(elements[i]); break;
					case 'email': okFormat = forms.validateEmail(elements[i]); break;
					case 'url': okFormat = forms.validateUrl(elements[i]); break;
				}
				if (!okFormat) {
					errorMessage += label.innerHTML.replace(isRequired ? ': *' : ':', '') + ' není ve správném formátu.<br />';
				}
				if (!okFormat || (isRequired && !okRequired)) {
					label.className = 'red';
				}
				else {
					label.className = '';
				}
			}
		}
	}
	if (errorMessage != '') {
		inCMS.getObj('dhtmlFormError:' + number).innerHTML = errorMessage;
		inCMS.displayObj('dhtmlFormInfo:' + number, false);
		inCMS.displayObj('dhtmlFormError:' + number, true);
	}
	else {
		inCMS.getObj('dhtmlFormInfo:' + number).innerHTML = 'Validace úspěšně dokončena.';
		inCMS.displayObj('dhtmlFormError:' + number, false);
		inCMS.displayObj('dhtmlFormInfo:' + number, true);
	}
}

forms.validateDate = function(obj) {
	var date = obj.value;
	if (date == '') return true;
	var dateField = new Array();
	if (date.indexOf('.') != -1) {
		dateField = date.split('.');
	}
	else {
		dateField = date.split('/');
		dateField[0] = date.split('/')[1];
		dateField[1] = date.split('/')[0];
	}
	var testDate = new Date();
	testDate.setDate(1);
	var ok = true;
	if (dateField.length == 3 && dateField[2].length == 4) {
		testDate.setFullYear(dateField[2]);
		testDate.setMonth(dateField[1] - 1);
		testDate.setDate(dateField[0]);
		if (testDate.getFullYear() != dateField[2] || testDate.getMonth() != dateField[1] - 1 || testDate.getDate() != dateField[0])
			ok = false;
	}
	else ok = false;
	return ok;
}

forms.validateNumber = function(obj) {
	if (obj.value == '') return true;
	var RegExp = /^[\-]{0,1}[0-9]*([\.][0-9]){0,1}[0-9]*$/;
	return (obj.value.search(RegExp) == 0);
}

forms.validateFullName = function(obj) {
	if (obj.value == '') return true;
	var RegExp = /^[a-zA-Zěščřžýáíé]{2,15}([ ]{1}[a-zA-Zěščřžýáíé]{2,20}){1,2}$/;
	return (obj.value.search(RegExp) == 0);
}

forms.validateTelephone = function(obj) {
	if (obj.value == '') return true;
	var RegExp = /^([+]{0,1}[0-9]{9,14}){0,1}$/;
	return (obj.value.search(RegExp) == 0);
}

forms.validateEmail = function(obj) {
	if (obj.value == '') return true;
	var RegExp = /^[_\w\.\-]+@[\w\.-]+\.[a-z]{2,6}$/;
	return (obj.value.search(RegExp) == 0);
}

forms.validateUrl = function(obj) {
	if (obj.value == '') return true;
	var RegExp = /^(http:\/\/){1}$/;
	return (obj.value.search(RegExp) == 0);
}

// ASP.NET Validator
function DoChangeLabelColor(val, lbl) {
	// Find label through naming rule       
	var k, value;
	// Find out all validators associated
	var vals = new Array();
	for (k = 0; k < Page_Validators.length; k++) {
		if (Page_Validators[k].controltovalidate == val.controltovalidate)
			vals.push(Page_Validators[k]);
	}
	//Determine if some validator fails
	value = true;
	for (k = 0; k < vals.length; k++)
		value = (value && vals[k].isvalid);
	// Change label text color
	if (value) {
		lbl.className = lbl.className.replace('red', ' '); // normal color, black
	} else {
		if (lbl.className.indexOf('red') == -1)
			lbl.className += ' red'; // error color, red
	}
}

// Fce na výpočet aktuální velikosti obsahu <textarea>
// parametry: odkaz na daný prvek <textarea>, maximální počet znaků
function MaxLengthCount(fieldObj, fieldMaxLength) {
	if (!MaxLengthLock) {
		MaxLengthLock = true;
		if (fieldObj.value.length > fieldMaxLength) {
			alert('Můžete napsat maximálně ' + fieldMaxLength + ' znaků.');
			fieldObj.value = fieldObj.value.substring(0, fieldMaxLength);
		}
		inCMS.getObj(fieldObj.id + '_pBar').style.width = Math.round(fieldObj.value.length * (fieldObj.offsetWidth / fieldMaxLength)) + 'px';
		MaxLengthLock = false;
	}
}
var MaxLengthLock = false; // pomocný příznak, který signalizuje právě probíhající výpočet

// ASP.NET Validator
function ChangeLabelColor(val) {
	if (val.controltovalidate) {
		if (inCMS.getObj(val.controltovalidate.replace('tbx', 'lbl')) != null && val.controltovalidate.replace('tbx', 'lbl') != val.controltovalidate)
			DoChangeLabelColor(val, inCMS.getObj(val.controltovalidate.replace('tbx', 'lbl')));
		if (inCMS.getObj(val.controltovalidate.replace('ddl', 'lbl')) != null && val.controltovalidate.replace('ddl', 'lbl') != val.controltovalidate)
			DoChangeLabelColor(val, inCMS.getObj(val.controltovalidate.replace('ddl', 'lbl')));
	}
}
