//------------------------------------------------------------------------------
// Add function to page load event
//------------------------------------------------------------------------------
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

//------------------------------------------------------------------------------
// Check or uncheck the checkbox specified by args.id
//------------------------------------------------------------------------------
function checkCheckbox(args) {
	var i = 0;
	var chkElement;

	if (args.id.charAt(args.id.length-1) == '#') {
		while (chkElement = document.getElementById(args.id.substring(0, args.id.length-1) + i)) {
			chkElement.checked = args.checked;
			i++;
		}	
	} else {
		chkElement = document.getElementById(args.id);
		chkElement.checked = args.checked;		
	}

	return true;
}

//------------------------------------------------------------------------------
// Check or uncheck all of a nested set of checkboxes
//------------------------------------------------------------------------------
function checkNestedCheckboxes(args) {
	var i;
	var j;
	var count = 0;
	var newId;
	var chkElement;
	var newNested;
	var newChecked;
	var checked;

	checked = args.checked;
	newChecked = args.checked;
	if (args.checked.constructor.toString().indexOf("Array") != -1) {
		checked = args.checked[0];
		newChecked = args.checked.slice(1);
	}
	if (typeof(args.nested) != 'undefined') {
		newId = args.id + args.nested[0];
		newNested = args.nested.slice(1);
		if (args.nested[0].constructor.toString().indexOf("Array") != -1) {
			count = args.nested[0].length;
		}
		for (j=0; j==0 || j<count; j++) {
			if (count != 0) {
				newId = args.id + args.nested[0][j];
			}
			i = 0;
			while (chkElement = document.getElementById(newId + i)) {
				if (args.nested.length > 1) {
					checkNestedCheckboxes({id:newId + i, nested:newNested, checked:newChecked});
				} else {
					checkNestedCheckboxes({id:newId + i, checked:newChecked});
				}
				i++;
			}
		}
	}
	chkElement = document.getElementById(args.id);
	if (typeof(chkElement) != 'undefined' && typeof(checked) == 'boolean') {
		chkElement.checked = checked;
	}

	return true;
}

//------------------------------------------------------------------------------
// Hide the record count span
//------------------------------------------------------------------------------
function clearRecordCount() {
	var spanRecordCount;

	spanRecordCount = document.getElementById('span_record_count');
	spanRecordCount.innerHTML = '';

	return true;
}

//------------------------------------------------------------------------------
// Get the record count using ajax
//------------------------------------------------------------------------------
function getRecordCount() {
	var element = document.getElementById('span_record_count');
	element.innerHTML = '<b>Counting...</b>'
	var elements = 'count,' + getForm('frm_main');			
	get_count(elements.split(','), ['span_record_count']);
	return true;
}

//------------------------------------------------------------------------------
// Return a comma separated list of user input element ids
//------------------------------------------------------------------------------
function getForm(formName) { 
	var element;
	var elementList = '';
	var form = '';

	form = document.getElementById(formName);
	for(var i = 0;i < form.elements.length;i++) { 
		element = form.elements[i]; 
 		switch(element.type) { 
			case "text":
			case "hidden":
			case "password":
			case "textarea":
			case "select-one":
				if (element.id.length > 0) {
					elementList += element.id + ",";
				}
			break;
			case "checkbox":
			case "radio":
				if (element.id.length > 0 && element.checked) {
					elementList += element.id + ",";
				}
			break;
		}
	}
	elementList = elementList.substr(0,(elementList.length - 1));  
	return elementList;
}

//------------------------------------------------------------------------------
// Hide the last visible element
//------------------------------------------------------------------------------
function hideLastElement(args) {
	var element;
	var i = 0;
	var lastVisible;

	i = 0;
	var lastVisible=0;
	while (element = document.getElementById(args.ids.substring(0, args.ids.length-1) + i)) {
		if (element.style.display != 'none') {
			lastVisible = i;
		}
		i++;
	}
	element = document.getElementById(args.ids.substring(0, args.ids.length-1) + lastVisible);
	if (typeof(element) != 'undefined') {
		element.style.display = 'none';
	}
	
	return true;
}

