// The following functions are IE workarounds


// Return "true" if element has classname matching pattern
function hasClass(elem, pat) {
   return elem.className && (elem.className.search("\\b" + pat + "\\b") >= 0);
}

// Add an onload closure to be executed when the document finishes loading.
addLoadEvent = function(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(nobadchars);

// Hook up event handlers for text events
function nobadchars() {
   var inputs = document.getElementsByTagName("input");

   for (var i = 0; i < inputs.length; i++) {
      inputs[i].onkeypress = f;
      inputs[i].onchange = checkchanged;
   }

   inputs = document.getElementsByTagName("textarea");

   for (i = 0; i < inputs.length; i++) {
      inputs[i].onkeypress = f;
      inputs[i].onchange = checkchanged;
   }
}

function errStatus(status) {
   var c = document.getElementById('oops');
   c.style.display = status ? 'none' : 'inline';
}

function f(e) {
   if (!e) e = window.event;
   var code = e.which ? e.which : e.keyCode;
   var ok = (code < 256);
   errStatus(ok);
   return (ok);
}

function checkchanged (e) {
  if (!e) e = window.event;
  var target = e.target ? e.target : e.srcElement;
  var ok = target.value.match(/^[\u0000-\u00FF]*$/);

  errStatus(ok)

  if (!ok) {
     target.value = "";
     target.focus();
  }
  return(ok);
}


function addFocusClass(e) {
    var target = null;
    if (e) {
        if (e.target) {
            target = e.target;
        } else {
            target = e.srcElement;
        }
    } else {
        target = window.event.srcElement;
    }

    if (target) {
        target.className += " focused";
    }
}

function removeFocusClass(e) {
  var target = null;
    if (e) {
        if (e.target) {
            target = e.target;
        } else {
            target = e.srcElement;
        }
    } else {
        target = window.event.srcElement;
    }

  if (target) {
    target.className = target.className.replace(new RegExp(" *focused\\b"), "");
  }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function fixInput(input) {
  input.blur();
  if (input.getAttribute('type') == 'text' || input.tagName == 'TEXTAREA') {
    input.attachEvent('onfocus', addFocusClass);
    input.attachEvent('onblur', removeFocusClass);
  }
}

document.getQueryParameter = function(param) {
   var qstr = window.location.search.substring(1)
   var r_pat = "\\b" + param + "=([^&]*)"
   var r = new RegExp(r_pat);
   var t = r.exec(qstr)
   return t ? t[1] : null;
}


// Set up page behavior
addLoadEvent(function() {

   // Look up task in query string
   var task = document.getQueryParameter('task')
   var i = 0;

   // Uncheck all radio buttons in "task"
   if (document.getElementsByName) {
      // Uncheck everything
      var nodes = document.getElementsByName ? document.getElementsByName("task") : null;
      if (nodes) {
         for (i = 0; i < nodes.length; i++) {
            nodes[i].checked = 0;
         }
      }
   }

   // IE is "special". Workaround for :focus being unimplemented.
   // Also makes labels change style when their corresponding
   // inputs are activated
     if (document.attachEvent) {
         var attached = ""
           var inputs = document.getElementsByTagName("INPUT");
         for (i = 0; inputs && i < inputs.length; i++) {
             if (inputs[i].attachEvent) {
                 fixInput(inputs[i]);
             }
         }

         var textareas = document.getElementsByTagName("TEXTAREA");
         for (i = 0; textareas && i < textareas.length; i++) {
             fixInput(textareas[i]);
         }
     }

   // If there is an element on the page whose id is the value of the 'task'
   // query parameter, select it.
   var tasknode;
   if (task && document.getElementById && (tasknode = document.getElementById(task))) {
      tasknode.checked = 1;
   }

   // Check for these parameters and fill in automatically
   var ids = ["genename", "gid", "pmid"]
   var value
   for (var idx = 0; idx < ids.length; idx++) {
     if (document.getElementsByName && (tasknode = document.getElementsByName(ids[idx])) &&
        (value = document.getQueryParameter(ids[idx]))) {
        tasknode.item(0).value = value
    }
 }
});
