function jTierMenu(menuId, imageId) {
   var objMenu = document.getElementById(menuId);
   var objImage = document.getElementById(imageId);

   if (objMenu.style.display == 'none') {
      objMenu.style.display = 'inline';
      objImage.src = '/global_includes/imx/minus.gif';
   } else {
      objMenu.style.display = 'none';
      objImage.src = '/global_includes/imx/plus.gif';
   }
}

function tierMenu(objMenu,objImage)
{// accordian like function
var objId = objMenu.id;
   if (objMenu.style.display == "none")
   {
//	 new Effect.SlideDown(objId);
	 objMenu.style.display = "inline";
	 objImage.src = "/global_includes/imx/minus.gif";
   }
   else
   {
	 objMenu.style.display = "none";
	 objImage.src = "/global_includes/imx/plus.gif";
   }
}

var all_links = document.getElementsByTagName('a');
function doDisableSubmits(el){// disable all submit buttons on the page
	var el;
	//if(x)
	//	disFlag='FALSE';
	//else
	disFlag='TRUE';
	if(document.forms.length >0){
		for(f=0;f<document.forms.length;f++){
			for (i = 0; i < document.forms[f].length; i++) {
				var tempobj = document.forms[f].elements[i];
				if (tempobj.type.toLowerCase() == 'submit')
					var x;
				//tempobj.style.display = 'none';
			}
		}
	}
	doDisableLinks(el);
	//if(document.forms.length>0)
	//	document.forms[0].submit();
}

function trim(s) {// TRIM Function
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function doDisableLinks(el){// disable all the links on a page
	var el;
	var clicked = new String(el);
	for(i=0;i<all_links.length;i++){
		if(all_links[i].getAttribute("href") && all_links[i].getAttribute("href").toLowerCase().indexOf("javascript")== -1 &&
			all_links[i].getAttribute("href").toLowerCase().indexOf("mailto:")== -1){
			all_links[i].disabled = true;
			var link = new String(all_links[i]);
			if(link.toLowerCase() != clicked.toLowerCase()){
				all_links[i].removeAttribute('href');
			}else{
				window.location = clicked;
				//for some reason even if you call the location replace before you remove the
				//href attribute the browser loses it. so we keep jus this one
				//all_links[i].removeAttribute('href');
			}
		}
	}
}
function doLink(e){// e = event
	var el;
	if(window.event && window.event.srcElement)
		el = window.event.srcElement;
	if(e && e.target)
		el = e.target;
	if(!el)
		return;
	//var link = ;
	doDisableSubmits(el);
}
function PageDisable(){//add event listeners to all submit buttons
	if(document.forms.length >0){
		for(f=0;f<document.forms.length;f++){
			 for (i = 0; i < document.forms[f].length; i++) {
				var tempobj = document.forms[f].elements[i];
				if(!tempobj){
					if (tempobj.type.toLowerCase() == 'submit'){
					addEvent(tempobj,'click',doDisableSubmits,false);
					}
				}
			 }
		 }
	}
//	var all_links = document.getElementsByTagName('a');
	for(i=0;i<all_links.length;i++){
		if(all_links[i].getAttribute("href")){
		if(all_links[i].getAttribute("href").toLowerCase().indexOf("javascript")== -1 &&
			all_links[i].getAttribute("href").toLowerCase().indexOf("mailto:")== -1)
		addEvent(all_links[i],'click',doLink,false);
		}
	}
}
//add event to DOM object
//use for custom event listening.
//USAGE: addEvent(object, 'event[click,change,load,mouseOver...etc]', functionToCall, false);
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}
/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.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)
}

//AJAX Functions ********** use Prototype's Library and not this one.... tjh
function makeAJAXRequest(url,returnFunctionCall){
	if (window.XMLHttpRequest) {
		   req = new XMLHttpRequest();	//req =Request Objects
		   req.onreadystatechange = returnFunctionCall;
		   req.open("GET", url, true);
		   req.send(null);
	// branch for IE/Windows ActiveX version
	    } else if (window.ActiveXObject) {
		   req = new ActiveXObject("Microsoft.XMLHTTP");
		   if (req) {
			  req.onreadystatechange = returnFunctionCall;
			  req.open("GET", url, true);
			  req.send();
		   }
	    }
}
function clearTable(tbody){//remove all the rows from a table
	for(i=0;i<tbody.rows.length;i++){
		row = tbody.getElementsByTagName("TR").item(i);
		tbody.removeChild(row);
	}
}
function addCell(row,cell){//add table cell to the DOM
	if(cell == 'none' || cell == ', ')
		cell=' ';
	mycurrent_cell=document.createElement("TD");
	currenttext=document.createTextNode(cell);
	mycurrent_cell.appendChild(currenttext);
	row.appendChild(mycurrent_cell);
}
// climb up the tree to the supplied tag.
function ascendDOM(e, target) {
  while (e.nodeName.toLowerCase() != target &&
      e.nodeName.toLowerCase() != 'html')
    e = e.parentNode;

  return (e.nodeName.toLowerCase() == 'html') ? null : e;
}

