/*
 * Obsługa powiadomień
 */

var Powiadomienie_TimerID  			 = null;			  // Zegar wywołujący funkcję pobrania powiadomień z serwera
var Powiadomienie_Timer_Odstep   	 = 15000;		  // Odstęp czasu (w ms) po którym sprawdzane będzie czy są nowe powiadomienia
var Powiadomienie_MaxPowiadomienieID = -1;			  // Maksymalny numer pobranego powiadomienia
var Powiadomienie_ZadanieAjax    	 = null;			  // Żądanie Ajax obsługujące pobranie informacji z serwera
var Powiadomienie_AktualneID         = -1;           // ID aktualnie wyświetlanego powiadomienia
var Powiadomienie_AktualneIndex      = -1;           // Index w tabeli aktualnego powiadomienia
//var PierwszePobranie    = true;			  			  // Czy pierwsze pobranie wszystkich powiadomień
var Powiadomienie_Powiadomienia  	 = new Array();  // Lista wszystkich pobranych powiadomień

// struktura tabel Powiadomienie_pokoje, Powiadomienie_wypowiedzi
   /*
   Powiadomienie_Powiadomienia[0].id                        	  - identyfikator powiadomienia
   Powiadomienie_Powiadomienia[0].tresc								  - treść powiadomienia
   Powiadomienie_Powiadomienia[0].link 								  - link do strony      
   Powiadomienie_Powiadomienia[0].data 								  - data utworzenia powiadomienia
	*/


function Powiadomienie_Dodaj(ID, Tresc, Link, Data)
   {
   // Sprawdź czy dane powiadomienie nie istnieje już na liście
      for (i = 0; i < Powiadomienie_Powiadomienia.length; i++) if (Powiadomienie_Powiadomienia[i].id == ID)
      	{
      	return;
      	}
      	
   // Dodaj nowe powiadomienie do listy
      i = Powiadomienie_Powiadomienia.length;
      Powiadomienie_Powiadomienia[i]       = new Array();
      Powiadomienie_Powiadomienia[i].id    = ID;
      Powiadomienie_Powiadomienia[i].tresc = "<div style='float: left; margin-right: 3px'>" + Tresc + "</div>"; 

      if (Link != '') Powiadomienie_Powiadomienia[i].tresc += " <div title='Przejdź do strony' style='margin-top: 6px;' class='Powiadomienie_Nawigacja_Ikona_IdzDo' onclick='Powiadomienie_ObsluzAktualne()'></div>";

      Powiadomienie_Powiadomienia[i].link  = Link;
      Powiadomienie_Powiadomienia[i].data  = Data;
      
   // Wyswietl dodane powiadomienie (???)
      Powiadomienie_Wyswietl(ID);
      
   // Jeżeli największe ID to zapamiętaj
      Powiadomienie_MaxPowiadomienieID = Math.max(ID, Powiadomienie_MaxPowiadomienieID);
   };
   
function Powiadomienie_Wyswietl(ID)
   {
   // Wyszukaj element w tablicy
      var Element = null;
      for (i = 0; i < Powiadomienie_Powiadomienia.length; i++) if (Powiadomienie_Powiadomienia[i].id == ID)
      	{
      	Powiadomienie_AktualneID 	 = ID;
      	Powiadomienie_AktualneIndex = i;
      	Element                     = Powiadomienie_Powiadomienia[i];
      	}
      
   // Jeżeli znaleziono to wyświetl
      if (Element != null)
      	{
	   	document.getElementById('Powiadomienie_Data').innerHTML  = Element.data;
   		document.getElementById('Powiadomienie_Tresc').innerHTML = Element.tresc;
   		};

   // Wariant A: Obsługa *paska* z powiadomieniami
      if (Profil_Powiadomienie_Ukrywanie == 0)
         {
         // Wyświetl pasek z powiadomieniami i ukryj pasek z notatką o ilości powiadomień oczekujących
        		document.getElementById('Powiadomienie').style.display        = '';
        		document.getElementById('Powiadomienie_Ukryte').style.display = 'none';
        		
	      // Odśwież przyciski nawigacyjne
	         var l = Powiadomienie_Powiadomienia.length - 1;
            document.getElementById('Powiadomienie_Nawigacja_Ikona_Poczatek').className   = (Powiadomienie_AktualneIndex > 0) ? 'Powiadomienie_Nawigacja_Ikona_Poczatek'   : 'Powiadomienie_Nawigacja_Ikona_Poczatek_Niedostepne';
            document.getElementById('Powiadomienie_Nawigacja_Ikona_Poprzednie').className = (Powiadomienie_AktualneIndex > 0) ? 'Powiadomienie_Nawigacja_Ikona_Poprzednie' : 'Powiadomienie_Nawigacja_Ikona_Poprzednie_Niedostepne';
            document.getElementById('Powiadomienie_Nawigacja_Ikona_Nastepne').className   = (Powiadomienie_AktualneIndex < l) ? 'Powiadomienie_Nawigacja_Ikona_Nastepne'   : 'Powiadomienie_Nawigacja_Ikona_Nastepne_Niedostepne';
            document.getElementById('Powiadomienie_Nawigacja_Ikona_Koniec').className     = (Powiadomienie_AktualneIndex < l) ? 'Powiadomienie_Nawigacja_Ikona_Koniec' : 'Powiadomienie_Nawigacja_Ikona_Koniec_Niedostepne';
      
         // Wyświetl numer powiadomienia
            document.getElementById('Powiadomienie_Numer').innerHTML = (Powiadomienie_AktualneIndex + 1) + " z " + Powiadomienie_Powiadomienia.length ;
         };

   // Wariant B: Obsługa *notatki* z ilością oczekujących powiadomień
      if (Profil_Powiadomienie_Ukrywanie == 1)
         {
         // Ukryj pasek z powiadomieniami i pokaż pasek z notatką o ilości powiadomień oczekujących
        		document.getElementById('Powiadomienie').style.display        = 'none';
        		document.getElementById('Powiadomienie_Ukryte').style.display = '';
        		
         // Wyświetl liczbę powiadomień
            document.getElementById('Powiadomienie_Ukryte').innerHTML = Powiadomienie_Powiadomienia.length;
         };
   };

/*
 * Funkcja powoduje wysłanie żądania obsłużenia danego powiadomienia (przejścia do podstrony)
 */
function Powiadomienie_ObsluzAktualne()
   {
   // Sprawdź czy można coś usunąć
      if (Powiadomienie_Powiadomienia.length == 0) return;
      
   // Utwórz i wyślij nowe żądanie Ajax, funkcja zwrotna typu eval
      var TMPPowiadomienie_ZadanieAjax = null;
      TMPPowiadomienie_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Powiadomienie', "");
      TMPPowiadomienie_ZadanieAjax.AddVariable('Polecenie'		   ,'Obsłuż');
      TMPPowiadomienie_ZadanieAjax.AddVariable('PowiadomienieID'  ,Powiadomienie_Powiadomienia[Powiadomienie_AktualneIndex].id);
      TMPPowiadomienie_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMPPowiadomienie_ZadanieAjax.HTTPRequest.readyState == 4) && (TMPPowiadomienie_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMPPowiadomienie_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMPPowiadomienie_ZadanieAjax.Send();
   
   };
      
/*
 * Funkcja usuwa aktualne powiadomienie z listy
 */
function Powiadomienie_UsunAktualne()
   {
   // Sprawdź czy można coś usunąć
      if (Powiadomienie_Powiadomienia.length == 0) return;
      
   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMPPowiadomienie_ZadanieAjax = null;
      TMPPowiadomienie_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Powiadomienie', "");
      TMPPowiadomienie_ZadanieAjax.AddVariable('Polecenie'		   ,'Usun');
      TMPPowiadomienie_ZadanieAjax.AddVariable('PowiadomienieID'  ,Powiadomienie_Powiadomienia[Powiadomienie_AktualneIndex].id);
      TMPPowiadomienie_ZadanieAjax.Send();
   
   // Usuń dane powiadomienie z listy (poprzez nadpisywanie elementami o większym indeksie)
      for (i = Powiadomienie_AktualneIndex; i < Powiadomienie_Powiadomienia.length - 1; i++) Powiadomienie_Powiadomienia[i] = Powiadomienie_Powiadomienia[i + 1];
      Powiadomienie_Powiadomienia.length--;
      if (Powiadomienie_AktualneIndex >= Powiadomienie_Powiadomienia.length) Powiadomienie_AktualneIndex = Powiadomienie_Powiadomienia.length - 1;
      
   // Jeżeli został jakiś element to wyświetl poprzedni, jeżeli nie to ...
      if (Powiadomienie_Powiadomienia.length > 0)
         {
         Powiadomienie_Wyswietl(Powiadomienie_Powiadomienia[Powiadomienie_AktualneIndex].id);
         }
      else
         {
         document.getElementById('Powiadomienie').style.display        = 'none';
         document.getElementById('Powiadomienie_Ukryte').style.display = 'none';
         }
   };

/*
 * Funkcja usuwa wszystkie powiadomienie z listy
 */
function Powiadomienie_UsunWszystkie()
   {
   // Sprawdź czy można coś usunąć
      if (Powiadomienie_Powiadomienia.length == 0) return;
      
   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMPPowiadomienie_ZadanieAjax = null;
      TMPPowiadomienie_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Powiadomienie', "");
      TMPPowiadomienie_ZadanieAjax.AddVariable('Polecenie'		   ,'UsunWszystkie');
      TMPPowiadomienie_ZadanieAjax.Send();
   
   // Usuń wszystkie powiadomienie z listy i schowaj pasek
      Powiadomienie_Powiadomienia.length = 0;
      document.getElementById('Powiadomienie').style.display        = 'none';
      document.getElementById('Powiadomienie_Ukryte').style.display = 'none';
      
   };

/*
 * Funkcja ukrywa pasek z powiadomieniami (zapisuje ustawienia w profilu użytkownika)
 */
function Powiadomienie_UkryjPasek()
   {
   // Zmień wartość zmiennej w profilu
      Profil_Powiadomienie_Ukrywanie = 1;
      Profil_ZapiszUstawienia();
      
   // Wyświetl ponownie aktualne powiadomienie (w funkcji wyświetlającej ukryty zostanie pasek
   // i pojawi się ewentualnie notka o ilości oczekującyh powiadomień)
      Powiadomienie_Wyswietl(Powiadomienie_Powiadomienia[Powiadomienie_AktualneIndex].id);
   };

/*
 * Funkcja pokazuje pasek z powiadomieniami (zapisuje ustawienia w profilu użytkownika)
 */
function Powiadomienie_PokazPasek()
   {
   // Zmień wartość zmiennej w profilu
      Profil_Powiadomienie_Ukrywanie = 0;
      Profil_ZapiszUstawienia();
      
   // Wyświetl ponownie aktualne powiadomienie (w funkcji wyświetlającej pokazany zostanie pasek
   // i ukryta zostanie notka o ilości oczekującyh powiadomień)
      Powiadomienie_Wyswietl(Powiadomienie_Powiadomienia[Powiadomienie_AktualneIndex].id);
   };

      
/*
 * Funkcja pobiera z serwera nowe powiadomienia
 */
