/*
* metoda sluzy do wysylania zapytan do serwera przyjmuje trzy parametry 
*(adres zapytania, identyfikator elementu, do ktorego ma zostac wpisany rezultat i identyfikator elementu do usuniecia)
* drugie i trzecie pola sa opcjonalne - jezeli zbedne nalezy podac null
*/
function SendRequest(link, id, idremove){
	//na potrzeby nieruchomosci
	$('sciema').style.display='block';
	//mint.fx.Fade("sciema",60,20,500);
	//---------------------------
	if(id==null)id="mainWND";
	if(!windowsObj){
		return null;
	}
	if(windowsObj.hasByName(id)){
		var wnd=windowsObj.getWindow(id);
	}
	else{
		return null;
	}
	if(wnd){
		if(wnd.WNDStat>0){
			var req=mint.Request();
			req.method='POST';
			req.OnLoading = function(){
				if(wnd.intervalSend){
					window.clearTimeout(wnd.intervalSend);
					wnd.intervalSend=null;
				}
			}
			req.OnSuccess = function(){
				update(this.responseText,id,idremove);
				$("sciema").style.display='none';
				wnd.updateContentOff();
			}
			req.OnAbort=function(){ //problem komunikacji z serwerem
				//komunikat o bledzie
				//tu odblokowanie okienka od request
				wnd.updateContentOff();
			}
			req.OnError=function(){
				//komunikat o bledzie
				//tu odblokowanie okienka od request
				wnd.updateContentOff();
			}
			if(!wnd.isRequesting){
				wnd.updateContentOn();
				req.Send(link);
			}
			else{
				if(!wnd.intervalSend){
					//wnd.intervalSend=window.setTimeout('SendRequest("'+link+'", "'+id+'", "'+idremove+'");',1000);
				}
			}
		}
	}
}

/*
* metoda umozliwia wysylanie formularzy
* wymaga parametrow form_n - nazwa formularza do wyslania, link - adres zapytania
* parametry opcjonalne: idtarget - identyfikator elementu docelowego zapytania (zwracana wartosc) i idremove - identyfikator elementu do usuniecia
* jezeli parametry opcjonalne nie sa wymagane nalezy wstawic null
*/
function SendRequestForm(form_n, link, idtarget, idremove){
	if(idtarget==null)idtarget="mainWND";
	if(!windowsObj){
		return null;
	}
	if(windowsObj.hasByName(idtarget)){
		var wnd=windowsObj.getWindow(idtarget);
	}
	else{
		return null;
	}
	if(wnd){
		if(wnd.WNDStat>0){
			var req = mint.Request();
  			req.method=$(form_n).method;
  			req.contentType=$(form_n).encoding;
			req.OnLoading = function(){ 
				if(wnd.intervalSend){
					window.clearTimeout(wnd.intervalSend);
					wnd.intervalSend=null;
				}
			}
			req.OnSuccess = function(){
				update(this.responseText,idtarget,idremove);
				wnd.updateContentOff();
			}
			req.OnAbort=function(){ //problem komunikacji z serwerem
				//komunikat o bledzie
				//tu odblokowanie okienka od request
				wnd.updateContentOff();
			}
			req.OnError=function(){
				//komunikat o bledzie
				//tu odblokowanie okienka od request
				wnd.updateContentOff();
			}
			if(!wnd.isRequesting){
				wnd.updateContentOn();
				req.SendForm(form_n, link, req.method);
			}
			else{
				if(!wnd.intervalSend){
					wnd.intervalSend=window.setTimeout('SendRequestForm("'+form_n+'", "'+link+'", "'+idtarget+'", "'+idremove+'")',1000);
				}
			}
		}
	}
}

