//--------------------------------------
//file:		lib_c_validate_client.js
//for:		validation for forms, client-side javascript version
//author:	JC Lango
//mods:
//09/20/00 16:11 JC Lango created
//06/04/01 13:34 JC Lango added c_ValidateRadio()
//06/11/01 13:05 JC Lango added bIsMustComplete
//06/13/01 11:10 JC Lango, added invalid & form status stuff
//06/13/01 13:56 JC Lango, renamed from validate_client.js
//06/15/01 12:20 JC Lango, added GetCSVByIndexJS()
//06/15/01 15:06 JC Lango, turned off Netscape flag
//06/18/01 15:13 JC Lango, turned back on Netscape flag
//06/20/01 15:03 JC Lango, fixed c_Validate, changed bIsFinal to bIsMustComplete
//06/27/01 11:47 JC Lango, wrote SetCSVByNameJS()
//06/28/01 10:55 JC Lango, updated SetCSVByNameJS()
//07/11/01 07:47 Bob Henry, added c_MonthsYearsConversion
//08/20/01 13:46 JC Lango, mod SetCSVByNameJS() to use blank value string to erase
//12/05/01 10:15 Bob Henry, SetCSVByIndexJS, if index not found, add a new one at end
//07/10/02 15:42 Bob Henry, changed error message for too long error
//--------------------------------------
//global variables for client-side validation
var bIsMustComplete;
var bIsInvalid;
var bIsValidating=false;
var oField;
var bIsNetscape=false;
if(navigator.appName=="Netscape")
	bIsNetscape=true;

function c_ValidateInit(fld){
	if(!bIsValidating){
		oField=fld;
		bIsValidating=true;
	}
	if(oField!=fld)
		return(true);
	return(false);
}

//form text field validation
function c_Validate(fld,sName,iType,bIsRequired){
	var lResult;
	var sTmp;
	if(c_ValidateInit(fld))
		return(true);
	sTmp=c_FormatText(fld.value,iType);
	fld.value=sTmp;
	if((bIsRequired)&&(sTmp.length<1)){
		bIsInvalid=true;
		if(bIsMustComplete)
			return(c_Invalid(fld,sName + " required. Please correct."));
	}
	if(sTmp.length>0){
		lResult=c_ValidateText(sTmp,iType);
		if(lResult!=g_lcResultSuccess){
			if(lResult==c_ResultInvalid(iType))
				return(c_Invalid(fld,sName + " invalid. Please correct."));
			if(lResult==c_ResultTooShort(iType))
				return(c_Invalid(fld,sName + " too short. Minimum=" + c_FieldMin(iType) + ". Please correct."));
			if(lResult==c_ResultTooLong(iType))
				return(c_Invalid(fld,sName + " has exceeded the maximum length of " + c_FieldMax(iType) + " characters. Please shorten the text to continue."));
		}
	}
	bIsValidating=false;
	return(true);
}

function c_Invalid(fld,sMsg){
	bIsInvalid=true;
	alert(sMsg);
	fld.focus();
	bIsMustComplete=false;
	if(document.frm.hdnFormStatus)
		if(document.frm.hdnSequence)
			document.frm.hdnFormStatus.value=SetCSVByIndexJS(document.frm.hdnSequence.value,"0",document.frm.hdnFormStatus.value);
	return(false);
}

//write a value to a comma separated values string given the value index
function SetCSVByIndexJS(iIndex,sValue,sCSV){
	var i;
	var j=1;
	var sTmp="";
	do{
		i=sCSV.search(",")+1;
		if(i){
			if(j==iIndex)
				sTmp+=sValue;
			else
				sTmp=sTmp + sCSV.substr(0,i-1);
			sTmp+=",";
			sCSV=sCSV.substr(i,sCSV.length-i);
			j++;
		}
	}while(i);
	if(j==iIndex)
		sTmp+=sValue;
	else
		sTmp+=sCSV+","+sValue;
	return sTmp;
}

