
function showHideStartsWith(idStartsWith) {
	var elements = document.getElementsByTagName('div');
	for (i=0;i<elements.length;i++){
		var elementId = elements[i].id;
		if(elementId.startsWith(idStartsWith)) {
			visibility(elementId);
			blocking(elementId);
		}
	}
}

function changeInputToInt(element) {
	if(!element) {
		return;
	} else if(!element.value) {
		element.value = 0;
	} else {
		var int = parseInt(element.value);
		if(isNaN(int))
			int = 0;
		element.value = int;
	}
}

function showHideNode(nodeId, imageId) {
	var image = returnObjById(imageId);
	if(image.src.indexOf('images/tree_hide.gif') > -1)
		image.src = 'images/tree_show.gif'
	else
		image.src = 'images/tree_hide.gif'

	visibility(nodeId);
	blocking(nodeId);
}

function showHide(id) {
	$(id).toggle();
	visibility(id);
}

function show(id) {
	$(id).show();
	$(id).style.visibility = 'visible';
}

function hide(id) {
	$(id).hide();
	$(id).style.visibility = 'hidden';
}

function visibility(id) {
	visibility(id, 'hidden');
}

function visibility(id, defaultValue) {
	var cssProperty = $(id).style.visibility;
	if(!cssProperty || cssProperty == null || cssProperty == '')
		cssProperty = defaultValue;
	else 
		cssProperty = (cssProperty == 'hidden') ? 'visible' : 'hidden';
	$(id).style.visibility = cssProperty;
}


function blocking(id) {
	var cssProperty = $(id).style.display;
	cssProperty = (cssProperty == 'none') ? 'block' : 'none';
	$(id).style.display = cssProperty;
}

function clickButton(id){
	$(id).click();
}

function visShow(id) {
	$(id).style.visibility = 'visible';
}

function visHide(id) {
	$(id).style.visibility = 'hidden';
}


// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function selectAll(selectElement) {
	for (var i=0; i<selectElement.options.length; i++){
		selectElement.options[i].selected=true;
	}
}

function changeShowHideGroupsLink(idLink){
	if(document.getElementById(idLink).innerHTML == "View All Groups"){
		document.getElementById(idLink).innerHTML = "Hide All Groups";
	} 
	else{
	 	document.getElementById(idLink).innerHTML = "View All Groups";
	 }
}

function changeShowHidePropertyLink(idLink){
	if(document.getElementById(idLink).innerHTML == "Hide"){
		document.getElementById(idLink).innerHTML = "Show";
	} 
	else{
	 	document.getElementById(idLink).innerHTML = "Hide";
	 }
}

function changeShowHideNotesLink(idNotes){
	if(document.getElementById(idNotes).innerHTML == "Add Notes"){
		document.getElementById(idNotes).innerHTML = "Hide Notes";
	} else if(document.getElementById(idNotes).innerHTML == "View Notes"){
	 	document.getElementById(idNotes).innerHTML = "Hide Notes";
	} else{
		document.getElementById(idNotes).innerHTML = "View Notes";
	}
}

function changeShowHideFilterOptionsLink(idNotes){
	if(document.getElementById(idNotes).innerHTML == "Hide Filter Options"){
		document.getElementById(idNotes).innerHTML = "Show Filter Options";
	} else{
		document.getElementById(idNotes).innerHTML = "Hide Filter Options";
	}
}

/** A bunch of functions for enabling and disabling things **/
function enableAllFormElements() {
	enableAllInputElements();
	enableAllSelectElements();
	enableAllTextAreas();
}

function disableAllFormElements() {
	disableAllInputElements();
	disableAllSelectElements();
	disableAllTextAreas();
}

function disableAllFormElementsExceptSubmit() {
	disableAllInputElements(false);
	disableAllSelectElements();
	disableAllTextAreas();
}

function enableAllInputElements() {
	inputElements = document.getElementsByTagName('input');
	for (i=0;i<inputElements.length;i++){
		inputElements[i].disabled=false;
	}
}

function disableAllInputElements(disableSubmit) {
	inputElements = document.getElementsByTagName('input');
	for (i=0;i<inputElements.length;i++){
		if (!disableSubmit && inputElements[i].type=='submit'){
			// Do nothing
		} else if (inputElements[i].type!='submit') {
			inputElements[i].disabled=true;
		}
	}
}

