var gdbFieldLevelValidation ; //true = validates on submit false = validates on onblur event of elements
var gdbShowRequiredHighLighting;  //true = highlights required fields false = it does not highlight 
var gdbBrowser = navigator.appName ;
var gdbInvalidColor= ""; //color to paint invalid fields
var gdbElementValidColorArray = new Array();
var gdbAlertOnBlankField;
var gdbInvalidFieldOnBlur=false;
var gdbThisObjRef;
var gdbNull;
var message = "";
var gdbsInvalidActions =new Array();

gdbShowRequiredHighLighting = dbHighlightRequired;
gdbFieldLevelValidation = dbFieldValidation;
gdbInvalidColor = dbInvalidColor;
gdbAlertOnBlankField = dbAlertOnBlankField;

/*************************important note: *************************
this file should not be called from within head element. It must be called after </form> tag
******************************************************************/


/*************************important note: *************************
date-picker.js and stringTrim  must be included in this file since it does not get called until 
after the forms are parsed.(i.e. not called from within head element)
******************************************************************/


function stringTrim () {
  return this.replace(/^\s+/, '').replace(/\s+$/, '');
}
String.prototype.trim = stringTrim;

validationSetup();

function isValidFormElement(oElement){
	var sValidationType = oElement.getAttribute("validationType");
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	var sFieldname =oElement.getAttribute("description");
	
	if(sValidationType != null){
			switch(sValidationType.toUpperCase())
				{
					case "ZIPCODE" :
						return isZipCode(oElement);
						break;
					case "EMAILADDR" :
						return IsValidEmail(oElement);
						break;
					case "PHONE_US":
						return isValidPhoneUS(oElement);
						break;
					case "DATE" :
						return isDate(oElement,oElement.getAttribute("dateFormat") );
						break;
					case "SSN":
						return isValidSSN(oElement);
						break;
					case "INTEGER":
						return IsValidInteger(oElement);
						break;
					case "TIME":
						var sTimeFormat = oElement.getAttribute("timeFormat")
						return IsValidTime(vValue,sTimeFormat);
						break;
					case "LOWERCASE":
						return isValidLowerCase(oElement);
						break;
					case "UPPERCASE":
						return isValidUpperCase(oElement);
						break;
					case "NOSPACE":
						return isValidNoSpace(oElement);
						break;
					case "REGEXP":
						return isValidRegExp(oElement);
						break;
					case "MONEY_US":
						return isMoney_us(oElement);
						break;
					case "FLOAT":
						return isValidFloat(oElement);
						break;
					case "":
						break;
					default :
						alert("invalid sValidationType for element" + sFieldname + "\nsValidationType='" + sValidationType +"'");
				}
	}
	return true;
	
}

function validateFormElement(oElement)
{
	//alert("validateFormElement function entry elementName=" + oElement.name)
        message = "";
        if(gdbBrowser != "Netscape"){
        if(gdbInvalidFieldOnBlur==true){
			gdbInvalidFieldOnBlur =false;
			if(gdbThisObjRef!=gdbNull){
				if((oElement.name != gdbThisObjRef.name) ||(oElement.form.name!=gdbThisObjRef.form.name ))
				{
					return;
				}
			}

		}
	}
	//alert("executing code")
	var sValidationType = oElement.getAttribute("validationType");
	var vRequired = oElement.getAttribute("required");
	if((vRequired ==null) || (vRequired.trim() =="")){
		vRequired="false";
	}
	if(sValidationType ==null){
			sValidationType="";
	}
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	var sFieldname =oElement.getAttribute("description");
	var sNotSelectedValue =oElement.getAttribute("notSelectedValue");
	if(oElement.form.getAttribute("dbHighlightRequired").toUpperCase() =="TRUE"){
		gdbShowRequiredHighLighting= true;
	}
	else if(oElement.form.getAttribute("dbHighlightRequired").toUpperCase() =="FALSE"){
		gdbShowRequiredHighLighting= false;
	}
	
	var isvalid = true;
	
	if(vRequired.toUpperCase() =="TRUE"){
		if( (oElement.value == null) || (oElement.value.trim()=="") ||(oElement.value==sNotSelectedValue)){
			if(gdbAlertOnBlankField){
				alert("'" + sFieldname + "' is a required field");
			}
			// change field to valid even though its empty
			oElement.style.background= gdbElementValidColorArray[oElement.name];
			PaintBorderAndBGImage(oElement);
			return;
		}
	}
	else if((sValidationType!="")){
			if(isValidFormElement(oElement)==true){
				oElement.style.background= gdbElementValidColorArray[oElement.name];
			}
			else{
				return
			}
	}
	else if(vRequired.toUpperCase() =="FALSE"){
			return
	}
	
	
	
	if(oElement.type!="text"){
		return;
	}

	if(sValidationType != ""){
		isvalid = isValidFormElement(oElement);
	}
	if(!isvalid ){
		if(gdbFieldLevelValidation){
			alert(message);
		}
		//alert("down here bad")
		gdbThisObjRef=oElement;
		oElement.style.background= gdbInvalidColor;
		PaintBorderAndBGImage(oElement);
		oElement.select();
		oElement.focus();
		gdbInvalidFieldOnBlur = true;
		//alert("gdbInvalidFieldOnBlur="+gdbInvalidFieldOnBlur)
	}
	else{
		//alert("down here good")
		oElement.style.background= gdbElementValidColorArray[oElement.name];
		PaintBorderAndBGImage(oElement);
		gdbInvalidFieldOnBlur =false;
		gdbThisObjRef=gdbNull;
	}
}