function Powiadomienie_PobierzPowiadomienia()	
   {
   // Przygotuj żądanie AJAX
      Powiadomienie_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Powiadomienie', "");
      Powiadomienie_ZadanieAjax.AddVariable('Polecenie','PobierzPowiadomienia');
      Powiadomienie_ZadanieAjax.AddVariable('OdID'     ,Powiadomienie_MaxPowiadomienieID);
      
   // Ustaw funkcję zwrotną (typu *eval* - kod JS generowany po stronie serwera), wyślij żądanie AJAX
      Powiadomienie_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((Powiadomienie_ZadanieAjax.HTTPRequest.readyState == 4) && (Powiadomienie_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(Powiadomienie_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      Powiadomienie_ZadanieAjax.Send();
      
   // Ustaw kolejne odwołanie do serwera w celu pobrania powiadomień
      Powiadomienie_TimerID = setTimeout("Powiadomienie_PobierzPowiadomienia()", Powiadomienie_Timer_Odstep);	
   };
   
// Rozpocznij obsługę Powiadomień
   if (UserID != -1)
   	{
	   Powiadomienie_TimerID = setTimeout("Powiadomienie_PobierzPowiadomienia()", 1000);
	   }
/*
   SoundManager 2: Javascript Sound for the Web
   --------------------------------------------
   http://schillmania.com/projects/soundmanager2/

   Copyright (c) 2008, Scott Schiller. All rights reserved.
   Code licensed under the BSD License:
   http://schillmania.com/projects/soundmanager2/license.txt

   V2.91a.20081205
*/
var soundManager=null;function SoundManager(b,a){this.flashVersion=8;this.debugMode=false;this.useConsole=true;this.consoleOnly=false;this.waitForWindowLoad=false;this.nullURL="null.mp3";this.allowPolling=true;this.useMovieStar=false;this.useHighPerformance=true;this.bgColor="#ffffff";this.defaultOptions={autoLoad:false,stream:true,autoPlay:false,onid3:null,onload:null,whileloading:null,onplay:null,onpause:null,onresume:null,whileplaying:null,onstop:null,onfinish:null,onbeforefinish:null,onbeforefinishtime:5000,onbeforefinishcomplete:null,onjustbeforefinish:null,onjustbeforefinishtime:200,multiShot:true,position:null,pan:0,volume:100};this.flash9Options={isMovieStar:null,usePeakData:false,useWaveformData:false,useEQData:false};this.movieStarOptions={onmetadata:null,useVideo:false};var e=null;var d=this;this.version=null;this.versionNumber="V2.91a.20081205";this.movieURL=null;this.url=null;this.altURL=null;this.swfLoaded=false;this.enabled=false;this.o=null;this.id=(a||"sm2movie");this.oMC=null;this.sounds={};this.soundIDs=[];this.muted=false;this.isIE=(navigator.userAgent.match(/MSIE/i));this.isSafari=(navigator.userAgent.match(/safari/i));this.isGecko=(navigator.userAgent.match(/gecko/i));this.debugID="soundmanager-debug";this._debugOpen=true;this._didAppend=false;this._appendSuccess=false;this._didInit=false;this._disabled=false;this._windowLoaded=false;this._hasConsole=(typeof console!="undefined"&&typeof console.log!="undefined");this._debugLevels=["log","info","warn","error"];this._defaultFlashVersion=8;this.filePatterns={flash8:/.mp3/i,flash9:/.mp3/i};this.netStreamTypes=["aac","flv","mov","mp4","m4v","f4v","m4a","mp4v","3gp","3g2"];this.netStreamPattern=new RegExp(".("+this.netStreamTypes.join("|")+")","i");this.filePattern=null;this.features={peakData:false,waveformData:false,eqData:false};this.sandbox={type:null,types:{remote:"remote (domain-based) rules",localWithFile:"local with file access (no internet access)",localWithNetwork:"local with network (internet access only, no local access)",localTrusted:"local, trusted (local + internet access)"},description:null,noRemote:null,noLocal:null};this._setVersionInfo=function(){if(d.flashVersion!=8&&d.flashVersion!=9){alert('soundManager.flashVersion must be 8 or 9. "'+d.flashVersion+'" is invalid. Reverting to '+d._defaultFlashVersion+".");d.flashVersion=d._defaultFlashVersion}d.version=d.versionNumber+(d.flashVersion==9?" (AS3/Flash 9)":" (AS2/Flash 8)");if(d.flashVersion>8){d.defaultOptions=d._mergeObjects(d.defaultOptions,d.flash9Options)}if(d.flashVersion>8&&d.useMovieStar){d.defaultOptions=d._mergeObjects(d.defaultOptions,d.movieStarOptions);d.filePatterns.flash9=new RegExp(".(mp3|"+d.netStreamTypes.join("|")+")","i")}else{d.useMovieStar=false}d.filePattern=d.filePatterns[(d.flashVersion!=8?"flash9":"flash8")];d.movieURL=(d.flashVersion==8?"/Pliki/SoundManager2/soundmanager2.swf":"/Pliki/SoundManager2/soundmanager2_flash9.swf");d.features.peakData=d.features.waveformData=d.features.eqData=(d.flashVersion==9)};this._overHTTP=(document.location?document.location.protocol.match(/http/i):null);this._waitingforEI=false;this._initPending=false;this._tryInitOnFocus=(this.isSafari&&typeof document.hasFocus=="undefined");this._isFocused=(typeof document.hasFocus!="undefined"?document.hasFocus():null);this._okToDisable=!this._tryInitOnFocus;this.useAltURL=!this._overHTTP;this.supported=function(){return(d._didInit&&!d._disabled)};this.getMovie=function(f){return d.isIE?window[f]:(d.isSafari?document.getElementById(f)||document[f]:document.getElementById(f))};this.loadFromXML=function(f){try{d.o._loadFromXML(f)}catch(g){d._failSafely();return true}};this.createSound=function(g){if(!d._didInit){throw new Error("soundManager.createSound(): Not loaded yet - wait for soundManager.onload() before calling sound-related methods")}if(arguments.length==2){g={id:arguments[0],url:arguments[1]}}var h=d._mergeObjects(g);var f=h;if(d._idCheck(f.id,true)){return d.sounds[f.id]}if(d.flashVersion>8&&d.useMovieStar){if(f.isMovieStar===null){f.isMovieStar=(f.url.match(d.netStreamPattern)?true:false)}if(f.isMovieStar&&(f.usePeakData||f.useWaveformData||f.useEQData)){f.usePeakData=false;f.useWaveformData=false;f.useEQData=false}}d.sounds[f.id]=new e(f);d.soundIDs[d.soundIDs.length]=f.id;if(d.flashVersion==8){d.o._createSound(f.id,f.onjustbeforefinishtime)}else{d.o._createSound(f.id,f.url,f.onjustbeforefinishtime,f.usePeakData,f.useWaveformData,f.useEQData,f.isMovieStar,(f.isMovieStar?f.useVideo:false))}if(f.autoLoad||f.autoPlay){window.setTimeout(function(){if(d.sounds[f.id]){d.sounds[f.id].load(f)}},20)}if(f.autoPlay){if(d.flashVersion==8){d.sounds[f.id].playState=1}else{d.sounds[f.id].play()}}return d.sounds[f.id]};this.createVideo=function(f){if(arguments.length==2){f={id:arguments[0],url:arguments[1]}}if(d.flashVersion>=9){f.isMovieStar=true;f.useVideo=true}else{return false}return d.createSound(f)};this.destroySound=function(g,f){if(!d._idCheck(g)){return false}for(var h=0;h<d.soundIDs.length;h++){if(d.soundIDs[h]==g){d.soundIDs.splice(h,1);continue}}d.sounds[g].unload();if(!f){d.sounds[g].destruct()}delete d.sounds[g]};this.destroyVideo=this.destroySound;this.load=function(f,g){if(!d._idCheck(f)){return false}d.sounds[f].load(g)};this.unload=function(f){if(!d._idCheck(f)){return false}d.sounds[f].unload()};this.play=function(f,g){if(!d._idCheck(f)){if(typeof g!="Object"){g={url:g}}if(g&&g.url){g.id=f;d.createSound(g)}else{return false}}d.sounds[f].play(g)};this.start=this.play;this.setPosition=function(f,g){if(!d._idCheck(f)){return false}d.sounds[f].setPosition(g)};this.stop=function(f){if(!d._idCheck(f)){return false}d.sounds[f].stop()};this.stopAll=function(){for(var f in d.sounds){if(d.sounds[f] instanceof e){d.sounds[f].stop()}}};this.pause=function(f){if(!d._idCheck(f)){return false}d.sounds[f].pause()};this.pauseAll=function(){for(var f=d.soundIDs.length;f--;){d.sounds[d.soundIDs[f]].pause()}};this.resume=function(f){if(!d._idCheck(f)){return false}d.sounds[f].resume()};this.resumeAll=function(){for(var f=d.soundIDs.length;f--;){d.sounds[d.soundIDs[f]].resume()}};this.togglePause=function(f){if(!d._idCheck(f)){return false}d.sounds[f].togglePause()};this.setPan=function(f,g){if(!d._idCheck(f)){return false}d.sounds[f].setPan(g)};this.setVolume=function(g,f){if(!d._idCheck(g)){return false}d.sounds[g].setVolume(f)};this.mute=function(f){if(typeof f!="string"){f=null}if(!f){for(var g=d.soundIDs.length;g--;){d.sounds[d.soundIDs[g]].mute()}d.muted=true}else{if(!d._idCheck(f)){return false}d.sounds[f].mute()}};this.muteAll=function(){d.mute()};this.unmute=function(f){if(typeof f!="string"){f=null}if(!f){for(var g=d.soundIDs.length;g--;){d.sounds[d.soundIDs[g]].unmute()}d.muted=false}else{if(!d._idCheck(f)){return false}d.sounds[f].unmute()}};this.unmuteAll=function(){d.unmute()};this.setPolling=function(f){if(!d.o||!d.allowPolling){return false}d.o._setPolling(f)};this.disable=function(f){if(d._disabled){return false}d._disabled=true;for(var g=d.soundIDs.length;g--;){d._disableObject(d.sounds[d.soundIDs[g]])}d.initComplete();d._disableObject(d)};this.canPlayURL=function(f){return(f?(f.match(d.filePattern)?true:false):null)};this.getSoundById=function(g,h){if(!g){throw new Error("SoundManager.getSoundById(): sID is null/undefined")}var f=d.sounds[g];return f};this.onload=function(){soundManager._wD("<em>Warning</em>: soundManager.onload() is undefined.",2)};this.onerror=function(){};this._idCheck=this.getSoundById;var c=function(){return false};c._protected=true;this._disableObject=function(g){for(var f in g){if(typeof g[f]=="function"&&typeof g[f]._protected=="undefined"){g[f]=c}}f=null};this._failSafely=function(){if(!d._disabled){d.disable()}};this._normalizeMovieURL=function(f){if(f){if(f.match(/.swf/)){f=f.substr(0,f.lastIndexOf(".swf"))}if(f.lastIndexOf("/")!=f.length-1){f=f+"/"}}return d.movieURL};this._getDocument=function(){return(document.body?document.body:(document.documentElement?document.documentElement:document.getElementsByTagName("div")[0]))};this._getDocument._protected=true;this._createMovie=function(l,j){if(d._didAppend&&d._appendSuccess){return false}if(window.location.href.indexOf("debug=1")+1){d.debugMode=true}d._didAppend=true;d._setVersionInfo();var q=(j?j:d.url);var i=(d.altURL?d.altURL:q);d.url=d._normalizeMovieURL(d._overHTTP?q:i);j=d.url;var k=null;if(d.useHighPerformance&&navigator.userAgent.match(/firefox\/2/i)){k="Warning: disabling highPerformance, incompatible with Firefox 2.x";d.useHighPerformance=false}if(d.useHighPerformance&&d.useMovieStar){k="Warning: disabling highPerformance, not applicable with movieStar mode on";d.useHighPerformance=false}var p={name:l,id:l,src:j,width:"100%",height:"100%",quality:"high",allowScriptAccess:"always",bgcolor:d.bgColor,pluginspage:"http://www.macromedia.com/go/getflashplayer",type:"application/x-shockwave-flash"};var t={id:l,data:j,type:"application/x-shockwave-flash",width:"100%",height:"100%"};var m={movie:j,AllowScriptAccess:"always",quality:"high",bgcolor:d.bgColor};if(d.useHighPerformance&&!d.useMovieStar){p.wmode="transparent";m.wmode="transparent"}var h=null;var o=null;if(d.isIE){h=document.createElement("div");var f='<object id="'+l+'" data="'+j+'" type="application/x-shockwave-flash" width="100%" height="100%"><param name="movie" value="'+j+'" /><param name="AllowScriptAccess" value="always" /><param name="quality" value="high" />'+(d.useHighPerformance&&!d.useMovieStar?'<param name="wmode" value="transparent" /> ':"")+'<param name="bgcolor" value="'+d.bgColor+'" /><!-- --></object>'}else{h=document.createElement("embed");for(o in p){if(p.hasOwnProperty(o)){h.setAttribute(o,p[o])}}}var n="soundManager._createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.";var g=d._getDocument();if(g){d.oMC=document.getElementById("sm2-container")?document.getElementById("sm2-container"):document.createElement("div");if(!d.oMC.id){d.oMC.id="sm2-container";d.oMC.className="movieContainer";var v=null;if(d.useHighPerformance){v={position:"fixed",width:"8px",height:"8px",bottom:"0px",left:"0px",zIndex:-1}}else{v={position:"absolute",width:"1px",height:"1px",bottom:"0px",left:"0px"}}var u=null;for(u in v){if(v.hasOwnProperty(u)){d.oMC.style[u]=v[u]}}try{if(!d.isIE){d.oMC.appendChild(h)}g.appendChild(d.oMC);if(d.isIE){d.oMC.innerHTML=f}d._appendSuccess=true}catch(r){throw new Error(n)}}else{d.oMC.appendChild(h);if(d.isIE){d.oMC.innerHTML=f}d._appendSuccess=true}g=null}};this._writeDebug=function(f,h,g){};this._writeDebug._protected=true;this._wD=this._writeDebug;this._toggleDebug=function(){};this._toggleDebug._protected=true;this._debug=function(){};this._mergeObjects=function(g,f){var k={};for(var h in g){if(g.hasOwnProperty(h)){k[h]=g[h]}}var j=(typeof f=="undefined"?d.defaultOptions:f);for(var l in j){if(j.hasOwnProperty(l)&&typeof k[l]=="undefined"){k[l]=j[l]}}return k};this.createMovie=function(f){if(f){d.url=f}d._initMovie()};this.go=this.createMovie;this._initMovie=function(){if(d.o){return false}d.o=d.getMovie(d.id);if(!d.o){d._createMovie(d.id,d.url);d.o=d.getMovie(d.id)}};this.waitForExternalInterface=function(){if(d._waitingForEI){return false}d._waitingForEI=true;if(d._tryInitOnFocus&&!d._isFocused){return false}setTimeout(function(){if(!d._didInit&&d._okToDisable){d._failSafely()}},750)};this.handleFocus=function(){if(d._isFocused||!d._tryInitOnFocus){return true}d._okToDisable=true;d._isFocused=true;if(d._tryInitOnFocus){window.removeEventListener("mousemove",d.handleFocus,false)}d._waitingForEI=false;setTimeout(d.waitForExternalInterface,500);if(window.removeEventListener){window.removeEventListener("focus",d.handleFocus,false)}else{if(window.detachEvent){window.detachEvent("onfocus",d.handleFocus)}}};this.initComplete=function(){if(d._didInit){return false}d._didInit=true;if(d._disabled){d.onerror.apply(window);return false}if(d.waitForWindowLoad&&!d._windowLoaded){if(window.addEventListener){window.addEventListener("load",d.initUserOnload,false)}else{if(window.attachEvent){window.attachEvent("onload",d.initUserOnload)}}return false}else{d.initUserOnload()}};this.initUserOnload=function(){d.onload.apply(window)};this.init=function(){d._initMovie();if(d._didInit){return false}if(window.removeEventListener){window.removeEventListener("load",d.beginDelayedInit,false)}else{if(window.detachEvent){window.detachEvent("onload",d.beginDelayedInit)}}try{d.o._externalInterfaceTest(false);d.setPolling(true);d.enabled=true}catch(f){d._failSafely();d.initComplete();return false}d.initComplete()};this.beginDelayedInit=function(){d._windowLoaded=true;setTimeout(d.waitForExternalInterface,500);setTimeout(d.beginInit,20)};this.beginInit=function(){if(d._initPending){return false}d.createMovie();d._initMovie();d._initPending=true;return true};this.domContentLoaded=function(){if(document.removeEventListener){document.removeEventListener("DOMContentLoaded",d.domContentLoaded,false)}d.go()};this._externalInterfaceOK=function(){if(d.swfLoaded){return false}d.swfLoaded=true;d._tryInitOnFocus=false;if(d.isIE){setTimeout(d.init,100)}else{d.init()}};this._setSandboxType=function(f){var g=d.sandbox;g.type=f;g.description=g.types[(typeof g.types[f]!="undefined"?f:"unknown")];if(g.type=="localWithFile"){g.noRemote=true;g.noLocal=false}else{if(g.type=="localWithNetwork"){g.noRemote=false;g.noLocal=true}else{if(g.type=="localTrusted"){g.noRemote=false;g.noLocal=false}}}};this.destruct=function(){d.disable(true)};e=function(f){var g=this;this.sID=f.id;this.url=f.url;this.options=d._mergeObjects(f);this.instanceOptions=this.options;this._iO=this.instanceOptions;this._debug=function(){};this._debug();this.id3={};this.resetProperties=function(h){g.bytesLoaded=null;g.bytesTotal=null;g.position=null;g.duration=null;g.durationEstimate=null;g.loaded=false;g.playState=0;g.paused=false;g.readyState=0;g.muted=false;g.didBeforeFinish=false;g.didJustBeforeFinish=false;g.instanceOptions={};g.instanceCount=0;g.peakData={left:0,right:0};g.waveformData=[];g.eqData=[]};g.resetProperties();this.load=function(h){if(typeof h!="undefined"){g._iO=d._mergeObjects(h);g.instanceOptions=g._iO}else{h=g.options;g._iO=h;g.instanceOptions=g._iO}if(typeof g._iO.url=="undefined"){g._iO.url=g.url}if(g._iO.url==g.url&&g.readyState!==0&&g.readyState!=2){return false}g.loaded=false;g.readyState=1;g.playState=(h.autoPlay?1:0);try{if(d.flashVersion==8){d.o._load(g.sID,g._iO.url,g._iO.stream,g._iO.autoPlay,(g._iO.whileloading?1:0))}else{d.o._load(g.sID,g._iO.url,g._iO.stream?true:false,g._iO.autoPlay?true:false);if(g._iO.isMovieStar&&g._iO.autoLoad&&!g._iO.autoPlay){g.pause()}}}catch(i){d.onerror();d.disable()}};this.unload=function(){if(g.readyState!==0){if(g.readyState!=2){g.setPosition(0)}d.o._unload(g.sID,d.nullURL);g.resetProperties()}};this.destruct=function(){d.o._destroySound(g.sID);d.destroySound(g.sID,true)};this.play=function(i){if(!i){i={}}g._iO=d._mergeObjects(i,g._iO);g._iO=d._mergeObjects(g._iO,g.options);g.instanceOptions=g._iO;if(g.playState==1){var h=g._iO.multiShot;if(!h){return false}}if(!g.loaded){if(g.readyState===0){g._iO.stream=true;g._iO.autoPlay=true;g.load(g._iO)}else{if(g.readyState==2){return false}}}if(g.paused){g.resume()}else{g.playState=1;if(!g.instanceCount||d.flashVersion==9){g.instanceCount++}g.position=(typeof g._iO.position!="undefined"&&!isNaN(g._iO.position)?g._iO.position:0);if(g._iO.onplay){g._iO.onplay.apply(g)}g.setVolume(g._iO.volume);g.setPan(g._iO.pan);d.o._start(g.sID,g._iO.loop||1,(d.flashVersion==9?g.position:g.position/1000))}};this.start=this.play;this.stop=function(h){if(g.playState==1){g.playState=0;g.paused=false;if(g._iO.onstop){g._iO.onstop.apply(g)}d.o._stop(g.sID,h);g.instanceCount=0;g._iO={}}};this.setPosition=function(h){if(typeof h=="undefined"){h=0}g._iO.position=h;d.o._setPosition(g.sID,(d.flashVersion==9?g._iO.position:g._iO.position/1000),(g.paused||!g.playState))};this.pause=function(){if(g.paused||g.playState===0){return false}g.paused=true;d.o._pause(g.sID);if(g._iO.onpause){g._iO.onpause.apply(g)}};this.resume=function(){if(!g.paused||g.playState===0){return false}g.paused=false;d.o._pause(g.sID);if(g._iO.onresume){g._iO.onresume.apply(g)}};this.togglePause=function(){if(!g.playState){g.play({position:(d.flashVersion==9?g.position:g.position/1000)});return false}if(g.paused){g.resume()}else{g.pause()}};this.setPan=function(h){if(typeof h=="undefined"){h=0}d.o._setPan(g.sID,h);g._iO.pan=h};this.setVolume=function(h){if(typeof h=="undefined"){h=100}d.o._setVolume(g.sID,(d.muted&&!g.muted)||g.muted?0:h);g._iO.volume=h};this.mute=function(){g.muted=true;d.o._setVolume(g.sID,0)};this.unmute=function(){g.muted=false;d.o._setVolume(g.sID,typeof g._iO.volume!="undefined"?g._iO.volume:g.options.volume)};this._whileloading=function(h,i,j){if(!g._iO.isMovieStar){g.bytesLoaded=h;g.bytesTotal=i;g.duration=Math.floor(j);g.durationEstimate=parseInt((g.bytesTotal/g.bytesLoaded)*g.duration,10);if(g.readyState!=3&&g._iO.whileloading){g._iO.whileloading.apply(g)}}else{g.bytesLoaded=h;g.bytesTotal=i;g.duration=Math.floor(j);g.durationEstimate=g.duration;if(g.readyState!=3&&g._iO.whileloading){g._iO.whileloading.apply(g)}}};this._onid3=function(m,h){var n=[];for(var l=0,k=m.length;l<k;l++){n[m[l]]=h[l]}g.id3=d._mergeObjects(g.id3,n);if(g._iO.onid3){g._iO.onid3.apply(g)}};this._whileplaying=function(i,j,h,k){if(isNaN(i)||i===null){return false}g.position=i;if(g._iO.usePeakData&&typeof j!="undefined"&&j){g.peakData={left:j.leftPeak,right:j.rightPeak}}if(g._iO.useWaveformData&&typeof h!="undefined"&&h){g.waveformData=h}if(g._iO.useEQData&&typeof k!="undefined"&&k){g.eqData=k}if(g.playState==1){if(g._iO.whileplaying){g._iO.whileplaying.apply(g)}if(g.loaded&&g._iO.onbeforefinish&&g._iO.onbeforefinishtime&&!g.didBeforeFinish&&g.duration-g.position<=g._iO.onbeforefinishtime){g._onbeforefinish()}}};this._onload=function(h){h=(h==1?true:false);g.loaded=h;g.readyState=h?3:2;if(g._iO.onload){g._iO.onload.apply(g)}};this._onbeforefinish=function(){if(!g.didBeforeFinish){g.didBeforeFinish=true;if(g._iO.onbeforefinish){g._iO.onbeforefinish.apply(g)}}};this._onjustbeforefinish=function(h){if(!g.didJustBeforeFinish){g.didJustBeforeFinish=true;if(g._iO.onjustbeforefinish){g._iO.onjustbeforefinish.apply(g)}}};this._onfinish=function(){g.playState=0;g.paused=false;if(g._iO.onfinish){g._iO.onfinish.apply(g)}if(g._iO.onbeforefinishcomplete){g._iO.onbeforefinishcomplete.apply(g)}g.didBeforeFinish=false;g.didJustBeforeFinish=false;if(g.instanceCount){g.instanceCount--;if(!g.instanceCount){g.setPosition(0);g.instanceCount=0;g.instanceOptions={}}}else{g.setPosition(0)}};this._onmetadata=function(h){if(!h.width&&!h.height){h.width=320;h.height=240}g.metadata=h;g.width=h.width;g.height=h.height;if(g._iO.onmetadata){g._iO.onmetadata.apply(g)}d.wD("SMSound.onmetadata() complete")}};if(window.addEventListener){window.addEventListener("focus",d.handleFocus,false);window.addEventListener("load",d.beginDelayedInit,false);window.addEventListener("unload",d.destruct,false);if(d._tryInitOnFocus){window.addEventListener("mousemove",d.handleFocus,false)}}else{if(window.attachEvent){window.attachEvent("onfocus",d.handleFocus);window.attachEvent("onload",d.beginDelayedInit);window.attachEvent("unload",d.destruct)}else{soundManager.onerror();soundManager.disable()}}if(document.addEventListener){document.addEventListener("DOMContentLoaded",d.domContentLoaded,false)}}soundManager=new SoundManager();/*
 * Obsługa forum
 *
 * Autor: Rafał Piechocki
 * Wszelkie prawa autorskie zastrzeżone i chronione. Wykorzystywanie kodu bez zgody autora zabronione.
 */

/*
 * Funkcja przygotowuje stronę pod edycję danego postu
 */
function Forum_EdytujPost(ID_Post)
   {
   // Ustaw widoczność odpowiednich elementów okna wypowiedzi
      document.getElementById('Forum_Wypowiedz_Naglowek').style.display			= '';
      document.getElementById('Forum_Wypowiedz_Tresc').style.display				= '';
      document.getElementById('Forum_Przycisk_NowaWypowiedz').style.display	= 'none';
      
   // Ustaw nagłówek belki
//      document.getElementById('Forum_Wypowiedz_Naglowek').innerHTML     	= 'Edycja wypowiedzi';
		document.getElementById('Forum_OknoWypowiedzi_Przycisk_Akceptuj').value = 'Aktualizuj'
   // Ustaw wartość ukrytego pola formularza na ID Postu, który jest edytowany
   	document.getElementById('Forum_Edycja_Post_ID').value							= ID_Post;
      
   // Wstaw treść edytowanego posta w okno wypowiedzi
      tinyMCE.execCommand('mceSetContent',false,document.getElementById('Forum_Post_' + ID_Post).innerHTML); 
      }
	

/*
 * Funkcja anuluje pisanie/edycję postu i ustawia parametry elementów związanych z oknem wypowiedzi na wartości domyślne
 */
function Forum_AnulujEdycje()
   {
   // Usuń treść wypowiedzi
      tinyMCE.execCommand('mceSetContent',false,''); 
   
   // Ustaw widoczność odpowiednich elementów okna wypowiedzi
      document.getElementById('Forum_Wypowiedz_Naglowek').style.display			= 'none';
      document.getElementById('Forum_Wypowiedz_Tresc').style.display				= 'none'; 
      document.getElementById('Forum_Przycisk_NowaWypowiedz').style.display	= '';
      
   // Ustaw nagłówek belki
//      document.getElementById('Forum_Wypowiedz_Naglowek').innerHTML     = 'Edycja wypowiedzi';
		document.getElementById('Forum_OknoWypowiedzi_Przycisk_Akceptuj').value = 'Wyślij'

   // Zeruj wartość ukrytego pola formularza wskazującego na edytowany post
   	document.getElementById('Forum_Edycja_Post_ID').value							= '';
      }
 
/*
 * Funkcja wysyła żądanie AJAX, które powoduje zapamiętanie pozycji zakładki
 */
function Forum_UtworzZakladke(Element, ID_Temat, ID_Wypowiedz)
   {
   // Usuń wszystkie zakładki z danego tematu
      Forum_UsunZakladke(Element, ID_Temat);
   
   // Utwórz i wyślij nowe żądanie Ajax
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Forum', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'   ,'UtworzZakladke');
      TMP_ZadanieAjax.AddVariable('ID_Temat'    ,ID_Temat);
      TMP_ZadanieAjax.AddVariable('ID_Wypowiedz',ID_Wypowiedz);
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMP_ZadanieAjax.Send();
   }
   
/*
 * Funkcja wysyła żądanie AJAX, które powoduje usunięcie zakładki z danego tematu
 */
function Forum_UsunZakladke(Element, ID_Temat)
   {
   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Forum', "");
      TMP_ZadanieAjax.IsAsynchronous = false;
      TMP_ZadanieAjax.AddVariable('Polecenie'   ,'UsunZakladke');
      TMP_ZadanieAjax.AddVariable('ID_Temat'    ,ID_Temat);
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMP_ZadanieAjax.Send();
   }   
 

/*
 * Funkcja wysyła żądanie AJAX, które powoduje rozpoczęcie śledzenia danego tematu
 */
function Forum_SledzTemat(Element, ID_Temat)
   {
   // Utwórz i wyślij nowe żądanie Ajax
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Forum', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'   ,'RozpocznijSledzicTemat');
      TMP_ZadanieAjax.AddVariable('ID_Temat'    ,ID_Temat);
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMP_ZadanieAjax.Send();
   }
   
/*
 * Funkcja wysyła żądanie AJAX, które powoduje zaprzestanie śledzenia danego tematu
 */
function Forum_PrzestanSledzicTemat(Element, ID_Temat)
   {
   // Utwórz i wyślij nowe żądanie Ajax 
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Forum', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'   ,'PrzestanSledzicTemat');
      TMP_ZadanieAjax.AddVariable('ID_Temat'    ,ID_Temat);
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMP_ZadanieAjax.Send();
   }    
   
   
