/*custom uprava na radku 283 */

function PREFS_MANAGER() {
	this.global = new GLOBAL_PREFS();
	this.menu = new Array();
	this.subm = new Array();
	this.item = new Array();
	/* metody */
	this.addMenu = addMenu;
	this.addSubmenu = addSubmenu;
	this.addItem = addItem;
	this.getPref = getPref;
	this._getPref = _getPref;
}

/* specificke metody pro PREFS_MANAGER */
function addMenu(id) {
	this.menu[id] = new MENU_PREFS(id);
}
function addSubmenu(id) {
	this.subm[id] = new SUBMENU_PREFS(id);
}
function addItem(id) {
	this.item[id] = new ITEM_PREFS(id);
}
function getPref(el, pref_name) {
	var isRootChild = false;
	if(containsClass(el, this.global.prefs['subm_CN']) && containsClass(gParentMenu(el), this.global.prefs['menu_CN'])) {
		isRootChild = true;
	}
	var pref_value;
	pref_value = this._getPref(this.global, pref_name, pref_value, isRootChild);
	pref_value = this._getPref(this.menu[gParentRootMenuOrSelf(el).id], pref_name, pref_value, isRootChild);
	pref_value = this._getPref(this.subm[el.id], pref_name, pref_value);
	pref_value = this._getPref(this.item[el.id], pref_name, pref_value);
	return pref_value;
}
function _getPref(prefObj, pref_name, pref_value, isRootChild) {
	if(prefObj) {
		if(prefObj.prefs[pref_name]) pref_value = prefObj.prefs[pref_name];
		if(isRootChild) {
			if(prefObj.prefs['root'][pref_name]) pref_value = prefObj.prefs['root'][pref_name];
		}
	}
	if(pref_value==null) pref_value = 0;
	return pref_value;
}

/* objekt GLOBAL_PREFS */
function GLOBAL_PREFS() {
	this.prefs = new Array();
	this.prefs['menu_element_name'] = new Array();
	this.prefs['root'] = new Array();
	this.prefs['p_vert'] = 'Top';
	this.prefs['p_horiz'] = 'Right';
	this.prefs['c_vert'] = 'Top';
	this.prefs['c_horiz'] = 'Left';
	this.prefs['o_vert'] = 0;
	this.prefs['o_horiz'] = 0;
	this.temps = new Array();
	/* metody */
	this.setElNames = setElNames;
	this.setClassNames = setClassNames;
	this.setCloseTimeout = setCloseTimeout;
	
	this.setOpenOnclick = setOpenOnclick;
	this.setPosition = setPosition;
	this.setPositionRoot = setPositionRoot;
}

/* specificke metody pro GLOBAL_PREFS */
function setElNames() {
	this.prefs['menu_element_name'] = setElNames.arguments;
}
function setClassNames(menu_CN, subm_CN, item_CN, active_CN) {
	this.prefs['menu_CN'] = menu_CN;
	this.prefs['subm_CN'] = subm_CN;
	this.prefs['item_CN'] = item_CN;
	this.prefs['active_CN'] = active_CN;
}
function setCloseTimeout(timeout) {
	this.prefs['close_timeout'] = timeout;
}

/* objekt MENU_PREFS */
function MENU_PREFS(id) {
	this.id = id;
	this.prefs = new Array();
	this.prefs['root'] = new Array();
	/* metody */
	this.setOpenOnclick = setOpenOnclick;
	this.setPosition = setPosition;
	this.setPositionRoot = setPositionRoot;
}

/* objekt SUBMENU_PREFS */
function SUBMENU_PREFS(id) {
	this.id = id;
	this.prefs = new Array();
	/* metody */
	this.setPosition = setPosition;
}

/* objekt ITEM_PREFS */
function ITEM_PREFS(id) {
	this.id = id;
	this.prefs = new Array();
	/* metody */
	this.setOpenOnclick = setOpenOnclick;
}

