/* Contains generic JavaScript functions reused across the whole website */

// Given a NodeList of radio buttons, return the DOM's node of the currently selected button
function getCheckedRadio(radioNodeList){
	for(var i=0; i<radioNodeList.length; i++){
		if(radioNodeList[i].checked){
			return radioNodeList[i];
		}
	}
}

// Given a nodeList and a class name, returns an array of node contained inside the list using the given class
function getNodesByClass(nodeList, theClass){
	var nodesArray = new Array();
	for(var i=0; i<nodeList.length; i++){
		if(nodeList[i].className == theClass){
			nodesArray.push(nodeList[i]);
		}
	}
	return nodesArray;
}

//returns all elements in the document with a givenclass
function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}


// Add a CSS class to a given node
function appendClass(nodeElem, newClass){
	if(nodeElem.className.indexOf(newClass) == -1){
		nodeElem.className = nodeElem.className + " " + newClass;
	}	
}

// Remove a CSS class from a given node
function removeClass(nodeElem, oldClass){
	var regClass = new RegExp("\\b" + oldClass);
	nodeElem.className = nodeElem.className.replace(regClass, "");	
}

// Toggle a css class inside a given node
function toggleClass(nodeElem, theClass){
	if(nodeElem.className.indexOf(theClass) == -1){
		appendClass(nodeElem, theClass);
	}
	else{
		removeClass(nodeElem, theClass);
	}
}
//get a specfic variable value (unparsed) from the current query string
function getQueryVariable(variable) {
	var query = window.location.search.substring(1);
  	var vars = query.split("&");
  	for (var i=0;i<vars.length;i++) {
    	var pair = vars[i].split("=");
    	if (pair[0] == variable) {
      		return pair[1];
    	}
  	} 
  return null;
}
// generic get value from cookie name
function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

// Window name for VIS 4 and VIS 5
var visWindow;

function tmt_winOpen(u,id,f,df){
	if(eval(id)==null||eval(id+".closed")){
	eval(id+"=window.open('"+u+"','"+id+"','"+f+"')");eval(id+".focus()");}
	else if(df){eval(id+".focus()");}
	else{eval(id+"=window.open('"+u+"','"+id+"','"+f+"')");eval(id+".focus()");}
}

// The function below was developed by John Resig
// For additional info see:
// http://ejohn.org/projects/flexible-javascript-events
// http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
function addEvent(obj, type, fn){
	if(obj.addEventListener){
		obj.addEventListener(type, fn, false);
	}
	else if(obj.attachEvent){
		obj["e" + type + fn] = fn;
		obj[type + fn] = function(){
				obj["e" + type + fn](window.event);
			}
		obj.attachEvent("on" +type, obj[type+fn]);
	}
}

function imgUnderlineOn(linkNode, imgUrl){
	var imgNode = linkNode.childNodes[0];
	imgNode.setAttribute("imd:imgoff", imgNode.src);
	imgNode.src = imgUrl;
	toggleClass(imgNode, "noUnderline");
}

function imgUnderlineOff(linkNode){
	var imgNode = linkNode.childNodes[0];
	if(imgNode.getAttribute("imd:imgoff")){
		imgNode.src = imgNode.getAttribute("imd:imgoff");
	}
	toggleClass(imgNode, "noUnderline");
}