//------------------------------------------------------------------------------
// Set the innerHTML args.id
//------------------------------------------------------------------------------
function setInnerHTML(args) {
	var element;
	var i;
	var count=0;
	var j;
	// If the current nested array element is an array
	if (args.ids.constructor.toString().indexOf("Array") != -1) {
		count = args.ids.length;
	}
	for (j=0; j==0 || j<count; j++) {
		if (count == 0) {
			newId = args.ids;
		} else {
			newId = args.ids[j];
		}
//		i = 0;
		i = 1;
		if (newId.charAt(newId.length-1) == '#') {
			while (element = document.getElementById(newId.substring(0, newId.length-1) + i)) {
				element.innerHTML = args.innerHTML;
				i++;
			}
		} else {
			element = document.getElementById(newId)
			element.innerHTML = args.innerHTML;
		}
	}

	return true;
}

//------------------------------------------------------------------------------
// Show or hide the element that start with the specified by args.id
//------------------------------------------------------------------------------
function showElement(args) {
	var element;
	var i = 0;
	var count=0;
	var j = 0;
	// If the current nested array element is an array
	if (args.ids.constructor.toString().indexOf("Array") != -1) {
		count = args.ids.length;
	}
	for (j=0; j==0 || j<count; j++) {
		if (count == 0) {
			newId = args.ids;
		} else {
			newId = args.ids[j];
		}
		i = 0;
		if (newId.charAt(newId.length-1) == '#') {
			while (element = document.getElementById(newId.substring(0, newId.length-1) + i)) {
				element.style.display = (args.show) ? '' : 'none';
				i++;
			}
		} else {
			element = document.getElementById(newId)
			element.style.display = (args.show) ? '' : 'none';
		}
	}

	return true;
}

//------------------------------------------------------------------------------
// Show or hide the element if one or more checkboxes is currently checked.
//------------------------------------------------------------------------------
function showElementAnyChecked(args) {
	var element;
	var chkElement;
	var checked = false;
	var i;

	var i = 0;
	while ((chkElement = document.getElementById(args.checkboxId + i)) && checked != true) {
		if (chkElement.checked) {
			checked = true;
		}
		i++;
	}
	for (i=0; i<args.ids.length; i++) {
		element = document.getElementById(args.ids[i]);
		element.style.display = (checked) ? '' : 'none';
		if (args.show == false) {
			element.style.display = (checked) ? 'none' : '';
		}
	}

	return true;
}

//------------------------------------------------------------------------------
// Show or hide an element and change the plus/minus image
//------------------------------------------------------------------------------
function shrink(args) {
	var elementObject = document.getElementById(args.element);
	var hideElementObject = document.getElementById(args.hideElement);
	var linkObject = args.link;
	var words = args.words;

	var leftTdWidth;
	if (linkObject.innerHTML == args.words[1]) {
		leftTdWidth = '1%';
		if (words) {
			linkObject.innerHTML = args.words[0];
		}
	} else {
		leftTdWidth = '';
		if (words) {
			linkObject.innerHTML = args.words[1];
		}
	}
	elementObject.style.width = leftTdWidth;
	writeCookie('left_td_width', leftTdWidth)
	
	return true;
}


//------------------------------------------------------------------------------
// Show or hide an element and change the plus/minus image
//------------------------------------------------------------------------------
function showHide(args) {
   var elementObject = document.getElementById(args.element);
   if (elementObject.style.display == '') {
       elementObject.style.display = 'none';
       if (args.words) {
           args.link.innerHTML = args.words[0];
       } else {
           if (args.link.href) {
               var imageObject = document.getElementById(args.image_id);
               if (imageObject) {
                   imageObject.src = args.images[0];
               } else {
                   args.link.firstChild.src = args.images[0];
               }
           } else {
               args.link.src = args.images[0];
           }
       }
   } else {
       elementObject.style.display = '';
       if (args.words) {
           args.link.innerHTML = args.words[1];
       } else {
           if (args.link.href) {
               var imageObject = document.getElementById(args.image_id);
               if (imageObject) {
                   imageObject.src = args.images[1];
               } else {
                   args.link.firstChild.src = args.images[1];
               }
           } else {
               args.link.src = args.images[1];
           }
       }
   }
   return true;
} 