//write a value to name=value pairs in csv string, eg: "A=1,B=2,C=3"
function SetCSVByNameJS(sName,sValue,sCSV){
	var i=0;
	var iOld=0;
	var j=0;
	var sBuffer="";
	var sTmp="";
	var bIsFound=false;
	var bIsValueGiven=false;
	var sValueGiven=new String(sValue);
	if(sValueGiven.length)
		bIsValueGiven=true;
	do{
		i=sCSV.indexOf(",",i+1)+1;
		if(i){
			sTmp=sCSV.substring(iOld,i-1);
			j=sTmp.indexOf("=",1);
			if(j)
				if(sName==sTmp.substring(0,j)){
					bIsFound=true;
					if(bIsValueGiven)
						sTmp=sName+"="+sValue;
					else
						sTmp="";
				}
			iOld=i;
			if(sTmp.length)
				sBuffer+=sTmp+",";
		}
	}while(i);
	sTmp=sCSV.substr(iOld);
	j=sTmp.indexOf("=",1);
	if(j)
		if(sName==sTmp.substring(0,j)){
			bIsFound=true;
			if(bIsValueGiven)
				sTmp=sName+"="+sValue;
			else
				sTmp="";
		}
	sBuffer+=sTmp;
	if(sBuffer.substr(sBuffer.length-1)==",")
		sBuffer=sBuffer.substring(0,sBuffer.length-1);
	if((!bIsFound)&&(bIsValueGiven)){
		if(sBuffer.length)
			sBuffer+=",";
		sBuffer+=sName+"="+sValue;
	}
	return(sBuffer);
}

//read a value from name=value pairs in csv string, eg: "A=1,B=2,C=3"
function GetCSVByNameJS(sName,sCSV){
	var i=0;
	var iOld=0;
	var j=0;
	var sTmp="";
	do{
		i=sCSV.indexOf(",",i+1)+1;
		if(i){
			sTmp=sCSV.substring(iOld,i-1);
			j=sTmp.indexOf("=",1);
			if(j)
				if(sName==sTmp.substring(0,j))
					return(sTmp.substr(j+1));
			iOld=i;
		}
	}while(i);
	sTmp=sCSV.substr(iOld);
	j=sTmp.indexOf("=",1);
	if(j)
		if(sName==sTmp.substring(0,j))
			return(sTmp.substr(j+1));
	return(null);
}

//read a value from a comma separated values string given the value index
//TODO: fails on double comma, not being used yet
function GetCSVByIndexJS(iIndex,sCSV){
	var i=0;
	var iOld=0;
	var j=1;
	do{
		i=sCSV.indexOf(",",i+1)+1;
		if(i){
			if(j==iIndex)
				return(sCSV.substring(iOld,i-1));
			j++;
			iOld=i;
		}
	}while(i);
	if(j==iIndex)
		return(sCSV.substr(iOld));
	return(null);
}

//form list field validation
function c_ValidateList(fld,sName,bIsRequired){
	var sTmp;
	if(c_ValidateInit(fld))
		return(true);
	sTmp=fld.options[fld.selectedIndex].value;
	if((bIsRequired)&&(sTmp<1)){
		bIsInvalid=true;
		if(bIsMustComplete)
			return(c_Invalid(fld,sName + " required. Please correct."));
	}
	bIsValidating=false;
	return(true);
}

function c_ListValue(fld){
	return(fld.options[fld.selectedIndex].value);
}

//form list field validation
function c_ValidateRadio(fld,sName,bIsRequired){
	var i=0;
	var bIsChecked=false;
	if(c_ValidateInit(fld))
		return(true);
	while(fld[i]){
		if(fld[i].checked)
			bIsChecked=true;
		i++;
	}
	if((bIsRequired)&&(!bIsChecked)){
		bIsInvalid=true;
		if(bIsMustComplete){
			fld=fld[0];
			return(c_Invalid(fld,sName + " required. Please correct."));
		}
	}
	bIsValidating=false;
	return(true);
}

//month to years conversion
function c_MonthsYearsConversion(oFieldMonths,oFieldYears){
	oFieldMonths.value=c_FormatInteger(oFieldMonths.value);
	if(oFieldMonths.value>11){
		var iNum;
		var iYears;
		var iMonths;
		iYears=new Number(oFieldYears.value);
		iNum=new Number(oFieldMonths.value);
		iNum=iNum/12;
		iNum=Math.floor(iNum);
		oFieldYears.value=iYears+iNum;
		iNum=new Number(oFieldMonths.value);
		iNum=iNum%12;
		iNum=Math.round(iNum);
		oFieldMonths.value=iNum;
	}
}
