// Add event handler
//  Input:
//    elm         element id
//    evType      event type
//    fn          function to associate with event
//    useCapture  true to capture

function addEvent(elm, evType, fn, useCapture) {
  if (elm.addEventListener) {
    elm.addEventListener(evType, fn, useCapture);
    return true; 
  } else if (elm.attachEvent) {
    var r = elm.attachEvent('on' + evType, fn);
    return r;
  } else {
    elm['on' + evType] = fn;
  }
}


// ARemovedd event handler
//  Input:
//    elm         element id
//    evType      event type
//    fn          function to associate with event
//    useCapture  true to capture

function removeEvent(elm, evType, fn, useCapture){
  if (elm.removeEventListener){
    elm.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.detachEvent){
    var r = elm.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}



// push a value to a two-dimensional list
//    arrname   name of array
//    arridx    index in array
//    val       value to push
//
//  does not push duplicates
//  returns tryu if successful

function pushit(arrname, arridx, val) {
  var newpos = arrname[arridx].length;
  if (newpos > 0) {
    // search for already in list
    var found = false;           
    for (var t in arrname[arridx]) {
      if (arrname[arridx][t] == val) {
        // alert('already have ' + val + ' in ' + arridx);
        return false;
      }
    }
  }
  
  arrname[arridx][newpos] = val;
  return true;
}


// get list from array, display each element on a separate html line
//
//  Input:
//    list    name of list
//  Returns:
//    each element, separated by br tag

function getlist_str(list) {
  var str = '';
                         
  // alert(list.length+'  list:'+list);
  for (var idx in list) {
    if (str.length == 0) {
      str = list[idx];
    } else {
      str += '<br />' + list[idx];
    }
  }

  return str;
}


// --------------------------------------------------------------------
// Ajax handling
// --------------------------------------------------------------------


var http_request = false;

function makeRequest(responder,url,params) {
  http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
      // 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) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }
  http_request.onreadystatechange = responder;
  http_request.open('POST', url, true);
  http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  // alert('url:'+url+'  params:'+params);return;
  http_request.send(params);
}



// make an HTTP request to a handler program on the server
// input:
//    url               URL of handler function
//    callback_function local callback function
//    return_xml        true to return XML document
//    params            parameters to send to handler function

function makeHttpRequest(url, callback_function, return_xml) {
  var http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  } 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) {
    alert('Unfortunatelly you browser doesn\'t support this feature.');
    return false;
  }
  http_request.onreadystatechange = function() {
    if (http_request.readyState == 4) {
      if (http_request.status == 200) {
        if (return_xml) {
          eval(callback_function + '(http_request.responseXML)');
        } else {
          eval(callback_function + '(http_request.responseText)');
        }
      } else {
        alert('There was a problem with the request.(Code: ' + http_request.status + ')');
      }
    }
  }
  http_request.open('POST', url, true);
  http_request.send(null);
}

