/*
 LTrim(inpVal) trims whitespace (spaces, tabs, and new line characters) 
 from the begining of the expression.
*/
function LTrim(inpVal) {
	var i = 0;
	
	while((i < inpVal.length) && ((inpVal.charAt(i)==' ') || (inpVal.charAt(i)=='	')) ) i++;
		inpVal = inpVal.substring(i);
	return(inpVal);
}

/* 
 RTrim(inpVal) trims whitespace (spaces, tabs, and new line characters) 
 from the end of the expression.
*/
function RTrim(inpVal) {
	var i = inpVal.length - 1;
	
	while((i >= 0) && ((inpVal.charAt(i)==' ') || (inpVal.charAt(i)=='	')) ) i--;
		inpVal = inpVal.substring(0, i+1);
	return(inpVal);
}

function isquote(inpVal) {
	var blnValid = true;
	var strTemp;
	for (var i = 0; i < inpVal.length; i++) {
		strTemp = "" + inpVal.substring(i, i+1);
		if ((strTemp.charCodeAt() == 34) || (strTemp.charCodeAt() == 39)) {
			blnValid = false;
		}
	}
	if (blnValid) {
		return true
	} else {
		return false
	}		
}

/*
 Trim(inpVal) trims whitespace (spaces, tabs, and new line characters) 
 from both the beginning and the end of the expression.
*/

function Trim(inpVal) {	
	inpVal = RTrim(inpVal);
	inpVal = LTrim(inpVal);
	return(inpVal);
}

/*
 isEmpty(inpVal) determines whether the inpVal is whitespace (spaces, tabs, 
 and new line characters) or null.
*/
function isEmpty(inpVal) {
	var strInvalid = " \t\r\n"		// Invalid characters are space, and tab
	var blnValid = true;
	var strTemp;

	for (var i = 0; i < inpVal.length; i++) {
		strTemp = "" + inpVal.substring(i, i+1);
		if (strInvalid.indexOf(strTemp) == "-1") blnValid = false;
	}
	if ( (blnValid) && (inpVal.value != "") ) {
		return true			// e.g. ''; ' '; '	'
	} else {
		return false		// e.g. 'a'; ' a '; '	a	b '
	}	
}

/*
 isSpace(inpVal) determines whether the inpVal contains whitespace (spaces, tabs, 
 and new line characters).
*/
function isSpace(inpVal) { 
	var strSpace1 = " "; 	// Invalid character is a space
	var strSpace2 = "	"; 	// Invalid character is a tab
	var blnValid = true;
	
	if ((inpVal.indexOf(strSpace1) > -1) || (inpVal.indexOf(strSpace2) > -1)) blnValid = false;
	if (blnValid) {
		return false;		// e.g. ''; 'aa'; 'avx'
	} else {
		return true;		// e.g. ' '; ' a  b '; '	a'
	}
}

/*
 Validation maxlength for textarea 
*/
function txtAreaMaxLength(txtArea, intMax) {
	if (txtArea.value.length > intMax) {
		Alert2(1,"This field",intMax);
		txtArea.value = txtArea.value.substring(0, intMax);
		return(txtArea.value);
	}
}

function txtIslnk(txt) {
	c=txt.indexOf( "<a");
	d=txt.indexOf( "href");
	if((c!=-1) && (d!=-1)) {
		return true;
	}
	else {
		b=txt.indexOf( "<img");
		a=txt.indexOf( "<!-");
		if((b!=-1) || (a!=-1)) {
			return true;
		}
		else {
			return false;
		}
	}
}

function getNextElement (field) {
  var form = field.form;
  for (var e = 0; e < form.elements.length; e++)
    if (field == form.elements[e])
      break;
  return form.elements[++e % form.elements.length];
}
	
function tabOnEnter (field, evt) {
  var keyCode = document.layers ? evt.which : document.all ? 
evt.keyCode : evt.keyCode;
  if (keyCode != 13)
    return true;
  else {
    getNextElement(field).focus();
    return false;
  }
}

function CheckTab(el) {
	if ((document.all) && (9==event.keyCode)) {
		el.selection=document.selection.createRange(); 
		el.selection.text=String.fromCharCode(9)
		event.returnValue 
		event.returnValue=false
	}
}