/*
 * Funkcja wysyła żądanie AJAX, które powoduje rozpoczęcie śledzenia danej kategorii
 */
function Forum_SledzKategorie(Element, ID_Kategoria)
   {
   // Utwórz i wyślij nowe żądanie Ajax
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Forum', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'   ,'RozpocznijSledzicKategorie');
      TMP_ZadanieAjax.AddVariable('ID_Kategoria',ID_Kategoria);
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMP_ZadanieAjax.Send();
   }
   
/*
 * Funkcja wysyła żądanie AJAX, które powoduje zaprzestanie śledzenia danej kategorii
 */
function Forum_PrzestanSledzicKategorie(Element, ID_Kategoria)
   {
   // Utwórz i wyślij nowe żądanie Ajax 
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Forum', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'   ,'PrzestanSledzicKategorie');
      TMP_ZadanieAjax.AddVariable('ID_Kategoria',ID_Kategoria);
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      TMP_ZadanieAjax.Send();
   }       /*
 * Określa bezwzględne położenie obiektu (współrzędna X)
 * by Peter-Paul Koch & Alex Tingle
 */
function findPosX(obj)
   {
   var curleft = 0;
   if (obj.offsetParent)
      while(1) 
        {
        curleft += obj.offsetLeft;
        if (!obj.offsetParent) break;
        obj = obj.offsetParent;
        }
   else if(obj.x) curleft += obj.x;
   return curleft - document.getElementById('Kontener').offsetLeft;	// uwaga: dostowano do układu nasz-uam.pl
   }

