function addEvent(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent) {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    return false;
  } 
}
function removeEvent( obj, evType, fn ) {
  if (obj.removeEventListener) {
     obj.removeEventListener( evType, fn, false );
  } else if (obj.detachEvent) {
     obj.detachEvent( "on"+evType, fn );
     //obj[type+fn] = null;
     //obj["e"+type+fn] = null;
  }
}
function EventHandler(elem) {  
  this.elem  = elem;
  this.evt   = "";
  this.register = function(handler, fn) {
    addEvent(this.elem, handler, fn);
  }
  this.invoke = function(evt) {}
  this.cancel = function() {}
}
function FieldHandler(elem) {
  var me = this;
  this.base = EventHandler;
  this.base(elem);
}
FieldHandler.prototype = new EventHandler;
function gCreateRequestObject() {  
  // find the correct xmlHTTP, works with IE, FF and Opera
  var xmlhttp;
  try {
    xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  } catch(e) {
    try {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
      xmlhttp=null;
    }
  }
  if(!xmlhttp&&typeof XMLHttpRequest!="undefined") {
    xmlhttp=new XMLHttpRequest();
  }

  return xmlhttp;
}
function gDynamicContent(el, content, clear) {
  if (!el) return;
  if (typeof(clear) == "undefined") clear = true;
  if (clear) while (el.hasChildNodes()) el.removeChild(el.lastChild);
  if (document.getElementById && !document.all) {
    var rng = document.createRange();
    rng.selectNodeContents(el);
    el.appendChild(rng.createContextualFragment(content));
  } else {
    el.innerHTML += content;
  }
}
function gDisableItem(itm) {
  var obj;
  if ((obj = document.getElementById(itm)) != null) {
    obj.disabled = true;
  }
}
function gEnableItem(itm) {
  var obj;
  if ((obj = document.getElementById(itm)) != null) {
    obj.disabled = false;
  }
}
function gEnableButtonsByName(btnName) {
  var buttons = document.getElementsByTagName("input");
  for (var i=0; i < buttons.length; i++) {
    if (buttons[i].getAttribute("name") == btnName) {
      buttons[i].disabled = false;
    }
  }
}
function gDisableButtonsByName(btnName) {
  var buttons = document.getElementsByTagName("input");
  for (var i=0; i < buttons.length; i++) {
    if (buttons[i].getAttribute("name") == btnName) {
      buttons[i].disabled = true;
    }
  }
}
function gSetStatus() {
  window.status = g_pageTitle;
  return true;
}
function confirmExit() {
  if (g_cnfExit != '') {
    var agree = confirm(g_cnfExit);
    if (agree) {
      return true;
    } else {
      return false;
    }
  } else{
    return true;
  }
}
function showConfirmUpdate() {
  if (g_cnfUpdate != '') {
    var agree = confirm(g_cnfUpdate);
    if (agree) {
      return true;
    } else {
      return false;
    }
  } else{
    return true;
  }
}
function showConfirmDelete() {
  if (g_cnfDelete != '') {
    var agree = confirm(g_cnfDelete);
    if (agree) {
      return true;
    } else {
      return false;
    }
  } else{
    return true;
  }
}
function showConfirmLongRun() {
  if (g_cnfLongRun != '') {
    var agree = confirm(g_cnfLongRun);
    if (agree) {
      return true;
    } else {
      return false;
    }
  } else{
    return true;
  }
}
function showConfirm() {
  if (g_cnfCommon != '') {
    var agree = confirm(g_cnfCommon);
    if (agree) {
      return true;
    } else {
      return false;
    }
  } else{
    return true;
  }
}
function goUrl(url) {
  self.location = url
}
function popupUrl(url,nofocus,width,height) {
  var f = "status=yes,resizable=yes,toolbar=no,menubar=yes,scrollbars=yes,location=no,directories=no";

  if (typeof(width) != 'undefined') f = f + ",width=" + width;
  if (typeof(height) != 'undefined') f = f + ",height=" + height;

  var newwindow=window.open(""+url+"","",f);
  if (typeof(nofocus) == 'undefined' || !nofocus) newwindow.focus();
}
function goParentUrl(url) {
  parent.location = url
}
function gShowPreload() { //DOM
  if (document.getElementById){
    document.getElementById('show_all').style.visibility='hidden';
    document.getElementById('preload').style.visibility='visible';
  }
}
function gClearPreload() { //DOM
  if (document.getElementById){
    document.getElementById('preload').style.visibility='hidden';
    document.getElementById('show_all').style.visibility='visible';
  }
}
function cursorPointer() {
  document.body.style.cursor = 'pointer';
}
function cursorClear() {
  document.body.style.cursor = 'default';
}

/*******************************************************************/
/***                                                             ***/
/***   Tokenizer.js - JavaScript String Tokenizer Function       ***/
/***                                                             ***/
/***   Version   : 0.2                                           ***/
/***   Date      : 01.05.2005                                    ***/
/***   Copyright : 2005 Adrian Zentner                           ***/
/***   Website   : http://www.adrian.zentner.name/               ***/
/***                                                             ***/
/***   This library is free software. It can be freely used as   ***/
/***   long as this this copyright notice is not removed.        ***/
/***                                                             ***/
/*******************************************************************/
String.prototype.tokenize = tokenize;
function tokenize() {
     var input             = "";
     var separator         = " ";
     var trimToken         = "";
     var ignoreEmptyTokens = true;

     try {
       String(this.toLowerCase());
     }
     catch(e) {
       window.alert("Tokenizer Usage: string myTokens[] = myString.tokenize(string separator, string trimToken, boolean ignoreEmptyTokens);");
       return;
     }

     if(typeof(this) != "undefined")
       {
          input = String(this);
       }

     if(typeof(tokenize.arguments[0]) != "undefined")
       {
          separator = String(tokenize.arguments[0]);
       }

     if(typeof(tokenize.arguments[1]) != "undefined")
       {
          trimToken = String(tokenize.arguments[1]);
       }

     if(typeof(tokenize.arguments[2]) != "undefined")
       {
          if(!tokenize.arguments[2])
            ignoreEmptyTokens = false;
       }

     var array = input.split(separator);

     if(trimToken)
       for(var i=0; i<array.length; i++)
         {
           while(array[i].slice(0, trimToken.length) == trimToken)
             array[i] = array[i].slice(trimToken.length);
           while(array[i].slice(array[i].length-trimToken.length) == trimToken)
             array[i] = array[i].slice(0, array[i].length-trimToken.length);
         }

     var token = new Array();
     if(ignoreEmptyTokens)
       {
          for(var i=0; i<array.length; i++)
            if(array[i] != "")
              token.push(array[i]);
       }
     else
       {
          token = array;
       }

     return token;
}
function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

