//<script language="javascript">
/*	Form Validation (Basic)
	(c)2002 Michael Swain
	Websolvers Inc
*/

var lVal_SplitChar = '_';
var lVal_IDCase = 1;
var lVal_IDFirst = 1;
var lVal_TypeID = 'TYPE';
var lVal_LabelID = 'LABEL';
var lVal_DefaultID = 'DEFAULT';
var lVal_ReqField = '_REQ';
var lVal_ReqMessage = 'A required field is missing.';

var lVal_Validator = new Array();
var lVal_Form = null;

function validateForm(frm, fill) {
	var req = frm.elements[lVal_ReqField];
	var i = 0;
	var elem = null;
	
	if(!req || !req.value || !req.value.length) {
		return lVal_ValidateForm(frm, fill);
	}
	
	req = req.value.split(',');
	for(i = 0; i < req.length; i++) {
		elem = frm.elements[lVal_trim(req[i])];
		
		if(elem && !elem.length && elem.name)
			if(lVal_vReq('req', new Array(elem.value))[0].length) {
				alert(lVal_ReqMessage);
				if(elem.focus)
					elem.focus();
				return false;
			}
	}
	
	return true;
}

function lVal_ValidateForm(frm, fill) {
	var i = 0, j = 0;
	var elem = null;
	var ary = null;
	var err = null;
	
	lVal_Form = new Array();

	for(i = 0; i < frm.elements.length; i++) {
		elem = frm.elements[i];
		
		if(!elem.length && elem.name) {
			ary = lVal_FieldID(elem.name);
			if(ary[0] == 1) {
				err = lVal_Valid(frm, ary[1]);
				if(err.length)
					return lVal_Notify(frm, ary[1], err);
			} else if(ary[0] == 0 && lVal_FieldType(frm, ary[1]) == "") {
				lVal_Form[ary[1]] = new Array(elem.value);
			}
		} else if(elem.length && lVal_FieldType(frm, elem[0].name) == "") {
			ary = new Array();
			for(j = 0; j < elem.length; j++)
				ary[j] = elem[j].value;
			
			lVal_Form[elem.name] = ary;
		}
	}

	if(fill && fill.elements) {
	} else if(fill) {
		for(i = 0; i < lVal_Form.length; i++) {
			var field = lVal_Form[i];
			if(frm.elements[field].length) {
			} else {
				frm.elements[field].value = lVal_Form[field][0];
			}
		}
	}
	
	return true;
}

function lVal_trim(str, lr) {
	var start=0,end=str.length;

	if(lr != 0)
		while((str.substring(start, start+1) == ' ') && (start < end))
			start++;
			
	if(!lr)
		while((str.substring(end-1, end) == ' ') && (end > start))
			end--;
	
	return str.substring(start, end);
}

function lVal_InitValidators() {
	lVal_Validator['skip'] = lVal_vSkip;
	lVal_Validator['req'] = lVal_vReq;
	lVal_Validator['join'] = lVal_vJoin;
	
	if(window.lVal_InitBasic) {
		lVal_InitBasic();
	}	
}

function lVal_FieldID(strField) {
	var TypeID = lVal_TypeID, LabelID = lVal_LabelID, DefaultID = lVal_DefaultID;
	var ary, intPos, strTest
	
	ary = strField.split(lVal_SplitChar);
	intPos = ((lVal_IDFirst) ? 0 : ary.length - 1);
	
	strTest = ((ary.length) ? ary[intPos] : '');
	if(lVal_IDFirst && strTest.length)
		ary.shift();
	else if(!lVal_IDFirst && strTest.length)
		ary.pop();
	
	if(!lVal_IDCase) {
		strTest = strTest.toLowerCase();
		TypeID = TypeID.toLowerCase();
		LabelID = LabelID.toLowerCase();
		DefaultID = DefaultID.toLowerCase(); 
	}

	switch(strTest) {
	case TypeID:
		return new Array(1, ary.join(lVal_SplitChar));
		break;
	case LabelID:
		return new Array(2, ary.join(lVal_SplitChar));
		break;
	case DefaultID:
		return new Array(3, ary.join(lVal_SplitChar));
		break;
	default:
		return new Array(0, strField);
	}
}

function lVal_FieldType(frm, strField) {
	var elem;
	
	elem = ((lVal_IDFirst) ? frm.elements[lVal_TypeID + lVal_SplitChar + strField] : frm.elements[strField + lVal_SplitChar + lVal_TypeID]);

	if(elem)
		return elem.name;
	else
		return "";	
}

function lVal_Notify(frm, strField, strErr) {
	var elem = null;
	
	if(strErr != " ") {
		elem = frm.elements[strField];
		if(elem && elem.length)
			elem = elem[0];

		if(elem && elem.focus)
			elem.focus();
		alert(lVal_GetLabel(frm, strField) + strErr);
	}
				
	return false;
}