function PaintBorderAndBGImage(oElement){

	var vRequired = oElement.getAttribute("required");
	if((vRequired ==null) || (vRequired.trim() =="") || (vRequired.toUpperCase() =="FALSE")){
			return;
	}
	//see if highlighting for form is turned on
	if(oElement.form.getAttribute("dbHighlightRequired").toUpperCase() =="TRUE"){
		gdbShowRequiredHighLighting= true;
	}
	else if(oElement.form.getAttribute("dbHighlightRequired").toUpperCase() =="FALSE"){
		gdbShowRequiredHighLighting= false;
	}
	
	if(gdbShowRequiredHighLighting){
		oElement.style.border="2px solid yellow";
		oElement.style.backgroundImage = 'url(' + './images/required.gif' + ')';
		oElement.style.backgroundPosition = "top right";
		oElement.style.backgroundRepeat = "no-repeat";	
	}
}

function check(form,x)
{
	if(gdbBrowser != "Netscape"){
		if(gdbInvalidFieldOnBlur)return false;
	}
	var submitMessage = "";
	var isValid = true;
	var vValue = "";
	var re ="";
	var sPattern="";
	var sPassword ="";
	var firstInvalidObj;
		
	var myForm =document.forms[form.name];
		var iElements = myForm.elements.length;
		for (i=0; i<iElements; i++){
			var bProcessFormElement = false;
			var oElement = myForm.elements[i];
			var vRequired = oElement.getAttribute("required");
			var sValidationType = oElement.getAttribute("validationType");
			if((vRequired ==null) || (vRequired.trim() =="")){
								vRequired="false";
			}
			if(sValidationType ==null ){
					sValidationType="";
			}
			if(vValue== null){
							vValue =""
			}
			if(gdbBrowser == "Netscape"){
				var vValue = oElement.value;
				}
			else{
				var vValue = oElement.getAttribute("Value");
			}
			var sFieldname =oElement.getAttribute("description");
			var sNotSelectedValue =oElement.getAttribute("notSelectedValue");
			if(vRequired.toUpperCase() == "TRUE"){
				bProcessFormElement = true;
			}
			if(vValue.trim()!="" && (sValidationType.trim()!="")){
				bProcessFormElement = true;
			}
			if(bProcessFormElement){
				if(vValue== null){
					if(isValid){
						isValid = false;
						firstInvalidObj =oElement;
					}
					if(submitMessage.length > 0){
						submitMessage = submitMessage + "\n" + sFieldname; 	
					}
					else{
						submitMessage = sFieldname
					}
				}
				if(vValue.trim() == "" || vValue == sNotSelectedValue){
					
					if(isValid){
						isValid = false;
						firstInvalidObj =oElement;
					}
					if(submitMessage.length > 0){
						submitMessage = submitMessage + "\n" + sFieldname; 	
					}
					else{
						submitMessage = sFieldname
					}
				}
				else if (sValidationType!= null ){
					if(sValidationType!=""){
						if(sValidationType.toUpperCase() !="CONFIRMPASSWORD"){
							if(!isValidFormElement(oElement)){
								if(isValid){
									isValid = false;
									firstInvalidObj =oElement;
								}
								if(submitMessage.length > 0){
									submitMessage = submitMessage + "\n" + sFieldname; 	
								}
								else{
									submitMessage = sFieldname
								}
							
							}
						}
						else{
							var passElementName='';
							var vPass ='';
							var vConfirmPass ='';
							passElementName= oElement.getAttribute("passwordElementName");
							var vPassObj = dB_findObj(passElementName);
							vPass = vPassObj.getAttribute("value");
							vConfirmPass = vValue;
							if(vConfirmPass.length > 0 && vPass.length > 0){
								if(vConfirmPass != vPass){
									if(isValid){
										isValid = false;
										firstInvalidObj =oElement;
									}
									if(submitMessage.length > 0){
										submitMessage = submitMessage + "\n" + sFieldname; 	
									}
									else{
										submitMessage = sFieldname
									}
								}
							}
						}
					}//end if
				}//end elseif
				
				
			}	
		}
	
	
	//This code will prevent a submit if data is incorrect
	if (isValid == false){ 
		alert("The following form field(s) are required , invalid or incomplete :\n\n" + submitMessage + "\n\n Please complete the form and submit again.") 
		if(firstInvalidObj.type=="text"){
			firstInvalidObj.style.background= gdbInvalidColor;
			firstInvalidObj.select();
			firstInvalidObj.focus();
			if(firstInvalidObj.form.getAttribute("dbHighlightRequired").toUpperCase()=="TRUE"){
				gdbShowRequiredHighLighting =true;
			}
			else if(firstInvalidObj.form.getAttribute("dbHighlightRequired").toUpperCase()=="FALSE"){
				gdbShowRequiredHighLighting =false;
			}
			PaintBorderAndBGImage(firstInvalidObj);	
		}
		else{
			firstInvalidObj.focus();
		}	
	}	
	else{	
	}
	document.dB_returnValue =isValid;
}