/*
 * Określa bezwzględne położenie obiektu (współrzędna Y)
 * by Peter-Paul Koch & Alex Tingle
 */
function findPosY(obj)
   {
   var curtop = 0;
   if (obj.offsetParent)
      while(1)
         {
         curtop += obj.offsetTop;
         if(!obj.offsetParent) break;
         obj = obj.offsetParent;
         }
   else if(obj.y) curtop += obj.y;
   return curtop - document.getElementById('Tresc').offsetTop;	// uwaga: dostowano do układu nasz-uam.pl
   }

/*
 * Wyświetla okienko (DIV) z podpowiedzią dla danego pola w obszarze podpowiedzi
 * Parametry: Edytowane pole, ID wiersza, w którym znajduje się pole
 */
function Form_ShowHint(Field, TrID)
   {
   var TD        = document.getElementById("ColH_" + TrID);
   var TR        = document.getElementById(TrID);
   var Form_Hint = document.getElementById('Form_Hint');
   
   Form_Hint.innerHTML    = "<div style='padding-left: 20px; padding-top: 2px'>" + Field.getAttribute('alt') + "</span>";
   Form_Hint.style.left   = findPosX(TD)    + 'px';
   Form_Hint.style.top    = findPosY(TD)    + 'px';
   Form_Hint.style.width  = TD.clientWidth  -26 + 'px';
   Form_Hint.style.minHeight = TD.offsetHeight - 6 + 'px';	// Minimalna wysokość ramki podpowiedzi - taka jak wysokość wiersza*/
   Form_Hint.style.visibility = "visible";
   }
   
/*
 * Ukrywa okienko (DIV) z podpowiedzią
 */   
function Form_HideHint()
   {
   var Form_Hint = document.getElementById('Form_Hint');
   Form_Hint.style.visibility = "hidden";
   }

// -------------------------------------------------------------------------------------------------------------
// OBSŁUGA WALIDACJI ONLINE
// -------------------------------------------------------------------------------------------------------------

var Form_ChangeQueue = Array();											// kolejka zmian
var Form_AjaxRequest = null;												// żądanie Ajax obsługujące sprawdzanie poprawności formularza
var TimerID          = setTimeout("Form_PageValidate()", 50);	// utwórz timer

/*
 * Inicjuje sprawdzanie poprawności dla danego pola
 * Parametry: Zmienione pole (onChange), ID wiersza, w którym znajduje sie pole
 */   
function Form_FieldChange(Field, TrID)
   {
   // Pobierz obiekty
      var TD          = document.getElementById("ColH_" + TrID);
   
   // Zaznacz, że pole jest sprawdzane (ikonka wToku w polu podpowiedzi)
      TD.className    = TD.className.replace(" Form_InfoKolPoprawne","");
      TD.className   += " Form_InfoKolSprawdzanie";  
      TD.innerHTML    = "";

   // Odłóż zmianę pola do kolejki
      var Record      = Array();
      Record["name"]  = Field.name;
      Record["value"] = Field.value;
      
      if (Field.type == 'checkbox')
      	{
      	if (Field.checked) Record["value"] = "true"; else Record["value"] = "";
      	}
      	
      Form_ChangeQueue.unshift(Record);
      
   // Przeprogramuj wywołanie funkcji sprawdzającej poprawność formularza
      clearTimeout(TimerID);
      TimerID = setTimeout("Form_PageValidate()", 750);      
   }   
   
/*
 * Inicjuje sprawdzanie poprawności strony poprzez mechanizm AJAX
 * Funkcja automatycznie wywoływana co 750ms poprzez Timer
 */
function Form_PageValidate()
   {
   // Sprawdź czy są zadania w kolejce
      if (Form_ChangeQueue.length == 0) return;

   // Odwróć kolejkę. Jeżeli nadpisano wartość tego samego pola kilka razy to ostatnia wartość jest najważniejsza (musi być najwcześniej w tablicy)
      Form_ChangeQueue.reverse();
         
   // Przygotuj żądanie AJAX
      Form_AjaxRequest = new Ajax('/Walidator', "Form_ReadXML");
      for (i = 0; i < Form_ChangeQueue.length; i++)
         {
         Form_AjaxRequest.AddVariable(Form_ChangeQueue[i]["name"],Form_ChangeQueue[i]["value"]);
         };
      
   // Ustaw funkcję zwrotną, wyślij żądanie AJAX
      Form_AjaxRequest.HTTPRequest.onreadystatechange = Form_ReadXML;
      Form_AjaxRequest.Send();
   
   // Wyczyść kolejkę
      Form_ChangeQueue.length = 0;
   }
   
function Form_FieldFadeOut(TdID, ImgID)
   {
   // Pobierz obiekty
      var TD          = document.getElementById(TdID);
      var IMG         = document.getElementById(ImgID);
   
   // Jeżeli obiekt IMG nie istnieje (może się tak zdarzyć gdy przed zakończeniem wyświetlania ikonki wprowadzono zmianę) to nic nie rób
      if (IMG == null) return;
   
   // Pobierz aktualny poziom przeźroczystości
      var Opacity     = IMG.style.opacity - 0.05;
      
   // Sprawdź czy ikonka powinna być jeszcze widoczna
      if (Opacity > 0)
         {
         // Ustaw nowy poziom przeźroczystości
            IMG.style.opacity = Opacity;
            IMG.style.filter  = "alpha(opacity=" + (Opacity * 100) + ")";

         // Zaprogramuj ponowne wywołanie funkcji
            setTimeout("Form_FieldFadeOut('" + TdID + "','" + ImgID + "')", 75);  
         }
      else
         {
         // Usuń element
            TD.innerHTML = "";
         }    
   }
      
function Form_ReadXML()
   {
   if ((Form_AjaxRequest.HTTPRequest.readyState == 4) && (Form_AjaxRequest.HTTPRequest.status == 200))
      {
      var xmldoc = Form_AjaxRequest.HTTPRequest.responseXML;
      var root_node = xmldoc.getElementsByTagName('element');

      for (var iNode = 0; iNode < root_node.length; iNode++) 
        {
        var element_node = root_node.item(iNode);
   
        // Odczytaj atrybuty z XML
           var t_id    = element_node.getElementsByTagName('id'   ); if (t_id.length)    t_id    = t_id.item(0).firstChild.data;    else t_id    = "";
           var t_class = element_node.getElementsByTagName('class'); if (t_class.length) t_class = t_class.item(0).firstChild.data; else t_class = "";
           var t_style = element_node.getElementsByTagName('style'); if (t_style.length) t_style = t_style.item(0).firstChild.data; else t_style = "";
           var t_html  = element_node.getElementsByTagName('html' ); if (t_html.length)  t_html  = t_html.item(0).firstChild.data;  else t_html  = null;
   
        // Pobierz docelowy element strony
           var E        = document.getElementById(t_id);
           var oldClass = E.className;
       
        // Obsługa *ikonki OK* (w kolumnie info) jeżeli sprawdzany wiersz uznany został za prawidłowy
           if (((oldClass.indexOf("Form_InfoKolSprawdzanie") != -1) && (t_class.indexOf("Form_InfoKolBlad") == -1))
           ||  ((oldClass.indexOf("Form_InfoKolBlad")        != -1) && (t_class.indexOf("Form_InfoKolBlad") == -1)))
              {
              if (t_html == null) t_html = "";
              t_html = "<img id='" + t_id + "Icon" + "' src='/Grafika/Framework/Form_IkonaOK.gif' style='opacity:1.0; filter:alpha(opacity=100)'>" + t_html;
              setTimeout("Form_FieldFadeOut('" + t_id + "','" + t_id + "Icon')",1250);
              }
              
        // Nadpisz atrybuty elementu strony
		     E.className = t_class;
           if (t_html != null) E.innerHTML = t_html;
		  }
      };
   }/*
 * Obsługa czata
 *
 * Autor: Rafał Piechocki
 * Wszelkie prawa autorskie zastrzeżone i chronione. Wykorzystywanie kodu bez zgody autora zabronione.
 */
