function walkTheDOM(node, func) {
    func(node);
    node = node.firstChild;
    while (node) {
        walkTheDOM(node, func);
        node = node.nextSibling;
    }
}

function getChildrenOfClass(className, parentElement) {
    var results = [];
    walkTheDOM(parentElement, function (node) {
        var a, c = node.className, i;
        if (c) {
            a = c.split(' ');
            for (i = 0; i < a.length; i++) {
                if (a[i] === className) {
                    results.push(node);
                    break;
                }
            }
        }
    });
    return results;
}

function slidediv(divElemId, chkboxToToggle, addword) {	
	var divElem = document.getElementById(divElemId);
	var chkElem = document.getElementById(chkboxToToggle);
	var extElem = document.getElementById(addword);  
  if (chkElem.checked) {
  	Element.removeClassName(divElemId+'-panel');
  	Effect.BlindDown(divElemId,  {duration: 1});
  } else {
    Element.addClassName(divElem, divElemId+'-panel');
  	Effect.Squish(divElemId, {duration: 1});
  }
  
	if (extElem != null) {
		if (chkElem.checked && extElem.style.display == 'none') {
			extElem.style.display = 'inline';
		} else {
			extElem.style.display = 'none';
		}		
	}	  
}
function sb_accordion(el) {
	if (Element.hasClassName(el.parentNode.id+'-body','visible')){
		var elopened = el.parentNode.id+'-body';
		var elopenedtitle = el.parentNode.id+'-title';
		new Effect.SlideUp(elopened);
		Element.removeClassName(elopened, 'visible');
		Element.removeClassName(elopenedtitle, 'selectedPanel');
		return;
	}
  	var eldown = el.parentNode.id+'-body';
	var eldowntitle = el.parentNode.id+'-title';
	var apanels = getChildrenOfClass('panelBody', el.parentNode.parentNode);
  	for (var i=0;i<apanels.length;i++){
		if (Element.hasClassName(apanels[i].parentNode.id+'-body','visible')
			&& el.parentNode.parentNode.id == apanels[i].parentNode.parentNode.id ){
			var elup = apanels[i].parentNode.id+'-body';
			var eluptitle = apanels[i].parentNode.id+'-title';
		}
		// if there is no element opened
	}	
	if (!elup) {
		new Effect.SlideDown(eldown);
		Element.addClassName(eldown, 'visible');
		Element.addClassName(eldowntitle, 'selectedPanel');
		return;
	}
	new Effect.Parallel([ new Effect.SlideUp(elup), new Effect.SlideDown(eldown) ], {duration: 0.75});
	Element.removeClassName(elup,'visible');
	Element.addClassName(eldown,'visible');
	Element.addClassName(eldowntitle,'selectedPanel');
	Element.removeClassName(eluptitle, 'selectedPanel');    
}
// similar to toggle_accordion with differences in the title class.
function toggle_slide(el) {
	if (Element.hasClassName(el.parentNode.id+'-body','visible')){
		var elopened = el.parentNode.id+'-body';
		var elopenedtitle = el.parentNode.id+'-title';
		new Effect.SlideUp(elopened, {duration: 0});
		Element.removeClassName(elopened, 'visible');
		Element.removeClassName(elopenedtitle, 'slidedPanel');
		Element.addClassName(elopenedtitle,'unslidedPanel');
		return;
	} else {
		var elclosed = el.parentNode.id+'-body';
		var elclosedtitle = el.parentNode.id+'-title';
		new Effect.SlideDown(elclosed, {duration: 0});
		Element.addClassName(elclosed,'visible');
		Element.addClassName(elclosedtitle,'slidedPanel');
		Element.removeClassName(elclosedtitle, 'unslidedPanel');
		return;
	}
}

function toggle_widget(elem_id, title_id) {
	var elem = document.getElementById(elem_id);
	var title = document.getElementById(title_id);
	
	if (elem.style.display == 'block') {
		elem.style.display = 'none';
		title.className = "pageletTitle unslidedPanel";
	} else {
		elem.style.display = 'block';
		title.className = "pageletTitle slidedPanel";				
	}
}

function keyUpOnEnter(event, fn) { if (event.keyCode == 13) eval(fn); }