function isNum(v)
{
	var renum = /^(-)?\d*(\.\d*)?/;
	
	return (renum.test(v));
}

function TestForMaxMinOrRange(oElement,bInt,vValue)
{
	var sRangeVal = oElement.getAttribute("rangeVal");
	var sMax = oElement.getAttribute("maxValue");
	var sMin = oElement.getAttribute("minValue");
	var nValue = (bInt ? parseInt(vValue) : parseFloat(vValue))

	if(sRangeVal==null){
		sRangeVal =""
	}
	if(sMax==null){
		sMax =""
	}
	if(sMin==null){
		sMin =""
	}
	if(sRangeVal.trim()=="" && sMax.trim()=="" && sMin.trim()==""){//no max, min or range check
		return true;
	}
	if(sRangeVal.trim()!=""){
		var rePat = /^(\s)?(\d*(\.\d*))(\s)?TO(\s)?(\d*(\.\d*))/
		var result = sRangeVal.match(rePat)
		sMin = result[2];
		sMax = result[6];
		//var nMax = (bInt ? parseInt(sMax) : parseFloat(sMax))
		//var nMin = (bInt ? parseInt(sMin) : parseFloat(sMin))
	}
	//else{
		if(sMax.trim()!=""){
			var nMax = (bInt ? parseInt(sMax) : parseFloat(sMax))
		}
		if(sMin.trim()!=""){
			var nMin = (bInt ? parseInt(sMin) : parseFloat(sMin))	
		}
	//}
	
	if(sMax.trim()!="" && nValue > nMax){
		message = "The value you entered must be less than " + sMax;
		return false;
	}
	if(sMin.trim()!="" && nValue < nMin){
		message = "The value you entered must be greater than " + sMin;
		return false;
	}
	return true;
}

function isValidFloat(oElement)
{
	if(gdbBrowser == "Netscape"){
			var vValue = oElement.value;
		}
		else{
			var vValue = oElement.getAttribute("Value");
		}
		if(vValue==null){
			vValue ="";
	}
	var refloat = /^(-)?\d*(\.\d*)?/;
	
	if(!refloat.test(vValue)){
			message = "You have entered an invalid float value\n";
			return false;
	}
	var bPositive = oElement.getAttribute("positive")
	if(bPositive == null){
		bPositive = "false";
	}
	if(bPositive.toUpperCase() =="TRUE"){
			if(!IsPositive(vValue,true)){
				return false;
			}
	}
	if(!TestForMaxMinOrRange(oElement,true,vValue)){
		return false;
	}
	
	var bFormat = oElement.getAttribute("dBFormat")
	if(bFormat == null){
		bFormat = "FALSE";
	}
	if(bFormat.toUpperCase() == "TRUE"){
		oElement.value = formatNumber(vValue);
	}
	return true;
	
}

