// Menu Glowne

// stale konfigurcyjne
var MENU_TIMEOUT = 700;
var LEVEL_TWO_ID_PREFIX = "Pod";
var LEVEL_ONE_ITEM_LEFT_CLASS = "menuPoziom1PozycjaLewo";
var LEVEL_ONE_ITEM_CENTER_CLASS = "menuPoziom1PozycjaSrodek";
var LEVEL_ONE_ITEM_RIGHT_CLASS = "menuPoziom1PozycjaPrawo";
var LEVEL_ONE_ITEM_ACTIVE_POSTFIX = "Aktywna";
var LEVEL_ONE_ITEM_ORIGINAL_POSTFIX = "Pierwotna";
var LEVEL_ONE_CONTAINER_ID = "kontenerMenuPoziom1"
var LEVEL_TWO_ACTIVE_CLASS = "menuPoziom2Aktywny";
var DEFAULT_ACTIVE_TAB = "MenuGSMService";

// zmienne 
// przechowuje pierwotnie aktywna pozycje
var oOriginalActiveItem; 
// przechowuje identyfikator limitu czasowego
var iTimeoutId;

// funkcja za pomoca klas ustawia wyglad okreslonej pozycji w menu 1 poziomu
function setItemLook(oItem, sPostfix) {
		
		// pobierz elementy skladajace sie na pojedyncza pozycje
		var arDivs = oItem.parentNode.parentNode.getElementsByTagName("div");
		// 0-lewa strona, 1-srodek, 2-prawa strona
		arDivs[0].className = LEVEL_ONE_ITEM_LEFT_CLASS + sPostfix;
		arDivs[1].className = LEVEL_ONE_ITEM_CENTER_CLASS + sPostfix;
		arDivs[2].className = LEVEL_ONE_ITEM_RIGHT_CLASS + sPostfix;
}

// Funkcja pokazuje menu 2 poziomu odpowiadajace pozycji w 1 poziomie.
// Identyfikator menu 2 poziomu powinien byc w formacie: Pod{ID pozycji w menu 2 poziomu}
// np. jezli pozycja w 1 poziomie ma id=Menu3 to odpowiadajace mu menu 2 poziomu 
// powinno miec id=PodMenu3
function showLevelTwo(sLevelTwoId) {
	var oLevelTwo = document.getElementById(LEVEL_TWO_ID_PREFIX + sLevelTwoId);
	oLevelTwo.className = LEVEL_TWO_ACTIVE_CLASS;

	// zdeaktywuj poprzednio widoczne menu 
	// elementy ktore nie maja id to te boczne zaokraglenia wiec je nalezy pominac
	// podobnie nie mozna modyfikowac elementu ktory przed chwila byl ustawiany..
	var arDivs = oLevelTwo.parentNode.getElementsByTagName("div");
	for(var i = 0; i < arDivs.length; i++) {
		if(arDivs[i].id && arDivs[i] != oLevelTwo)
			arDivs[i].className = null;	
	}
}

// Funkcja obslugujaca zdarzenie onmouseover
function levelOneMouseOver(oEvent) {
	// jezeli odliczanie zostalo rozpoczete, anuluj (i samodzielnie zmien wyglad)
	if(typeof iTimeoutId != "undefined")
		clearTimeout(iTimeoutId);
	// ustaw wszystkie pozycje 
	var oEventSrc = getEventSrc(oEvent);
	// zresetuj wszystkie pozycje oprocz tej na ktora najechano mysza
	resetItems(oEventSrc);
	// ustaw wyglad pozycji, ktora byla pierwotnie aktywna (ciemny granat)
	setItemLook(oOriginalActiveItem, LEVEL_ONE_ITEM_ORIGINAL_POSTFIX);
	// ustaw wyglad pozycji, nad ktora najechano mysza czyli jest aktywna
	setItemLook(oEventSrc, LEVEL_ONE_ITEM_ACTIVE_POSTFIX);
	// pokaz menu 2 poziomu odpowiadajace najechanej pozycji
	showLevelTwo(oEventSrc.id);
}

