/*
 ValidateMain(form_object)
 USAGE:
 <input type="hidden" name="_^[A][--+B]" value="[C]"/>

 [A]: A valid javascript condition where 'f' is predefined to be the field object
 preceeding the hidden condition field, ge('name or id') returns given field object,
 and rc('name or id') returns string of 1s and 0s representing the checked or
 unchecked state of a group of fields with the given name or id
 
 [--+B]: Optional.  Defines the field name or id that should receive the focus
 after the pop up message.  By default, the field preceeding the hidden
 condition field receives the focus, however this may not be desirable
 
 [C]: Pop up message
 
 ValidateShort(form_object) and BufferFields()
 USAGE:
 Use this pair of functions to eliminate default text in a field upon submission.
 ValidateShort replaces ValidateMain for this purpose. It additionally 
 predefines 'iv' as the initial value of the field preceeding the hidden condition
 field for use in the condition 
 
 NOTE: iv is defined only for the field preceeding the hidden condition field,
 therefore, consecutive condition fields aren't supported for use with this var
 
 Buffer fields should be placed on the page after all forms that use ValidateShort
 
*/

var arrFormFields, iOffset=0;

//Buffer up to one hundred fields from forms on page
var arrFormFields=Array(100);
for(i=0;i<100;i++)
	arrFormFields[i]=Array(2);

//Validation code-------------------------------------------
function ValidateMain(frm){  
	var i, k=0, f, iv, focus_value, value_pair, condition_value;
	e=frm.elements;
	
	for(i=0;i<e.length;i++){
		iv=getFieldByIndex(frm, i-1); 
		
		if(e[i].name.substring(0,2)=='_^'){
			f=e[k];
		
			value_pair = e[i].name.split('--+');
			
			focus_value='';
			if(value_pair.length>1){
				focus_value=value_pair[1];		
				condition_value = value_pair[0].substring(2,value_pair[0].length);
			}
			else
				condition_value=e[i].name.substring(2,e[i].name.length);
			
			//alert(condition_value);
			
			if(eval(condition_value)){
				alert(e[i].value);
				
				if(focus_value!=''){
					focus_value = ge(focus_value);		
					focus_value.focus();
					if(focus_value.type!='select-one')		
						focus_value.select();
				}
				else{
					e[k].focus();
					if(e[k].type!='select-one')
						e[k].select();
				}				
				
				return false;
			} 
		}
		else
			k=i;     
	}
	
	return true;
}
 
function ge(sIdName){
 var j=0;
 for(j=0;j<e.length;j++)
  if(e[j].id==sIdName||e[j].name==sIdName)
   return e[j];
 
 alert('ge: No name or id "'+sIdName+'"');
 return e[0]; 
}
 
function rc(sIdName){
 var j=0,sBString='';
 for(j=0;j<e.length;j++)
  if(e[j].id==sIdName||e[j].name==sIdName)
   sBString+=(e[j].checked)?'1':'0';   
  
  if(sBString=='')
   alert('rc: No name or id "'+sIdName+'"');
  return sBString;
  
}
//Validation code-----------------------------------	



//Buffer form index, field name, and field value into arrFormFields for all forms in document
function bufferFields(){
	var i,j;
	for(i=0;i<document.forms.length;i++){			
		for(j=0;j<document.forms[i].elements.length;j++){									
			arrFormFields[iOffset][0]=i;
			arrFormFields[iOffset][1]=document.forms[i].elements[j].name;
			arrFormFields[iOffset][2]='';
			
			if(document.forms[i].elements[j].type=='text' || document.forms[i].elements[j].type=='textarea'){
				arrFormFields[iOffset][2]=document.forms[i].elements[j].value;				
			}	
	
			//alert(arrFormFields[iOffset][0] + ', ' + arrFormFields[iOffset][1] + ', ' + arrFormFields[iOffset][2] + ', ' + iOffset);
			iOffset++;
		}		
	}
	return 0;
}
//Get field value from form object and field name in the arrFormFields array
function getFieldByName(frm, fieldName){
	var i,formIndex = getFormIndex(frm);
	
	for(i=0;i<iOffset;i++)
		if(arrFormFields[i][0]==formIndex&&arrFormFields[i][1]==fieldName){
			return arrFormFields[i][2];
		}
			
	return 0;
}
//Get field value from form object and element index in the arrFormFields array
function getFieldByIndex(frm, index){
	var i,j=-1,formIndex = getFormIndex(frm);

	for(i=0;i<iOffset;i++){
		if(arrFormFields[i][0]==formIndex&&j==-1)		
			j=i;
		
		if(i-j==index&&j!=-1)
			return arrFormFields[i][2];
	}
			
	return 0;
}

//Set value of all fileds that still have default values to null string in a given form
function clearDefaultValues(frm){
	var i;
	for(i=0;i<frm.elements.length;i++)
		if(frm.elements[i].value==getFieldByIndex(frm,i))
			frm.elements[i].value='';

	return true;
}

//Use this to validate short forms and clear default values
function ValidateShort(frm){
	
	if(ValidateMain(frm))
		return clearDefaultValues(frm);
	
	return false;

}

//Get form index for given form
function getFormIndex(frm){
	var i;
	for(i=0;i<document.forms.length;i++)
		if(document.forms[i]==frm)
			return i;
	
	return 0;
}
