// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla

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 {
    alert("Error: Handler could not be added.");
  }
}

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("Error: Handler could not be removed.");
  }
}

// Cookie handling functions

function saveCookie(name,value,days)
{
  if (days) {
    var d = new Date();
    d.setTime(d.getTime()+(days*24*60*60*1000));
    var ex = "; expires="+date.toGMTString();
  }
  else {
    var ex = "";
  }
  document.cookie = name+"="+value+ex+"; path=/";
}

function readCookie(name)
{
  var eq = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i<ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(eq) == 0) return c.substring(eq.length,c.length);
  }
  return null;
}

function eraseCookie(name)
{
  saveCookie(name,"",-1);
}

// getParams

function getQueryArgs(global)
{
  var args = {};
  var loc = window.location.href;
  var q = loc.indexOf("?");
  if (q==-1) return false;
  loc = loc.substring(q+1);
  var pairs = loc.split("&");
  for (var i=0; i<pairs.length;i++){
    if (global) eval(pairs[i]);
    var keyval = pairs[i].split("=");
    args[keyval[0]] = unescape(keyval[1]);
  }
  return args;
}

//removes the leading and trailing whitespace (including line breaks) from aString
function trim(aString) {
	//trim preceding whitespace
	while ( (aString.substring(0,1) == ' ') || (aString.substring(0,1) == "\n") ) {
		aString = aString.substring(1, aString.length);
	}
	
	//trim trailing whitespace
	while ( (aString.substring(aString.length-1, aString.length) == ' ') || (aString.substring(aString.length-1, aString.length) == "\n") ) {
		aString = aString.substring(0,aString.length-1);
	}
	
	return aString;
}

//return true if the argument is an array, false otherwise
function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}