function lVal_Valid(frm, strField) {
	var elem = frm.elements[strField];
	var value = '';
	var type = lVal_GetType(frm, strField);
	var i = 0;
	var err = null;

	if(elem && elem.length && !elem.type) {
		if(elem[1].type.toLowerCase().substr(0,5) == 'radio' || elem[1].type.toLowerCase().substr(0,5) == 'check') {
			value = new Array();
			for(i = 0; i < elem.length; i++) {
				if(elem[i].defaultChecked || elem[i].checked)
					value[i] = elem[i].value;
				else
					value[i] = "";
			}
		} else {
			value = new Array();
			for(i = 0; i < elem.length; i++) {
				value[i] = elem[i].value;
			}
		}
	} else if(elem) {
		if(elem.type.toLowerCase().substr(0,5) == 'radio' || elem.type.toLowerCase().substr(0,5) == 'check') {
			value = new Array();
			if(elem.defaultChecked || elem.checked)
				value[0] = elem.value;
		} else
			value = new Array(elem.value);
	} else
		value = new Array();

	return lVal_Value(value, type, strField, frm);
}

function lVal_GetType(frm, strField) {
	var elem;
	
	elem = ((lVal_IDFirst) ? frm.elements[lVal_TypeID + lVal_SplitChar + strField] : frm.elements[strField + lVal_SplitChar + lVal_TypeID]);

	return ((elem) && (elem.value) ? elem.value : "str");
}

function lVal_GetLabel(frm, strField) {
	var elem;
	
	elem = ((lVal_IDFirst) ? frm.elements[lVal_LabelID + lVal_SplitChar + strField] : frm.elements[strField + lVal_SplitChar + lVal_LabelID]);

	return ((elem) && (elem.value) ? elem.value : strField);
}

function lVal_GetDefault(frm, strField) {
	var elem;
	
	elem = ((lVal_IDFirst) ? frm.elements[lVal_DefaultID + lVal_SplitChar + strField] : frm.elements[strField + lVal_SplitChar + lVal_DefaultID]);

	return ((elem) && (elem.value) ? elem.value : "");
}

function lVal_Value(aryValue, strType, strField, frm) {
	var def = lVal_GetDefault(frm, strField);
	var type = strType.split('|');
	var res = null;
	var valid = null;
	var value = aryValue;

	for(var i = type.length - 1; i >= 0; i--) {
		valid = lVal_Validator[type[i].toLowerCase().substr(0,4)];
		if(valid) {
			res = valid(type[i], value);
			if(res[0].length)
				return res[0];
				
			value = res[1];
		}
	}

	if(!lVal_Form[strField])
		lVal_Form[lVal_Form.length] = strField;	
		
	lVal_Form[strField] = value;

	return "";
}

function lVal_GetParam(strType, chrSplit, defP1, defP2) {
	var intS, intE, intBS;
	var param = "";
	
	intS = strType.indexOf('(');
	intBS = strType.indexOf('[');
	intE = strType.lastIndexOf(')');

	if((intS < 1) || ((intBS > 1) && (intBS < intS))) {
		intS = intBS;
		intE = strType.lastIndexOf(']');
	}
	
	if(intE > intS) {
		param = strType.substr(intS + 1, intE - (intS + 1));
	}
	
	if(!chrSplit || !chrSplit.length) {
		if(!param.length && defP1)
			param = new Array(defP1)
		else if(param.length)
			param = new Array(param)
		else
			param = new Array();
			
		if(defP2)
			param[param.length] = defP2;
			
		return param;
	}
		
	param = param.split(chrSplit);
	
	if(!param[0].length)
		param[0] = defP1;
	
	if(param.length > 2) {
		intS = param.shift();
		intE = param.join(chrSplit);
		param.length = 0;
		param[0] = intS;
		param[1] = intE;
	}
	if(param.length < 2 || !param[1].length)
		param[1] = defP1;
		
		
	return param;
}

function lVal_vSkip(type, value) {
	var l = new Array();
	for(var j = 0; j < value.length; j++) {
		if(value[j] && value[j].toString().length)
			l[l.length] = value[j];
	}

	return new Array("", l);
}

function lVal_vReq(type, value) {
	if(!value.length)
		return new Array(' is required.', value);

	for(var i = 0; i < value.length; i++)
		if(!value[i] || !lVal_trim(value[i].toString()).length)
			return new Array(' is required.', value);
			
	return new Array('', value);
}

function lVal_vJoin(type, value) {
	var p = lVal_GetParam(type, null, ',');
	var j = value.join(p);
	value.length = 0;
	value[0] = j;
	
	return new Array('', value);
}

function lVal_RunFunc(type, value, func, param) {
	param = (parm ? lVal_GetParam(type, null, '', null) : null);

	for(var i = 0; i < value.length; i++)
		value[i] = func(value[i], param);
		
	return new Array('', value);
}

function lVal_Validate(type, value, validator, param, max, min) {
	param = (param ? lVal_GetParam(type, param, max, min) : null);
	var err, ret;
	
	if(param && param.length) {
		max = param[0];
		min = param[1];
	} else if(param) {
		max = param;
		min = null;
	} else {
		max = null;
		min = null;
	}
	
	for(var i = 0; i < value.length; i++) {
		if(value[i] && value[i].toString().length) {
			if((err = valid_GetError((ret = validator(value[i], max, min)))))
				return new Array(err, value);
			value[i] = ret;
		}
	}
	
	return new Array('', value);
}

// Initialize Basic Validation routines.
lVal_InitValidators();