/*****************************************************************
	include\commonfunctions.js																			
*****************************************************************/
   /*variables used to separate paired-value strings*/
   var sOutSep = String.fromCharCode(1);
   var sSubSep = String.fromCharCode(2);
   var sLblSep = String.fromCharCode(3);
   var sKeySep = String.fromCharCode(4);
   var sValSep = String.fromCharCode(5);
   var sGrpSep = String.fromCharCode(6);
   var sMidSep = String.fromCharCode(7);
   var sInSep  = String.fromCharCode(8);
   var bIsIE   = document.all?true:false;
   var bIsNav  = !bIsIE;
   var undefined;

function jsNotReady(sMsg) {
	if(sMsg == undefined) {
		sMsg = "This feature is not ready.";
	}
	window.alert(sMsg);
}

function jsSubmit(oForm) {
/*****************************************************************
	 Generic function to submit a form                              
*****************************************************************/
  if (typeof oForm != "object") {
		document.forms[0].submit();
	} else {
	  oForm.submit();
	}
} //jsSubmit


	function jsSetParamStr(inLbl, inValue, inInnerSep, inOuterSep) {
/*****************************************************************
	 Generic function to set a Paired-Value set in a Param String
*****************************************************************/
    var sReturn = inLbl + inInnerSep + inValue + inOuterSep ;
    return sReturn;
  }  //jsSetParamStr

  function jsGetParamStr(inLbl, inString, inInnerSep, inOuterSep) {
/*****************************************************************
   Generic function to get a Value from a Param String based on a
   label (key).
*****************************************************************/
    /* -----------------2/10/2002 0:22AM-----------------
     old way to get values; replaced by RegExp below
    var sArray  = inString.split(inOuterSep);
    var sReturn = "";
    for (var i = 0; i < sArray.length; i++) {
      var sSubArray = sArray[i].split(inInnerSep);
      if (sSubArray[0] == inLbl) {
        sReturn = sSubArray[1];
      }
    }
    --------------------------------------------------*/
    var sReturn = "";
		var nReturn = 0;
		var rPattern = new RegExp(inOuterSep + inLbl + inInnerSep);
		if (inString.substr(0, inLbl.length) != inLbl) {
		  nReturn  = inString.search(rPattern);
		  if (nReturn != -1) inString = inString.substr(nReturn + 1);
		  else return sReturn;
	  }
		rPattern = new RegExp(inOuterSep);
		nReturn  = inString.search(rPattern);
		if (nReturn != -1) inString = inString.substr(0, nReturn);
		var aResult = inString.split(inInnerSep);
		sReturn = aResult[1];
    return sReturn;
  }  //jsGetParamStr


  function OLDjsGetParamStr(inLbl, inString, inInnerSep, inOuterSep) {
/*****************************************************************
   Generic function to get a Value from a Param String based on a
   label (key).
*****************************************************************/
    var aArray  = inString.split(inOuterSep);
    var sReturn = "";
    for (var i = 0; i < aArray.length; i++) {
      var aSubArray = aArray[i].split(inInnerSep);
      if (aSubArray[0] == inLbl) {
        sReturn = aSubArray[1];
      }
    }
    return sReturn;
  }  //jsGetParamStr

	function jsIsBlank( siString )
	/*****************************************************************
		checks to see if a string is blank
															10/12/2001 9:30AM
	*****************************************************************/
	{
		var bReturn = true;
		for ( var i = 0; i < siString.length; i++ ) {
			var c = siString.charAt(i);
			var n = siString.charCodeAt(i);
			if (( c != ' ') && (c != '\n') && (c != '\t') && (n != 160) ) {
				bReturn = false;
			}
		}
		return bReturn;
	}  // jsIsBlank

