var headerAjaxRequest = null;
var footerAjaxRequest = null;
var logoBoxAjaxRequest = null;
var dynamicMenuAjaxRequest = null;
var headerDivId = null;
var footerDivId = null;
var logoBoxDivId = null;
var dynamicMenuDivId = null;
var dynamicMenuUrl = null;
var dynamicMenuFlashUrl = null;


/************************** Funkcje 'publiczne'*******************************/


/** PGU - 07.05.2010
 * Rejestruje listener (funkcje), ktora zostanie odpalona z chwila zaladowania strony.
 * Potrzebne w sytuacji, kiedy trzeba uruchomic wiecej niz jedna funkcje w momencie zaladowaniu strony.
 * Przypisanie window.onload=function(){} NADPISUJE poprzednio zarejestrowane funkcje.
 * vide: min. template bareWithAutoRes
**/
function registerOnWindowLoadListener(fun){
    if (window.addEventListener) // W3C standard
    {
        window.addEventListener('load', fun, false); // NB **not** 'onload'
    } 
    else if (window.attachEvent) // Microsoft
    {
        window.attachEvent('onload', fun);
    }
}

/**
 * Pobiera naglowek strony ze wskazanego adresu i umieszcza go we wskazanym
 * obszarze.
 * @param divId - id div'a, w ktorym umieszczona ma byc pobrana tresc naglowka
 * @param headerUrl - adres, z ktorego pobrana ma byc tresc naglowka
 */
function includeHeader(divId, headerUrl){
    headerDivId = divId;
    headerAjaxRequest = createRequest();
    ajaxReq(true, headerPartCallback, headerUrl, headerAjaxRequest);
}

/**
 * Pobiera stopke strony ze wskazanego adresu i umieszcza go we wskazanym
 * obszarze.
 * @param divId - id div'a, w ktorym umieszczona ma byc pobrana tresc stopki
 * @param headerUrl - adres, z ktorego pobrana ma byc tresc stopki
 */
function includeFooter(divId, footerUrl){
    footerDivId = divId;
    footerAjaxRequest = createRequest();
    ajaxReq(true, footerPartCallback, footerUrl, footerAjaxRequest);
}

/**
 * Pobiera logo box strony ze wskazanego adresu i umieszcza go we wskazanym
 * obszarze.
 * @param divId - id div'a, w ktorym umieszczona ma byc pobrana tresc naglowka
 * @param headerUrl - adres, z ktorego pobrana ma byc tresc naglowka
 */
function includeLogoBox(divId, logoBoxUrl, loginUrl, logoutUrl){
	oxmlhttp = null;
	try{
		oxmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			oxmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(e){
			try{
				oxmlhttp = new XMLHttpRequest();
				if(oxmlhttp.overrideMimeType){
					oxmlhttp.overrideMimeType("text/xml");
				}
			}catch(e){
				return;
			}
		}
	}
	if(!oxmlhttp){
		return;
	}
	try{
		logoBoxAddress = logoBoxUrl+"?action=getuserinfo&loginUrl="+loginUrl+"&logoutUrl="+logoutUrl;
		oxmlhttp.open("GET", logoBoxAddress, false);
		oxmlhttp.setRequestHeader("Content-Type", "text/html; charset=utf-8");
		oxmlhttp.send(null);
	}catch(e){
		return;
	}
	
	document.getElementById(divId).innerHTML = oxmlhttp.responseText;
}

function includeLogoBoxById(divId, logoBoxUrl, systemId, zone){
	oxmlhttp = null;
	try{
		oxmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			oxmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(e){
			try{
				oxmlhttp = new XMLHttpRequest();
				if(oxmlhttp.overrideMimeType){
					oxmlhttp.overrideMimeType("text/xml");
				}
			}catch(e){
				return;
			}
		}
	}
	if(!oxmlhttp){
		return;
	}
	try{
		logoBoxAddress = logoBoxUrl+"?action=getuserinfo&system="+systemId;
		if (typeof zone != "undefined")
			logoBoxAddress += "&zone="+zone;

		//gdzie przekierowac po pomyslnym zalogowaniu
		var currentPageUrl = document.URL;
		logoBoxAddress += "&targetUrl="+currentPageUrl; 

		oxmlhttp.open("GET", logoBoxAddress, false);
		oxmlhttp.setRequestHeader("Content-Type", "text/html; charset=utf-8");
		oxmlhttp.send(null);
	}catch(e){
		return;
	}
	
	document.getElementById(divId).innerHTML = oxmlhttp.responseText;
}

/**
 * Pobiera dynamiczne menu ze wskazanego adresu i umieszcza je we wskazanym
 * obszarze.
 * @param divId - id div'a, w ktorym umieszczona ma byc pobrana tresc naglowka
 * @param menuUrl - adres, z ktorego pobrana ma byc tresc menu
 * @param itemId - identyfikator elementu, ktory ma sie pojawic jako otwarty
 * @param flashURL - URL flasha do podmiany liter
 */
