registered_events = new Array();

me = null;
  

function handle_event(eid, event)
{
  var parsed = parseId(eid);
  
  var handler = make_function_name(parsed['eid'], event);
  eval("var x= typeof "+handler+";");
  if (x!="undefined")
  {
    me = document.getElementById(eid);
    var toeval = make_event_call(parsed['eid'], parsed['params'], event);
    var ret = eval(toeval);
    me = null;
    
    return ret;
  }
  
  // should never get here
  alert("error!");
  return true;
}

function make_function_name(eid, event)
{
  return eid+"_"+event;
}

function make_event_call(eid, params, event)
{
  var toeval = eid + "_"+event+"(";
  for (var i=0; i<params.length; i++)
  {
    toeval += '"' + params[i] + '"';
    if (i < params.length -1)
    {
      toeval += ", ";
    }
  }
  toeval+=");";
  return toeval;
}

function parseId(eid)
{
  var ret = new Array();
  ret['eid'] = eid;
  ret['params'] = "";
  
  var re = new RegExp("([a-zA-Z0-9_]*)(\[[a-zA-Z0-9_\, \.\-]*\])");
  
  var trimmer = new RegExp("^([ ]+)|([ ]+)$");
  
  var m = re.exec(eid)
  if (m)
  {
    ret['eid'] = m[1];
        
    attribs = m[2];
    attribs = attribs.substring(1, attribs.length-1);
    attribArray = attribs.split(",");
    for (i=0; i<attribArray.length; i++)
    {
      attribArray[i] = attribArray[i].replace(trimmer, "");
    }
    ret['params'] = attribArray;    
  }
  
  return ret;
}


function register_event_handlers()
{
  for (var ii=0; ii<document.all.length; ii++)
  {
    //document.write(document.all[i].id + "\n");
    if (document.all[ii].id != null && document.all[ii].id != "")
    {
      //alert("-" + document.all[ii].id);
      eid = document.all[ii].id;
      //parsed = parseId(eid);
      //document.all[i].onclick=new Function("return handle_event('"+eid+"', 'onclick');");
//        register_event_handlers(eid);
      register_event_handler(eid, 'onclick');
      register_event_handler(eid, 'onmouseout');
      register_event_handler(eid, 'onmouseover');
      register_event_handler(eid, 'onblur');
      register_event_handler(eid, 'onfocus');
      register_event_handler(eid, 'onchange');
      register_event_handler(eid, 'onreset');
      register_event_handler(eid, 'onsubmit');
      register_event_handler(eid, 'onload');
      register_event_handler(eid, 'onunload');
    }
  }
}

function register_event_handler(eid, event)
{
  // register if the function exists
  var parsed = parseId(eid);
  var handler = make_function_name(parsed['eid'], event);
  eval("var x= typeof "+handler+";");
  if (x=="function")
  {
    var str = "document.all[eid]."+event+"=new Function(\"return handle_event('"+eid+"', '"+event+"');\");";
    eval(str);
    registered_events[registered_events.length] = handler;
  }
}



function dump_registered_handlers()
{
  var msg = "";
  for(var i=0; i<registered_events.length; i++)
  {
    msg += registered_events[i] + "\n";
  }
  alert(msg);
}

function _window_onload()
{
  if (typeof window_onload == "function")
  {
    window_onload();
  }
}
function _window_onunload()
{
  if (typeof window_onunload == "function")
  {
    window_onunload();
  }
}

window.onload=new Function("return _window_onload();");
window.onunload=new Function("return _window_onunload();");