function jsChildAppOpener(sURL) {
  if (sURL != "") {
		var sAttr    = 'location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no';
		var nWidth   = screen.availwidth;
		var nHeight  = screen.availheight;
		var nLeft    = 5;
		var nTop     = 5;
		var wPct     = 98;
		var hPct     = 92;
		nWidth       = nWidth   * wPct / 100;
		nHeight      = nHeight  * hPct / 100;
		jsOpenChildWin(sURL, nWidth, nHeight, nLeft, nTop, sAttr);
  }
} //jsChildWinOpener

function jsChildWinOpener(sURL) {
  if (sURL != "") {
		var sAttr    = 'location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes,toolbar=yes';
		var nWidth   = screen.availwidth;
		var nHeight  = screen.availheight;
		var nLeft    = 5;
		var nTop     = 5;
		var wPct     = 95;
		var hPct     = 75;
		nWidth       = nWidth   * wPct / 100;
		nHeight      = nHeight  * hPct / 100;
		jsOpenChildWin(sURL, nWidth, nHeight, nLeft, nTop, sAttr);
  }
} //jsChildWinOpener

// Generate a Generic Child Window.
// Parameters:
//    sURL -- URL of the page/frameset to be loaded into window
//    nWidth -- pixel width of the window
//    nHeight -- pixel height of the window
//    nLeft
//    nTop
//    sAttr -- screen attributes excluding width, height, left, top
function jsOpenChildWin(sURL, nWidth, nHeight, nLeft, nTop, sAttr) {
  if (!childWin.win || (childWin.win && childWin.win.closed)) {
    // Initialize properties of the child window object.
    if (sAttr == undefined) sAttr = "";
    childWin.url    = sURL;
    childWin.width  = nWidth;
    childWin.height = nHeight;
    childWin.left   = nLeft;
    childWin.top    = nTop;
    childWin.attr   = sAttr;
    childWin.name   = "i" + (new Date()).getSeconds().toString(); //create unique name
    if (isIEBrowser  == true) childWin.attr += ",left=" + childWin.left + ",top=" + childWin.top;
    if (isNavBrowser == true) childWin.attr += ",screenX=" + childWin.left + ",screenY=" + childWin.top;
    childWin.attr  += ",width=" + childWin.width + ",height=" + childWin.height;
    if (childWin.attr.substr(0, 1) == ",") childWin.attr = childWin.attr.substr(1);
    // Generate the window and give it has focus.
    childWin.win=window.open(childWin.url, childWin.name, childWin.attr);
    childWin.win.focus();
  } else {
    if (childWin.url != sURL) {
      childWin.url    = sURL;
      childWin.url    = sURL;
      if (childWin.width  != nWidth  ||
          childWin.height != nHeight ||
          childWin.left   != nLeft   ||
          childWin.top    != nTop)
      {
        childWin.width  = nWidth;
        childWin.height = nHeight;
        childWin.left   = nLeft;
        childWin.top    = nTop;
        childWin.attr   = sAttr;
        if (isIEBrowser  == true) childWin.attr += ",left=" + childWin.left + ",top=" + childWin.top;
        if (isNavBrowser == true) childWin.attr += ",screenX=" + childWin.left + ",screenY=" + childWin.top;
        childWin.attr  += ",width=" + childWin.width + ",height=" + childWin.height;
        if (childWin.attr.substr(0, 1) == ",") childWin.attr = childWin.attr.substr(1);
      }
      childWin.win    = window.open(childWin.url, childWin.name, childWin.attr);
    }
    childWin.win.focus();
  }
} //jsOpenChildWin