function enableAllSelectElements() {
	inputElements = document.getElementsByTagName('select');
	for (i=0;i<inputElements.length;i++){
		inputElements[i].disabled=false;
	}
}

function disableAllSelectElements() {
	inputElements = document.getElementsByTagName('select');
	for (i=0;i<inputElements.length;i++){
		inputElements[i].disabled=true;
	}
}

function enableAllTextAreas() {
	inputElements = document.getElementsByTagName('textarea');
	for (i=0;i<inputElements.length;i++){
		inputElements[i].disabled=false;
	}
}

function disableAllTextAreas() {
	inputElements = document.getElementsByTagName('textarea');
	for (i=0;i<inputElements.length;i++){
		inputElements[i].disabled=true;
	}
}

function enableAllCheckBoxes() {
	inputElements = document.getElementsByTagName('input');
	for (i=0;i<inputElements.length;i++){
		if (inputElements[i].type=='checkbox'){
			inputElements[i].disabled=false;
		}
	}
}

function disableAllCheckBoxes() {
	inputElements = document.getElementsByTagName('input');
	for (i=0;i<inputElements.length;i++){
		if (inputElements[i].type=='checkbox'){
			inputElements[i].disabled=true;
		}
	}
}
/** End disabling things functions **/

function returnObjById(id){
	if (document.getElementById)
		var returnVar = document.getElementById(id);
	else if (document.all)
		var returnVar = document.all[id];
	else if (document.layers)
		var returnVar = document.layers[id];
	return returnVar;
}

/** Counter functions **/
function countText(field, countTextId, maxlimit) {
	var countTextToUpdate = returnObjById(countTextId);

	var count = countCharactersSpecial(field.value);

	if(count > maxlimit) {
		tooLong = true;
		field.focus();
		countTextToUpdate.style.color = "red";
		field.style.border="3px solid #FF0000";
	} else if(count > (maxlimit - (maxlimit / 10))) {
		countTextToUpdate.style.color = "#FF6600";
		field.style.border="1px solid #7F9DB9";
	} else {
		countTextToUpdate.style.color = "green";
		field.style.border="1px solid #7F9DB9";
	}

    countTextToUpdate.innerHTML = (maxlimit - count) + "/" + maxlimit + " characters";
}

function countCharactersSpecial(text) {

	text = text.toLowerCase();

	var beginUrlIndex = 0;
	while(beginUrlIndex > -1) {
		beginUrlIndex = text.indexOf('http://', beginUrlIndex);
		if(beginUrlIndex == -1)
			beginUrlIndex = text.indexOf('https://', beginUrlIndex);
		if(beginUrlIndex > -1) {
			var textAfterBeginUrl = text.substring(beginUrlIndex);
			var endUrlIndex = textAfterBeginUrl.search(/\s/);
			if(endUrlIndex == -1)
				endUrlIndex = text.length;
			else
				endUrlIndex = endUrlIndex+beginUrlIndex;

			var longUrl = text.substring(beginUrlIndex, endUrlIndex);
			var shortLink = "http://4ir.io?12345";
			if(longUrl.length <= shortLink.length)
				shortLink = longUrl;
			
			text = text.substring(0, beginUrlIndex) + shortLink + text.substring(endUrlIndex);
			
			// Set new begin index to previous end index
            beginUrlIndex = endUrlIndex;
		}
	}

	var count = 0;
	// We ignore \r because they will be ignored when we 
	// actually send the text.
	for(i=0; i<text.length; i++) {
		if(text[i] != '\r')
			count++;
	}
	
	return count;
}
/** End of Counter functions **/


function returnFormElementByIdEndingWith(formId, endsWith) {
	var elements = $(formId).elements;
	for(var i = 0; i < elem.length; i++) {
		
	}
}


function getJSFId(_tagName,_fieldName) {
	var elements = document.getElementsByTagName(_tagName);
	if (elements != null && elements.length != 0) {	
		for (i=0, x=elements.length; i<x; i++) {
			if(elements[i].id.match(_fieldName) != null) {
				return elements[i].id;
			}
		}
	}
}

