/* copyright 2006 bartheq@gmail.com */

var ajax_url = 'http://statusy.org/ajax/';
var ajax_interval;
var ajax_output_target = new Array;
var ajax_connections = new Array;
var ajax_responses = new Array;
var ajax_debug = false;
var ajax_infobox = false;     
var ajax_tooltip = false;
var ajax_showbox = false;
var ajax_userclient = navigator.userAgent.toLowerCase();
var is_ie = ((ajax_userclient.indexOf("msie") != -1) && (ajax_userclient.indexOf("opera") == -1));

 function ajaxDebug (msg) {
  window.status = msg;
 }

function getAjaxConnection () {
 var ajax_stack = ajax_connections.length;

 if (ajax_stack == 0) {
  if (ajax_debug) ajaxDebug('Nowe polaczenie (#'+ajax_stack+')');
  ajax_connections[ajax_stack] = newAjaxConnection();
  return ajax_stack; 
 }
 
 var x = '';
 for (var i=0;i<ajax_stack;i++) {
  x += i+' '+ajax_connections[i].readyState+'\n';
  if (ajax_connections[i].readyState == 4) {
   if (ajax_debug) ajaxDebug('Wykorzystuje zakonczone polaczenie #'+i);                  
   return i;
  }
 }
 
 if (ajax_debug) alert(x);
 
 if (ajax_debug) ajaxDebug('Brak wolnych polaczen - otwieram nowe (#'+ajax_stack+')');
 ajax_connections[ajax_stack] = newAjaxConnection(); 
 return ajax_stack;
}

function newAjaxConnection () {
 var httpobj;
 
 try {
  httpobj = new ActiveXObject('Msxml2.XMLHTTP');
 } catch (e) {
  try {  
   httpobj = new ActiveXObject('Microsoft.XMLHTTP');
  } catch (oc) {
   httpobj = null;
  } 
 }

 if (!httpobj && typeof XMLHttpRequest != 'undefined') {
  httpobj = new XMLHttpRequest();
 }

 if (!httpobj) {
  alert('Blad inicjacji AJAX');
  return false;
 } else {
  return httpobj;
 }
}

function createInfoBox (text) {
 if (text == '') text = '<img src="http://img.bajo.pl/loading.gif" alt="Ładowanie" title="Ładowanie" style="margin:3px;width:16px;height:16px;vertical-align:middle;border:0 none;" />';
 newLayer = document.createElement("SPAN");
 var textLength = text.length;

 document.body.appendChild(newLayer);
 newLayer.id = 'infoBox';
 newLayer.style.backgroundColor = "transparent";
 newLayer.style.color = "#FFF";
 newLayer.style.position = "absolute";
 newLayer.style.top = '1px';
 newLayer.style.right = '1px';
 newLayer.style.fontFamily = "Arial, Helvetica, sans-serif";
 newLayer.style.fontSize = '12px';
 newLayer.style.padding = '2px';
 newLayer.innerHTML = text;
 
 ajax_infobox = true;
}

function showInfoBox () {
 alignInfoBox();
 o('infoBox').innerHTML = '<img src="http://img.bajo.pl/loading.gif" alt="Ładowanie" title="Ładowanie" style="margin:3px;width:16px;height:16px;vertical-align:middle;border:0 none;" />';
 o_show('infoBox');  
}

function hideInfoBox () {
 o_hide('infoBox');  
}

function alignInfoBox () {
 var currPos = o_style('infoBox').top;
 var y = -1;
 
 if (is_ie) y = document.documentElement.scrollTop; 
 else if (typeof(window.pageYOffset) == 'number') y = window.pageYOffset;
 
 if (y < 0) return;  
 
 y += 1;
 o_style('infoBox').top = y+'px';
}

function startProgress (ind) {
 if (!ajax_infobox) createInfoBox('');
 showInfoBox();
}

function runProgress () {
 var tmp = o(output).innerHTML;
 
 if (tmp.indexOf('.....') == -1) tmp = tmp+'.';
 else tmp = 'Czekaj';
 
 printOutput(tmp);
}

function isWorking (check) {
 for (var i=0;i<ajax_connections.length;i++) {
  if (ajax_connections[i].readyState != 4) return true;
 }
 return false;
}

function stopProgress (ind) {
 if (isWorking(ind)) return;
 if (!ajax_showbox) hideInfoBox();
}

function setAjaxOutput (conn,id) {
 ajax_output_target[conn] = id;
}

function printAjaxOutput (conn,html) {
 o(ajax_output_target[conn]).innerHTML = html;
}

function printAjaxError (conn,html) {
 o('infoBox').innerHTML = html;
}

function ajaxGet (url,output) {
 //1 - loading
 //2 - loaded
 //3 - interactive
 //4 - complete
 var now = new Date();   
 url = url+'&x='+now.getTime();
 
 var ind = getAjaxConnection();
 
 setAjaxOutput(ind,output);
 startProgress(ind);
 
 var ajax_current = ajax_connections[ind];
 ajax_current.open("GET", ajax_url+url);
 
 ajax_current.onreadystatechange = function() {
  if (ajax_current.readyState == 4 && ajax_current.status == 200) {
   stopProgress(ind);
   printAjaxOutput(ind,ajax_current.responseText);
  } else {
   if (ajax_current.readyState == 4 && ajax_current.status != 200) {
    ajax_showbox = true;
    printAjaxError(ind,'<b>Błąd AJAX ('+ajax_current.status+')</b>');
    stopProgress(ind);  
   }
  }
 }
 
 ajax_current.send(null);  
}