//------------------------------------------------------------------------------
// Show intensities description
//------------------------------------------------------------------------------
//function showListWithOperatorsDesc(args) {
//	var i;
//	var last_visible;
//	var element;
//	
//	i = 0;
//	while (chkElement = document.getElementById(args.ids + i)) {
//		document.getElementById(args.items + i).style.display = (chkElement.checked) ? '' : 'none';
//		document.getElementById(args.operators + i).style.display = (chkElement.checked) ? '' : 'none';
//		if (chkElement.checked) {
//			last_visible = i;
//		}
//		i++;
//	}
//	if (element = document.getElementById(args.operators + last_visible)) {
//		element.style.display = 'none';
//	}
//
//	return true;
//}

//------------------------------------------------------------------------------
// Show intensities description
//------------------------------------------------------------------------------
function showListWithOperatorsDesc(args) {
	var i;
	var last_visible;
	var element;
	var checked;

	checked = 0;
	i = 1;
	while (chkElement = document.getElementById(args.ids + i)) {
		document.getElementById(args.items + i).style.display = (chkElement.checked) ? '' : 'none';
		document.getElementById(args.operators + i).style.display = (chkElement.checked) ? '' : 'none';
		if (chkElement.checked) {
			last_visible = i;
			checked++;
		}
		i++;
	}
	if (element = document.getElementById(args.operators + last_visible)) {
		element.style.display = 'none';
	}
	i = 0;
    if (typeof(document.getElementById(args.items + i)) != 'undefined') {
        if (checked == 0) {
		    document.getElementById(args.items + i).style.display = '';
        } else {
		    document.getElementById(args.items + i).style.display = 'none';
        }
    }

    // Of the all exc msg showing, remove and show individual
    if (document.getElementById('span_left_int_lib_exc').style.display != 'none') {
        document.getElementById('span_left_int_lib_exc').style.display = 'none';
        i = 1;
        var excElement;
        while (excElement = document.getElementById('chk_lib_exc' + i)) {
           if (excElement.checked) {
                document.getElementById('span_left_int_and_or_lib_exc' + i).style.display = '';
    		    document.getElementById('span_left_int_lib_exc' + i).style.display = '';
            }
            i++; 
        }
    }
	return true;
}

//------------------------------------------------------------------------------
// Handles the 'Exclude all non-included libraries button
//------------------------------------------------------------------------------
function showExcludeAll(args) {
	var i;
	var num_libs = args.cnt;
	var chkElement;
    var excElement;
    var checked;
	i = 1;
    checked = 0;

	while (chkElement = document.getElementById('chk_lib_inc' + i)) {
        excElement = document.getElementById('chk_lib_exc' + i);
		if (chkElement.checked) {
            if (excElement.checked) {
    		    document.getElementById('span_left_int_and_or_lib_exc' + i).style.display = 'none';
    		    document.getElementById('span_left_int_lib_exc' + i).style.display = 'none';
                document.getElementById('chk_lib_exc' + i).checked = false;
            } 
        } else { 
		    document.getElementById('span_left_int_and_or_lib_exc' + i).style.display = '';
            document.getElementById('span_left_int_lib_exc' + i).style.display = '';
            document.getElementById('chk_lib_exc' + i).checked = true;
            checked++;
        }
		i++;
	}
    if (checked) {
        document.getElementById('span_left_int_lib_exc0').style.display = 'none';
    }
    if (checked > 5) {
        document.getElementById('span_left_int_lib_exc').style.display = '';
        i = 1;
        while (chkElement = document.getElementById('chk_lib_exc' + i)) {
            if (chkElement.checked) {
                document.getElementById('span_left_int_and_or_lib_exc' + i).style.display = 'none';
    		    document.getElementById('span_left_int_lib_exc' + i).style.display = 'none';
            } 
            i++;
        }
    }
	return true;
}