var showStatusInputId = "";
function spigit_goto_page(page_num) {
	var url = document.getElementById("pagination_url").value;
	var filterStatusqs = ""
	
	if (showStatusInputId.length > 0) {
		var eFilterStatus = document.getElementById(showStatusInputId);	
		if (eFilterStatus) {
			filterStatusqs = "&" + showStatusInputId + "=" + eFilterStatus.value;
		}
	}
		
	if (arguments.length == 0 || page_num == "goto") {
		var e_goto = document.getElementById("pagination_goto_page_txt");
		if (!e_goto || !e_goto.value || (e_goto.value.length == 0) || isNaN(e_goto.value)) return;
		page_num = e_goto.value;
		var e_01_offset = document.getElementById("pagination_goto_01_offset");
		if (e_01_offset && e_01_offset.value && (e_01_offset.value.length != 0) && !isNaN(e_01_offset.value)) {
			page_num = '' + (page_num - e_01_offset.value);
		}
	}
	
	if (page_num.length > 0)  {
		document.location.replace(url + page_num + filterStatusqs);
	}
	return false;
}

function spigit_toggle(elem_id) {
	var elem = document.getElementById(elem_id);
	if (elem.style.display == 'block') 
		elem.style.display = 'none';
	else
		elem.style.display = 'block';
}

function spigit_controller_toggle(controller, open_img, close_img, elem_id) {
	var elem = document.getElementById(elem_id);
	if (elem.style.display == 'block') {
		elem.style.display = 'none';
		controller.src = close_img;		
	}
	else {
		elem.style.display = 'block';
		controller.src = open_img;
	}
}