function isZipCode(oElement)
{
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	var rezip = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
	if(!rezip.test(vValue)){
		message = "You have entered an invalid zipcode\n";
		message = message + "zipcodes must be in format '12345' or 12345-1234";
		return false;
	}
	return true;
}

function isMoney_us(oElement)
{
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	var remoney = /^(\$)?(\d*)(,\d*)*(\.\d*)?$/;
	if(!remoney.test(vValue)){
		message = "You have entered an invalid US currency amount\n";
		return false;
	}
	var bPositive = oElement.getAttribute("positive")
	if(bPositive == null){
		bPositive = "false";
	}
	if(bPositive.toUpperCase() =="TRUE"){
		if(!IsPositive(vValue,true)){
			return false;
		}
	}
	if(!TestForMaxMinOrRange(oElement,true,vValue)){
		return false;
	}
	
	var bFormat = oElement.getAttribute("dBFormat")
	if(bFormat == null){
		bFormat = "FALSE";
	}
	if(bFormat.toUpperCase() == "TRUE"){
		oElement.value = formatCurrency(vValue);
	}
	return true;
}

function isValidSSN(oElement)
{
	var reSSN = /^(\d{9}$|(\d{3}-\d{2}-\d{4})$)/;
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	if(!reSSN.test(vValue)){
		message = "You have entered an invalid social security number\n";
		message = message + "social security numbers must be in XXX-XX-XXXX or XXXXXXXXX format";
		return false;
	}
	var bFormat = oElement.getAttribute("dBFormat")
	if(bFormat == null){
		bFormat = "FALSE";
	}
	if(bFormat.toUpperCase() == "TRUE"){
		oElement.value = formatSSN(vValue);
	}
	return true;	
}

function isValidLowerCase(oElement)
{
	var rePattern = /^.*[A-Z]/
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	if(rePattern.test(vValue)){
		oElement.value = vValue.toLowerCase();
	}
	return true;
	
}

function isValidUpperCase(oElement)
{
	var rePattern = /^.*[a-z]/
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	if(rePattern.test(vValue)){
		oElement.value = vValue.toUpperCase();
	}
	return true;
	
}

function isValidNoSpace(oElement)
{
	var rePattern = /^.*[a-z]/
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	if(vValue.trim()!= ""){
		oElement.value = vValue.replace(/\s/g,"");
	}
	return true;
	
}

function isValidPhoneUS(oElement)
{
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	var sPhone  = vValue.replace(/\D/g,"");
	var iDigits = sPhone.length;
	if( !(iDigits==10 || iDigits==11 && /^1/.test(sPhone)) )
	{
		message = "You have entered an invalid US phone number\n";
		return false;
	}
	return true;
	
}

function isValidRegExp(oElement)
{
	var sPattern = oElement.getAttribute("regexp");
	var evalString = "re = " + sPattern ;
	eval(evalString);
	
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue==null){
		vValue ="";
	}
	if(vValue.trim == "" || !re.test(vValue)){
		message = "Your entry is invalid. Please try again";
		return false;
	}
	
	return true;
	
}