var Czat_MaxWypowiedzi  = 200;   	     // Maksymalna liczba wypowiedzi do wyświetlenia w oknie
var Czat_Pokoj          = 1;				  // Numer aktualnego pokoju (ID)
var Czat_Wypowiedzi    	= new Array();   // Tablica zawierająca wypowiedzi (ze wszystkich pokoi)
var Czat_Pokoje    	  	= new Array();   // Tablica zawierająca pokoje, w których uczestniczy użytkownik
var Czat_Uczestnicy     = new Array();   // Tablica zawierająca uczestników pokoi, w których obecny jest użytkownik
var Czat_MaxWypowiedzID = -1;            // Maksymalny (pobrany z serwera) numer wypowiedzi (ID_Wypowiedz)
var Czat_TimerID  		= null;			  // Zegar wywołujący funkcję pobrania wiadomości z serwera i ewentualne odświeżenie okna rozmów
var Czat_Timer_Odstep   =  200;			  // Odstęp czasu (w ms) co który pobierane będą wiadomości
var Czat_ZadanieAjax    = null;			  // Żądanie Ajax obsługujące pobranie informacji z serwera
var Czat_OknoRozmowy    = null;          // Uchwyt do okna rozmowy
var PierwszePobranie    = true;			  // Czy pierwsze pobranie wszystkich wypowiedzi
var Czat_Ignoruje       = new Array();   // Czat_Ignoruje[ID_Uzytkownik]   = 0, 1, 2, 3; Czy użytkownik ID_Uzytkownik nas ignoruje (0 - nie, 1 - /tak, konkretnie nas/, 2 - /ignoruje wszsytkich/, 3 - /ignoruje i nas i wszystkich/
var Czat_Ignorowany     = new Array();   // Czat_Ignorowany[ID_Uzytkownik] = 0, 1; Czy ignorujemy konkretnie użytkownika ID_Uzytkownik (0 - nie, 1 - /tak/)
var Czat_IgnorujRozmowy = false;			  // Ignorowanie wszystkich rozmów prywatnych (ignorowanie ogólne)
   
// struktura tabel czat_pokoje, czat_wypowiedzi
   /*
   Czat_Pokoje[0].id                                    - identyfikator pokoju
   Czat_Pokoje[0].typ											  - typ pokoju: (O)gólny, (P)rywatny
   Czat_Pokoje[0].nazwa											  - nazwa wyświetlana pokoju
   Czat_Pokoje[0].wypowiedz									  - w pokoju pojawila sie nowa wypowiedź
   Czat_Pokoje[0].suwak							              - ostatnia pozycja suwaka w danym pokoju
   
   Czat_Uczestnicy[0].id_pokoj      = 1;					  - identyfikator pokoju
   Czat_Uczestnicy[0].id_uzytkownik = 1;                - identyfikator użytkownika
   Czat_Uczestnicy[0].login      	= 'Promet';         - login (nazwa) użytkownika
   Czat_Uczestnicy[0].plec 			= 'M';              - płeć
   
	Czat_Wypowiedzi[0].id            = 1;                - identyfikator wypowiedzi
	Czat_Wypowiedzi[0].id_pokoj      = 1;
	Czat_Wypowiedzi[0].id_uzytkownik = 1;
	Czat_Wypowiedzi[0].tresc 			= 'Hello';
	Czat_Wypowiedzi[0].autor 			= 'Prometh';
	Czat_Wypowiedzi[0].plec  			= 'M';
	Czat_Wypowiedzi[0].czas  			= '19:54:12';
	Czat_Wypowiedzi[0].wyswietlona 	= false;
   */

/*
 * Funkcja obsługująca zmianę głośności
 */
function Czat_Ustawienia_Dzwiek_UstawGlosnosc(Glosnosc)
   {
   // Jeżeli tryb wyciszenia to nic nie rób
      if (Profil_Dzwiek_Wyciszenie)
         {
         return;
         };
         
   // Ustaw głośność
      Profil_Dzwiek_Glosnosc = Glosnosc;
      Profil_ZapiszUstawienia();
      
   // Odśwież ramkę z ustawieniami
      Czat_OdswiezUstawienia();
   };
   
/*
 * Funkcja obsługująca włączenie / wyłączenie trybu wyciszenia
 */
function Czat_Ustawienia_Dzwiek_Wycisz()
   {
   // Włącz / wyłącz tryb wyciszenia
      Profil_Dzwiek_Wyciszenie = !Profil_Dzwiek_Wyciszenie;
      Profil_ZapiszUstawienia();
      
   // Odśwież ramkę z ustawieniami
      Czat_OdswiezUstawienia();
   };
   
/*
 * Funkcja odświeża pasek z ustawieniami znajdujący się nad listą uczestników czata
 */
function Czat_OdswiezUstawienia()
   {
   // Dźwięk
      // Głośnik (tryb wyciszenia)
         document.getElementById('Czat_Ustawienia_Dzwiek_Glosnik').style.backgroundPosition = "0px " + (Profil_Dzwiek_Wyciszenie * 22) + "px";
         
      // Głośność (słupki)
			for (i = 1; i <= 6; i++)
			   {
			   px = (i - 1) * -6;
			   py = 0; 
			   if (Profil_Dzwiek_Glosnosc >= (i - 1) * 20) py = -15;
			   if (Profil_Dzwiek_Wyciszenie              ) py = -30;
			   
			   document.getElementById('Czat_Ustawienia_Dzwiek_Glosnosc_Slupek_' + i).style.backgroundPosition = px + "px " + py + "px";
			   }
   };
   
/*
 * Funkcja obsługująca zmianę aktualnego pokoju
 */
function Czat_ZmienPokoj(ID_Pokoj)
	{
	// Odznacz wszystkie wypowiedzi jako *niewyświetlone*
	   for (i = 0; i < Czat_Wypowiedzi.length; i++) Czat_Wypowiedzi[i].wyswietlona = false;
	   
	// Oznacz, że w opuszczanym oraz w docelowym pokoju nie ma nieprzeczytanych wypowiedzi
	   for (i = 0; i < Czat_Pokoje.length; i++) if ((Czat_Pokoje[i].id == ID_Pokoj) || (Czat_Pokoje[i].id == Czat_Pokoj))
	   	Czat_Pokoje[i].wypowiedz = false;
	   
	// Zmien aktualny pokoj
	   Czat_Pokoj = ID_Pokoj;
	   
	// Odśwież listę pokoi, uczestników i wypowiedzi
	   Czat_OknoRozmowy.innerHTML = '';
	   Czat_OdswiezListePokoi();
	   Czat_OdswiezWypowiedzi();
	   Czat_OdswiezListeUczestnikow();
	   
	// Ustaw kursor w oknie pisania
	   document.getElementById('Czat_Wypowiedz').focus();
	}

/*
 * Funkcja odświeża listę uczestników danego pokoju
 */
function Czat_OdswiezListeUczestnikow()
   {
   // Zdefiniowane funkcji porównującej dla uporządkowania uczestników danego pokoju (sortowanie alfabetyczne wg. login)
      function Uczestnik_SortCompare(a, b)
      	{
      	if (a.login.toUpperCase() < b.login.toUpperCase()) return -1;
      	if (a.login.toUpperCase() > b.login.toUpperCase()) return  1;
      	return 0;
      	}
      
   // Jeżeli aktualnie nie jest wybrana strona 'Czat' to nic nie rób
      var Czat_ListaUczestnikow = document.getElementById('Czat_ListaUczestnikow');
      if (Czat_ListaUczestnikow == null) return;

   // Sortuj uczestników czata
      Czat_Uczestnicy.sort(Uczestnik_SortCompare);
      
   // Usuń wszystkich uczestnikow z listy
  	   var HTML = "";
        
   // Wypisz wszystkich uczestników aktualnego pokoju
      for (i = 0; i < Czat_Uczestnicy.length; i++) if (Czat_Uczestnicy[i].id_pokoj == Czat_Pokoj)
      	{
      	// Pobierz definicję uczestnika
      		var Uczestnik = Czat_Uczestnicy[i];
      		var Ignoruje  	= Czat_Ignoruje[Uczestnik.id_uzytkownik];		// 0, 1, 2 lub 3
      		var Ignorowany = Czat_Ignorowany[Uczestnik.id_uzytkownik];  // 0 lub 1
    		
      	// Utwórz nowy rekord
      	   HTML += '<div class="Czat_Uczestnik">'
      	   HTML += '<div class="Czat_Uczestnik_Avatar" style="background:url(\'/Strona/System/Avatar/' + Uczestnik.id_uzytkownik + '?Rozmiar=46x46\');"></div>';

	     	   HTML += '<div class="Czat_Uczestnik_Login Czat_Wypowiedz_Autor' + Uczestnik.plec + '">' + Uczestnik.login + (Ignoruje ? '<img src="/Grafika/Czat/Blokada.gif" title="Użytkownik &laquo;' + Uczestnik.login + '&raquo; ignoruje rozmowy prywatne">' : '') + '</div>';
	   				
      	   HTML += '<div class="Czat_Uczestnik_Status">użytkownik</div>';
      	   HTML += '<div class="Czat_Uczestnik_Separator"></div>';
      	   HTML += '<div class="Czat_Uczestnik_Ikony">';
      	   
      	   // Ikony pokazywane tylko gdy użytkownik jest zalogowany
      	      if (UserID != -1)
      	      	{
		      	   // Rozmowa prywatna (tylko na kanale ogólnym, z kimś innym) UWAGA: Czat_Pokoj == 1 zamienić na faktyczne sprawdzenie czy kanał ogólny
      		   	   if ((Uczestnik.id_uzytkownik != UserID) && (Czat_Pokoj == 1)) HTML += '<div title="Rozmowa prywatna z &laquo;' + Uczestnik.login + '&raquo;" class="Czat_Uczestnik_Ikona_Priv' + (Ignoruje || (Ignorowany)? '_Blokada' : '') +'" onClick="Czat_Serwer_WyslijZaproszenie('+ Uczestnik.id_uzytkownik +')"></div>';
      		   	   
      		   	// Ignorowanie użytkownika
							if (Uczestnik.id_uzytkownik != UserID) HTML += '<div title="' + (Ignorowany ? 'Przestań ignorować użytkownika &laquo;' + Uczestnik.login + '&raquo;' : 'Ignoruj użytkownika &laquo;' + Uczestnik.login + '&raquo;') + '" class="Czat_Uczestnik_Ikona_Blokuj' + (Ignorowany ? '_Blokada' : '') +'" onClick="Czat_Serwer_IgnorujUzytkownika('+ Uczestnik.id_uzytkownik +')"></div>';      		   		
					   };

            // Ikony pokazywane zawsze					   
					   // Profil użytkownika
							HTML += '<div style="float: right" title="Profil użytkownika &laquo;' + Uczestnik.login + '&raquo;" class="Czat_Uczestnik_Ikona_Profil" onClick="Profil_Okno(\''+ Uczestnik.id_uzytkownik +'\')"></div>';      		   		
      	   
      	   HTML += '</div>';
      	   HTML += '</div>';
      	}
      	
   // Wyświetl listę pokoi
      Czat_ListaUczestnikow.innerHTML = HTML;
   }
	
/*
 * Funkcja odświeża listę pokoi
 */
