function wgui_add_event_listener(event_type, listener_func)
{
   if (window.addEventListener)
      window.addEventListener(event_type, listener_func, false);
   else if (window.attachEvent)
      window.attachEvent("on" + event_type, listener_func);
}


function wgui_replace_code(element_id, repl)
{
   if (!repl)
      return;
   var element       = document.getElementById('wgui_' + element_id);
   element.innerHTML = eval('wgui_' + repl);
}


function wgui_save_checkbox_state(parent_id, cb)
{
   element = document.getElementById('wgui_' + parent_id);
   if (cb.checked)
      element.value++;
   else
      {
         element.value--;
         if (element.value == 0)
            element.value = '';
      }
}


function wgui_trim(st)
{
   re_start = /^\s+/;
   re_end   = /\s+$/;

   st = st.replace(re_start, '');
   st = st.replace(re_end,   '');

   return st;
}


function wgui_check_required_fields(form_name, required, message)
{
   var stop_submit;
   var required   = required.split(',');
   var num_fields = required.length;

   for (var i = 0; i < num_fields; i++)
      {
         var field_name = wgui_trim(required[i]);
         var field_id   = document.getElementById('wgui_' + field_name);
         field_id.style.backgroundColor = '';

         if (wgui_trim(eval('document.' + form_name + '.' + field_name + '.value')) == '')
            {
               field_id.style.backgroundColor = '#FFAAAA';
               stop_submit = 1;
            }
      }

   if (stop_submit == 1)
      {
         document.getElementById('wgui_' + form_name + '_status').innerHTML = message;
         window.location = '#';
         return false;
      }
}


function wgui_enable_disable_controls(enable, controls)
{
   var controls   = controls.split(',');
   var num_fields = controls.length;

   for (var i = 0; i < num_fields; i++)
      {
         var field_name = wgui_trim(controls[i]);
         var field_id   = document.getElementById('wgui_' + field_name);
            field_id.disabled = !enable;
      }
}