//------------------------------------------------------------------------------
// Show Filters if we have some
//------------------------------------------------------------------------------
function showFilterCnt() {

    var cnt = 0;
    cnt =  document.getElementById('filterCnt').value;

    if (cnt < 1) {
	document.getElementById('span_left_filters').style.display = '';
	document.getElementById('filterCnt').value = 0;
    } else {
        // use when testing
        //document.getElementById('span_left_filters').innerHTML = cnt + '<br>';
	document.getElementById('span_left_filters').style.display = 'none';
    }
    return true;
}

//------------------------------------------------------------------------------
// Show Filters if we have some
//------------------------------------------------------------------------------
function showFilter(args) {
    
    var relation = 'bad';
    var cnt = 'bad';
    var op = 'bad';
    var element;

    if (args.cntTag != 'none' && document.getElementById(args.cntTag)) {
	    cnt = document.getElementById(args.cntTag).value;
    }
    if (args.opTag != 'none' && document.getElementById(args.opTag)) {
        element = document.getElementById(args.opTag);
	    op = element.options[element.selectedIndex].value;
	    relation = element.options[element.selectedIndex].text;
	} else {
		relation = '';
	}
    
    var prv_display = document.getElementById(args.tag).style.display;
    var display;
    
    if (args.id == 'texttype') {
	    // Need to whiteout cnt...which is the search string
	    cnt = cnt.replace(/^\s+/, "");
	    cnt = cnt.replace(/\s+$/g, "");
	    if (cnt == "") {
	        // We need the match radio to activate, but avoid this by just 
	        // changing to indifferent
	        (document.getElementsByName(args.radioTag))[2].click();
	        display = 'none';
	    } else {
	        // Need to be sure match isn't set to No - just set to Yes
	        (document.getElementsByName(args.radioTag))[0].click();
	        display = '';
	        if (relation == '') {
	        	document.getElementById(args.tag).innerHTML =  args.label + ' \'' + cnt + '\'<br>';
	        } else {
	        	document.getElementById(args.tag).innerHTML =  args.label + ' \'' + cnt + '\' in ' + relation + '<br>';
	        }
	    }
    } else {
    	if (args.id == 'go_pull') {
    	   var default_op = args.defaultOp;
	       if (op == default_op || op == ' ') {
	        	// We need the match radio to activate, but avoid this by just 
	        	// changing to indifferent
	        	(document.getElementsByName(args.radioTag))[2].click();
	        	display = 'none';
	    	} else {
	        	// Need to be sure match isn't set to No - just set to Yes
	        	(document.getElementsByName(args.radioTag))[0].click();
	        	display = '';
	        	document.getElementById(args.tag).innerHTML = args.label + ' ' + op + '<br>';
	    	}	
		} else {
    	if (args.id == 'phred') {
    	   var default_op = args.defaultOp;
	       if (op == default_op || op == ' ') {
	           display = 'none';
	       } else {
	           display = '';
	           document.getElementById(args.tag).innerHTML = args.label + ' ' + op + '<br>';
	       } 
    	} else {
           if (args.id == 'textonly') {
 	          cnt = cnt.replace(/^\s+/, "");
	          cnt = cnt.replace(/\s+$/g, "");
	    	  display = '';
	          document.getElementById(args.tag).innerHTML =  args.label + ' \'' + cnt + '\'<br>';
	       } else {
	          var default_cnt = args.defaultCnt;
    	      var default_op = args.defaultOp;
	          // 0 is same as 1 IF default is 1
	          if (op == default_op && (cnt == default_cnt || (default_cnt == 1 && cnt == 0))) {
	              display = 'none';
	          } else {
	              display = '';
	              document.getElementById(args.tag).innerHTML = args.label + ': ' + relation + ' ' + cnt + '<br>';
	          }
           }
	    }
      }
    }
    
    document.getElementById(args.tag).style.display = display;
    if (prv_display != display) {
	if (display == 'none') {
	    document.getElementById('filterCnt').value--;
	} else {
	    document.getElementById('filterCnt').value++;
	}
    } 
    showFilterCnt();
    return true;
}