// turn on highlighting****** use Script.aculo.us new Effect.Highlight()
function hi_cell(e) {
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');
  if (el == null) return;

  var parent_row = ascendDOM(el, 'tr');
  if (parent_row == null) return;

  var parent_table = ascendDOM(parent_row, 'tbody');
  if (parent_table == null) return;

  // row styling
  parent_row.className += ' hi';
/**
  // column styling
  var ci = -1;
  for (var i = 0; i < parent_row.cells.length; i++) {
    if (el === parent_row.cells[i]) {
      ci = i;
    }
  }
  if (ci == -1) return; // this should never happen

  for (var i = 0; i < parent_table.rows.length; i++) {
    var cell = parent_table.rows[i].cells[ci];
    cell.className += ' hi';
  }
*/
}

// turn off highlighting
function lo_cell(e) {
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');
  if (el == null) return;

  var parent_row = ascendDOM(el, 'tr');
  if (el == null) return;

  var parent_table = ascendDOM(parent_row, 'tbody');
  if (el == null) return;

  // row de-styling
  parent_row.className = parent_row.className.replace(/\b ?hi\b/, '');
/**
  // column de-styling
  var ci = -1;
  for (var i = 0; i < parent_row.cells.length; i++) {
    if (el === parent_row.cells[i]) {
      ci = i;
    }
  }
  if (ci == -1) return; // this should never happen

  for (var i = 0; i < parent_table.rows.length; i++) {
    var cell = parent_table.rows[i].cells[ci];
    cell.className = cell.className.replace(/\b ?hi\b/, '');
  }
  */
}
	var isOpera = navigator.userAgent.indexOf("Opera") > -1;
	var isIE = navigator.userAgent.indexOf("MSIE") > 1 && !isOpera;
	var isMoz = navigator.userAgent.indexOf("Mozilla/5.") == 0 && !isOpera;

function textboxSelect (oTextbox, iStart, iEnd) {

   switch(arguments.length) {
       case 1:
           oTextbox.select();
           break;

       case 2:
           iEnd = oTextbox.value.length;
           /* falls through */

       case 3:
           if (isIE) {
               var oRange = oTextbox.createTextRange();
               oRange.moveStart("character", iStart);
               oRange.moveEnd("character", -oTextbox.value.length + iEnd);
               oRange.select();
           } else if (isMoz){
               oTextbox.setSelectionRange(iStart, iEnd);
           }
   }

   oTextbox.focus();
}

function textboxReplaceSelect (oTextbox, sText) {

   if (isIE) {
       var oRange = document.selection.createRange();
       oRange.text = sText;
       oRange.collapse(true);
       oRange.select();
   } else if (isMoz) {
       var iStart = oTextbox.selectionStart;
       oTextbox.value = oTextbox.value.substring(0, iStart) + sText + oTextbox.value.substring(oTextbox.selectionEnd, oTextbox.value.length);
       oTextbox.setSelectionRange(iStart + sText.length, iStart + sText.length);
   }

   oTextbox.focus();
}

function autocompleteMatch (sText, arrValues) {

   for (var i=0; i < arrValues.length; i++) {
       if (arrValues[i].indexOf(sText) == 0) {
           return arrValues[i];
       }
   }

   return null;

}

function autocomplete(oTextbox, oEvent, arrValues) {

   switch (oEvent.keyCode) {
       case 38: //up arrow
       case 40: //down arrow
       case 37: //left arrow
       case 39: //right arrow
       case 33: //page up
       case 34: //page down
       case 36: //home
       case 35: //end
       case 13: //enter
       case 9: //tab
       case 27: //esc
       case 16: //shift
       case 17: //ctrl
       case 18: //alt
       case 20: //caps lock
       case 8: //backspace
       case 46: //delete
           return true;
           break;

       default:
           textboxReplaceSelect(oTextbox, String.fromCharCode(isIE ? oEvent.keyCode : oEvent.charCode));
           var iLen = oTextbox.value.length;

           var sMatch = autocompleteMatch(oTextbox.value, arrValues);

           if (sMatch != null) {
               oTextbox.value = sMatch;
               textboxSelect(oTextbox, iLen, oTextbox.value.length);
           }

           return false;
   }
}

hex=210 // Initial color value.
function fadetext(el){
if(hex>0) { //If color is not black yet
hex-=11; // increase color darkness
	el.style.color="rgb("+hex+","+hex+","+hex+")";
setTimeout("fadetext(el)",30);
}
else
hex=210 //reset hex value
}

function makeOption(display,value,selected){//this function isn't good
	 var opt = new Option(display,value,selected,selected);
	 return opt;
}
//use this one:
//requires prototype
function createOption(field,disp,val,isSelected){
	opt = new Option(disp, val, isSelected, isSelected);
	$(field).options[$(field).length] = opt;
}