function isDate(oElement,sFormat)
{

	var sDate=oElement.value;
	var aDaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	// Fetch the date separator from the user's input
	var sSepDate=sDate.charAt(sDate.search(/\D/));
	// Fetch the date separator from the format
	var sSepFormat=sFormat.charAt(sFormat.search(/[^MDY]/i));
	// Compare separators
	var bretVal =true;
	if (sSepDate!=sSepFormat){
			message ="You have entered an invalid date"
			return false;
	}


	// Fetch the three pieces of the date from the user's input and the format
	var aValueMDY=sDate.split(sSepDate);
	var aFormatMDY=sFormat.split(sSepFormat);
	var iMonth,iDay,iYear;




	// Validate that all pieces of the date are numbers
	if (  !isNum(aValueMDY[0]) ||!isNum(aValueMDY[1]) ||!isNum(aValueMDY[2])){
		message ="Invalid date format specified"
		bretVal = false;
	}
		


	// Assign day, month, year based on format
	switch (aFormatMDY[0].toUpperCase()){
		case "YYYY" :
			iYear=aValueMDY[0];
			break;
		case "DD" :
			iDay=aValueMDY[0];
			break;
		case "MM" :
			iMonth=aValueMDY[0];
			break;
		default :
			message ="Invalid date format specified"
			bretVal = false;
	}



	switch (aFormatMDY[1].toUpperCase()){
		case "YYYY" :
			iYear=aValueMDY[1];
			break;
		case "MM" :
			iMonth=aValueMDY[1];
			break;
		case "DD" :
			iDay=aValueMDY[1];
			break;
		default :
			message ="Invalid date format specified"
			bretVal = false;
	}

	switch(aFormatMDY[2].toUpperCase()){
		case "MM" :
			iMonth=aValueMDY[2];
			break;
		case "DD" :
			iDay=aValueMDY[2];
			break;
		case "YYYY" :
			iYear=aValueMDY[2];
			break;
		default :
			message ="Invalid date format specified"
			bretVal =  false;
	}

	// Require 4 digit year
		if(iYear.length!=4){
			message = "You have entered an invalid date"
			bretVal = false;
		}

	// Check for leap year
	var iDaysInMonth=(iMonth!=2)?aDaysInMonth[iMonth-1]:
		((iYear%4==0 && iYear%100!=0 || iYear % 400==0)?29:28);

	if(iDay!=null && iMonth!=null && iYear!=null && iMonth<13 && iMonth>0 && iDay>0 && iDay<=iDaysInMonth){
		bretVal = true;
	}
	else{
		message = "You have entered an invalid date"
		bretVal = false;
	}
			
	
	return bretVal;


}
function validateBlankFields(oElement)
{
	//alert("validateBlankFields(oElement) function entry elementName=" + oElement.name)
	
	if(gdbBrowser != "Netscape"){
		if(gdbInvalidFieldOnBlur){
				return;
		}
	}
	var sDesc = oElement.getAttribute("description");
	if((oElement.value == null) || (oElement.value.length < 1)){
		if(gdbAlertOnBlankField){
			alert("'" + sDesc + "' is a required field");
		}
	}
	else{
		oElement.style.background= gdbElementValidColorArray[oElement.name];
		PaintBorderAndBGImage(oElement);
	}
	
	return true;
}