//------------------------------------------------------------------------------
// Show Filters if we have some (radio)
//------------------------------------------------------------------------------
function showRadioBasic(args) {
    
    var radio = args.element;
    var values = args.values;
    var tag = args.tag;
    var noSelectionHtml = args.noSelectionHtml;
	var label = args.label;
 
    var radioValue = radio.value;
	var html = '';

	// Get the description for the selected radio
	for (var key in values) {
		if (radioValue == key) {
			html = values[key];
		}
	}
	if (!html) {
		html = noSelectionHtml;
	}

    document.getElementById(tag).innerHTML =  args.label + html + '<br>';

    return true;
}


//------------------------------------------------------------------------------
// Show Filters if we have some (radio)
//------------------------------------------------------------------------------
function showFilterRadio(args) {
    
    var label = 'bad';
    var group = args.opTag;
    var field = args.textTag;
    var op = group.value;

    var prv_display = document.getElementById(args.tag).style.display;
    var display;

    if (op == 'i') {
	   display = 'none';
    } else {
	if (op == 'y') {
	    label = 'Yes';
	}
	if (op == 'n') {
	    label = 'No';	    
	}
	if (op == 's') {
	    label = 'SwissProt Only';
	}
	if (op == 't') {
	    label = 'TrEMBL Only';
	}
	if (op == 'b') {
	    label = 'BP Only';
	}
	if (op == 'c') {
	    label = 'CC Only';
	}
	if (op == 'm') {
	    label = 'MF Only';
	}

	display = '';
    }

    // If have related textbox, we need to erase if Yes deselected
    if (document.getElementById(field)) {
	var txt = document.getElementById(field).value;
	txt = txt.replace(/^\s+/, "");
	txt = txt.replace(/\s+$/g, "");
	if (txt != "") {
		if (op != 'y') {		
	   	   document.getElementById(field).value = "";
                   document.getElementById('filterCnt').value--;
	          // Can get tangled...
	           if (document.getElementById('filterCnt').value < 0) {
			document.getElementById('filterCnt').value = 0;
                   }
        	} //else {
		   // Text wins...we don't show this selection
		   //return true;
        	//}
	}
    }
    document.getElementById(args.tag).innerHTML =  args.label + label + '<br>';

    document.getElementById(args.tag).style.display = display;
    if (prv_display != display) {
	if (display == 'none') {
	    document.getElementById('filterCnt').value--;
	} else {
	    document.getElementById('filterCnt').value++;
	}
    } 
    showFilterCnt();
    return true;
}

//------------------------------------------------------------------------------
// Validate input
// Example Usage:
// onblur='validateInput({element: this, type: \"numeric\", message: \"Title must be numeric\", defaultValue: 0})'
// onblur="validateInput({element: this, expr: /^\d+$/, message: \'Title must be numeric\', defaultValue: ""})"
//------------------------------------------------------------------------------
function validateInput(args) {
	var element = args.element;
	var expr = args.expr;
	var type = args.type;
	var message = args.message;
	var defaultValue = args.defaultValue;

	var value = element.value;

	if (value.match(/\S/)) {
		if (expr) {
			if (!value.match(expr)) {
				alert(message);
				setTimeout(function(){element.focus();},50);
				return false;
			}
		} else {
			switch(type) {
				case "numeric":
                   // Clear out extra characters
                   value = value.replace(/^\s+|\s+$/, "");
                   element.value = value;
					if (!value.match(/^\d+$/)) {
						alert(message);
						setTimeout(function(){element.focus();},50);
						return false;
					}
			}
		}
	} else {
		element.value = defaultValue;
	}
	
	return true;
}

//------------------------------------------------------------------------------
// Show intensities description
//------------------------------------------------------------------------------
function showList(args) {
	var i;
	var checked;

	checked = 0;
	i = 1;
	while (chkElement = document.getElementById(args.ids + i)) {
		document.getElementById(args.items + i).style.display = (chkElement.checked) ? '' : 'none';
		if (chkElement.checked) {
			checked++;
		}
		i++;
	}
	i = 0;

	if (typeof(document.getElementById(args.items + i)) != 'undefined') {
		if (checked == 0) {
			document.getElementById(args.items + i).style.display =  '';
		} else {
			document.getElementById(args.items + i).style.display =  'none';
		}
	}
	return true;
}