function Czat_OdswiezListePokoi()
   {
   // Jeżeli aktualnie nie jest wybrana strona 'Czat' to nic nie rób
      var Czat_ListaPokoi = document.getElementById('Czat_ListaPokoi');
      if (Czat_ListaPokoi == null) return;
   
   // Usuń wszystkie pokoje z listy
  	   var HTML = "";
      
   // Wypisz wszystkie pokoje
      for (i = 0; i < Czat_Pokoje.length; i++)
      	{
      	// Pobierz definicję pokoju
      		var Pokoj = Czat_Pokoje[i];
      		
      	// Jeżeli pokój prywatny to pozwól na zamknięcie
      	   var Zamknij = '';
      	   if (Pokoj.typ == 'P') Zamknij = '<div title="Zakończ rozmowę prywatną z &laquo;' + Pokoj.nazwa + '&raquo;" onClick="Czat_Serwer_ZakonczRozmowe(' + Pokoj.id + ')" id="Czat_Pokoj_Zamknij_' + Pokoj.id + '" class="Czat_Pokoj_Zamknij"></div>';
      	   
      	// Utwórz nowy pokój
      	   var Klasa = "Czat_ZakladkaPokoj_Inny";
      	   if (Czat_Pokoj == Pokoj.id) Klasa = "Czat_ZakladkaPokoj_Aktywna";
      	   else if (Pokoj.wypowiedz)   Klasa = "Czat_ZakladkaPokoj_NowaWypowiedz";
      	   
      	   HTML += '<div title="Przełącz do pokoju &laquo;' + Pokoj.nazwa + '&raquo;" class="' + Klasa + '" onClick="Czat_ZmienPokoj(' + Pokoj.id + ')">' + Pokoj.nazwa + Zamknij + '</div>';
      	}
      	
   // Wyświetl listę pokoi
      Czat_ListaPokoi.innerHTML = HTML;
   }

/*
 * Funkcja odświeża okno wypowiedzi (rozmowy) dla aktualnego pokoju
 */
function Czat_OdswiezWypowiedzi()
   {
   // Obsługa suwaka - część a (sprawdzenie czy suwak był na końcu)
      var SuwakNaKoncu = Czat_OknoRozmowy.scrollTop >= Czat_OknoRozmowy.scrollHeight - Czat_OknoRozmowy.offsetHeight;

   // Przenalizuj wypowiedzi należące do danego pokoju i określ, od której wiadomości wyświetlać aby nie przekroczyć Czat_MaxWiadomosci
      var TMPWiadomosci = new Array();
      var odID          = 0;					// od którego id wyświetlać
      for (i = 0; i < Czat_Wypowiedzi.length; i++) if ((!Czat_Wypowiedzi[i].wyswietlona) && (Czat_Wypowiedzi[i].id_pokoj == Czat_Pokoj) && ((Czat_Wypowiedzi[i].tresc.charAt(0) != '#') || (Czat_Wypowiedzi[i].id_uzytkownik > 0)))
      	{
      	TMPWiadomosci[TMPWiadomosci.length] = Czat_Wypowiedzi[i].id;
      	};
      if (TMPWiadomosci.length > Czat_MaxWypowiedzi)
         {
         odID = TMPWiadomosci[TMPWiadomosci.length  - Czat_MaxWypowiedzi];
         }
   
   // Przeanalizuj wszystkie wypowiedzi i wybierz te, które dotyczą danego pokoju i nie były jeszcze wyświetlone
	   var HTML = "";
   
      for (i = 0; i < Czat_Wypowiedzi.length; i++) if ((!Czat_Wypowiedzi[i].wyswietlona) && (Czat_Wypowiedzi[i].id_pokoj == Czat_Pokoj) && ((Czat_Wypowiedzi[i].tresc.charAt(0) != '#') || (Czat_Wypowiedzi[i].id_uzytkownik > 0)))
      	{
			// Pobierz wypowiedz
			   var Wypowiedz = Czat_Wypowiedzi[i];
			   
			// Dodaj wypowiedź tylko wtedy gdy zakwalifikowana do wyświetlenia
			   if (Wypowiedz.id >= odID)
			      {
      			// Sformatuj wypowiedz
					   HTML += '<div class="Czat_Wypowiedz">';
					   HTML += '<span class="Czat_Wypowiedz_Czas">' + Wypowiedz.czas + '</span>';
			   
					   // Informacje systemowe
					      if (Wypowiedz.id_uzytkownik == 0)
					         {
					         HTML += '<span class="Czat_Wypowiedz_Autor' + Wypowiedz.plec + '">' + Wypowiedz.tresc + '</span>';
					         };
			         
					   // Wypowiedzi standardowe
					      if (Wypowiedz.id_uzytkownik != 0)
					         {
		   			      HTML += '<span class="Czat_Wypowiedz_Autor' + Wypowiedz.plec + '">' + Wypowiedz.autor + ":</span> ";
			   		      HTML += Wypowiedz.tresc;
			   		      };
			   
					   HTML += '</div>';
					};
			   
			// Oznacz wypowiedź jako wyświetloną
			   Wypowiedz.wyswietlona = true;
      	}
	   if (HTML != '') Czat_OknoRozmowy.innerHTML += HTML;

    
   // Obsługa suwaga - część b (przesuń suwak na koniec, jeżeli był na końcu)
      if (SuwakNaKoncu)
      	{
      	Czat_OknoRozmowy.scrollTop = Czat_OknoRozmowy.scrollHeight;
      	setTimeout('Czat_OknoRozmowy.scrollTop=Czat_OknoRozmowy.scrollHeight',50);	// bug w IE (Eventum Issue #3)
      	}
	};

/*
 * Funkcja obsługująca przychodzące zdarzenie (wypowiedź systemowa od użytkownika o ID = 0)
 */
function Czat_ObsluzZdarzenie(Wypowiedz)
	{

	// Przy pierwszym pobraniu nie obsługuj wypowiedzi o id <> -1
	   if ((PierwszePobranie) && (Wypowiedz.id != -1)) return;
	   
	var EventText = Wypowiedz.tresc;
	
	// Ustal nazwę zdarzenia (#Event:_nazwa_zdarzenia_(parametr1,parametr2,...)
	   var Event = EventText.substring(EventText.indexOf(':') + 1,EventText.indexOf('('));
	   
	// Ustal parametry
	   var Param = EventText.substring(EventText.indexOf('(') + 1,EventText.lastIndexOf(')')).split(',');
	
	// Obsługa konkretnego zdarzenia
	
   	// Nowy pokój | #Event:NewRoom(id_pokoj,typ,nazwa)
   	   if (Event == 'NewRoom')
   	   	{
   	   	// Sprawdź czy taki pokój nie istnieje, jeżeli tak to nic nie rób
	      	   for (i = 0; i < Czat_Pokoje.length; i++) 
	      	      if (Czat_Pokoje[i].id == Param[0]) return;
   	   	
   	   	// Odtwórz dźwięk (tylko gdy pokój prywatny i gdy nie pierwsze wyświetlenie)
               if (!PierwszePobranie) Profil_OdtworzDzwiek('/Pliki/SoundManager2/Sounds/newroom.mp3');		   	   	
               
   	   	// Nazwa pokoju prywatnego ma postać "zapraszający:zapraszany", usuń z nazwy znak ":" oraz login użytkownika
   	   	   Param[2] = Param[2].replace(':','');
   	   	   Param[2] = Param[2].replace(UserName, '');
   	   	   
   	   	// Utwórz nowy pokój
      	   	var i = Czat_Pokoje.length;
      	   	Czat_Pokoje[i] 						= new Array();
      	   	Czat_Pokoje[i].id 					= Param[0];
      	   	Czat_Pokoje[i].typ					= Param[1];
      	   	Czat_Pokoje[i].nazwa 				= Param[2];
      	   	Czat_Pokoje[i].wypowiedz 			= false;
      	   	Czat_OdswiezListePokoi();
   	   	}
	   
	   // Nowy uczestnik | #Event:NewUser(id_uzytkownik,login,płeć) | id_pokoj - ustalane na podstawie id_pokoj wypowiedzi
	      if (Event == 'NewUser')
	      	{
	      	// Sprawdź czy użytkownik nie jest już na liście uczestników danego pokoju (wówczas nic nie rób)
	      	   for (i = 0; i < Czat_Uczestnicy.length; i++) 
	      	      if ((Czat_Uczestnicy[i].id_pokoj == Wypowiedz.id_pokoj) && (Czat_Uczestnicy[i].id_uzytkownik == Param[0])) return;

	      	// Dodaj użytkownika
   	      	var i = Czat_Uczestnicy.length;
    	      	Czat_Uczestnicy[i]               = new Array();
   	      	Czat_Uczestnicy[i].id_pokoj      = Wypowiedz.id_pokoj;
   			   Czat_Uczestnicy[i].id_uzytkownik = Param[0];
   			   Czat_Uczestnicy[i].login      	= Param[1];
   			   Czat_Uczestnicy[i].plec 			= Param[2];
   			   
   			   Czat_OdswiezListeUczestnikow();
   			   
   			// Zamień zdarzenie na opis (tylko gdy dotyczy innego uczestnika i nie przy pierwszym pobraniu)
   			   if ((Param[1] != UserName) && (!PierwszePobranie)) Wypowiedz.tresc = "przychodzi " + Param[1];
   			   
   	   	// Odtwórz dźwięk (tylko gdy na kanale ogólnym i gdy nie pierwsze wyświetlenie)
               if ((!PierwszePobranie) && (Wypowiedz.id_pokoj == 1)) Profil_OdtworzDzwiek('/Pliki/SoundManager2/Sounds/newuser.mp3');		   	   	
	      	}
	      	
	   // Usunięcie uczestnika | #Event:DelUser(id_uzytkownik) | id_pokoj - ustalane na podstawie id_pokoj wypowiedzi
	   //                                                      | gdy id_pokoj == 1 to usuń użytkownika ze wszystkich pokoi
	      if (Event == 'DelUser')
	      	{
	      	// Usuń użytkownika z danego pokoju lub ze wszystkich pokoi jeżeli wypowiedź (zdarzenie) pojawiło się na kanale ogólnym (id_pokoj == 1)
		      	var j;
		      	var login = '';
		      	do
		      		{
		      		// Znajdź index w tablicy Czat_Uczestnik, który należy usunąć
			      		j = -1;
			      		for (i = 0; i < Czat_Uczestnicy.length; i++) if ((Czat_Uczestnicy[i].id_uzytkownik == Param[0]) && ((Czat_Uczestnicy[i].id_pokoj == Wypowiedz.id_pokoj) || (Wypowiedz.id_pokoj == 1))) j = i;
	   
	   				// Jeżeli znaleziono taki rekord to usuń (nadpisując pozostałe rekordy w prawo)   		
		      			if (j != -1)
		      				{
		      				login = Czat_Uczestnicy[j].login;
		      				for (i = j; i < Czat_Uczestnicy.length - 1; i++) Czat_Uczestnicy[i] = Czat_Uczestnicy[i + 1];
		      				Czat_Uczestnicy.length--;
		      				}
		      		} while (j != -1);

   			// Zamień zdarzenie na opis (tylko gdy dotyczy innego uczestnika i nie przy pierwszym pobraniu)
   			   if ((Param[0] != UserID) && (!PierwszePobranie) && (login != '') && (Wypowiedz.id_pokoj != 1)) Wypowiedz.tresc = login + " zamknął okno rozmowy";
   			   if ((Param[0] != UserID) && (!PierwszePobranie) && (login != '') && (Wypowiedz.id_pokoj == 1)) Wypowiedz.tresc = "odchodzi " + login;
	      	
	      	// Odśwież listę uczestników
	      	   Czat_OdswiezListeUczestnikow();
	      	}
	      	
   	// Nowa blokada (ignorowanie rozmów prywatnych przez danego użytkownika) | #Event:NewBlock(id_uzytkownik,poziom)
   	//                                                                       | poziom: 1 - blokada Twoich zaproszeń, 2 - blokada wszystkich zaproszeń
   	//                                                                       | id_uzytkownik > 0 - blokują nas, < 0 - my blokujemy
   	   if (Event == 'NewBlock')
   	   	{
   	   	// Ignoruj zdarzenie gdy pochodzi ode mnie
   	   	   if (Param[0] == UserID) return;
   	   	   
   	   	// Informacja o blokadzie nakładanej przez użytkownika na nas (id_uzytkownik > 0)
   	   	   if (Param[0] > 0)
   	   	   	{
   	   	   	if (Czat_Ignoruje[Param[0]] == NaN) Czat_Ignoruje[Param[0]] = 0;
  	   	   	   if (Param[1] == 1) Czat_Ignoruje[Param[0]] = (Czat_Ignoruje[Param[0]] & 2) + 1;
  	   	   	   if (Param[1] == 2) Czat_Ignoruje[Param[0]] = (Czat_Ignoruje[Param[0]] & 1) + 2;
		   	   	}
		   	   	   	
				// Informacja o blokadzie, którą my nałożyliśmy (id_uzytkownik <= 0, 0 gdy zakładamy blokadę ogólną)
					if (Param[0] <= 0)
						{
						// Jeżeli ignorowanie ogólne to zapamiętaj, że ignorujemy wszystkich
   						if (Param[0] == 0)
   							{
   							Czat_IgnorujRozmowy = true;
   							return;
   							}
   							
   					// Ignorowanie konkretnego uczestnika
    	   	   	   Czat_Ignorowany[-Param[0]] = 1;
						}		   	   	   	
   	   	   
   	   	// Odśwież listę uczestników
   	   	   Czat_OdswiezListeUczestnikow();
   	   	}

   	// Zdjęcie blokady (anulowanie ignorowania rozmów prywatnych przez danego użytkownika) | #Event:DelBlock(id_uzytkownik,poziom)
   	   if (Event == 'DelBlock')
   	   	{
   	   	// Ignoruj zdarzenie gdy pochodzi ode mnie
   	   	   if (Param[0] == UserID) return;

   	   	// Informacja o zdjęciu blokady przez innego użytkownika z nas (id_uzytkownik > 0)
   	   	   if (Param[0] > 0)
   	   	   	{
   	   	   	if (Czat_Ignoruje[Param[0]] == NaN) Czat_Ignoruje[Param[0]] = 0;
  	   	   	   if (Param[1] == 1) Czat_Ignoruje[Param[0]] = Czat_Ignoruje[Param[0]] & 2;
  	   	   	   if (Param[1] == 2) Czat_Ignoruje[Param[0]] = Czat_Ignoruje[Param[0]] & 1;
   			      }
   			     
				// Informacja o zdjęciu przez nas blokady (id_uzytkownik <= 0, 0 gdy zdejmujemy blokadę ogólną)
					if (Param[0] <= 0)
						{
						// Jeżeli anulowanie ogólnego ignorowania to zapamiętaj
   						if (Param[0] == 0)
   							{
   							Czat_IgnorujRozmowy = false;
   							return;
   							}
   						
   					// Anulowanie ignorowania konkretnej osoby
    	   	   	   Czat_Ignorowany[-Param[0]] = 0;
  					}		   	   	   	
   	   	   
   	   	// Odśwież listę uczestników
   	   	   Czat_OdswiezListeUczestnikow();
   	   	}
	}