function spigit_ajax_handler(aj, success_handler, failure_handler, args) {
	if (!success_handler) return;
        if (aj.readyState == 4) {
            if (aj.status == 200) {
                success_handler(aj, args);
            } else {
            	if (failure_handler)
            		failure_handler(aj, args);
            	else
                	alert('Sorry! There was a problem communicating with the server.');
            }
        }
}
function spigit_call_ajax(url, success_handler, failure_handler, args, meth, params) {
	var ajax;
	try {
      ajax = new XMLHttpRequest();
    } catch (e) {
    	try {
      		ajax = new ActiveXObject('Msxml2.XMLHTTP');
    	} catch (e1) {
    		try {
				ajax = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e2) {
				alert('Your browser does not support AJAX.');
				return;
			}
		}
	}
	if (! meth) meth = 'GET';
	try {
		ajax.onreadystatechange = function() { spigit_ajax_handler(ajax, success_handler, failure_handler, args); };
		ajax.open(meth, url, true);
		ajax.setRequestHeader('If-Modified-Since', 'Thu, 1 Jan 1970 00:00:00 GMT');
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	    if (ajax.overrideMimeType &&
	        (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
	          ajax.setRequestHeader('Connection','close');
		
		ajax.send(params);
	} catch (e) {
		if (failure_handler)
            failure_handler(ajax);
        else
            alert('Sorry! There was a problem communicating with the server.');
		
	}
}

function open_close(elopened,elclosed) {
	document.getElementById(elopened).style.display = 'block';
	document.getElementById(elclosed).style.display = 'none';
}
function togglehide(el) {
		if (Element.hasClassName(el, 'visible')) {
			new Effect.Fade(el, {duration: 0.5});
			Element.removeClassName(el, 'visible');			
		} else {
			new Effect.Appear(el, {duration: 0.5});
			Element.addClassName(el,'visible');
		}
		return;
}
function toggle2hide(elopened,elclosed) {
		if (Element.hasClassName(elopened, 'visible')) {
			new Effect.Fade(elopened, {duration: 0.5});
			Element.removeClassName(elopened, 'visible');			
			new Effect.Appear(elclosed, {duration: 0.5});
			Element.addClassName(elclosed,'visible');
		} else {
			new Effect.Appear(elopened, {duration: 0.5});
			Element.addClassName(elopened,'visible');
			new Effect.Fade(elclosed, {duration: 0.5});
			Element.removeClassName(elclosed, 'visible');			
		}
		return;
}
function sb_accordion_init(id) {
    var apanels = getChildrenOfClass('panelBody', id);
    for (var i=0;i<apanels.length;i++){
        apanels[i].style.display = 'none';
    }
    var velems = getChildrenOfClass('visible', id);
    for (var i=0;i<velems.length;i++){
    	if (velems[i].style) {
    		velems[i].style.display = 'block';
    	} else if (document.getElementById(velems[i])) {
    		document.getElementById(velems[i]).style.display = 'block';
    	}
    }
}
function startExpand(e,element)
{
	var fromElement = e.relatedTarget || e.fromElement;
	while (fromElement && fromElement != element && fromElement.nodeName != 'BODY')
		fromElement = fromElement.parentNode
	if (fromElement == element)
		return;
	
	var tableElement = element;
	var imgElement = tableElement.firstChild.firstChild.firstChild.firstChild.firstChild;
	
	if(!imgElement.inited)
		init(imgElement);

	if (tableElement.nextSibling != null) {
		tableElement.nextSibling.width = tableElement.offsetWidth;
		tableElement.nextSibling.height = tableElement.offsetHeight+1;
	}
	tableElement.className = "icon_expanded";
	tableElement.parentNode.style.zIndex = 1;
	window.clearTimeout(imgElement.imgDelayID);
	imgElement.imgDelayID = window.setTimeout(imgElement.expand,300);
}
function endExpand(e,element)
{

	var toElement = e.relatedTarget || e.toElement;
	while(toElement && toElement != element && toElement.nodeName != 'BODY')
		toElement = toElement.parentNode;
	if(toElement == element)
		return;

	var tableElement = element;
	var imgElement = tableElement.firstChild.firstChild.firstChild.firstChild.firstChild;
	window.clearTimeout(imgElement.imgDelayID);
	hideElements(tableElement);
	imgElement.contract();
}	
function hideElements(element)
{
	var trElements = element.firstChild.childNodes;
	if(trElements[1].nodeName != "SCRIPT")
	{
		if(trElements[1].firstChild.firstChild.nodeName == "SCRIPT")
			trElements[1].firstChild.childNodes[1].style.height = "30px";
		else
			trElements[1].firstChild.firstChild.style.height = "30px";
	}

	for(var i=0;i<trElements.length;i++)
	{
		if(trElements[i].getAttribute("hideexp") == "1")
			trElements[i].style.display = "";

		if(trElements[i].rehide)
			trElements[i].style.display = "none";
	}
}	
function init(imgElement)
{
	imgElement.originalHeight = imgElement.height;
	imgElement.originalWidth = imgElement.width;
	
	imgElement.expand = function() 
	{
		var factor = Math.round(imgElement.height*0.06);
		if(imgElement.width + factor < imgElement.originalWidth*2)
		{
			imgElement.width += factor;
			imgElement.height += factor;
			imgElement.imgDelayID = window.setTimeout(imgElement.expand,18);
		}
		else
		{
			imgElement.width = imgElement.originalWidth*2;
			imgElement.height = imgElement.originalHeight*2;
			var tableElement = imgElement.parentNode.parentNode.parentNode.parentNode.parentNode;
			showElements(tableElement);
			if(tableElement.getAttribute("pushdown") == "1")
				tableElement.nextSibling.height = tableElement.offsetHeight+1;
		}
	};
	imgElement.contract = function() 
	{
		var factor = Math.round(imgElement.height*0.08);
		if(imgElement.width - factor > imgElement.originalWidth)
		{
			imgElement.width -= factor;
			imgElement.height -= factor;
			imgElement.imgDelayID = window.setTimeout(imgElement.contract,15);
		}
		else
		{
			imgElement.width = imgElement.originalWidth;
			imgElement.height = imgElement.originalHeight;
			
			var parentTable = imgElement.parentNode.parentNode.parentNode.parentNode.parentNode;
			parentTable.className = "icon_expandable";
			parentTable.parentNode.style.zIndex = 0;
			if (parentTable.nextSibling != null) {
				parentTable.nextSibling.height = "1";
				parentTable.nextSibling.width = "1";
				}
		}
	};
	
	imgElement.inited = true;
}
function showElements(element)
{
	var trElements = element.firstChild.childNodes;
	if(trElements[1].nodeName != "SCRIPT")
	{
		if(trElements[1].firstChild.firstChild.nodeName == "SCRIPT")
			trElements[1].firstChild.childNodes[1].style.height = "";
		else
			trElements[1].firstChild.firstChild.style.height = "";
	}
	
	for(var i=0;i<trElements.length;i++)
	{
		if(trElements[i].getAttribute("hideexp") == "1")
			trElements[i].style.display = "none";
		else
		{
			if(trElements[i].style.display == "none")
			{
				trElements[i].style.display = "";
				trElements[i].rehide = true;
			}
		}
	}
}
function open_window(url,name,w,h) {
  var newWindow= window.open(url, name, 'width=' + w + ',height=' + h +',resizable=yes,scrollbars=yes');
  if (newWindow)
  	newWindow.focus();
  //setTimeout('self.close()', 120000);
}
function setTickerWidth(elementId, minWidth, usedWidth) {
  var theWidth = minWidth;
  if( 'number' == typeof(window.innerWidth) ) { // Mozilla
    theWidth = window.innerWidth - 40 - usedWidth; // subtract scrollbar width
  } else if( document.body && 'number' == typeof(document.body.clientWidth) ) { // IE 4+
      theWidth = document.body.clientWidth - 20 - usedWidth;    // subtract scrollbar width
      //theWidth = document.body.offsetWidth - 40;
      
  }
  if (theWidth < minWidth) theWidth = minWidth;
  var t = document.getElementById (elementId);
  t.style.width = theWidth;
  return;
}
function setAllTickersWidth(minWidth, usedWidth) {
  var theWidth = minWidth;
  if( 'number' == typeof(window.innerWidth) ) { // Mozilla
    theWidth = window.innerWidth - 40 - usedWidth; // subtract scrollbar width
  } else if( document.body && 'number' == typeof(document.body.clientWidth) ) { // IE 4+
      theWidth = document.body.clientWidth - 20 - usedWidth;    // subtract scrollbar width
      //theWidth = document.body.offsetWidth - 40;
      
  }
  if (theWidth < minWidth) theWidth = minWidth;
  var t = document.getElementById ('TICKER');
  var t2 = document.getElementById ('TICKER2');
  t.style.width = theWidth;
  t2.style.width= theWidth;
  return;
}

function toggle_element(showStatusId, sortColsNum, pageNum, arrowId, elementId) {
  var showStatus = document.getElementById(showStatusId);
  var arrow = document.getElementById(arrowId);
  var element = document.getElementById(elementId);
  
  showStatusInputId = showStatusId;
  
  if (element.style.display == 'block') {
    element.style.display = 'none';
    arrow.src="/img/contractedarrow.gif";
    if (showStatus && showStatus.value) showStatus.value = "false";
  } else {
    element.style.display = 'block';
    arrow.src="/img/expandedarrow.gif";
    if (showStatus && showStatus.value) showStatus.value = "true";
  }
  
  // Update sort columns href
  for (i = 0; i < sortColsNum; i++) {
    var sortLink = document.getElementById('sortCol_' + i);
    if (sortLink != null) {
      sortLink.href = sortLink.href.replace(showStatusId + '=true', showStatusId + '=' + showStatus.value);
      sortLink.href = sortLink.href.replace(showStatusId + '=false', showStatusId + '=' + showStatus.value);
    } 
  }
}

function toggle_section(controller, elementId, showText, hideText) {
	var element = document.getElementById(elementId);
	
	if (element.style.display == 'block') {
	    element.style.display = 'none';
	    controller.innerHTML = showText;
  	} else {
	    element.style.display = 'block';
	    controller.innerHTML = hideText;
   }
}

function checkMaxLength(element, limit) {
  if (element.value.length > limit) {
    alert("You exceeded the max length of " + limit + " characters.");
    element.value = element.value.substring(0, limit);
  }
}

function submitCheckboxChanges (checkboxId, url) {
	//var params = Form.serialize(elem);
	url = url + '&action=' + checkboxId;
	if (document.getElementById(checkboxId).checked) {
		url = url + '&' + checkboxId + '=on';
	}
	spigit_call_ajax(url);				
}