function includeDynamicMenu(divId, menuUrl, itemId, flashUrl, zone) {
	dynamicMenuDivId = divId;
	dynamicMenuUrl = menuUrl;
	dynamicMenuFlashUrl = flashUrl;
	dynamicMenuAjaxRequest = createRequest();
	var url = typeof itemId == "undefined" ? dynamicMenuUrl
		: appendParams(dynamicMenuUrl, new Array({name: "open", value: itemId}));
	if (typeof zone != "undefined")
		url = appendParams(url, new Array({name: "zone", value: zone}));
	ajaxReq(true, dynamicMenuCallback, url, dynamicMenuAjaxRequest);
}

function dynamicMenuClicked(itemId, href) {
	var params = new Array({name: "open", value: itemId});
	var redirect = href != '' && href != '#';
	if (redirect)
		params.push({name: "noOutput", value: true});
	var url = appendParams(dynamicMenuUrl, params);
	var req = createRequest();
	ajaxReq(false, new Function(), url, req);
	if (redirect)
		document.location.href = href;
	else {
		document.getElementById(dynamicMenuDivId).innerHTML =
			req.responseText;
		replaceMenuText();
	}
}

//dodane 02.09.09
function markLastMenuElement(){		
	var element = document.getElementById('mainMenu');
	if ((element != null) && (typeof element!= "undefined")) {
		var li=element.lastChild;
		if(li.nodeName == "#text"){  // HAK. W FF czasami lastChild'em byl jakis dziwny element #text. Jezeli sie na niego natknelismy to przeskakujemy o jeden wczesniej... */%>
			li = li.previousSibling;	
		}
		li.className='last';
	}
}
/*************************** Funkcje 'prywatne' ******************************/
/**
  * Tworzy instancje XMLHttpRequest w zaleznosci od przegladarki
  */
function createRequest(){
    if (window.XMLHttpRequest) {	
        ajaxRequest = new XMLHttpRequest();
        if(ajaxRequest.overrideMimeType){
            ajaxRequest.overrideMimeType("text/html");
        }
    } else if (window.ActiveXObject) {
	    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } else return null; 

    return ajaxRequest;
}

/**
  * Wykonuje zapytanie http metode GET.
  * @param asynchronous - czy wykoanie asynchroniczne
  * @param callback - wskaznik na funkcje obslugujaca odpowiedz
  * @param url - adres zasobu
  * @ajaxRequest - XMLHttpRequest
  */
function ajaxReq(asynchronous, callback, url, ajaxRequest){
    ajaxRequest.open("GET", url, asynchronous);
    ajaxRequest.onreadystatechange = callback;
    ajaxRequest.send(null);
}

/**
 * Koduje do URI encoding i dokleja parametry do URL-a.
 * @param url - oryginalny URL
 * @param params - parametry do doklejenia
 */
function appendParams(url, params) {
	var ret = url;
	var separator = (url.indexOf('?') == -1) ? '?' : '&';
	for (var i=0; i<params.length; i++) {
		var param = params[i];
		ret += separator + param.name + '='
			+ encodeURIComponent(param.value);
		separator = '&';
	}
	return ret;
}

/**
  * Wypelnia wskazany obszar strony trescia zwrocona w odpowiedzi na
  * wyslane zadanie.
  * @param ajaxRequest - XMLHttpRequest, wyslane zadanie
  * @param divId - identyfikator warstwy css wypelnianej trescia przeslana
  *                w odpowiedzi na ajaxRequest
  */
function fillPagePart(ajaxRequest, divId){
    if (ajaxRequest && ajaxRequest.readyState == 4) {
        var status = "";
        try{
            status = ajaxRequest.status;
        }catch(e){
            return false;
        }

        if (status == 200 || status == 0 ) {
            document.getElementById(divId).innerHTML = ajaxRequest.responseText;
	    markLastMenuElement();
            return true;
        }
        return false;
    }
}

function replaceMenuText() {
//    if (typeof sIFR == "function"){
//   	sIFR.replaceElement(".nawTopA", 	named({sFlashSrc: dynamicMenuFlashUrl, sColor: "#4a0c76", sWmode: "transparent"}));
//	sIFR.replaceElement(".nawTopAActive", 	named({sFlashSrc: dynamicMenuFlashUrl, sColor: "#FFFFFF", sWmode: "transparent"}));								
//    }
}

/*****************************************************************************/

function headerPartCallback(){
    fillPagePart(headerAjaxRequest, headerDivId);
}
function footerPartCallback(){
    fillPagePart(footerAjaxRequest, footerDivId);
}
function dynamicMenuCallback() {
	if (fillPagePart(dynamicMenuAjaxRequest, dynamicMenuDivId)) {
		var container = document.getElementById('nawigacjaTop');
		if (container == undefined)
			container = document.getElementById('nawigacjaTopPortal');
		if (container != undefined) {
			//stary design
			container.id = dynamicMenuAjaxRequest.responseText.indexOf('<ul class="lvl1">') == -1 ?
				'nawigacjaTop' : 'nawigacjaTopPortal';
			replaceMenuText();
		} else {
			//nowy design
		}
	}
}