// funkcja uruchamiajaca z opoznieniem przywracanie wygladu pozycji, 
// ktora pierwotnie byla aktywna, po zjechaniu kursorem myszy z innej
function levelOneMouseOut(oEvent) {
		var oEventSrc = getEventSrc(oEvent);
		iTimeoutId = setTimeout(function() { 
			setItemLook(oEventSrc, "");
			setItemLook(oOriginalActiveItem, LEVEL_ONE_ITEM_ACTIVE_POSTFIX); 
			showLevelTwo(oOriginalActiveItem.id);	
		}, MENU_TIMEOUT);	
}

// funkcja anuluje odliczanie opoznionego przywracania pierwotnego wygladu
// wywolywana jest gdy menu 2 poziomu zostanie najechane kursorem
function levelTwoMouseOver(oEvent) {
	if(typeof iTimeoutId != "undefined")
		clearTimeout(iTimeoutId);
}


// funkcja uruchamiajaca z opoznieniem przywracanie wygladu pozycji, 
// ktora pierwotnie byla aktywna, po zjechaniu kursorem z menu 2 poziomu
function levelTwoMouseOut(oEvent) {
		iTimeoutId = setTimeout(function() { 
			resetItems(oOriginalActiveItem);
			setItemLook(oOriginalActiveItem, LEVEL_ONE_ITEM_ACTIVE_POSTFIX); 
			showLevelTwo(oOriginalActiveItem.id);	
		}, MENU_TIMEOUT);	
}

// deaktywuj wszystkie pozycje oprocz przekazanej jako parametr
function resetItems(oOmittedItem) {
	var oLevelOne = document.getElementById(LEVEL_ONE_CONTAINER_ID);	
	var arLevelOneItems = oLevelOne.getElementsByTagName("a");
	for(var i = 0; i < arLevelOneItems.length; i++) {
		if(arLevelOneItems[i] != oOmittedItem)
			setItemLook(arLevelOneItems[i], "");
	}
}

// aktywuj menu glowne - paramtrem jest id pozycji ktora ma byc aktywna (pierwotnie aktywna!!)
function activateMainMenu(sOriginalActiveItem) {
	if(!sOriginalActiveItem)
		sOriginalActiveItem = DEFAULT_ACTIVE_TAB;
	var oLevelOne = document.getElementById(LEVEL_ONE_CONTAINER_ID);	
	// punktem odniesienia w kazdej pozycji jest link w srodku
	var arLevelOneItems = oLevelOne.getElementsByTagName("a");
	// dodaj obsluge zdarzen do wszystkich pozycji
	for(var i = 0; i < arLevelOneItems.length; i++) {
		// zdarzenia zwiazane z poszczegolnymi pozycjami w Poziomie 1
		addEventHandler(arLevelOneItems[i], "mouseover", levelOneMouseOver);
		addEventHandler(arLevelOneItems[i], "mouseout", levelOneMouseOut);
		
		// zdarzenia zwiazane z Poziomem 2 odpowiadajacym powyzej ustawianej pozycji
		var oLevelTwo = document.getElementById(LEVEL_TWO_ID_PREFIX + arLevelOneItems[i].id);
		addEventHandler(oLevelTwo, "mouseover", levelTwoMouseOver);
		addEventHandler(oLevelTwo, "mouseout", levelTwoMouseOut);
	}
	
	// zapamietaj pozycje ktora ma byc aktywna
	oOriginalActiveItem = document.getElementById(sOriginalActiveItem);
	// i nadaj jej odpowiedni wyglad
	setItemLook(oOriginalActiveItem, LEVEL_ONE_ITEM_ACTIVE_POSTFIX);
	showLevelTwo(sOriginalActiveItem)
}