function getJSFIds(_tagName,_fieldName) {
	var matches = new Array();
	var elements = document.getElementsByTagName(_tagName);
	if (elements != null && elements.length != 0) {	
		for (i=0, x=elements.length; i<x; i++) {
			if(elements[i].id.match(_fieldName) != null) {
				matches[matches.length] = elements[i].id;
			}
		}
	}
	return matches;
}

function grayOut(vis, options) {
  // Pass true to gray out screen, false to ungray
  // options are optional.  This is a JSON object with the following (optional) properties
  // opacity:0-100         // Lower number = less grayout higher = more of a blackout 
  // zindex: #             // HTML elements with a higher zindex appear on top of the gray out
  // bgcolor: (#xxxxxx)    // Standard RGB Hex color code
  // grayOut(true, {'zindex':'50', 'bgcolor':'#0000FF', 'opacity':'70'});
  // Because options is JSON opacity/zindex/bgcolor are all optional and can appear
  // in any order.  Pass only the properties you need to set.
  var options = options || {}; 
  var zindex = options.zindex || 50;
  var opacity = options.opacity || 70;
  var opaque = (opacity / 100);
  var bgcolor = options.bgcolor || '#000000';
  var dark=document.getElementById('darkenScreenObject');
  if (!dark) {
    // The dark layer doesn't exist, it's never been created.  So we'll
    // create it here and apply some basic styles.
    // If you are getting errors in IE see: http://support.microsoft.com/default.aspx/kb/927917
    var tbody = document.getElementsByTagName("body")[0];
    var tnode = document.createElement('div');           // Create the layer.
        tnode.style.position='absolute';                 // Position absolutely
        tnode.style.top='0px';                           // In the top
        tnode.style.left='0px';                          // Left corner of the page
        tnode.style.overflow='hidden';                   // Try to avoid making scroll bars            
        tnode.style.display='none';                      // Start out Hidden
        tnode.id='darkenScreenObject';                   // Name it so we can find it later
    tbody.appendChild(tnode);                            // Add it to the web page
    dark=document.getElementById('darkenScreenObject');  // Get the object.
  }
  if (vis) {
    // Calculate the page width and height 
    if( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) {
        var pageWidth = document.body.scrollWidth+'px';
        var pageHeight = document.body.scrollHeight+'px';
    } else if( document.body.offsetWidth ) {
      var pageWidth = document.body.offsetWidth+'px';
      var pageHeight = document.body.offsetHeight+'px';
    } else {
       var pageWidth='100%';
       var pageHeight='100%';
    }   
    //set the shader to cover the entire page and make it visible.
    dark.style.opacity=opaque;                      
    dark.style.MozOpacity=opaque;                   
    dark.style.filter='alpha(opacity='+opacity+')'; 
    dark.style.zIndex=zindex;        
    dark.style.backgroundColor=bgcolor;  
    dark.style.width= pageWidth;
    dark.style.height= pageHeight;
    dark.style.display='block';                          
  } else {
     dark.style.display='none';
  }
}

/**** Start positioning functions ****/
function putInAbsoluteCenter(id) {
	putInCenterWidth(id);
	putInCenterHeight(id);
}

function putInCenterWidth(id) {
	var element = $(id);
	if(element) {
		var left = Math.round(f_clientWidth()/2 - element.getWidth()/2 + f_scrollLeft());
		if(left < 0)
			left = 0;
		element.style.left = left + "px";
	}
}

function putInCenterHeight(id) {
	var element = $(id);
	if(element) {
		var top = Math.round(f_clientHeight()/2 - element.getHeight()/2 + f_scrollTop());
		if(top < 0)
			top = 0;
		element.style.top = top + "px";
	}
}

function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

/**** End positioning functions ****/


/** This function will execute after page load **/
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

function fade(elementId) {
	Effect.Fade(elementId);
}

// Usage: preload('image1.jpg,image2.jpg,image3.jpg');
function preload(images) {
	if (document.images) {
		var i = 0;
		var imageArray = new Array();
		imageArray = images.split(',');
		var imageObj = new Image();
		for(i=0; i<=imageArray.length-1; i++) {
			//document.write('<img src="' + imageArray[i] + '" />');// Write to page (uncomment to check images)
			imageObj.src=images[i];
		}
	}
}


