  var offerlist=new Array();
  var offerstatus=new Array();
  var currentlyvalidated=null;
  var validatetimeout=null;
  var autovalidateenabled=false;
  var validatelist =new Array();
  function autovalidate()
  {
    autovalidateenabled=true;
    clearTimeout(validatetimeout);
    var oid;
    var i;
    for (i=0;i<offerlist.length;i++)
    {
      oid=offerlist[i];
      if (!offerstatus[oid])
      {
        validate(oid);
        validatetimeout=setTimeout('validateTimeOut('+oid+')',100000);
      }
    }
  }
  
  function validateQueue()
  {
    if (!currentlyvalidated)
    {
      if (validatelist.length)
      {
        currentlyvalidated = true;
        var index = validatelist.shift();
        //if (index)
          document.tempRequests[index].send(null);
      }
    }
  }

  function validateTimeOut(oid)
  {
    if (http_request)
    {
//      http_request.onreadystatechange = null;
      http_request.onreadystatechange = function(){};
      http_request.abort();
      http_request=null;
    }
    setValidateState(oid,'TO');
    //currentlyvalidated=null;
    //autovalidate();
  }

  function setValidateState(oid,state)
  {
    if (oid==null) return false;
    offerstatus[oid]=state;

    if (state == 'start')
    {if (a=getofferobj(oid,'status'))
          a.innerHTML='<img src="'+basecgurl+'graphics/vi_check.gif" />';
    }
    else
    {if (a=getofferobj(oid,'status'))
      { //a.innerHTML=state;
        if (state == 'BA')
          a.innerHTML='<img src="'+basecgurl+'graphics/vi_avail.gif" />';
        else if (state == 'XX')
          a.innerHTML='<img src="'+basecgurl+'graphics/vi_sold.gif" />';
        else if (state == 'TO')
          a.innerHTML='<img src="'+basecgurl+'graphics/vi_to.gif" />';
        else
          a.innerHTML='<img src="'+basecgurl+'graphics/vi_try.gif" />';
      }
    }
  }

  function clearRequests()
  {
    if (!document.tempRequests) return false;
    var httpreq;
    while (httpreq=document.tempRequests.pop())
    {
      httpreq.onreadystatechange = function() {};
      if (httpreq.abort)
        httpreq.abort();
    }

  }

  function merken(index,urlp)
  {
     var a=document.getElementById('bookurl_'+index);
    var url=a.getAttribute('href')
    url=url.replace(/amp;/g,'');
    var vars = url.split("&");
    if(vars.length < 2)  // for gate
    var vars = url.split("%26");

    
    for(i=0;i<vars.length;i++)
    {
        if(vars[i].match(/o=/))
        {    
            var offerid = vars[i].substr(2,vars[i].length);
        }
        else if(vars[i].match(/o%3D/))
        {
            var offerid = vars[i].substr(4,vars[i].length);
  
        }
    }
    if(Cookies.get('ep3_bookmarks',false) != false)
    {
        var hashes = Cookies.get('ep3_bookmarks');
        
        if(hashes.match(offerid))
        {
            alert('juz dodano!');
            return false;
        }
        if(ep3_bookmarks_count() > 4) /* LIMITS OFFERS TO 5 */
        {
            alert('Schowek pełny!')
            return false;            
            hashes_array = hashes.split(',');
            while(hashes_array.length > 4)
            {
                hashes_array.shift();
            }
            
            hashes_array.push(offerid);
            var hashes = hashes_array.toString();
        }
        else            
            hashes += ','+offerid
            
    }
    else
        var hashes = offerid
    
    Cookies.set('ep3_bookmarks',hashes,60000);
    alert('Dodano.');
    recount_bookmarks();

  }

  function validate(index, addparam, packageload)
  {
    clearTimeout(validatetimeout);

    if (!document.tempRequests)
      document.tempRequests=Array();
    
    var a;
    if (!(a=getofferobj(index,'offer')))
      return false;
    var url;
    if (!(url=a.getAttribute('url')))
      return false;
    url=url.replace(/amp;/g,'');
    if (offerstatus[index])
    {
      if (offerstatus[index]=='BA')   // <<<-----
      {
//  	urlad=a.getAttribute('urlad');
        window.location.href=url;//+(urlad?'&'+urlad:'');
        return;
      }
      else if
       (offerstatus[index]!='TO')
      return false;
    }

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text');
            // See note below about this line
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        return false;
    }

    if (document.tempRequests[index])
      document.tempRequests[index].abort();
    
    document.tempRequests[index] = http_request;

    if (packageload != undefined && packageload != '')
      document.tempRequests[index].onreadystatechange = function() { showpackage(index) };
    else
      document.tempRequests[index].onreadystatechange = function() { setresults(index) };
    if (valprefixurl!='')
    {
      if (packageload != undefined && packageload != '')
        url=url+'&'+packageurl;
      else
        url=url+'&'+valurl;
      url=url.substring(url.indexOf('?'));
      url=valprefixurl+url;
    }
    else
    {
      if (packageload != undefined && packageload != '')
        url=url+'&'+packageurl;
      else
        url=url+'&'+valurl;
    }
    
    if (addparam != undefined && addparam != '')
      url=url+'&'+addparam;
    
    document.tempRequests[index].open('GET', url, true);
    //document.tempRequests[index].send(null);
    
    
    //var dv=document.createElement("div");
    //dv=document.getElementById('tdiv');
    //dv.innerHTML='<iframe src="'+url+'&action=validate" onload="iframeresult(this)">';

    //currentlyvalidated=index;
    setValidateState(index,'start');

    validatelist.push(index);
    validateQueue();
    
    if (!document.tempRequests)
      document.tempRequests=Array();
    //document.tempRequests.push(http_request);
