function Requester(url, method, async, showbusy)
{
  var objReq = this;
  var req = null;
  
  this.async = async;
  this.method = method;
    //this.url = fixurl(url);
    this.url = url;
  
  this.showbusy = showbusy;
  this.in_process = false;
  
  this.get_millisecond_query = function()
  {
    var today = new Date();
    var ms = today.getTime();
    return "&ajax_requester_ms=" + ms; 
  };
  
  this.sendRequest = function(strQuery)
  {
    if (strQuery && strQuery.length > 0)
      strQuery += this.get_millisecond_query();
      
    try{
      // branch for native XMLHttpRequest object
      if(window.XMLHttpRequest)
        this.req = new XMLHttpRequest();
      // branch for IE/Windows ActiveX version
      else if(window.ActiveXObject)
        this.req = new ActiveXObject("Microsoft.XMLHTTP");
      // failure
      else
        this.req = '';
    }
    // failure
    catch(e){
      this.req = '';   
    }
    
    if(this.req && this.url != null)
    {
        if (this.showbusy)
          document.body.style.cursor = "wait";
        if(!strQuery)
            strQuery = '';
        this.req.onreadystatechange = this.processRequest; 
        if (this.method == "GET" && strQuery.length > 0)
          this.url = this.url + "?" + strQuery;
        this.req.open(this.method, this.url, this.async);
        this.req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        this.req.setRequestHeader("Content-length", strQuery.length);
        this.in_process = true;
        if (this.method == "GET")
          this.req.send("");
        else
          this.req.send(strQuery);
    }
  }
  
  this.processRequest = function()
  {
    // only if req shows "loaded"
    if (objReq.req.readyState == 4)
    {
      var kaboom = "";
      
      if (objReq.req.getResponseHeader("Kaboom"))
        kaboom = objReq.req.getResponseHeader("Kaboom");
        
      // build a modifiable copy of the request object
      var pseudo_req = new Object;
      pseudo_req.responseText = objReq.req.responseText;
      pseudo_req.responseXML = objReq.req.responseXML;
      pseudo_req.status = objReq.req.status;
      pseudo_req.statusText = objReq.req.statusText;
      pseudo_req.readyState = objReq.req.readyState;
      
      objReq.in_process = false;
      if (objReq.showbusy)
        document.body.style.cursor = "auto";
      // only if "OK"
      if (pseudo_req.responseText)
        pseudo_req.responseText = pseudo_req.responseText.replace("<!--this page was compressed by your friendly neighborhood pydriver-->", "")
      if (kaboom.toLowerCase() == "true")
      {
        if (objReq.onerror)
          objReq.onerror(pseudo_req);
      }
      else if (objReq.req.status == 200)
      {
        if (objReq.onsuccess)
          objReq.onsuccess(pseudo_req);
      } else {
        if (objReq.onerror)
          objReq.onerror(pseudo_req);
      }
    }
  }
  
  this.formToQuery = function(objForm)
  {
    // given a form loop through the elements and build a 
    // URL encoded query string.
    
    var arrElements = objForm.elements;
                var iIndex = 0;
                var alphaExp = /[0-9a-zA-Z]+$/;
                var test =""
                var alphapunct =/[0-9a-zA-Z-_!?()\'\"{}=+#$*., ]/;
                var scrub ="";

    var strQuery = "";
                var strDebug = "";
                
             
                
    for (i=0; i < arrElements.length; i++)
    {
      if (strQuery.length > 0)
        strQuery += "&";
      
      if ((arrElements[i].type == "radio" || arrElements[i].type == "checkbox") && arrElements[i].checked)      
        strQuery += arrElements[i].name + "=" + encodeURIComponent(arrElements[i].value);
      else if (arrElements[i].type == "select-one")
        strQuery += arrElements[i].name + "=" + encodeURIComponent(arrElements[i].options[arrElements[i].selectedIndex].value);
      else if (arrElements[i].type == "text" || arrElements[i].type == "textarea" || arrElements[i].type == "hidden")
      {
        var this_value = arrElements[i].value;
        
        strQuery += arrElements[i].name + "=" + encodeURIComponent(this_value);
      }
                        
    }
              
    return strQuery;  
  }
}

var script_fragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)'

function stripScripts(html_string) 
{
  return html_string.replace(new RegExp(script_fragment, 'img'), '');
}

function extractScripts(html_string)
{
  var matchAll = new RegExp(script_fragment, 'img');
  var matchOne = new RegExp(script_fragment, 'im');
  var matches = html_string.match(matchAll);
  var results = new Array();
  if (matches) {
      for (var i = 0; i < matches.length; i++) {
          if (matches[i].indexOf("agi-lb-exec") != -1)
            results.push(matches[i].match(matchOne)[1]);
          };
      };
  return results;
}

function evalScripts(html_string)
{
  var scripts = extractScripts(html_string);
  for (i = 0; i < scripts.length; i++)
  {
    try {
      eval(scripts[i]);
    } catch (e) {}
  }
}

function checkAll(formId, checked)
{
  form = document.getElementById(formId);
  
  for (i = 0 ; i < form.elements.length; i++)
  {
    if (form.elements[i].type == "checkbox")
      form.elements[i].checked = checked;
  }
}

function countChecked(formId)
{
  var form = document.getElementById(formId);
  var checked = 0;
  for (i = 0 ; i < form.elements.length; i++)
  {
    if (form.elements[i].type == "checkbox" & form.elements[i].checked)
      checked++;
  }
  return checked;
}

function selectAll(listId, checked)
{
	if (checked==undefined){
    	var is_checked = true;
	} else {
		var is_checked = checked;
	}
    
	var list = document.getElementById(listId);
	var elements = document.getElementsByName("event_id"); /*cs*/

  
	for (i = 0 ; i < list.childNodes.length; i++)
	{
		if (list.childNodes[i].nodeName == "LI")
		{
			for (j = 0; j < list.childNodes[i].childNodes.length; j++)
			{
				if (list.childNodes[i].childNodes[j].type == "checkbox")
				{
					list.childNodes[i].childNodes[j].checked = is_checked;
					/*seek and set any identical valued checkboxes*/
					len = elements.length;
					for (n=0; n < len; n++) 
					{
						if ( (elements[n].value) == (list.childNodes[i].childNodes[j].value) )
						{
							elements[n].checked = is_checked;
						}
					}                                
				}      
			}
		}
	}
}

function selectEqual(oCheck)
{
  var elements = document.getElementsByName(oCheck.name);

  for (i=0; i < elements.length; i++)
  {
    if (oCheck.form.elements[i].value == oCheck.value)
      oCheck.form.elements[i].checked = oCheck.checked;
  }
}

function fixurl(url) {
    if(url.indexOf('http') != 0) {
        var sep = '';
        url.indexOf('/') == 0 ? sep = '' : sep = '/';
        url = ajaxhost()+sep+url;
    }
  return url;
}

function ajaxhost() {
    return document.location.protocol+'//'+document.location.hostname;
}