/* metody pro GLOBAL_PREFS, MENU_PREFS, SUBMENU_PREFS a ITEM_PREFS */
function setOpenOnclick(is_clickable) {
	this.prefs['open_onclick'] = is_clickable;
}
function setPosition(p_vert, p_horiz, c_vert, c_horiz, o_vert, o_horiz) {
	this.prefs['p_vert'] = p_vert;
	this.prefs['p_horiz'] = p_horiz;
	this.prefs['c_vert'] = c_vert;
	this.prefs['c_horiz'] = c_horiz;
	this.prefs['o_vert'] = o_vert;
	this.prefs['o_horiz'] = o_horiz;
	if(this.setPositionRoot && this.prefs['root'].length==0) {
		this.setPositionRoot(p_vert, p_horiz, c_vert, c_horiz, o_vert, o_horiz);
	}
}
function setPositionRoot(p_vert, p_horiz, c_vert, c_horiz, o_vert, o_horiz) {
	this.prefs['root']['p_vert'] = p_vert;
	this.prefs['root']['p_horiz'] = p_horiz;
	this.prefs['root']['c_vert'] = c_vert;
	this.prefs['root']['c_horiz'] = c_horiz;
	this.prefs['root']['o_vert'] = o_vert;
	this.prefs['root']['o_horiz'] = o_horiz;
}

/*=======================INICIALIZACE===============================*/
/* hleda vsechny elementy s tagName, ktere mohou byt item a submenu */
function DM_init() {
	
	if(document.getElementById && document.documentElement) {//podminka pro odstrizeni starsich prohlizecu - promyslet!
		var i;
		for(i=0; i<PM.global.prefs['menu_element_name'].length; i++) {
			var elName = PM.global.prefs['menu_element_name'][i];
			var elems = gEBTN(elName);
			checkElems(elems);
		}
	}
}
/* posila k registraci udalosti prislusne elementy item */
function checkElems(elems) {
	var i;
	for(i=0; i<elems.length; i++) {
		if(containsClass(elems[i], PM.global.prefs['subm_CN'])) {
			registerSubmHandlers(elems[i]);
			registerOpenItemHandlers(gParentItem(elems[i]));
		}
		if(containsClass(elems[i], PM.global.prefs['item_CN'])) {
			registerTargetItemHandlers(elems[i]);
		}
	}
}
/* registrace udalosti submenu */
function registerSubmHandlers(subm) {
	subm.onmouseover = stopSubm;
	subm.onmouseout = stopSubm;

}
/* registrace vsech udalosti polozek, ktere oteviraji submenu */
function registerOpenItemHandlers(item) {
	if(!item) return;
	item.onmouseover = activateOpenItem;
	item.onmouseout = deactivateItem;
	var itemAnchor = gEBTN('a', item)[0];
	itemAnchor.onclick = clickOnItemAnchor;
}
/* registrace vsech udalosti polozek, ktere jsou koncovym odkazem */
function registerTargetItemHandlers(item) {
	if(!item) return;
	if(!item.onmouseover) item.onmouseover = activateTargetItem;
	item.onmouseout = deactivateItem;
}

/*==============ovladace==============*/
/* ovladac pro mouseover i mouseout submenu, pouze zastavuje udalost */
function stopSubm(e) {
	stopProp(e, window.event);
}
/* mouseover ovladac pro items, ktere obsahuji submenu */
function activateOpenItem(e) {
	var item = activateItem(e, window.event);
	//changeImageOver(item);//custom uprava
	var menu = gNextElem(gEBTN('a', item)[0]);
	PM.global.temps['active_menu'] = menu;
	openMenu(menu);
}
/* mouseover ovladac pro items, ktere jsou koncovym odkazem */
function activateTargetItem(e) {
	var item = activateItem(e, window.event);
	//changeImageOver(item);//custom uprava
	var menu = gParentMenu(item);
	PM.global.temps['active_menu'] = menu;
}
/* mouseout ovladadac pro vsechny items */
function deactivateItem(e) {
	PM.global.temps['close_timeout'] = window.setTimeout('closeSubTree()', PM.global.prefs['close_timeout']);
	//var item = gParentItem(gTarget(e, window.event));
	//changeImageOut(item);
	stopProp(e, window.event);
}
/* ovladac onclick u item anchoru */
function clickOnItemAnchor(e) {
	var item = gParentItem(gTarget(e, window.event));
	if(!PM.getPref(item, 'open_onclick')) return false;
}