function chkMaxLength(obj) {
		
	if (obj.value.length > obj.maxlength) {
		Alert2(7, "This field", obj.maxlength)
		obj.value = obj.value.substring(0, obj.maxlength)
		return
	}
}

function cHTML(str) {
	if (typeof(str) != "string") return
	str = str.replace(/\"/g, "&quot;")
	str = str.replace(/</g, "&lt;")
	str = str.replace(/>/g, "&gt;")
	str = str.replace(/\'/g, "&apos;")
	return str
} 

function chkEvent(obj) {
	var strEven = ""
	for(z in obj)
		strEven = strEven + z + "\t"
	alert(strEven)
}

function IsDate(vVal, vFormat) {
	elemN = 0
	pt = 0
	var elem = new Array()
		
	while (vVal.indexOf("/", pt) != -1) {
		elem[elemN] = Trim(vVal.substring(pt, vVal.indexOf("/", pt)))
		pt = vVal.indexOf("/", pt) + 1
		elemN++
	}
	elem[elemN] = vVal.substring(pt)	
		
	if (elem.length != 3) return false
	for(elemN = 0; elemN < elem.length; elemN++) {
		if (isNaN((elem[elemN] / 1))) return false
	}
		
	switch(vFormat.toLowerCase()){
	case "dd/mm/yyyy" :
		if (elem[2].length != 4) return false
		Date1 = parseFloat(elem[1]) + "/" + parseFloat(elem[0]) + "/" + elem[2]
		break;
	case "mm/dd/yyyy" :
		if (elem[2].length != 4) return false
		Date1 = parseFloat(elem[0]) + "/" + parseFloat(elem[1]) + "/" + elem[2]
		break;
	}
	var tmpDate = new Date(Date1)
	dd = tmpDate.getDate()
	mm = tmpDate.getMonth() + 1
	yyyy = tmpDate.getFullYear() 
	Date2 = mm + "/" + dd + "/" + yyyy
	if (Date1 != Date2) return false
		
	return true
}

   // Original JavaScript code by Duncan Crombie: dcrombie@chirp.com.au
   // Please acknowledge use of this code by including this header.

   // CONSTANTS
  var separator = ",";  // use comma as 000's separator
  var decpoint = ".";  // use period as decimal point
  var percent = "%";
  var currency = "$";  // use dollar sign for currency

  function formatNumber(number, format, print) {  // use: formatNumber(number, "format")
    if (print) document.write("formatNumber(" + number + ", \"" + format + "\")<br>");

    if (number - 0 != number) return null;  // if number is NaN return null
    var useSeparator = format.indexOf(separator) != -1;  // use separators in number
    var usePercent = format.indexOf(percent) != -1;  // convert output to percentage
    var useCurrency = format.indexOf(currency) != -1;  // use currency format
    var isNegative = (number < 0);
    number = Math.abs (number);
    if (usePercent) number *= 100;
    format = strip(format, separator + percent + currency);  // remove key characters
    number = "" + number;  // convert number input to string

     // split input value into LHS and RHS using decpoint as divider
    var dec = number.indexOf(decpoint) != -1;
    var nleftEnd = (dec) ? number.substring(0, number.indexOf(".")) : number;
    var nrightEnd = (dec) ? number.substring(number.indexOf(".") + 1) : "";

     // split format string into LHS and RHS using decpoint as divider
    dec = format.indexOf(decpoint) != -1;
    var sleftEnd = (dec) ? format.substring(0, format.indexOf(".")) : format;
    var srightEnd = (dec) ? format.substring(format.indexOf(".") + 1) : "";

     // adjust decimal places by cropping or adding zeros to LHS of number
    if (srightEnd.length < nrightEnd.length) {
      var nextChar = nrightEnd.charAt(srightEnd.length) - 0;
      nrightEnd = nrightEnd.substring(0, srightEnd.length);
      if (nextChar >= 5) nrightEnd = "" + ((nrightEnd - 0) + 1);  // round up

 // patch provided by Patti Marcoux 1999/08/06
      while (srightEnd.length > nrightEnd.length) {
        nrightEnd = "0" + nrightEnd;
      }

      if (srightEnd.length < nrightEnd.length) {
        nrightEnd = nrightEnd.substring(1);
        nleftEnd = (nleftEnd - 0) + 1;
      }
    } else {
      for (var i=nrightEnd.length; srightEnd.length > nrightEnd.length; i++) {
        if (srightEnd.charAt(i) == "0") nrightEnd += "0";  // append zero to RHS of number
        else break;
      }
    }

     // adjust leading zeros
    sleftEnd = strip(sleftEnd, "#");  // remove hashes from LHS of format
    while (sleftEnd.length > nleftEnd.length) {
      nleftEnd = "0" + nleftEnd;  // prepend zero to LHS of number
    }

    if (useSeparator) nleftEnd = separate(nleftEnd, separator);  // add separator
    var output = nleftEnd + ((nrightEnd != "") ? "." + nrightEnd : "");  // combine parts
    output = ((useCurrency) ? currency : "") + output + ((usePercent) ? percent : "");
    if (isNegative) {
      // patch suggested by Tom Denn 25/4/2001
      output = (useCurrency) ? "(" + output + ")" : "-" + output;
    }
    return output;
  }

  function strip(input, chars) {  // strip all characters in 'chars' from input
    var output = "";  // initialise output string
    for (var i=0; i < input.length; i++)
      if (chars.indexOf(input.charAt(i)) == -1)
        output += input.charAt(i);
    return output;
  }

  function separate(input, separator) {  // format input using 'separator' to mark 000's
    input = "" + input;
    var output = "";  // initialise output string
    for (var i=0; i < input.length; i++) {
      if (i != 0 && (input.length - i) % 3 == 0) output += separator;
      output += input.charAt(i);
    }
    return output;
  }
  
	function elapsedTime(strStartDate,strEndDate,IsDateTime){
		   StartDay = new Date(strStartDate);
		   EndDay = new Date(strEndDate);
//		   bofYear.setMonth(0);  //Reset to midnight on January 1.
//		   bofYear.setDate(0);
//		   bofYear.setHours(0);
//		   bofYear.setMinutes(0);
//		   bofYear.setSeconds(0);
		   interval = EndDay.getTime() - StartDay.getTime(); // Difference in ms.

		   // Establish larger units based on milliseconds.
		   msecondsPerMinute = 1000 * 60;
		   msecondsPerHour = msecondsPerMinute * 60;
		   msecondsPerDay = msecondsPerHour * 24;

		   // Calculate how many days the interval contains, then subtract that
		   // many days from the interval to come up with a remainder.
		   days = Math.floor( interval / msecondsPerDay );
		   interval = interval - (days * msecondsPerDay );

		   // Repeat the previous calculation on the remainder using hours,
		   // then subtract the hours from the remainder.
		   hours = Math.floor( interval / msecondsPerHour );
		   interval = interval - (hours * msecondsPerHour );

		   minutes = Math.floor( interval / msecondsPerMinute );
		   interval = interval - (minutes * msecondsPerMinute );

		   seconds = Math.floor( interval / 1000 );

		   switch (IsDateTime) 
		   {
				case 0:
					return days
				case 1:
					msg = "Total = " + days + " days, " + hours + " hours, " + minutes + " minutes, and " + seconds + " seconds.";
					return msg;
		   }
	}
	
	function ToggleDateMonth(vVal) {
		elemN = 0
		pt = 0
		var elem = new Array()
				
		while (vVal.indexOf("/", pt) != -1) {
			elem[elemN] = Trim(vVal.substring(pt, vVal.indexOf("/", pt)))
			pt = vVal.indexOf("/", pt) + 1
			elemN++
		}
		elem[elemN] = vVal.substring(pt)	
				
		return parseFloat(elem[1]) + "/" + parseFloat(elem[0]) + "/" + elem[2]
	}
	
	function Round(vVal, vNumDigit) {
	
		if (vNumDigit < 0) return 
	
		strDigit = "1"
	
		for (dg=0; dg<vNumDigit; dg++)
			strDigit = strDigit + "0"
		vDigit = parseInt(strDigit)
		
		return Math.round(vVal * vDigit)/vDigit
	}
	
	function findPos(obj) {
		this.Left = 0;
		this.Top = 0;
		this.Width = 0;
		this.Height = 0;

		var curleft = curtop = curwidth = curheight = 0;
		curwidth = obj.offsetWidth;
		curheight = obj.offsetHeight;
		
		if (obj.offsetParent) {
		do{
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop			
			} while (obj = obj.offsetParent);
		}
		this.Left = curleft;
		this.Top = curtop;
		this.Width = curwidth;
		this.Height = curheight;
	}