//------------------------------------------------------------------------------
// Show or hide all of a nested set of elements
//------------------------------------------------------------------------------
function showNestedElements(args) {
	var i;
	var j;
	var count = 0;
	var newId;
	var newImage;
	var element;
	var newNested;
	var newShow;
	var show;
	var image;

	show = args.show;
	newShow = args.show;
	if (args.show.constructor.toString().indexOf("Array") != -1) {
		show = args.show[0];
		newShow = args.show.slice(1);
	}
	if (typeof(args.nested) != 'undefined') {
		newId = args.id + args.nested[0];
		newImage = (args.image) ? args.image + args.nested[0] : args.image;
		newNested = args.nested.slice(1);
		if (args.nested[0].constructor.toString().indexOf("Array") != -1) {
			count = args.nested[0].length;
		}
		for (j=0; j==0 || j<count; j++) {
			if (count != 0) {
				newId = args.id + args.nested[0][j];
				newImage = (args.image) ? args.image + args.nested[0][j] : (args.image);
			}
			i = 0;
			while (element = document.getElementById(newId + i)) {
				if (args.nested.length > 1) {
					showNestedElements({id:newId + i, image:newImage+i, nested:newNested, show:newShow});
				} else {
					showNestedElements({id:newId + i, image:(newImage) ? newImage+i : newImage, show:newShow});
				}
				i++;
			}
		}
	}
	element = document.getElementById(args.id);
	if (typeof(element) != 'undefined' && typeof(show) == 'boolean') {
		element.style.display = (show) ? '' : 'none';
		if (args.image) {
			image = document.getElementById(args.image);
			if (image) {
				image.src = (show) ? '/pave/_system/image/minus_box.png' : '/pave/_system/image/plus_box.png';
			}
		}
	}

	return true;
}

//------------------------------------------------------------------------------
// Unhide a panel (and hide all others)
//------------------------------------------------------------------------------
function showPanel(args) {
	var element;

	if (args.id) {
		if (element = document.getElementById('div_params')) {
			element.style.display = (args.id == 'div_params') ? '' : 'none';
		}
		if (element = document.getElementById('div_results')) {
			element.style.display = (args.id == 'div_results') ? '' : 'none';
		}
	}

	return true;
}

//------------------------------------------------------------------------------
// Unhide a subpanel (and hide all others)
//------------------------------------------------------------------------------
function showSubpanel(args) {
	var i = 0;

	if (args.id) {
		document.getElementById('hid_subpanel').value = args.id;
		while (element = document.getElementById('div_subpanel' + i)) {
			if (args.id == 'div_subpanel' + i) {
				element.style.display = '';
			} else {
				element.style.display = 'none';			
			}
			i++;
		}
	}

	return true;
}

//------------------------------------------------------------------------------
// Hide edit icon and field span and unhide save icon, cancel icon, end text
// field
//------------------------------------------------------------------------------
function fieldEdit(fieldName) {
	element = document.getElementById('lnk_edit_' + fieldName);
	element.style.display = 'none';
	element = document.getElementById('span_' + fieldName);
	element.style.display = 'none';
	var element = document.getElementById('lnk_save_' + fieldName);
	element.style.display = '';
	var element = document.getElementById('lnk_cancel_' + fieldName);
	element.style.display = '';
	element = document.getElementById('txt_' + fieldName);
	element.style.display = '';
	element.focus();
	return true;
}

