//easy, quick ways of referencing specific items in the DOM models
var d = document;
var w = window;
var n = navigator;


//the follwing are variables to determine the users browser for special ways of handling the differences
//internet explorer browser
var ie = (n.appName.indexOf('Microsoft') != -1);
//internet explorer version 6
var ie6 = (ie && n.appVersion.indexOf('MSIE 6.0') != -1);
//internet explorer version 7
var ie7 = (ie && n.appVersion.indexOf('MSIE 7.0') != -1);
//internet explorer prior to version 6
var iep = (ie && !ie6 && !ie7);

//opera
var op = (n.appName.indexOf('Opera') != -1);

//netscape based browser
var ns = (n.appName.indexOf('Netscape') != -1);
//safari
var sf = (ns && n.appVersion.indexOf('Safari') != -1);
//windows firefox (or gecko-based windows browser)
var ff_win = (ns && !sf && !op && n.appVersion.indexOf('Windows') != -1);
//macintoch firefox (or gecko-based macintosh browser)
var ff_mac = (ns && !sf && !op && n.appVersion.indexOf('Macintosh') != -1);
//linux firefox (or gecko-based linux browser)
var ff_lin = (ns && !sf && !op && n.appVersion.indexOf('X11') != -1);
//
function AJAXGetRequest(requestObj, url, stateChangeFunction){
  eval(requestObj + ' = createRequest()');
  eval(requestObj + '.onreadystatechange = stateChangeFunction');
  eval(requestObj + '.open("GET", url, true)');
  eval(requestObj + '.send("")');
}

function AJAXPostRequest(requestObj, url, form_name, stateChangeFunction, postinfo){
  if(form_name){
    var parameters = buildPostParameterString(form_name);
  } else {
    var parameters = postinfo;
  }
  eval(requestObj + ' = createRequest();');
  eval(requestObj + '.onreadystatechange = stateChangeFunction');
  eval(requestObj + '.open("POST", url, true)');
  eval(requestObj + '.setRequestHeader("Content-type", "application/x-www-form-urlencoded")');
  eval(requestObj + '.setRequestHeader("Content-length", parameters.length)');
  eval(requestObj + '.setRequestHeader("Connection", "close")');
  eval(requestObj + '.send(parameters)');
}

function createRequest(){
  var requestObj;
  
  if (window.XMLHttpRequest){
    requestObj = new XMLHttpRequest();
    if (requestObj.overrideMimeType) 
    requestObj.overrideMimeType('application/xml');
  } 
  else if (window.ActiveXObject){
    try{
      requestObj = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e){
      try{
        requestObj = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {}
    }
  }
  
  return requestObj;
}

function buildPostParameterString(form_name){
  eval('form = document.' + form_name);
  var text = '';

  for(var i=0; i < form.elements.length; i++){
    switch(form.elements[i].type){
      case 'text':
      case 'textarea':
      case 'hidden':
      case 'password':
        text += (text ? '&' : '') + form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value);
        break;
      
      case 'select-one':
      case 'select-multiple':
        for(var j=0; j < form.elements[i].length; j++){
          if(form.elements[i].options[j].selected){
            text += (text ? '&' : '') + encodeURIComponent(form.elements[i].name) + "=" + encodeURIComponent(form.elements[i].options[j].value);
          }
        }
        break;
      
      case 'checkbox':
      case 'radio':
        if(form.elements[i].checked) {
          text += (text ? '&' : '') + form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value);
        }
        break;
    }
  }

  return text;
}

// Function to clean up the unicode html entities like ' and & and return them as their characters
function cleanUnicodeEntities(string)
{
  var re = new RegExp(/&#(\d+);/g);
  var m;
  while(m = re.exec(string))
  string = string.replace(string.substring(m.index,m.index+m.length+3),String.fromCharCode(string.substring(m.index+2,m.index+m.length+2)));
  
  return string;
}

//a quicker reference to document.getElementById()
function gEBI(id){
  return d.getElementById(id);
}