function validationSetup()
{
	//alert("validationSetup")
	iForms=document.forms.length;
	for(j=0; j<iForms; j++){
		var myForm =document.forms[j];
		var iElements = myForm.elements.length;
		for (i=0; i<iElements; i++){		
			if(gdbBrowser == "Netscape"){
				var oElement = myForm.elements[i];
				var sValidationType = oElement.getAttribute("validationType");
				var sRequired = oElement.getAttribute("Required");
				var sInvalidAction = oElement.getAttribute("invalidAction");
				if(sInvalidAction==null){
					sInvalidAction= "";
				}
				if(sRequired==null){
					sRequired= "";
				}if(sValidationType==null){
					sValidationType= "";
				}
				
				//if(sInvalidAction != ""){
				//	gdbsInvalidActions[oElement.name]=sInvalidAction;
				//	oElement.onblur=function(e){if(isValidFormElement(e.target)==false)eval(gdbsInvalidActions[this.name]);};	
				//}
				if(sValidationType!="" ){	
					oElement.onblur=function(e){validateFormElement(e.target);};
				}
				else if(sRequired.toUpperCase()=="TRUE" ){
					oElement.onblur=function(e){validateBlankFields(e.target);};
				}
				if(oElement.style.backgroundColor==""){
					gdbElementValidColorArray[oElement.name]= "white";
				}
				else{

					gdbElementValidColorArray[oElement.name]=oElement.style.backgroundColor;
				}
				if(sRequired.toUpperCase()=="TRUE"){
					PaintBorderAndBGImage(oElement);
				}
				
			}
			//internet Explorer
			else{
				var oElement = myForm.elements[i];
				var sValidationType = oElement.getAttribute("validationtype");
				var sRequired = oElement.getAttribute("Required");
				var sInvalidAction = oElement.getAttribute("invalidAction");
				if(sInvalidAction==null){
					sInvalidAction= "";
				}
				if(sRequired==null){
					sRequired= "";
				}
				if(sValidationType==null){
					sValidationType= "";
				}
				if(sInvalidAction != ""){
					gdbsInvalidActions[oElement.name]=sInvalidAction;
					//alert(gdbsInvalidActions[oElement.name])
					oElement.onblur=function(){if(isValidFormElement(this)==false)eval(gdbsInvalidActions[this.name]);};	
				}
				else if(sValidationType!="" ){	
					oElement.onblur=function(){validateFormElement(this);};	
				}
				else if(sRequired.toUpperCase()=="TRUE" ){
					oElement.onblur=function(){validateBlankFields(this);};
				}
				if(oElement.style.backgroundColor==""){
					gdbElementValidColorArray[oElement.name]= "white";
				}
				else{

					gdbElementValidColorArray[oElement.name]=oElement.style.backgroundColor;
				}
				if(sRequired.toUpperCase()=="TRUE"){
					PaintBorderAndBGImage(oElement);
				}
			}
			
			
						
		}
	}
}
function IsPositive(vValue,bInt) {
	var nValue = (bInt ? parseInt(vValue) :parseFloat(vValue))
	if(nValue < 0){
		message = "The value must be positive\n";
		return false;
	}
	return true;
}
function IsValidInteger(oElement) {
	var reInt = /^(-)?\d*$/;
	if(gdbBrowser == "Netscape"){
		var vValue = oElement.value;
	}
	else{
		var vValue = oElement.getAttribute("Value");
	}
	if(vValue ==null){
		vValue ="";
	}
	var bPositive = oElement.getAttribute("positive")
	if(bPositive == null){
		bPositive = "false";
	}
	if(vValue.trim == "" || !reInt.test(vValue)){
		message = "You have entered an invalid integer\n";
		return false;
	}
	if(bPositive.toUpperCase() =="TRUE"){
		if(!IsPositive(vValue,true)){
			return false;
		}
	}
	if(!TestForMaxMinOrRange(oElement,true,vValue)){
		return false;
	}
	
	var bFormat = oElement.getAttribute("dBFormat")
	if(bFormat == null){
		bFormat = "FALSE";
	}
	if(bFormat.toUpperCase() == "TRUE"){
		oElement.value = formatNumber(vValue);
	}
	return true;
	
}
function IsValidEmail(oElement) {
	var reEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	if(gdbBrowser == "Netscape"){
			var vValue = oElement.value;
		}
		else{
			var vValue = oElement.getAttribute("Value");
		}
		if(vValue ==null){
			vValue ="";
	}
	if(vValue != "" && !reEmail.test(vValue)){
		message = "You have entered an invalid E-mail address\n";
		message = message + "E-mail addresses must have a '@' and a '.' in them ";
		return false;
	}
	return true;
						
}
function IsValidTime(timeStr,timeFormatStr) {
	
	// Checks if time is in correct format.
	
	var timeFrmtPat = /^(HH|24):MM(:SS)?$/;
	
	var matchFrmtArray = timeFormatStr.match(timeFrmtPat);
	if (matchFrmtArray == null) {
		message = "Time format is not a valid format.e.g formats must be 24H:MM:SS or HH:MM:SS where minutes and seconds are optional";
		return false;
	}
	
	hourFormat = matchFrmtArray[1];
	secondFormat = matchFrmtArray[2];
	
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?$/;

	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
		message = "You have entered an invalid time\n";
		return false;
	}
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	
	if (second=="") { 
		second = null; 
	}
	if ((hour < 0  || hour > 12) && (hourFormat =="HH")) {
		message = "You have entered an invalid time\n";
		return false;
	}
	else if((hour < 0  || hour > 23) && (hourFormat =="24")){
		message = "You have entered an invalid time\n";
		return false;
	}
	
	if ((minute<0 || minute > 59)) {
		message = "You have entered an invalid time\n";
		return false;
	}
	//alert("hour="+hour + "  hourFormat=" +hourFormat + " secondFormat=" + secondFormat + " second=" + second)
	if ((second == null || (second < 0 || second > 59)) &&(secondFormat==":SS")) {
		message = "You have entered an invalid time\n";
		return false;
	}
	return true;
	
}
function formatNumber(srcNumber) {
	var txtNumber = '' + srcNumber;
	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');
	arrNumber[0] += '.';
	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));
	if (arrNumber.length > 1) {
		return arrNumber.join('');
	}
	else {
		return arrNumber[0].split('.')[0];
	}
}
function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function formatSSN(ssn) {
	var reSSN = /^(\d{3})(-)?(\d{2})(-)?(\d{4})$/;
	var result = ssn.match(reSSN);
	return result[1] + "-" + result[3] + "-" + result[5] 	
}