/*=====POMOCNE FCE PRO OVLADACE====*/
/* zajistuje aktivaci itemu */
function activateItem(e, eIE) {
	window.clearTimeout(PM.global.temps['close_timeout']);
	var item = gParentItemOrSelf(gTarget(e, eIE));
	stopProp(e, eIE);
	focusMenu();//funkce pro zacatek aktivity menu
	if(item == PM.global.temps['active_item']) return item;
	if(PM.global.temps['active_item']) removeClass(PM.global.temps['active_item'], PM.global.prefs['active_CN']);
	addClass(item, PM.global.prefs['active_CN']);
	PM.global.temps['active_item'] = item;
	closeSubTree(gParentMenu(item));
	focusMenu();//funkce pro zacatek aktivity menu
	clearTimeout(PM.global.temps['blur_menu']);
	return item;
}
/* zavira vsechna menu v subtree az po nove aktivni menu */
function closeSubTree(newActiveMenu) {
	if(!PM.global.temps['active_menu'] || PM.global.temps['active_menu']==newActiveMenu) return;
	var menu = PM.global.temps['active_menu'];
	while(menu!=newActiveMenu && !containsClass(menu, PM.global.prefs['menu_CN'])) {
		closeMenu(menu);
		menu = gParentMenu(menu);
	}
	PM.global.temps['active_menu'] = menu;
	if(containsClass(PM.global.temps['active_menu'], PM.global.prefs['menu_CN'])) {
		removeClass(PM.global.temps['active_item'], PM.global.prefs['active_CN']);//odebrani active class u root menu item
		PM.global.temps['blur_menu'] = setTimeout('blurMenu()', PM.global.prefs['close_timeout'])//funkce pro ukonceni aktivity menu
	}
}
/* otevira prislusne submenu */
function openMenu(menu) {
	setMenuPosition(menu);
	menu.style.visibility = 'visible';
}
/* zavira prislusne submenu */
function closeMenu(menu) {
	var item = gParentItem(menu);
	removeClass(item, PM.global.prefs['active_CN']);
	menu.style.visibility = 'hidden';
}
/* nastavuje pozici submenu */
function setMenuPosition(menu) {
	var item = gParentItem(menu);
	var parentMenu = gParentMenu(menu);
	
	/* presety */
	var PRV = PM.getPref(menu, 'p_vert');
	var PRH = PM.getPref(menu, 'p_horiz');
	var CRV = PM.getPref(menu, 'c_vert');
	var CRH = PM.getPref(menu, 'c_horiz');
	var POV = PM.getPref(menu, 'o_vert');
	var POH = PM.getPref(menu, 'o_horiz');
	
	/* spocitani pozic rohu parent item */
	var itemTop = item.offsetTop;
	var itemBottom = itemTop + item.offsetHeight;
	var itemLeft = item.offsetLeft;
	var itemRight = itemLeft + item.offsetWidth;
	
	/* sirka a vyska child menu */
	var menuWidth = menu.offsetWidth;
	var menuHeight = menu.offsetHeight;
	
	var parentT, childT, parentL, childL;
	(PRV=='Top') ? parentT = itemTop : parentT = itemBottom;
	(CRV=='Top') ? childT = 0 : childT = -menuHeight;
	(PRH=='Left') ? parentL = itemLeft : parentL = itemRight;
	(CRH=='Left') ? childL = 0 : childL = -menuWidth;
	
	var TOP = parentT + childT + POV;
	var LEFT = parentL + childL + POH;
	
	
	/* posunuti na urcenou posici */
	if(parentMenu.className=='DM-menu' && !document.body.innerText){//specialne pro ptas - neni univerzaln!!!
		menu.style.top = TOP+72+'px';
		menu.style.left = LEFT+fromLeft-4+'px';
	} else {
		menu.style.top = TOP+'px';
		menu.style.left = LEFT+'px';
	}
}