function jsGetObjectRef(sID, sName) { //, sInForm
  var oObject;
  //if (typeof sInForm != "string") {sInForm = "0";}
  if (typeof sName != "string" ) {sName = sID;}
  if (bIsIE) {
    oObject = eval("document.all." + sID);
  } else { //Navigator
    if (frames.length > 0) {
			navLoop:
			for (var h = 0; h < frames.length; h++) {
				for (var i = 0; i < frames[h].document.forms.length; i++) {
					for (var j = 0; j < frames[h].document.forms[i].elements.length; j++) {
						if (frames[h].document.forms[i].elements[j].name == sName) {
							oObject = frames[h].document.forms[i].elements[j];
							break navLoop;
						}
					}
        }
      }
		} else {
			navNFLoop:
			for (var i = 0; i < document.forms.length; i++) {
				for (var j = 0; j < document.forms[i].elements.length; j++) {
					if (document.forms[i].elements[j].name == sName) {
						oObject = document.forms[i].elements[j];
						break navNFLoop;
					}
				}
			}
    }
    //oObject = eval("document.forms['" + sInForm + "']." + sName);
  }
  return oObject;
} //jsGetObjectRef

function jsGetSelectText(oSelect) {
	var sReturn = "";
	for (var i = 0; i < oSelect.options.length; i ++) {
		if (oSelect.options[i].selected) {
			sReturn = oSelect.options[i].text;
			break;
		}
	}
	return sReturn;
} //jsGetSelectText

function jsRound(nNumber, nPrecision) {

var bIsNeg = nNumber < 0;

if (bIsNeg) { nNumber = Math.abs(nNumber);}

var sTemp = nNumber + "";

var aTemp = sTemp.split(".");

var nShortNum = aTemp[0] + "" ;

var sZeros = ".";

var nDivider = "1";

for (var nZ = 0; nZ < nPrecision; nZ++) {

sZeros += "0";

nDivider += "0";

}

nDivider = nDivider - 0;

if(aTemp.length==2) {

if (aTemp[1].length < nPrecision + 1) {

nShortNum += "." + aTemp[1];

} else {

var nRemP1 = aTemp[1].substring(0,nPrecision);

var sShortPart2 = "." + aTemp[1].substring(nPrecision, aTemp[1].length);

var nRemP2 = Math.round(sShortPart2 - 0);

nRemP1 = nRemP1 - 0;

nRemP1 += nRemP2;

nRemP1 = nRemP1 / nDivider;

nShortNum = nShortNum - 0;

nShortNum += nRemP1;

if (bIsNeg) { nShortNum = nShortNum * -1; }

nShortNum = nShortNum + "";

var rDot = /\./; //RegExp

if (nShortNum.search(rDot) < 1) nShortNum += sZeros;

}

} else {

nShortNum += sZeros;

}

sTemp = nShortNum + "";

aTemp = sTemp.split(".");

nTemp = aTemp[1].length;

if (nTemp < nPrecision) {

for (var i = nTemp; i < nPrecision; i++) {

nShortNum += "0";

}

}

if ( nPrecision == 0 ) {

nShortNum = nShortNum.substr(0, nShortNum.length - 1);

}

return nShortNum

} //jsRound

/*****************************************************************
	 functions for swapping images on <IMG> used as buttons         
*****************************************************************/
function jsBtnMouseDown(oBtn){
	jsSetBtnImage(oBtn, "d");
} //jsBtnMouseDown
function jsBtnMouseOut(oBtn) {
	jsSetBtnImage(oBtn, "u");
}
function jsBtnMouseOver(oBtn) {
	jsSetBtnImage(oBtn, "o");
} //jsBtnMouseOver
function jsSetBtnImage(oBtn, sBtnSuff) {
	var sOldSrc   = oBtn.src;
	var aFileExt  = sOldSrc.split(".");
	var nFileExt  = aFileExt.length;
	var i         = 0;
	var sFileName = "";
	for (i = 0; i < nFileExt - 1; i++) {
		sFileName  += aFileExt[i] + ".";
	}	
	if (sFileName == "") sFileName = aFileExt[0];
	var aFileSuff = sFileName.split("_");
	var nFileSuff = aFileSuff.length;
	var sNewSrc   = "";
	for (i = 0; i < nFileSuff - 1; i++) {
		sNewSrc += aFileSuff[i] + ".";
	}	
	if (sNewSrc   == "") sNewSrc = aFileSuff[0];
	else sNewSrc  = sNewSrc.substr(0, sNewSrc.length - 1);
	sNewSrc      += "_" + sBtnSuff + "." + aFileExt[nFileExt - 1];
	oBtn.src      = sNewSrc;
} //jsSetBtnImage

