/* Adds an event listener to an element. */
function addEvent(elm, evType, fn, useCapture){
  if(elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
  }
  else if(elm.attachEvent){
    var r = elm.attachEvent('on'+evType, fn);
    return r;
  }
  else{
    elm['on'+evType] = fn;
  }
}


/* Goes up the DOM tree and looks for an element of a given type. */
function ascendDOM(e, target){
  while(e.nodeName.toLowerCase()!=target && e.nodeName.toLowerCase()!='html'){
    e = e.parentNode;
  }
  
  return (e.nodeName.toLowerCase()=='html') ? null : e;
}



/* Returns the element that invoked the action. */
function getInvoker(e){
  var el;
  if(window.event && window.event.srcElement){
    el = window.event.srcElement;
  }
  if(e && e.target){
    el = e.target;
  }
  
  if(!el){
    return;
  }
  else{
    return el;
  }
} 


/* Cancels default action. */
function cancelDefault(e){
  if(window.event && window.event.returnValue){
    window.event.returnValue = false;
  }
  if(e && e.preventDefault){
    e.preventDefault();
  }
}


/* Cancels default action (Safari). */
function cancelDefaultSafari(e){
  return false;
}


/* Should be invoked by an TD or TH element to highlight the whole row. */
function highlightTr(e){
  var el = getInvoker(e);
  var tr = ascendDOM(el, "tr");
  
  if(tr.className.indexOf("highlighted")==-1){
    tr.className += " highlighted";
  }
}


/* Should be invoked by an TD or TH element to unhighlight the whole row. */
function unhighlightTr(e){
  var el = getInvoker(e);
  var tr = ascendDOM(el, "tr");
  
  tr.className = tr.className.replace(/\b ?highlighted\b/, '');
}


/* Blurs the invoker. */
function fireBlur(e){
  var el = getInvoker(e);
  el.blur();
}


/* Calls the targetBlank function on the invoker's href. */
function targetBlankComplete(e){
  var el = getInvoker(e);
  var el = ascendDOM(el, "a");
  targetBlank(el.href);
}


/* Highlights an input. */
function highlightInput(e){  
  var el = getInvoker(e);
  
  el.className += " inputFocus";
}


/* Unhighlights an input. */
function unhighlightInput(e){  
  var el = getInvoker(e);
  
  el.className = el.className.replace(/\b ?inputFocus\b/, '');
}

/* Highlights a button. */
function highlightButton(e){  
  var el = getInvoker(e);
  
  el.className = el.className.replace(/\b ?button\b/, 'button buttonHover');
}


/* Unhighlights a button. */
function unhighlightButton(e){  
  var el = getInvoker(e);
  
  el.className = el.className.replace(/\b ?button buttonHover\b/, 'button');
}

/* Adds listeners for a page. */
function addListeners(){
  if(!document.getElementById){
    return;
  }


  //highlight inputs when active
  var inputs = document.getElementsByTagName('input');
  var newEl;
  
  for(var i=0; i<inputs.length; i++){
    if(inputs[i].className.indexOf("checkbox")==-1 && inputs[i].className.indexOf("radio")==-1){
      if(inputs[i].className.indexOf("button")==-1){ //inputs
        //highlighting the inputs themselves
        addEvent(inputs[i], 'focus', highlightInput, false);
        addEvent(inputs[i], 'blur', unhighlightInput, false);
      }
      else{ //buttons
        addEvent(inputs[i], 'mouseover', highlightButton, false);
        addEvent(inputs[i], 'mouseout', unhighlightButton, false);
      }    
    }
  }


  //highlight textareas when active
  var inputs = document.getElementsByTagName('textarea');
  var newEl;
  
  for(var i=0; i<inputs.length; i++){
    //highlighting the inputs themselves
    addEvent(inputs[i], 'focus', highlightInput, false);
    addEvent(inputs[i], 'blur', unhighlightInput, false);
  }  

  //highlight select boxes when active
  var inputs = document.getElementsByTagName('select');
  var newEl;
  
  for(var i=0; i<inputs.length; i++){
    //highlighting the inputs themselves
    addEvent(inputs[i], 'focus', highlightInput, false);
    addEvent(inputs[i], 'blur', unhighlightInput, false);
  }  
    
  //for each link prevent focusing (ugly border in MSIE)
  //for each external link convert link to point to a blank window
  var links = document.getElementsByTagName("a");
  for(var i=0; i<links.length; i++){
    window.addEvent(links[i], 'focus', fireBlur, false);
    window.addEvent(links[i], 'click', fireBlur, false);
    
    if(links[i].className.indexOf("external")!=-1){
      window.addEvent(links[i], 'click', targetBlankComplete, false);
      window.addEvent(links[i], 'click', cancelDefault, false);
      links[i].onclick = cancelDefaultSafari;
    }
  }
  
  
  //for each table column/header add row highlighting
  var tds = document.getElementsByTagName("td");
  for(var i=0; i<tds.length; i++){
    window.addEvent(tds[i], 'mouseover', highlightTr, false);
    window.addEvent(tds[i], 'mouseout', unhighlightTr, false);
  }

  var ths = document.getElementsByTagName("th");
  for(var i=0; i<ths.length; i++){
    window.addEvent(ths[i], 'mouseover', highlightTr, false);
    window.addEvent(ths[i], 'mouseout', unhighlightTr, false);
  }
  
  
  //round corners of all quick boxes
  var divs = document.getElementsByTagName("div");
  rC = new DHTMLgoodies_roundedCorners();
  
  for(var i=0; i<divs.length; i++){
    if(divs[i].className.indexOf("rounded")!=-1){
      var thisId = divs[i].id;
      rC.addTarget(thisId,20,15,'#FFA80D','#FFFFFF',5,0, 'top_left,top_right,bottom_left,bottom_right');
    }
  }
  
  rC.init();
  
  //round corders for all blockquotes
  var divs = document.getElementsByTagName("blockquote");
  rC = new DHTMLgoodies_roundedCorners();
  
  for(var i=0; i<divs.length; i++){
    if(divs[i].className.indexOf("rounded")!=-1){
      var thisId = divs[i].id;
      rC.addTarget(thisId,10,10,'#EBEEF4','#FFFFFF',5,0, 'top_left,top_right,bottom_left,bottom_right');
    }
  }
  
  rC.init();
  
  
  //floating hints for all elements with class floatingHint
  var imgs = document.getElementsByTagName("img");
  for(var i=0; i<imgs.length; i++){
    if(imgs[i].className.indexOf("floatingHint")!=-1){
      //window.addEvent(imgs[i], 'mouseover', "showFloatingHint(this)", false);
      //window.addEvent(imgs[i], 'mouseout', "hideFloatingHint(this)", false);    
    }
  }
  
}


/* Initializes round corners. */
function roundCorners(){
  rC = new DHTMLgoodies_roundedCorners();
  rC.addTarget('divKillerRight',10,10,'#4F8C58','#FFFFFF',20,0, 'top_left,top_right,bottom_left,bottom_right');
  rC.addTarget('divKillerRight2',10,10,'#3A89B2','#FFFFFF',20,0, 'top_left,top_right,bottom_left,bottom_right');
  rC.init();
}


/* Initializes the swf object. */
swfobject.registerObject("objTitleStrip", "9.0.0");
swfobject.registerObject("objAction", "9.0.0");


//add listeners
window.addEvent(window, 'load', addListeners, false);