/*=====FUNKCE aktivujici se na zacatku a konci aktivni prace menu====*/
function focusMenu() {
	cSV(false);
	cFV(false);
	
	function cSV(show) {
		changeSelectsVisibility(show);
	}
	function cFV(show) {
		changeFlashesVisibility(show);
	}
	/* sem lze pridat dalsi funkce */
}

function blurMenu() {
	cSV(true);
	cFV(true);
	
	function cSV(show) {
		changeSelectsVisibility(show);
	}
	function cFV(show) {
		changeFlashesVisibility(show);
	}
	/* sem lze pridat dalsi funkce */
}
function changeSelectsVisibility(show) {//skryva/odkryva vsechny selecty ve formech
	var selects = gEBTN('select');
	var vis;
	(show) ? vis = 'visible' : vis = 'hidden';
	for(i=0; i<selects.length; i++) {
		selects[i].style.visibility = vis;
	}
}

function changeFlashesVisibility(show) {//skryva/odkryva vsechny flashe
	var objects = gEBTN('object');
	var vis;
	(show) ? vis = 'visible' : vis = 'hidden';
	for(i=0; i<objects.length; i++) {
		objects[i].style.visibility = vis;
	}
}

/*=====POMOCNE FCE/specificke=====*/
/* vraci nejblizsi parent menu elementu, pokud element neni sam root menu */
function gParentMenu(el) {
	if(containsClass(el, PM.global.prefs['menu_CN'])) return null;//pokud je element jiz sam root menu, vraci se false
	var parent = gParent(el);
	while(!containsClass(parent, PM.global.prefs['menu_CN']) && !containsClass(parent, PM.global.prefs['subm_CN'])) {
		if(parent==document) return null;
		parent = gParent(parent);
	}
	return parent;
}
/* vraci nejblizsi parent menu elementu, nebo sebe sama, pokud je menu elementem */
function gParentMenuOrSelf(el) {
	if(containsClass(el, PM.global.prefs['menu_CN']) || containsClass(el, PM.global.prefs['subm_CN'])) return el;
	return gParentMenu(el);
}
/* vraci root menu element nebo sebe sama, pokud je root menu elementem */
function gParentRootMenuOrSelf(el) {
	var parent = el;
	while(!containsClass(parent, PM.global.prefs['menu_CN'])) {
		if(parent==document) return null;
		parent = gParentMenu(parent);
	}
	return parent;
}
/* vraci nejblizsi parent item elementu, pokud element neni sam root menu */
function gParentItem(el) {
	if(containsClass(el, PM.global.prefs['menu_CN'])) return null;//pokud je element jiz sam root menu, vraci se null
	var parent = gParent(el);
	while(!containsClass(parent, PM.global.prefs['item_CN'])) {
		if(parent==document) return null;
		parent = gParent(parent);
	}
	return parent;
}
/* vraci nejblizsi parent item elementu, nebo sebe sama, pokud je item elementem */
function gParentItemOrSelf(el) {
	if(containsClass(el, PM.global.prefs['item_CN'])) return el;
	return gParentItem(el);
}
/* vraci nejblizsi element predka daneho jmena, nebo sebe sama */
function gAncestorOrSelf(el, name) {
	if(el.tagName == name) return el;
	ancestor = el;
	while(ancestor.tagName != name) {
		ancestor = gParent(ancestor);
		if(ancestor==document) return null;
	}
	return ancestor;
}