/*
 * Funkcja wysyła wiadomość na aktywny pokój czata
 */
function Czat_Serwer_WyslijWiadomosc(Input)	
   {
   // Przechwyć treść
      var Tresc = Input.value;

   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMPCzat_ZadanieAjax = null;
      TMPCzat_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Czat', "");
      TMPCzat_ZadanieAjax.AddVariable('Polecenie','NowaWypowiedz');
      TMPCzat_ZadanieAjax.AddVariable('PokojID'  ,Czat_Pokoj);
      TMPCzat_ZadanieAjax.AddVariable('Tresc'    ,Tresc);
      TMPCzat_ZadanieAjax.Send();
   
   // Wykasuj zawartość pola wypowiedzi
      Input.value = '';
   };

/*
 * Funkcja wysyła zaproszenie do rozmowy dla danego użytkownika
 */
function Czat_Serwer_WyslijZaproszenie(ID_Uzytkownik)	
   {
   // Sprawdź czy użytkownik nie blokuje rozmów prywatnych
      for (i = 0; i < Czat_Uczestnicy.length; i++) if ((Czat_Uczestnicy[i].id_uzytkownik == ID_Uzytkownik) && (Czat_Ignoruje[ID_Uzytkownik]))
      	{
      	alert ("Użytkownik ignoruje rozmowy prywatne.");
      	return;
      	}

   // Sprawdź czy nie blokujemy tego użytkownika (ale tylko szczegółowo, a nie ogólnie)
      for (i = 0; i < Czat_Uczestnicy.length; i++) if ((Czat_Uczestnicy[i].id_uzytkownik == ID_Uzytkownik) && (Czat_Ignorowany[ID_Uzytkownik]))
      	{
      	alert ("Ignorujesz rozmowy prywatne z tym użytkownikiem. Anuluj blokadę jeżeli chcesz nawiązać rozmowę prywatną.");
      	return;
      	}
      	
   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMPCzat_ZadanieAjax = null;
      TMPCzat_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Czat', "");
      TMPCzat_ZadanieAjax.AddVariable('Polecenie'   ,'NoweZaproszenie');
      TMPCzat_ZadanieAjax.AddVariable('ID_Uzytkownik',ID_Uzytkownik);
      TMPCzat_ZadanieAjax.Send();
   };

/*
 * Zamyka okno rozmowy prywatnej
 */
function Czat_Serwer_ZakonczRozmowe(ID_Pokoj)	
   {
   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMPCzat_ZadanieAjax = null;
      TMPCzat_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Czat', "");
      TMPCzat_ZadanieAjax.AddVariable('Polecenie'   ,'KoniecRozmowy');
      TMPCzat_ZadanieAjax.AddVariable('ID_Pokoj'     ,ID_Pokoj     );
      TMPCzat_ZadanieAjax.Send();
      
   // Usuń pokój z listy pokoi
      var j = 0;	// index w tablicy wskazujący na usuwany element... usuwanie za pomocą nadpisywania w lewo...
      for (i = 0; i < Czat_Pokoje.length; i++) if (Czat_Pokoje[i].id == ID_Pokoj) j = i;
      for (i = j; i < Czat_Pokoje.length - 1; i++) Czat_Pokoje[i] = Czat_Pokoje[i + 1];
      Czat_Pokoje.length--;
      	
   // Jeżeli zamykany pokój był pokojem aktywnym to przełącz na kanał ogólny
      if (ID_Pokoj == Czat_Pokoj) Czat_ZmienPokoj(1)
      
   // Odśwież listę pokoi
      Czat_OdswiezListePokoi();
   };

/*
 * Ignoruje lub anuluje ignorowanie użytkownika
 */
function Czat_Serwer_IgnorujUzytkownika(ID_Uzytkownik)	
   {
/*   
   // Jeżeli ignorowanie/anulowanie wszystkich to odwóć ten rodzaj ignorowania
      if (ID_Uzytkownik == 0) Czat_IgnorujRozmowy = !Czat_IgnorujRozmowy;
      
   // Ignorowanie lub anulowanie ignorowania konkretnego użytkownika (gdy ID_Uzytkownik != 0) lub wszystkich użytkowników (gdy ID_Uzytkownik == 0)
   // poziom ignorowania można wyliczyć ze wzoru: ignorowany =  1 * [czy_ignorować_szczegolowo] + 2 * [czy_ignorować_ogolnie]
	   for (i = 0; i < Czat_Uczestnicy.length; i++) if ((Czat_Uczestnicy[i].id_uzytkownik != UserID) && ((ID_Uzytkownik == 0) || (Czat_Uczestnicy[i].id_uzytkownik == ID_Uzytkownik)))
   	    {
   		 if (ID_Uzytkownik == 0) Czat_Uczestnicy[i].ignorowany = (Czat_Uczestnicy[i].ignorowany & 1) + (Czat_IgnorujRozmowy * 2);
   		 else                    Czat_Uczestnicy[i].ignorowany = (Czat_Uczestnicy[i].ignorowany & 1 == 1 ? 0 : 1) + (Czat_IgnorujRozmowy * 2);
   		 }
*/

   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMPCzat_ZadanieAjax = null;
      TMPCzat_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Czat', "");
      TMPCzat_ZadanieAjax.AddVariable('Polecenie'   ,'IgnorujUzytkownika');
      TMPCzat_ZadanieAjax.AddVariable('ID_Uzytkownik',ID_Uzytkownik);
      TMPCzat_ZadanieAjax.Send();
      
   // Odśwież listę użytkowników
   	//Czat_OdswiezListeUczestnikow();
   };


/*
 * Funkcja pobiera z serwera nowe wypowiedzi
 */
function Czat_Serwer_PobierzWypowiedzi()	
   {
   // Jeżeli aktualnie nie jest wybrana strona 'Czat' to nic nie rób
      Czat_OknoRozmowy = document.getElementById('Czat_OknoRozmowy');
      if (Czat_OknoRozmowy == null) return;
   
   // Przygotuj żądanie AJAX
      Czat_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Czat', "");
      Czat_ZadanieAjax.AddVariable('Polecenie','PobierzWypowiedzi');
      Czat_ZadanieAjax.AddVariable('OdID'     ,Czat_MaxWypowiedzID);
      
   // Ustaw funkcję zwrotną, wyślij żądanie AJAX
      Czat_ZadanieAjax.HTTPRequest.onreadystatechange = Czat_PrzetworzXML;
      Czat_ZadanieAjax.Send();
      
   // Ustaw na wszelki wypadek ponowne żądanie pobrania wypowiedzi za 20sekund
   // Żadanie powinno być automatycznie ponowione po odebraniu danych - ale w przypadku zerwania połączenia
   // chat zawiesiłby się i wymagałoby to ponownego odświeżenia zakładki. Gdy dane zostaną poprawnie odebrane
   // to poniższe ustawienie zostanie zresetowane i zastąpione innym
      Czat_TimerID = setTimeout("Czat_Serwer_PobierzWypowiedzi()", 20000);	
         
   };
   
/*
 * Funkcja przetwarza odpowiedź XML serwera uzupełniając zmienne Czat_Wypowiedzi...
 */
function Czat_PrzetworzXML()
   {
   if ((Czat_ZadanieAjax.HTTPRequest.readyState == 4) && (Czat_ZadanieAjax.HTTPRequest.status == 200))
      {
      //soundManager.play('beeplit');
      
      var OdpXML     = Czat_ZadanieAjax.HTTPRequest.responseXML;
      var Wypowiedzi = OdpXML.getElementsByTagName('wypowiedz');

      for (var n = 0; n < Wypowiedzi.length; n++) 
        {
        // Pobierz atrybuty wypowiedzi - z odpowiedzi serwera
           var Atrybuty  = Wypowiedzi.item(n).childNodes;  
        
        // Utwórz w tablicy miejsce na nową wypowiedź
           Czat_Wypowiedzi[Czat_Wypowiedzi.length] = new Array();
           var Wypowiedz = Czat_Wypowiedzi[Czat_Wypowiedzi.length - 1];  // Nowa pozycja w tablicy wypowiedź
        
        // Mapuj atrybuty wypowiedzi pobranej z serwera (XML) na nową wypowiedź w tablicy Czat_Wypowiedzi
           for (var i = 0; i < Atrybuty.length; i++) if (Atrybuty[i].nodeType == 1)
              {
              Wypowiedz[Atrybuty[i].nodeName] = Atrybuty[i].firstChild.nodeValue;
              }
            
        // Zapamiętaj numer wypowiedzi jako max. pobraną wypowiedź
           Czat_MaxWypowiedzID = Math.max(Wypowiedz.id, Czat_MaxWypowiedzID);
                 
        // Oznacz wypowiedź jako niewyświetloną
           Wypowiedz.wyswietlona = false;
           
        // Wyróżnij, że w pokoju pojawiła się nowa nieprzeczytana wypowiedź
           var NowaWypowiedz = false; // czy nowa wypowiedź nie będąca zdarzeniem systemowym?
           for (j = 0; j < Czat_Pokoje.length; j++) if ((Czat_Pokoje[j].id == Wypowiedz.id_pokoj) && (Wypowiedz.id_uzytkownik != 0))
              {
              Czat_Pokoje[j].wypowiedz = true;
              NowaWypowiedz            = true;
              };
           
        // Jeżeli autor wypowiedzi ma ID = 0 (zdarzenie systemowe) to obsłuż zdarzenie
           if (Wypowiedz.id_uzytkownik == 0) Czat_ObsluzZdarzenie(Wypowiedz);
        }
        
      // Jeżeli pojawiły się nowe wypowiedzi (UWAGI niżej)
         if (Wypowiedzi.length > 0)
	      	{  
		      // Odśwież okno z rozmowami	// UWAGA: Sprawdzić czy jest konieczność odświeżania okna z wypowiedziamy (czy są nowe wypowiedzi w danym kanale)
	   	      Czat_OdswiezWypowiedzi();

		      // Odśwież listę pokoi			// UWAGA: Sprawdzić czy jest konieczność oświeżenia listy kanałów
		         Czat_OdswiezListePokoi();
		         
		      // Dźwięk z wypowiedzią
		      if (NowaWypowiedz) Profil_OdtworzDzwiek('/Pliki/SoundManager2/Sounds/beeplit.mp3');
            }
        
      // Zaprogramuj ponowne wywołanie
         clearTimeout(Czat_TimerID);
         Czat_TimerID = setTimeout("Czat_Serwer_PobierzWypowiedzi()", Czat_Timer_Odstep);	
         
      // Odśwież ustawienia przy pierwszym pobraniu
         if (PierwszePobranie)
            {
            Czat_OdswiezUstawienia();
            }
            
      // Zapamiętaj, że pobrano już wszystkie początkowe informacje
         PierwszePobranie    = false;
         if (Czat_MaxWypowiedzID == -1) Czat_MaxWypowiedzID = 0;
      };
   }
   