//------------------------------------------------------------------------------
// Unihide edit icon and field span and hide save icon, cancel icon, end text
// field and update span innerHTML
//------------------------------------------------------------------------------
function fieldSave() {

	var fieldName = arguments[0];
	var fieldValue = arguments[1];
	var ajaxCount = arguments[2];
	var element = document.getElementById('lnk_save_' + fieldName);
	element.style.display = 'none';
	var element = document.getElementById('lnk_cancel_' + fieldName);
	element.style.display = 'none';
	element = document.getElementById('txt_' + fieldName);
	element.style.display = 'none';
	element = document.getElementById('lnk_edit_' + fieldName);
	element.style.display = '';
	element.focus();
	element = document.getElementById('span_' + fieldName);
	element.style.display = '';
	element.innerHTML = fieldValue;
	element = document.getElementById('hid_ajax_count');
	element.value = parseInt(element.value) + 1;
	return true;
}

//------------------------------------------------------------------------------
// Unihide edit icon and field span and hide save icon, cancel icon, end text
// field
//------------------------------------------------------------------------------
function fieldCancel(fieldName) {
	var element = document.getElementById('lnk_save_' + fieldName);
	element.style.display = 'none';
	var element = document.getElementById('lnk_cancel_' + fieldName);
	element.style.display = 'none';
	element = document.getElementById('txt_' + fieldName);
	element.style.display = 'none';
	element = document.getElementById('lnk_edit_' + fieldName);
	element.style.display = '';
	element.focus();
	element = document.getElementById('span_' + fieldName);
	element.style.display = '';
	inputElement = document.getElementById('txt_' + fieldName);
	inputElement.value = element.innerHTML;
	return true;
}