/*==========POMOCNE FCE/obecne=============*/
/* vraci kolekci elementu dle jmena */
function gEBTN(name, el) {
	if(document.getElementsByTagName) {
		if(!el) el = document;
		return el.getElementsByTagName(name);
	} else if(document.all) {
		if(!el) {
			return document.all.tags(name);
		} else {
			var tags = new Array();
			return getTagsFromChildren(name, el, tags);
		}
	}
}
/* pomocna fce pro fci gEBTN pro IE4 - pridava do kolekce tagu vsechny tagy daneho jmena z kolekce children, rekurzivne */
function getTagsFromChildren(name, el, tags) {
	var children = el.children;
	for(i=0; i<children.length; i++) {
		if(children[i].tagName==name) tags[tags.length] = children[i];
		tags = getTagsFromChildren(name, children[i], tags);
	}
	return tags;
}
/* vraci kolekci detskych elementu */
function gChildren(el) {
	if(el.childNodes) {//W3C
		return el.childNodes;
	} else if(el.children) {//IE4
		return el.children;
	} else {
		return null;
	}
}
/* vraci rodicovsky element */
function gParent(el) {
	if(!el) return false;
	if(el==document) return null;
	if(el.parentNode) {//W3C
		return el.parentNode;
	} else if(el.parentElement) {//IE4
		return el.parentElement;
	} else {
		return null;
	}
}
/* vraci element, ze ktereho pochazi udalost */
function gTarget(e, eIE) {
	if(e) {//W3C
		return e.currentTarget;
	} else if(eIE) {//IE
		return event.srcElement;
	}
}
/* vraci nasledujici element (jako nextSibling, ale pouze element) */
function gNextElem(el) {
	var nextElem = el.nextSibling;
	if(!nextElem) return false;
	while(nextElem.nodeType != 1) {
		nextElem = nextElem.nextSibling;
		if(!nextElem) return false;
	}
	return nextElem;
}
/* zamezuje probulani udalosti */
function stopProp(e, eIE) {
	if(e) {//W3C
		e.stopPropagation();
	} else if(eIE) {//IE
		eIE.cancelBubble = true;
	}
}
/* vraci true, pokud string className obsahuje prislusne jmeno tridy (pokud je jich vice) */
function containsClass(el, className) {
	if(!el) return false;
	if(!el.className) return false;
	var subNames = el.className.split(' ');
	for(i=0; i<subNames.length; i++) {
		if(subNames[i]==className) return true;
	}
	return false;
}
/* pridava class do className */
function addClass(el, className) {
	if(!containsClass(el, className)) {
		el.className += ' '+className;
		return el.className;
	}
	return false;
}
/* odebira class z className */
function removeClass(el, className) {
	if(containsClass(el, className)) {
		var subNames = el.className.split(' ');
		var newClassName = '';
		var i;
		for(i=0; i<subNames.length; i++) {
			if(subNames[i] != className) newClassName += subNames[i];
			if(i==subNames.length-1) newClassName += ' ';
		}
		el.className = newClassName;
		return newClassName;
	}
	return false;
}

var overIds = new Array('prazska_teplarenska', 'soustava_zasobovani_teplem', 'produkty_a_sluzby', 'projekty', 'tiskove_centrum', 'kariera', 'kontakty', 'odkazy');

function changeImageOver(item) {
	var over = false;
	for(i=0; i<overIds.length; i++) {
		if(item.id==overIds[i]) over = true;
	}
	if(over) item.firstChild.src = 'img/up_wArrow_over.gif';
}

function changeImageOut(item) {
	var out = false;
	for(i=0; i<overIds.length; i++) {
		if(item.id==overIds[i]) out = true;
	}
	if(out) item.firstChild.src = 'img/up_wArrow.gif';
}