// Rozpocznij obsługę CZAT
// UWAGA: Timer powinien być startowany tylko wtedy gdy aktywna strona to 'Czat'   
   Czat_TimerID = setTimeout("Czat_Serwer_PobierzWypowiedzi()", Czat_Timer_Odstep);	   
/*
 * Podstawowa obsługa mechanizmu AJAX
 * na podstawie strony: http://developer.mozilla.org/en/docs/AJAX:Getting_Started
 * uzupełnione o komunikację poprzez sloty IFRAME
 */

var Ajax_CurrentSlot = 1;
var Ajax_MaxSlots    = 4;

function Ajax(url, callback)
   {
   // Atrybuty publiczne
      this.Method           = "POST";			// Aktualnie: tylko POST
      this.IsAsynchronous   = true;				// 
      this.URL              = url;				//	
      
   // Atrybuty prywatne
      this.AjaxSlot         = null;				// slot (obiekt Ajax), który będzie wykorzystany do wysłania żądania)
      this.HTTPRequest      = null;				// obiekt żądania
   
   /*
    * Dodanie zmiennych do żądania
    */
   this.AddVariable = function(Name, Value)
      {
      this.AjaxSlot.AddVariable(Name, Value);
      }
   
   /*
    * Wysłanie żądania do serwera
    */ 
   this.Send = function()
      {
      this.AjaxSlot.Method         = this.Method;
      this.AjaxSlot.IsAsynchronous = this.IsAsynchronous;
      this.AjaxSlot.URL            = this.URL;
      
      this.AjaxSlot.Send();
      }
    
   /*
    * Kod konstruktora
    */
   if ((frames['AJAXSlot' + Ajax_CurrentSlot] == undefined) || (frames['AJAXSlot' + Ajax_CurrentSlot].Ajax == undefined))
      {
      // Jeżeli brak slotów lub sloty nie są jeszcze gotowe to utwórz połączenie bez użycia slotów
         this.AjaxSlot = new Ajax2(url, callback);   
         this.HTTPRequest = this.AjaxSlot.HTTPRequest;
      }
   else
      {
      // Wykorzystaj kolejny slot (cyklicznie)
         this.AjaxSlot = new frames['AJAXSlot' + Ajax_CurrentSlot].Ajax(url, callback);   
         this.HTTPRequest = this.AjaxSlot.HTTPRequest;
         Ajax_CurrentSlot++; if (Ajax_CurrentSlot > Ajax_MaxSlots) Ajax_CurrentSlot = 1;
      }
   }

function Ajax2(url, callback)
   {
   // Atrybuty publiczne
      this.Method           = "POST";			// Aktualnie: tylko POST
      this.IsAsynchronous   = true;				// 
      this.URL              = url;				//	
      
   // Atrybuty prywatne
      this.HTTPRequest      = null;				// obiekt żądania
      this.PostData         = "";            // łańcuch zmiennych w postaci POST (z1=w1&z2=w2...)
   
   /*
    * Dodanie zmiennych do żądania
    */
   this.AddVariable = function(Name, Value)
      {
      if (this.PostData.length > 0) this.PostData += '&';
      this.PostData += Name + "=" + encodeURIComponent(Value);
      }
      
   /*
    * Wysłanie żądania do serwera
    */ 
   this.Send = function()
      {
      this.HTTPRequest.open(this.Method, this.URL, this.IsAsynchronous);
      this.HTTPRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.HTTPRequest.setRequestHeader("Pragma", "no-cache");
		this.HTTPRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
      this.HTTPRequest.send(this.PostData);
      }
    
   /*
    * Kod konstruktora
    */
   
      // Tworzenie obiektu this.HTTPRequest
         if (window.XMLHttpRequest) {this.HTTPRequest = new XMLHttpRequest(); if (this.HTTPRequest.overrideMimeType) this.HTTPRequest.overrideMimeType('text/xml'); } 
         else if (window.ActiveXObject) {try {this.HTTPRequest = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {try {this.HTTPRequest = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {} } }
   }
   
   /*
 *
 */
 
/*
 * Otwiera podany dokument w oknie
 */ 
var okno;
function Window(Dokument, Szerokosc, Wysokosc, NazwaOkna)
    {
    okno = window.open('',NazwaOkna,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars,width='+(Szerokosc+20)+',height='+Wysokosc);
    okno.resizeTo(Szerokosc+20,Wysokosc);
    okno.location = Dokument;
    okno.focus();
    }
    
/*
 * Funkcja ustawia widoczność (przeźroczystość) danego elementu z aktualnej na żądaną
 * Element  - któremu elementowi ustalamy przeźroczystość
 * Poziom   - wartość 0 - 100 (% widoczności 0 - brak, 100 - pełna)
 * Krok     - co ile ma wzrastać widoczność
 * Interwal - czas w ms pomiędzy kolejnymi krokami
 */    
function Element_FadeToLevel(Element, Poziom, Krok, Interwal)
   {
   
   
   }/*
 * Szablon
 * Zapewnienie 100% wysokości strony
 */

function DostosujStrone() 
	{
   var Kontener 				= document.getElementById("Kontener");
   var Tresc    				= document.getElementById("Tresc");
   var Body                = document.getElementById("Body");

   // Nie wykonuj dostosowania gdy elementy nie istnieją (np. strony wyświetlane w postaci okna)
	   if (Tresc == null) return;

   // Dostosuj wysokość obszaru treści   
      Body.style.display = '';
      var Wysokosc = (Kontener.clientHeight - 152 - 40);
      if (Wysokosc > 470) 
      	{
         Tresc.style.minHeight = Wysokosc + "px";
         }
      else
      	{
      	Tresc.style.minHeight = "470px";
      	};
	}

window.onload 	 = DostosujStrone;
window.onresize = DostosujStrone;

var Profil_Okno_ZadanieAjax = null;

function Profil_OdtworzDzwiek(Plik)
   {
   // Jeżeli wyciszenie to nic nie rób
      if (Profil_Dzwiek_Wyciszenie)
         {
         return;
         };
         
   // Spróbuj odtworzyć dźwięk
      var obj = "sound" + Math.ceil(1000000 * Math.random())
      try {
	       soundManager.play(obj,Plik);
	       soundManager.setVolume(obj,Profil_Dzwiek_Glosnosc * !Profil_Dzwiek_Wyciszenie);
	       } catch (err) {};
   }
   
/*
 * 
 */
function Profil_Okno(ID_Uzytkownik)
   {
   // Pokaż okno do wpisywania wiadomości
      var Profil_Okno = document.getElementById('Profil_Okno');
      Profil_Okno.innerHTML     = "<div style='margin-top: 200px; margin-left: 340px'>wczytywanie danych...</div>";
      Profil_Okno.style.display = '';
      
   // Ustal pozycję okna
      Profil_Okno.style.left   = (document.documentElement.clientWidth  / 2 - 337) + "px";
      Profil_Okno.style.top    = (document.documentElement.clientHeight / 2 - 222) + "px";
		
   // Przygotuj żądanie AJAX
      Profil_Okno_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Profil/Podglad/' + ID_Uzytkownik, "");
      
   // Ustaw funkcję zwrotną, wyślij żądanie AJAX
      Profil_Okno_ZadanieAjax.HTTPRequest.onreadystatechange = Profil_Okno_WczytajProfil;
      Profil_Okno_ZadanieAjax.Send();
   }
   

/*
 * 
 */
function Profil_WyslijWiadomosc(ID_Uzytkownik, Temat, Tresc)
   {
   // Jeżeli brak tematu lub treści to komunikat
      if ((Temat == '') || (Tresc == ''))
         {
         alert ('Musisz uzupełnić temat oraz treść wiadomości');
         return;
         }
         
   // Przygotuj żądanie AJAX
      var TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Profil/WyslijWiadomosc/' + ID_Uzytkownik, "");
      TMP_ZadanieAjax.AddVariable('Temat', Temat);
      TMP_ZadanieAjax.AddVariable('Tresc', Tresc);
      
   // Ustaw funkcję zwrotną (potwierdzenie / wyczyszczenie wiadomości / zmiana zakładki)
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
      	{
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         document.getElementById('Profil_Okno_OdpowiedzSerwera').innerHTML = TMP_ZadanieAjax.HTTPRequest.responseText;
	         document.getElementById('Profil_Okno_OdpowiedzSerwera').style.display = '';
	         setTimeout("document.getElementById('Profil_TematWiadomosci').value=''; document.getElementById('Profil_TrescWiadomosci').value=''; document.getElementById('Profil_Okno_OdpowiedzSerwera').style.display = 'none'; document.getElementById('Profil_Okno').style.display='none';", 2000);
            }
      	}
      	
   // Wyślij żądanie AJAX
      TMP_ZadanieAjax.Send();
   }
   
/*
 * Funkcja wczytuje z serwera profil użytkownika i wyświetla w ramce
 */
function Profil_Okno_WczytajProfil()
   {
   if ((Profil_Okno_ZadanieAjax.HTTPRequest.readyState == 4) && (Profil_Okno_ZadanieAjax.HTTPRequest.status == 200))
      {
      document.getElementById('Profil_Okno').innerHTML = Profil_Okno_ZadanieAjax.HTTPRequest.responseText;
      }
   }


/*
 * Funkcja wysyła na serwer paczkę z ustawieniami (preferencjami) profilu
 */
function Profil_ZapiszUstawienia()
   {
   // Utwórz i wyślij nowe żądanie Ajax (bezzwrotne)
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Profil/Ustawienia', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'             ,'ZapiszUstawienia');
      TMP_ZadanieAjax.AddVariable('Dzwiek_Glosnosc'        ,Profil_Dzwiek_Glosnosc);
      TMP_ZadanieAjax.AddVariable('Dzwiek_Wyciszenie'      ,Profil_Dzwiek_Wyciszenie);
      TMP_ZadanieAjax.AddVariable('Powiadomienie_Ukrywanie',Profil_Powiadomienie_Ukrywanie);
      TMP_ZadanieAjax.Send();
   };   

   
/*
 * Funkcja pobiera z serwera ustawienia / preferencje profilu
 */
function Profil_WczytajUstawienia()
   {
   // Utwórz i wyślij nowe żądanie Ajax
      var TMP_ZadanieAjax = null;
      TMP_ZadanieAjax = new Ajax('/Strona/AJAXKontroler/Profil/Ustawienia', "");
      TMP_ZadanieAjax.AddVariable('Polecenie'                             ,'WczytajUstawienia');
      TMP_ZadanieAjax.HTTPRequest.onreadystatechange = function()
         {
         if ((TMP_ZadanieAjax.HTTPRequest.readyState == 4) && (TMP_ZadanieAjax.HTTPRequest.status == 200))
            {
	         eval(TMP_ZadanieAjax.HTTPRequest.responseText);
            }
         };
      
      TMP_ZadanieAjax.Send();
      
   // Wykonaj kod JS
//      eval(TMP_ZadanieAjax.HTTPRequest.responseText);
   };

// Wczytaj wszelkie zmienne / preferencje profilu
   Profil_WczytajUstawienia();   