function jsGetHeight() {
			var nClientHeight = document.body.clientHeight - 0;
			var nRowHeight    = Math.max(nClientHeight - 200, 100);
			return nRowHeight;
		} //jsGetHeight
		
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function jsNRCSSearch(oSearchText) {
	var SearchURL = "http://www.nrcs.usda.gov/search.asp?site=NRCS&ct=ALL";
	var SearchArgs = "";
	if (typeof oSearchText == "object") {
		SearchArgs += "&q=" + oSearchText.value;
		var win = window.open(SearchURL + SearchArgs, "NRCSSearch");
		win.focus();
	}
} //jsNRCSSearch

var TARGET_EXTERNAL = "external";
var TARGET_PDF = "pdf";
var TARGET_APP = "app";
var WINDOW_FEATURES = "";

function OpenExternalWindow(url, target) {
	if (target == "TARGET_EXTERNAL") {
		target = TARGET_EXTERNAL;
	} else if (target == "TARGET_PDF") {
		target = TARGET_PDF;
	} else if (target == "TARGET_APP") {
		target = TARGET_APP;
		if (target == "app") {
			var query = window.location.search;
			if (query != null && query.length > 0) {
				var a = query.split(/[?&]/);
				for (var i = 0; i < a.length; i++) {
					var b = a[i].split("=");
					if (b[0] == "TARGET_APP") {
						target = TARGET_APP = b[1];
						break;
					}
				}
			}
		}
	}
	win = window.open(url, target, WINDOW_FEATURES, false);
	if (win == null) {
		alert(fold("Cannot open external window. Do you have a popup blocker enabled?"));
		return false;
	}
	if (window.focus) {
		try {
			win.focus();
		} catch (e) {
			// never mind (Adobe Reader 7.05 bug)
		}
	}
	return false;
}
function Display(id, doDisplay, event) {
	if (event == null) {
		event = window.event;
	}
	var elem = document.getElementById(id);
	if (elem == null) {
		return;
	}
	if (doDisplay) {
		var target = event.target || event.srcElement;
		var abstop = AbsTop(target);
		var absleft = AbsLeft(target);
		elem.style.top = abstop - 100 + "px";
		elem.style.left = absleft - 100 + "px";
		elem.style.display = "";
	} else {
		elem.style.display = "none";
	}
}

// Calculate Y location of (top of) element with respect to the screen.
function AbsTop(element) {
	var abstop = element.offsetTop;
	for (var parent = element.offsetParent; parent != null; parent = parent.offsetParent) {
		abstop += parent.offsetTop;
		var style = GetComputedStyle(parent);
		if (style.borderTopStyle != "none") {
			var borderTopWidth = parseInt(style.borderTopWidth);
			if (!isNaN(borderTopWidth)) {
				abstop += borderTopWidth;
			}
		}
	}
	return Number(abstop);
}

// Calculate X location of (left side of) element with respect to the screen.
function AbsLeft(element, doForce) {
	var absleft = element.offsetLeft;
	for (var parent = element.offsetParent; parent != null; parent = parent.offsetParent) {
		absleft += parent.offsetLeft;
		var style = GetComputedStyle(parent);
		if (style.borderLeftStyle != "none") {
			var borderLeftWidth = parseInt(style.borderLeftWidth);
			if (!isNaN(borderLeftWidth)) {
				absleft += borderLeftWidth;
			}
		}
	}
	return Number(absleft);
}

function GetComputedStyle(element) {
	try {
		if (element.currentStyle != null) {
			return element.currentStyle;
		} else {
			return window.getComputedStyle(element, null);
		}
	} catch (e) {
		return null;
	}
}