/**
 * gk//30-10-2009//new implementation
 **/
function createXMLHttp()
{
  
  if(typeof XMLHttpRequest != "undefined") 
  {
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    var XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    return Xmlhttp;
  }
  
}






//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------
function createAjaxCtrl ()
{
  
  var XMLHttpRequestObject = false;
  
  if (window.XMLHttpRequest) 
  {
    XMLHttpRequestObject = new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  return XMLHttpRequestObject;
  
}





function HttpRequest ()
{
  var
    _this = this;

  this.response = false;
  
  if (window.XMLHttpRequest) 
    this.request = new XMLHttpRequest();
  else if (window.ActiveXObject)
    this.request = new ActiveXObject("Microsoft.XMLHTTP");

  this.handle = function(request)
  {
    if(this.request) 
    {
      var 
        mytime= "ms=" + new Date().getTime();
    
      var
        token = '&';

    
      this.request.open("GET", request+token+mytime);
      
      var
        _request = this.request,
        _responseF = this.response,
        _this = this;
      
      this.request.onreadystatechange = function ()
      {
        if (_request.readyState == 4 && _request.status == 200) 
          _responseF(_this);

        if ( request.readyState == 4 )
        {
          request.onreadystatechange = function() { };
        } 

      }

      this.request.send(null);
    }
    else
      alert('no HttpRequest');
  }
  
  this.writeHTML = function()
  {
    if(myGetElementById(_this.tag))
      myGetElementById(_this.tag).innerHTML = _this.request.responseText;
  }
  
  this.destroy = function()
  {
    this.request  = null;
    this.response = null;
    this.tag      = null;
    this.handle   = null;
  }
}
//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------

/**
  * filter out a combobox
  **/ 
function filter_combo( what, id )
{
  if(!what)
    return;
  if(!id)
    return;
  if(!myGetElementById(what))
    return;
  
  field = what.substring( (what.indexOf('.')+1), what.length );
  
  
  var myRequest         = new HttpRequest();
  myRequest.response    = handleFilterCombo;
  myRequest.what        = what;
  myRequest.id          = id;

  myRequest.handle('scripts/get_combofilter.php?what='+field+'&id='+id);
}
 
function handleFilterCombo ( request )
{
  obj         = myGetElementById( request.what );
  if(obj.disabled)
    obj.disabled = false;
  
  try
  {
    
    if ( request.request.responseText.indexOf('invalid') == -1 )
    {
      var
        node = request.request.responseXML.documentElement;
      
      if((node != null) && (node.hasChildNodes()))  // geeft error indien node=null (zet spatie achter '?>' in defines.php om error uit te lokken)
      {
        selection   = -1;
        /* remember selected value */
        for(i = obj.options.length - 1; i >= 0; i--)
        {
          if(obj.options[i].selected)
            selection = obj.options[i].value;
        }
        
        /* we clear the combo box */     
        for(i = obj.options.length - 1; i >= 0; i--)
        {
          if(obj.options[i].value != -1)
            obj.remove(i);
        }        
        
        items = node.getElementsByTagName('item');         
        /* we fill combo box with new data */
        for(i = 0; i < items.length; i++)
        {
         
          idNode    = items[i].firstChild;
          id        = idNode.firstChild.nodeValue;
          nameNode  = idNode.nextSibling;
          name      = nameNode.firstChild.nodeValue;

          var elOptNew    = document.createElement('option');
          elOptNew.text   = name;
          elOptNew.value  = id;
          if( id == selection)
            elOptNew.selected = true;

          try {
            obj.add(elOptNew, null); // standards compliant; doesn't work in IE
          }
          catch(ex) {
            obj.add(elOptNew); // IE only
          }
          
        }
          
      }
      else
      {
        //alert('xml is empty');         
        //obj.disabled = true; 
        selection = -1;
        /* we clear the combo box */     
        for(i = obj.options.length - 1; i >= 0; i--)
        {
          if(obj.options[i].value != -1)
            obj.remove(i);
        }  
        obj.disabled = true;
        css = obj.className;
        if(css.search('error') != -1)
          css = css.replace('error', '');
        obj.className = css;                       
      }
    }
    else
      alert('invalid');   
        
  }
  catch(e)
  {
    alert(e.description );
  }
  //alert(obj.id);
  if(obj.options.length == 1)
    obj.disabled = true;

}

//-----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------
/**
 * Fetch series
 **/
function fetchData( what, where, input  )
{
  if(!what)
    return;
  if(!myGetElementById(where))
    return;
   
  //alert('input : ' + input );
   
  input.toLowerCase();
  
 // alert('input : ' + input );
  
 // return;
  
  if(input.length == 0)
  {
    myGetElementById(where).innerHTML = '';
    return;
  }
  
  
  var match_in_old_result = 0;
  
  //we already have results 
  if(myGetElementById(what+'_results'))    
  {
    //let's see if the current input is longer than previous, then we can simply remove lines, 
    //in stead of running query again
    if(myGetElementById(what+'_previousinput'))
    {
      var myArray = new Array();
      old_input = myGetElementById(what+'_previousinput');
      //alert(old_input.value.length +' '+ input.length);
      //if( old_input.value.length < input.length )
      //{
        //alert('in if');
        ul = myGetElementById( what+'_results' );
        lis = ul.getElementsByTagName('li');

        for( i = 0; i < lis.length; i++)
        {
          inner = lis[i].innerHTML.toLowerCase();
          if ( inner.indexOf( input ) < 0 )
          {
            lis[i].style.display = 'none';
          }
          else
          {
            match_in_old_result = 1;
            lis[i].style.display = '';
          }
        }  
        old_input.value = input;    
      //}
    }
  }

  if( match_in_old_result == 1)
    return;    

  var myRequest         = new HttpRequest();
  myRequest.response    = handleFetchData;
  myRequest.what        = what;
  myRequest.where       = where;
  myRequest.input       = input;
  myRequest.handle('scripts/get_datalist.php?what='+what+'&input='+input);
}

function handleFetchData( request )
{
  obj         = myGetElementById( request.where );
  what        = request.what;

  var hid = document.createElement('input');
  hid.id  = what+'_previousinput';
  hid.type = 'hidden';
  hid.value = request.input;
  obj.appendChild(hid);  
  
  try
  {
    if ( request.request.responseText != '' )
    {
      var
        node = request.request.responseXML.documentElement;
        
      if((node != null) && node.hasChildNodes())
      {
        items = node.getElementsByTagName('item');         
        
        var ul = document.createElement('ul');
        ul.id  = what+'_results';
        
        for(i = 0; i < items.length; i++)
        {
         
          idNode    = items[i].firstChild;
          id        = idNode.firstChild.nodeValue;
          nameNode  = idNode.nextSibling;
          name      = nameNode.firstChild.nodeValue;
          
          var li = document.createElement('li');
          if(what == 'subject')
          {
            li.id        = 'subject_'+id;
            li.innerHTML = '<a href="#" onclick="saveFavSerie('+id+'); return false;">'+name+'</a>';
            li.className = 'favseries';       
          }
          else
            li.innerHTML = name;
            
          
          ul.appendChild(li);

        }
        
        obj.appendChild(ul);
          
      }
      else
      {
        obj.innerHTML = '';
      }
    }
    else
    {
      obj.innerHTML = '';
    }  
        
  }
  catch(e)
  {
    alert(e);
  }


}

function saveFavSerie( id )
{
  var myRequest         = new HttpRequest();
  myRequest.response    = myRequest.writeHTML;

  myRequest.handle('scripts/set_favserie.php?id='+id);  

  
  
  /*
  if(!myGetElementById('favsyet'))
    return;
    
  if(myGetElementById('nofavsyet'))
  {
    p = myGetElementById('nofavsyet');
    p.style.display = 'none';
  }
    
  ul = myGetElementById('favsyet');
  ul.style.display = 'block';

  if(myGetElementById('subject_'+id))
  {
    old_li = myGetElementById('subject_'+id);
    links  = old_li.getElementsByTagName('a');
    name   = links[0].innerHTML;
  }
  
  
  li = document.createElement('li');
  li.id        = 'fav_'+id;
  li.innerHTML = '<a href="#" onclick="deleteFavSerie('+id+'); return false;">'+name+'</a>';
  li.className = 'favseries';  
  
  myGetElementById('subject_'+id).innerHTML = name;
  
  ul.appendChild(li);
  
  var myRequest         = new HttpRequest();
  myRequest.response    = myRequest.writeHTML;

  myRequest.handle('scripts/set_favserie.php?id='+id);  
  */
}

function deleteFavSerie( id )
{
  
  if(!myGetElementById('fav_'+id))
    return;
  li = myGetElementById('fav_'+id);
  
  if(myGetElementById('favsyet'))
    ul = myGetElementById('favsyet');
  
  ul.removeChild(li);
  
  lis = ul.getElementsByTagName('li');
  if( lis.length == 0) 
  {
    ul.style.display = 'none';
    if(myGetElementById('nofavsyet'))
      myGetElementById('nofavsyet').style.display = 'block';
  }
  
  
  if(myGetElementById('subject_'+id))
  {
    lo    = myGetElementById('subject_'+id);
    name  = lo.innerHTML;
    lo.innerHTML = '<a href="#" onclick="saveFavSerie('+id+'); return false;">'+name+'</a>';
  }
  
  
  var myRequest         = new HttpRequest();
  myRequest.response    = myRequest.writeHTML;
  myRequest.handle('scripts/del_favserie.php?id='+id);  
  
}