//    return http_request;
  }

  function getofferobj(index,name)
  {
    return document.getElementById(name+'_'+index);
  }

  function processStateText(t, index)
  {
           var res=t.split(';');
           if(res.length < 7)
             return setValidateState(index,null);
           clearTimeout(validatetimeout);
           oid=index;
           currentlyvalidated=null;
           var a;
           if (a=getofferobj(oid,'status'))
             a.innerHTML=res[1];
           if (a=getofferobj(oid,'price'))
           {
             if (res[1]=='XX')
               a.style.textDecoration='line-through';
             else
             if (res[1]!='TO')
              a.innerHTML=res[6];
           }
           if ((res[1]!='XX' )&& (res[1]!='TO'))
           {
              if (a=getofferobj(oid,'table'))
                a.className='flightlist overstate color4bg color5bot color5bor color5bol color5bob';

             if ((a=getofferobj(oid,'offer')) &&
                  a.getAttribute('surl') && (a.getAttribute('surl')=='true'))
                  {
                    a.setAttribute('url',document.URL.substring(0,document.URL.indexOf('?'))+res[9].substring(res[9].indexOf('?')));
                  }

              var st;
              if (st = ep3_getSearchType())
              {
              	if (a=getofferobj(oid,'show'))
              	  a.style.display='';
              	if (a=getofferobj(oid,'show2'))
              	  a.style.display='';
              	if (a=getofferobj(oid,'show3'))
              	  a.style.display='';
              	if (a=getofferobj(oid,'hide'))
              	  a.style.display='none';
              	if (a=getofferobj(oid,'hide2'))
              	  a.style.display='none';
                if (st == 'PA' || st == 'RR')
                {
                  if (a=getofferobj(oid,'fTime'))
                    a.innerHTML=res[2]+' - '+res[3]+'<br/>'+res[4]+' - '+res[5];
                  if (a=getofferobj(oid,'fnrto'))
                    a.innerHTML=res[7];
                  if (a=getofferobj(oid,'fnrfrom'))
                    a.innerHTML=res[8];
                  if (a=getofferobj(oid,'carrierdesc'))
                    a.innerHTML=res[10];
                    
                }
                else if (st == 'NF')
                {
                  if (a=getofferobj(oid,'fnrTo'))
                    a.innerHTML = '<br/>'+res[7];
                  if (a=getofferobj(oid,'fnrRet'))
                    a.innerHTML = '<br/>'+res[8];
                }
                if (a=getofferobj(oid,'fTimeTo'))
                  a.innerHTML = res[2]+' - '+res[3];
                if (a=getofferobj(oid,'fTimeRet'))
                  a.innerHTML = res[4]+' - '+res[5];
              }
              else
              {}
           }

           setValidateState(oid,res[1]);
           //if (autovalidateenabled)
           //  autovalidate();
            currentlyvalidated = null;
            validateQueue();

  }

  function iframeresult(sender)
  {
     processStateText(sender.contentWindow.document.firstChild.textContent);
     //alert(sender.contentWindow.document.firstChild.textContent);

  }



  function setresults() {
    var http_request=document.tempRequests[setresults.arguments[0]];
    var index = setresults.arguments[0];
    var oid;
    //var type=setresults.arguments[1];
    if (!http_request) return;
    if (http_request.readyState == 4) {
        if (http_request.status == 200)
        {
           processStateText(http_request.responseText, index);
           http_request=null;
        }
    }
  }

  function showpackage() {
    var http_request=document.tempRequests[showpackage.arguments[0]];
    var index = showpackage.arguments[0];
    var oid;
    if (!http_request) return;
    if (http_request.readyState == 4) {
        if (http_request.status == 200)
        {
          if (a=getofferobj(index,'showp'))
            a.style.display = '';
          if (a=getofferobj(index,'showpackage'))
            a.innerHTML = http_request.responseText;
          if (a=getofferobj(index,'status'))
            a.innerHTML='';
          //if (a=getofferobj(index,'offer'))
          //  a.innerHTML='';
          
          http_request=null;
          
          currentlyvalidated = null;
          validateQueue();
        }
    }
  }

  /**
   * Validate Merlin services
   */
  function setserviceresults() {
    var http_request=setserviceresults.arguments[0];
    var oid;
    if (!http_request) return;
    if (http_request.readyState == 4) {
        if (http_request.status == 200)
        {
           processServiceStateText(http_request.responseText);
           http_request=null;
        }
    }
  }
  function processServiceStateText(responseText)
  {
    //alert(responseText);
    var resp = responseText.split('|');
    document.getElementById('service_price_'+resp[0]).innerHTML = resp[1];
  }
  function setservicecheckboxes(index, alloc)
  {
    for (var i = 1; i <= alloc; i++)
    {
      var alloc_input = null;
      if (alloc_input = document.getElementById('add_service['+index+'][allocation]['+(i-1)+']'))
      {
        if (alloc_input.type == 'checkbox')
        {
          if (document.getElementById('add_service['+index+'][number]') && document.getElementById('add_service['+index+'][number]').checked)
          {
            alloc_input.disabled = false;
            alloc_input.checked = true;
          }
          else
          {
            alloc_input.disabled = true;
            alloc_input.checked = false;
          }
        }
        else
        {
          var srvbox = null;
          if (document.getElementById('add_service['+index+'][number]') && document.getElementById('add_service['+index+'][number]').checked)
          {
            alloc_input.disabled = false;
            
            if (srvbox = document.getElementById('srvbox'+index+'_'+(i-1)))
              srvbox.checked = true;
          }
          else
          {
            alloc_input.disabled = true;
            
            if (srvbox = document.getElementById('srvbox'+index+'_'+(i-1)))
              srvbox.checked = false;
          }
        }
      }
    }
  }

  function validateService(index)
  {
    clearTimeout(validatetimeout);
    setValidateState(currentlyvalidated,null);


    if (!document.tempRequests)
      document.tempRequests=Array();
    if (document.tempRequests[index])
      document.tempRequests[index].abort();
    
    if (document.getElementById('service_price_'+index))
      document.getElementById('service_price_'+index).innerHTML = '<img src="'+basecgurl+'graphics/vi_check.gif" alt="" />';
    
    var url;
    url = document.getElementById('reservation').action;
    url=url.replace(/amp;/g,'');
    
    var params = [];
    var service_row = document.getElementById('service_row_'+index);
    var service_inputs = service_row.getElementsByTagName('input');
    for (var i=0; i < service_inputs.length; i++)
    {
      if (service_inputs[i].type == 'checkbox')
      {
        if (service_inputs[i].checked)
          params.push(service_inputs[i].name+'='+service_inputs[i].value);
      }
      else if (!service_inputs[i].disabled)
        params.push(service_inputs[i].name+'='+service_inputs[i].value);
      else {}
    }
    //select fields
    var service_selects = service_row.getElementsByTagName('select');
    for (var i=0; i < service_selects.length; i++)
    {
      if (service_selects[i].name)
      {
        var si = 0;
        if (service_selects[i].selectedIndex)
          si = service_selects[i].selectedIndex;
        params.push(service_selects[i].name+'='+service_selects[i].options[si].value);
      }
    }
    params = params.join('&');
    
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        return false;
    }

    document.tempRequests[index] = http_request;

    document.tempRequests[index].onreadystatechange = function() {setserviceresults(document.tempRequests[index])};
    if (valprefixurl!='')
    {
      url=url+'&'+valsrvurl;
      url=url.substring(url.indexOf('?'));
      url=valprefixurl+url;
    }
    else
      url=url+'&'+valsrvurl;

    //alert(url);
    //alert(params);
    //return false;

    document.tempRequests[index].open('POST', url, true);
    
    //Send the proper header information along with the request
    document.tempRequests[index].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    document.tempRequests[index].setRequestHeader("Content-length", params.length);
    document.tempRequests[index].setRequestHeader("Connection", "close");
    
    document.tempRequests[index].send(params);
    if (!document.tempRequests)
      document.tempRequests=Array();
  }

