function displayError(err_str){alert("Błąd podczas dostępu do serwera! "+"\n"+err_str);}
function createXmlHttpRequestObject(){var xmlHttp;try{xmlHttp=new XMLHttpRequest();}catch(e){var XmlHttpVersions=new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");for(var i=0;i<XmlHttpVersions.length&&!xmlHttp;i++)
{try
{xmlHttp=new ActiveXObject(XmlHttpVersions[i]);}
catch(e){}}}
if(!xmlHttp){alert("Błąd podczas tworzenia obiektu XMLHttpRequest.");}else{return xmlHttp;}}
function server_odp(o_http,handle_response){if(!o_http){return;}
if(o_http.readyState==4){try{if(o_http.status==200){if(o_http.responseXML&&o_http.responseXML.documentElement){var xmlRoot=o_http.responseXML.documentElement;var o_errors_xml=[];if(typeof(handle_response)!='object'&&!handle_response.pomin_bledy&&!handle_response.skip_errors){try{o_errors_xml=xmlRoot.getElementsByTagName('error');}catch(e){displayError("Wystąpił błąd w funkcji: server_odp(o_http, handle_response). Komunikat błędu: "+e.toString()+", jest związany z brakiem funckji: getElementsByTagName() w objekcie xmlRoot. Być może odpowiedź zwrócona z serwera nie jest w formacie xml: \n"+typeof(o_http.responseXML)+str);return false;}
if(o_errors_xml&&o_errors_xml.length>0){var errors=[];var err_str='Wystąpiły następujące błędy: '+"\n";for(var i=0;i<o_errors_xml.length;i++){errors[i]=o_errors_xml.item(i).getAttribute('str');err_str+=errors[i]+"\n";}
alert(err_str);return false;}}
if(typeof(handle_response)=='object'&&typeof(handle_response.funkcja)=='function'){handle_response.funkcja(o_http.responseXML.documentElement,o_http.responseText);}else if(typeof(handle_response)=='function'){handle_response(o_http.responseXML.documentElement,o_http.responseText);}
return null;}else{if(typeof(handle_response)!='function'){return;}
handle_response(o_http.responseText);}
return true;}else{displayError("Wystąpił problem podczas pobierania danych:\n"+o_http.responseText);}}catch(e){displayError('Funkcja server_odp(o_http, handle_response ) błąd: '+e.toString());}}}
function server_connect(o_http,url,handle_response){if(!o_http||o_http==null){if(!(o_http=createXmlHttpRequestObject())){alert('Nie udało się utworzyć obiektu: XMLHttpRequest. Funcja: server_connect w pliku ajax.js.');}}
if(o_http){try{if(o_http.readyState==4||o_http.readyState==0){o_http.open("GET",url,true);o_http.onreadystatechange=function(){server_odp(o_http,handle_response);}
o_http.send(null);}else{setTimeout(function(){server_connect(o_http,url,handle_response);},500);}}catch(e){alert("Nie mogę połączyć się z serwerem:\n"+e.toString());}}}
function send_form(oXmlHttpRequest,formularz,response_function){if(oXmlHttpRequest){try{if(oXmlHttpRequest.readyState==4||oXmlHttpRequest.readyState==0){var uri="";for(var i=0;i<formularz.attributes.length;i++){var attr=formularz.attributes[i];if(typeof(attr)=='object'&&attr.name=='action'){uri=attr.value;}}
if(uri==''){uri=new String(window.location);}
var data='';var znak_zapytania_pos=uri.indexOf('?');if(znak_zapytania_pos>0){data=uri.substring(znak_zapytania_pos+1)+'&ajax=1';uri+='&ajax=1';}else{data='ajax=1';uri+='?ajax=1';}
var pole=null;for(pole_nazwa in formularz.elements){pole=formularz.elements[pole_nazwa];try{if(typeof(pole)=='object'&&pole.type){if(pole.type.toLowerCase()=='checkbox'){if(pole.checked)data+='&'+pole.name+'='+pole.value;}else{data+='&'+pole.name+'='+pole.value;}}}catch(o_err){}}
oXmlHttpRequest.onreadystatechange=response_function;if(formularz.method.toUpperCase()=='POST'){oXmlHttpRequest.open('POST',uri,true);try{oXmlHttpRequest.setRequestHeader("Method","POST "+uri+" HTTP/1.1");oXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
catch(e){displayError("Your browser does not appear to  support asynchronous requests using POST.");return false;}
oXmlHttpRequest.send(data);}else{oXmlHttpRequest.open('GET',uri+'?'+data,true);oXmlHttpRequest.send(null);}
return true;}else{displayError("Nie mogę połączyć się z serwerem, ponieważ jest serwer zajęty...\n");return false;}}catch(e){displayError("Nie mogę połączyć się z serwerem:\n"+e.toString());return false;}}else{displayError("Nieprawidłowy obiekt XmlHttpRequest przekazany do funkcji: ajax_send_form\n");return false;}}
function send_post(oXmlHttpRequest,uri,data,response_function){if(oXmlHttpRequest){try{if(oXmlHttpRequest.readyState==4||oXmlHttpRequest.readyState==0){if(data.indexOf('&ajax=1')==-1){data+='&ajax=1';}
oXmlHttpRequest.onreadystatechange=function(){server_odp(oXmlHttpRequest,response_function);}
oXmlHttpRequest.open('POST',uri,true);try{oXmlHttpRequest.setRequestHeader("Method","POST "+uri+" HTTP/1.1");oXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
catch(e){displayError("Your browser does not appear to  support asynchronous requests using POST.");return false;}
oXmlHttpRequest.send(data);return true;}else{displayError("Nie mogę połączyć się z serwerem, ponieważ jest serwer zajęty...\n");return false;}}catch(e){displayError("Nie mogę połączyć się z serwerem:\n"+e.toString());return false;}}else{displayError("Nieprawidłowy obiekt XmlHttpRequest przekazany do funkcji: ajax_send_form\n");return false;}}
function ajax_send_form(f){if(adminXmlHttpRequest){try{if(adminXmlHttpRequest.readyState==4||adminXmlHttpRequest.readyState==0){var uri='admin.php';var data='ajax=1';for(var i=0;i<f.length;i++){current=f.elements[i];data+='&'+current.name+'='+current.value;}
adminXmlHttpRequest.onreadystatechange=function(){ajax_get_form_response();}
if(f.method.toUpperCase()=='POST'){adminXmlHttpRequest.open('POST',uri,true);try{adminXmlHttpRequest.setRequestHeader("Method","POST "+uri+" HTTP/1.1");adminXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
catch(e){alert("Your browser does not appear to  support asynchronous requests using POST.");return false;}
adminXmlHttpRequest.send(data);}else{adminXmlHttpRequest.open('GET',uri+'?'+data,true);adminXmlHttpRequest.send(null);}
showTlo();showLoading();}else{alert("Nie mogę połączyć się z serwerem, ponieważ jest serwer zajęty...\n");}}
catch(e){alert("Nie mogę połączyć się z serwerem:\n"+e.toString());return false;}}}
function ajax_get_form_response(){if(adminXmlHttpRequest.readyState==4){if(adminXmlHttpRequest.status==200){try{hideLoading();hideTlo();if(adminXmlHttpRequest.responseText=='OK'){alert('Ustawienia zostały zapisane!');}else{var err_str=xml_get_errors(adminXmlHttpRequest);if(err_str){err_div.innerHTML=err_str;}else{err_div.innerHTML=adminXmlHttpRequest.responseText;}}}
catch(e){displayError(e.toString());}}
else{displayError("Wystąpił problem podczas pobierania danych:\n"+this.xmlHttpGetSuggestions.responseText);}}}
function xml_get_errors(xmlHttp){if(xmlHttp.responseXML&&xmlHttp.responseXML.documentElement){var xmlerr=[];try{xmlerr=xmlHttp.responseXML.documentElement.getElementsByTagName('error');}catch(o_blad){displayError("Wystąpił błąd w funkcji: xml_get_errors(o_http). Komunikat błędu: "+o_blad.message+", jest związany z brakiem funckji: getElementsByTagName() w objekcie xmlHttp. Być może odpowiedź zwrócona z serwera nie jest w formacie xml: \n"+xmlHttp.responseText);return false;}
if(xmlerr.length){var errors=[];for(i=0;i<xmlerr.length;i++){errors[i]=xmlerr.item(i).getAttribute('str');}
err_div=document.getElementById('errors');err_html='Wystąpiły następujące błędy: ';err_html+='<ol>';for(i=0;i<errors.length;i++){err_html+='<li class=error>'+errors[i]+'</li>'+"\n";}
err_html+='</ol>';return err_html;}}
return false;}