//------------------------------------------------------------------------------
// Call the onclick event for the visible save link
//------------------------------------------------------------------------------
function fieldSubmit(lnkIds) {
	for (var id in lnkIds) {
		var element = document.getElementById(lnkIds[id]);
		if (element) {
			if (element.style.display == '') {
				element.onclick();
			}
		}
	}
	return false;
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function getCookieVal(cookiename,gbDBSource,location){
 var cookiestring=document.cookie;
 var cookieVal = cookiestring.split('; ');
 var flag = 0;
 for ( i = 0; i < cookieVal.length ; i++ ){
  gbTypeVal = cookieVal[i].split("=");
  if ( gbTypeVal[0] == 'gbtype' ){
    flag = 1;
    onBrowseSubmit(gbTypeVal[1],gbDBSource,location);
  }
 }
 if ( flag == 0 ){
    gbTypeVal = 'java';
    onBrowseSubmit(gbTypeVal,gbDBSource,location);
 }
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function onBrowseSubmit(gbTypeVal,gbDBSource,location)
{
    if ( gbTypeVal == "perl" ){
      window.location="/cgi-bin/gbrowse/gbrowse?source="+gbDBSource+"&name="+location;
    }
    if ( gbTypeVal == "java" ){
       organismType = gbDBSource;
       if ( organismType == "rice" ){
          document.ricejavagb.showBrowser ( document.cookie, location); 
          // document.ricejavagb.showBrowser ( java, location ); // What Karl had in EST PAVE
       }
       if ( organismType == "riceblast" ){
          document.riceblastjavagb.showBrowser ( document.cookie, location );
       }
    }
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function writeCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function eraseCookie(name) {
	writeCookie(name,"",-1);
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function addLoadListener(fn)
{
	if (typeof window.addEventListener != 'undefined')
	{
		window.addEventListener('load', fn, false);
	}
	else if (typeof document.addEventListener != 'undefined')
	{
		document.addEventListener('load', fn, false);
	}
	else if (typeof window.attachEvent != 'undefined')
	{
		window.attachEvent('onload', fn);
	}
	else
	{
		return false;
	}
	
	return true;
};
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------

function attachEventListener(target, eventType, functionRef, capture)
{
    if (typeof target.addEventListener != "undefined")
    {
        target.addEventListener(eventType, functionRef, capture);
    }
    else if (typeof target.attachEvent != "undefined")
    {
        target.attachEvent("on" + eventType, functionRef);
    }
    else
    {
        return false;
    }

    return true;
};

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function checkBrowserWidth()
{
	var screenHeight = 0;
	var screenWidth = 0;

	if (window.innerHeight) {
		screenWidth = window.innerWidth;
		screenHeight = window.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight != 0) {
		screenWidth = document.documentElement.clientWidth;
		screenHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		screenWidth = document.body.clientWidth;
		screenHeight = document.body.clientHeight;
	}

	if (screenHeight > 0)
	{
		var element = document.getElementById('div_main');
		if (element) {
			element.style.height = screenHeight - 160 + 'px';
			writeCookie('screen_height', screenHeight - 160 + 'px')
		} else {
			var elementLeft = document.getElementById('div_left');
			var elementRight = document.getElementById('div_right');
			if (elementLeft && elementRight) {
				elementLeft.style.height = screenHeight - 160 + 'px';
				elementRight.style.height = screenHeight - 160 + 'px';
				writeCookie('screen_height', screenHeight - 160 + 'px')
			}			
		}

	}
	
	return true;
};

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function getUrlParameter(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


function setScrollPosition() {
	var scrollPosition = getUrlParameter('scroll_position');
	if (scrollPosition != '') {
		document.getElementById('div_main').scrollTop = scrollPosition ;
	}
}


//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
function updateBreadcrumb() {
//eraseCookie("breadcrumb");
    var breadcrumb = readCookie('breadcrumb');
    var newBreadcrumb = "";
	var urlParts = document.URL.split("?");
	var urlPath = urlParts[0].substr(0, urlParts[0].lastIndexOf("/")).replace("/cgi-bin","");
	var rootUrl = document.URL.match(RegExp(".*//[^/]+/*"));
	if (breadcrumb && document.URL != rootUrl) {
		var breadcrumbs = breadcrumb.split("|");
		for(var i=0; i<breadcrumbs.length; i++) {
			var breadcrumbParts = breadcrumbs[i].split("=>");
			var breadcrumbParts = breadcrumbParts[1].split("?");
			var breadcrumbPath = breadcrumbParts[0].substr(0, breadcrumbParts[0].lastIndexOf("/")).replace("/cgi-bin","");
			if (breadcrumbParts[0] == urlParts[0]) {
				break;
			} else {
				if (breadcrumbParts[0].indexOf("login.cgi") < 0) {
					newBreadcrumb += ((i > 0) ? "|" : "") + breadcrumbs[i];
				}
			}
		}
		newBreadcrumb += "|" + document.title + "=>" + document.URL.replace(/;/g,"&");
		var temp = document.URL;
		writeCookie("breadcrumb", newBreadcrumb);
	} else {
		newBreadcrumb = "home=>" + rootUrl;
		writeCookie("breadcrumb", newBreadcrumb);
	}
	if (element = document.getElementById('span_breadcrumb')) {
		element.innerHTML = "";
	}
	// Replace the value of the last breadcrumb if a ref_url parameter is passed to page
	var refUrl = getUrlParameter('ref_url');
	var breadcrumbs = newBreadcrumb.split("|");
	for(var i=0; i<breadcrumbs.length-1; i++) {
		var breadcrumbParts = breadcrumbs[i].split("=>");
		// Replace the value of the last breadcrumb link if a ref_url parameter is passed to page
		if (refUrl && i==breadcrumbs.length-2) {
			breadcrumbParts[1] = refUrl;
		}
		if (element) {
			element.innerHTML += "<a href='" + breadcrumbParts[1] + "'>" + breadcrumbParts[0] + "</a>->";
		}
	}
	var breadcrumbParts = breadcrumbs[breadcrumbs.length-1].split("=>");
	if (element) {
		element.innerHTML += breadcrumbParts[0];
	}
	return true;
}

//------------------------------------------------------------------------------
// ASD added these two for load image message in viewContig.cgi
//------------------------------------------------------------------------------
function showImage(args) {
	var element = document.getElementById(args.img);
    element.style.display = '';
	element = document.getElementById(args.msg);
    element.style.display = 'none';
}

function hideImage(args) {
	var element = document.getElementById(args.img);
    if (element) {
       element.style.display = 'none';
    }
	if (element = document.getElementById(args.msg)) {
       element.style.display = '';
    }
    return true;
    // return needed so browser will go to link
}

checkBrowserWidth();
addLoadListener(checkBrowserWidth);
attachEventListener(window, "resize", checkBrowserWidth, false);