//open rico utils...
function fixImage(img, width, height) {
   var isIE = navigator.userAgent.toLowerCase().indexOf("msie") >= 0;
   if (!isIE)
      return;

   var currentSrc = img.src;

   var imgStyle = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + currentSrc + "', sizingMethod='scale')";
   img.src = 'images/clearpixel.gif';
   img.style.width  = width + "px";
   img.style.height = height + "px";
   img.style.filter =  imgStyle;
}

var navigationPages = [ "home.page",  "demos.page", "docs.page",  "downloads.page" ];
var navigationLinks = [ "homeLink",  "demosLink", "resourcesLink", "downloadsLink" ];

function showMenuContext() {
   var currentLocation = document.location.href;
   for ( var i = 0 ; i < navigationPages.length ; i++ )
      if ( currentLocation.indexOf(navigationPages[i]) != -1 ) { setLinkStyle($(navigationLinks[i])); break; }
}

function setLinkStyle(link) {
   link.style.fontWeight = 'bold';
   var currentFontSize = parseInt(RicoUtil.getElementsComputedStyle(link, "fontSize", "font-size" ));
   link.style.fontSize = (currentFontSize+2) + "px";
   link.style.color    = 'white';
}

function showSelects(x){
		var selects = [];
		if (document.all){
			selects = document.all.tags("SELECT");
		}
		var l = selects.length;
		for	(var i = 0; i < l; i++)
			selects[i].runtimeStyle.visibility = x ? "" : "hidden";
}
function fixPhone(e){ //takes event from a field eg: addEvent(myField,'change',fixPhone,false);
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	var num = targ.value.replace(/[\D]/g, '');
	var	_return="";
	var ini = num.substring(0,3);
	_return+=ini+"-";
	var st = num.substring(3,6);
	_return+=st+"-";
	var end = num.substring(6,10);
	_return+=end;
	targ.value = _return;
}
function fixPhoneParen(e){ //takes event from a field eg: addEvent(myField,'change',fixPhone,false);
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	var num = targ.value.replace(/[\D]/g, '');
	var	_return="(";
	var ini = num.substring(0,3);
	_return+=ini+") ";
	var st = num.substring(3,6);
	_return+=st+"-";
	var end = num.substring(6,10);
	_return+=end;
	targ.value = _return;
}


function copy_clip(meintext)
{

 if (window.clipboardData) 
   {
   
   // the IE-way
   window.clipboardData.setData("Text", meintext);
   
   // Probabely not the best way to detect netscape/mozilla.
   // I am unsure from what version this is supported
   }
   else if (window.netscape) 
   { 
   
   // This is importent but it's not noted anywhere
   netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
   
   // create interface to the clipboard
   var clip = Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
   if (!clip) return;
   
   // create a transferable
   var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
   if (!trans) return;
   
   // specify the data we wish to handle. Plaintext in this case.
   trans.addDataFlavor('text/unicode');
   
   // To get the data from the transferable we need two new objects
   var str = new Object();
   var len = new Object();
   
   var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);
   
   var copytext=meintext;
   
   str.data=copytext;
   
   trans.setTransferData("text/unicode",str,copytext.length*[[[[2]]]]);
   
   var clipid=Components.interfaces.nsIClipboard;
   
   if (!clip) return false;
   
   clip.setData(trans,null,clipid.kGlobalClipboard);
   
   }
   //alert("Following info was copied to your clipboard:\n\n" + meintext);
   return false;
}

function numberFormat(nStr,prefix){
    var prefix = prefix || '';
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1))
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    return prefix + x1 + x2;
}

//regex patterns:
var RE_SALARY	= /^\s*\$?((([0-9]{1,3})(,[0-9]{3})*)|([0-9]+))(\.[0-9]{2})?\s*$/;
var RE_DATE 	= /^\d{1,2}\/\d{1,2}\/\d{4}$/;
var RE_SSN 		= /(^|\s)(00[1-9]|0[1-9]0|0[1-9][1-9]|[1-6]\d{2}|7[0-6]\d|77[0-2])(-?|[\. ])([1-9]0|0[1-9]|[1-9][1-9])\3(\d{3}[1-9]|[1-9]\d{3}|\d[1-9]\d{2}|\d{2}[1-9]\d)($|\s|[;:,!\.\?])/;
var RE_PHONE 	= /^([\(]{1}[0-9]{3}[\)]{1}[ ]{1}[0-9]{3}[\-]{1}[0-9]{4})$/;
var RE_PHONE_PAREN = /\([0-9]{3}\)\s?[0-9]{3}-[0-9]{4}/;
var RE_PHONE_2 	= /^[2-9]\d{2}-\d{3}-\d{4}$/; // one client wanted a diffent pattern
var RE_EMAIL 	= /^\s*[a-zA-Z0-9_][-a-zA-Z0-9_\.%'+]*@([a-zA-Z0-9][-a-zA-Z0-9_]*\.)+[a-zA-Z]{2,4}\s*$/;
var RE_ZIPCODE 	= /^\d{5}(-\d{4})?$/;