/*
* funkcja uaktualniajaca wszystkie okienka zawartoscia zwracana z serwera. Uzywana jest przez funkcje update.
* wymaga parametru: temp_id - identyfikator elementu tymczasowego przechowujacego nowa zawartosc
* opcjonalne: element_id - identyfikator elementu docelowego, remowe - identyfikator elementu do usuniecia
*/
function updateElements(temp_id, element_id, remove, script){
	/*
	* klonowanie diva zawierajacego request i usuniecie oryginalu z body
	*/
	var p=$(temp_id).cloneNode(true);
	document.body.removeChild($(temp_id));
	
	/*
	* tworzenie tablicy zawierajacej obiekty div wewnatrz request'a
	*/
	var d=p.getElementsByTagName('div');
	
	/*
	* deklaracje tablic posrednich
	*/
	var divs_id=new Array();
	var divs=new Array();
	
	/*
	* wyszukanie wszystkich elementow div, ktore posiadaja atrybut id 
	*/
	for(var i=0; i < d.length; i++){
		if(d[i].getAttribute('id') != null){
			divs_id.push(d[i]);
		}
	}
	
	/*
	* wyszukanie w tablicy z elementami div posiadajacymi atrybut id tych, ktore maja ten atrybut zaczynajacy sie od p_
	*/
	for(var j=0; j<divs_id.length; j++){
		var test=divs_id[j].getAttribute('id').search('p_');
		if(test == 0){
			divs.push(divs_id[j]);
		}
	}
	
	/*
	* sprawdza czy w request byly jakies okna (div z atrybutem id zaczynajacym sie na p_);
	* - jezeli tak to analizuje zawartosc poszczegolnych okien
	* - jezeli nie to nadpisuje zawartosc elementu o id podanym jako parametr wejsciowy funkcji (element_id) cala zawartoscia request'a
	* rejestracja okienka odbywa sie w kodzie js wewnatrz kodu okienka
	*/
	if(divs.length!=0){
		for(var k=0; k<divs.length; k++){
			var childn=divs[k].getAttribute('id').replace('p_','');
			/*
			* sprawdza czy div bedacy oknem jest juz czescia dokumentu
			* - jezeli tak to nadpisuje zawartosc rzeczywistego okna zawartoscia wirtualnego
			* - jezeli nie to dodaje nowe okno do dokumentu ustawiajac je w samym centrum okna przegladarki
			*/
			if($(divs[k].getAttribute('id'))!= null){
				var inside=divs[k].getElementsByTagName('div');
				//tu wstawic kod do tooltipow
				for(var m=0; m<inside.length; m++){//zawartosc
					if(inside[m].getAttribute('id')){
						if(inside[m].getAttribute('id')==childn){
							$(childn).innerHTML=inside[m].innerHTML;
				 			break;
						}
					}
				}
			 	
			}
			else{
				//tu wstawic kod do tooltipow
				var sizeW=windowSize();
				if(sizeW){
					if(divs[k].id!='p_gallery'){
						var l=(sizeW[0] - divs[k].style.width.replace('px',''))/2;
						var h=(sizeW[1] - divs[k].style.height.replace('px',''))/2;
						divs[k].style.left=l.toString()+'px';
						divs[k].style.top=h.toString()+'px';
					}
					document.body.appendChild(divs[k]);
				}
			}
			divs[k]=null;
		}
	}
	/*else{
		if(($(element_id))&&(element_id!=null)){
			$(element_id).innerHTML=p.innerHTML;
		}
	}*/
	
	/*
	* usuwanie wirtualnej reprezentacji request'a
	*/
	for(var i=0; i<divs.length; i++){
	  if(divs[i]!=null){
		var parentE=divs[i].parentNode;
		parentE.removeChild(divs[i]);
	  }
	}
	
	/*
	* wykonanie skryptow z request
	*/
	if(script!=null){
    	setTimeout(script, 1);
    }
    
    showScroll();
    
    /*
	* jezeli zostal podany element DOM do usuniecia to zostaje usuniety
	*/
	if($(remove)){
	   setTimeout('windowsObj.removeWhenClose("'+remove+'");',500);
   	}
}


/*
* metoda uaktualniajaca zawartosc okna na podstawie tresci przekazanej jako parametr response
* jezeli response zawiera definicje funkcji JS - funkcje zostaja wyciete z tresci i wywolane na koncu
* tresc natomiast zostaje przekazana do dalszej analizy do funkcji updateElements;
* dodatkowe parametry to element_id - identyfikator elementu docelowego (moze byc null) i remove_id - identyfikator elementu do usuniecia ( moze byc null)
*/
function update(response,element_id,remove_id){
	/*
     *  Wzorzec dla wyciagania wszystkich skryptow
     *  i - case insensitive
     *  m - tryb multiline
     *  g - global (znajduje wszystkie wystapienia, a nie tylko pierwsze)
     */
    var matchAll = new RegExp('(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', 'img');
 
    /*
     *  Wzorzec dla wyciagania pojedynczego skryptu
     */
    var matchOne = new RegExp('(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', 'im');
 
    /*
     *  Zamiana wszystkich skryptow na pusty string - dostajemy czysty html bez skryptow
     */     
    var html = response.replace(new RegExp('(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', 'img'), '');
 
    /*
     *  Wyszukujemy wszystkie skrypty
     */        
    var scripts = (response.match(matchAll) || []);
 
    /*
     *  Tu bedziemy wrzucac kod wszystkich skryptow
     */     
    var script = script;
 
    /*
     *  Doklejamy po kolei znalezione skrypty
     */     
    for (var i = 0; i < scripts.length; i++)
    {	
        script += (scripts[i].match(matchOne) || ['',''])[1]; 
    }
    
 	/*
 	* Tworzymy obiekt tymczasowy
 	*/
 	var tmp=document.createElement('div');
 	var time=new Date().getTime();
 	var tmpid='temp_'+time;
 	tmp.setAttribute('id',tmpid);
 	tmp.style.display='none';
 	tmp.innerHTML=html;
 	document.body.appendChild(tmp);
     
    /*
    * Wykonujemy przekierowania dla tresci
    */
    updateElements(tmpid, element_id, remove_id, script);
}
