﻿// Společná knihovna

// Fce vrátí html prvek
// parametry: ID nebo prvek
function getObj (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ů, jejichž className obsahuje zadaný řetězec
// parametry: název prvku (možno použít *), podřetězec className
function getElementsByClass (t,c) {
	var tempField = new Array();
	var elements = document.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 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)
function addEventx (obj,e,s) {
	var o = getObj(obj);
	if (!o) return;
	eval('var oldEvent = o.' + e + ';');
	eval('o.' + e + ' = function (' + (browser.IE ? '' : 'event') + ') { ' + (oldEvent ? 'oldEvent();' : '') + s + ' };');
	}

// Fce přidá skript navázaný na definovanou událost všem html 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
function addEventByClass (t,c,e,s) {
	var elements = document.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			addEventx(elements[i],e,s);
			}
		}
	}

// Fce nahradí chybějící podporu css pseudotřídy :hover pro IE6- všem html prvkům, jejichž className obsahuje zadaný řetězec
// parametry: název prvku (možno použít *), podřetězec className
function hoverByClass (t,c) {
	if (browser.IE6) {
		var elements = document.getElementsByTagName(t);
		for (var i=0; i<elements.length; i++) {
			if (elements[i].className.indexOf(c) != -1) {
				addEventx(elements[i],'onmouseover','o.className += \' hover\';');
				addEventx(elements[i],'onmouseout','o.className = o.className.replace(\' hover\',\'\');');
				}
			}
		}
	}

// Fce nastaví html prvku css styl
// parametry: ID nebo prvek, 'vlastnost', 'hodnota'
function setObjStyle (obj,prop,val) {
	var o = 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'
function getObjStyle (obj,prop) {
	var o = 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'
function setObjStyleByClass (t,c,prop,val) {
	var elements = document.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			setObjStyle(elements[i],prop,val);
			}
		}
	}

// Fce změní className všem html prvkům, jejichž className obsahuje zadaný řetězec
// parametry: název prvku (možno použít *), podřetězec className, nová hodnota className
function changeObjClass (t,c,new_c) {
	var elements = document.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			elements[i].className = new_c;
			}
		}
	}

// Fce na zobrazení/zneviditelnění html prvku
// parametry: ID nebo prvek, zobrazení - true/false
function showObj (obj,on) {
	return 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)
function displayObj (obj,on,type) {
	if (on && !type) type = 'block';
	return 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
function cloneObj (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 vrátí pole indexů, na kterých se v zadaném poli vyskytuje zadaná hodnota
// parametry: pole, hodnota
function findFieldIndexesByValue (field,value) {
	var fieldIndexes = new Array();
	for (var i=0; i<field.length; i++) {
		if (field[i] == value) {
			fieldIndexes.length++;
			fieldIndexes[fieldIndexes.length-1] = i;
			}
		}
	return fieldIndexes;
	}

// Fce vrátí hodnotu zadaného parametru z url
// použití: hodnota = getParamsFromUrl(self.window)['parametr']
// parametry: odkaz na dané okno
function getParamsFromUrl (win) {
	var field  = win.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;
	}

// 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);
			}
		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

// Objekt pro práci s popup okny
var popup = {
	// Odkaz na popup okno otevřené metodou open()
	win : null,
	// Metoda na otevření nového popup okna (pokud takto otevřené okno již existuje, dojde k jeho přepsání)
	// parametry: escape(url), šířka okna, výška okna, posuvníky a proměnná velikost okna - true/false
	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(unescape(src),'',p);
		this.win.focus();
		return false;
		},
	// Metoda na zpětné spuštění kódu v rodičovském okně z popup okna
	// parametry: programový kód zapsaný jako text
	callBack : function (programCode) {
		eval(programCode);
		},
	// 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 getObj(x);
		}
	};


// Objekt na detekci prohlížeče
var 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 (browser.opera) {
	for (var property in browser) {
		if (property != 'opera') 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
function getPageCoords (obj) {
	var element = 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 aktuálnímu html prvku (každý prohlížeč může vracet jiné)
// použití: x = whereXY(event).offsetX
// parametry: event
function whereXY (e) {
	if (typeof e.offsetX == "undefined") { var evtOffsets = getOffsets(e) }
	else { var evtOffsets = { offsetX : e.offsetX, offsetY : e.offsetY } }
	return evtOffsets;
}
// Pomocná fce pro fci whereXY()
function getOffsets (e) {
	var target = e.target;
	if (typeof target.offsetLeft == "undefined") { target = target.parentNode }
	var pageCoords = getPageCoords (target);
	var eventCoords = { x : window.pageXOffset + e.clientX, y : window.pageYOffset + e.clientY }
	var offsets = { offsetX : eventCoords.x - pageCoords.x, offsetY : eventCoords.y - pageCoords.y }
	return offsets;
}

//change css
function changecss(theClass,element,value) {
	//Last Updated on May 21, 2008
	//documentation for this script at
	//http://www.shawnolson.net/a/503/altering-css-class-attributes-with-javascript.html
	 var cssRules;
	 if (document.all) {
	  cssRules = 'rules';
	 }
	 else if (document.getElementById) {
	  cssRules = 'cssRules';
	 }
	 var added = false;
	 for (var S = 0; S < document.styleSheets.length; S++){
	  for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
	   if (document.styleSheets[S][cssRules][R].selectorText == theClass) {
	    if(document.styleSheets[S][cssRules][R].style[element]){
	    document.styleSheets[S][cssRules][R].style[element] = value;
	    added=true;
		break;
	    }
	   }
	  }

	  if(!added){
	  if(document.styleSheets[S].insertRule){
			  document.styleSheets[S].insertRule(theClass+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length);
			} else if (document.styleSheets[S].addRule) {
				document.styleSheets[S].addRule(theClass,element+': '+value+';');
			}
	  }
	 }
	}