var errorMsg;


function updateList(currentItm, startItm, range, validate)
{
	var currentObj, i, rankItm, itmBegin;
	var currentObj = xGetElementById(validate + 'RL' + currentItm);

	for(i=0; i< range; i++)
	{
		rankItm = xGetElementById(validate + 'RL' + (startItm + i));
		if(rankItm.value == currentObj.value && (currentItm != (startItm +i) )   )
		{
			rankItm.value = '';
		}
	}

	
}
function form_validate(frm, lang, validate)	
{			

	var i, frm, valid, lastRadioName, lastRadio, radioValue, q2Checked, q4Checked, radioFound, parameters;
	valid = true;
	radioValue = null;
	q2Checked = false;
	q4Checked = false;
	radioFound = false;
	form = eval("document." + frm);

	if(lang == "fr")
	{
		errorMsg = "Veuillez répondre à toutes les questions.";
		
	}else 
	{
		errorMsg = "Please fill in all the fields.";
	}
	
	if(validate != "no")
	{

		for(i = 0; i < form.elements.length; i++)
		{		
			validate = (form.elements[i].id.charAt(0) == 'v');
			
			if (form.elements[i].id.charAt(0) == 'u') validate = true;
			if(form.elements[i].type == "checkbox") validat = true;
			
			//if type is hidden....and has special validation...process accordingly
			
			if (form.elements[i].type == "hidden" && form.elements[i].name.substring(0,8)=="validate" ) 		
			{
				//call validate functions accordingly
				parameters = form.elements[i].name.split("_")
				
				if(parameters[1] == "sum")
				{
					valid = sum(frm, parameters[3], parameters[4], form.elements[i].value, lang );				
				}else if(parameters[1] == "onCheck")
				{
					valid = onCheck(frm, form.elements[i].value);
				}else if(parameters[1] == "dependency")
				{
					valid = layerDependencyCheck(frm, parameters[2].substring(6) , form.elements[i].value);
				}else if(parameters[1] == "minimumChecked")
				{
				    valid = minimumChecked(frm, form.elements[i].value);
				}else if(parameters[1] == "email")
				{
				    valid = isValidEmail(frm, form.elements[i].value);
				}else if(parameters[1] == "agreeChecked"){
				    valid = isAgreeChecked(frm, form.elements[i].value);
				}
				
				if(!valid)
				{
					break;
				}
			}
			
			
			// text
			if(validate && form.elements[i].type == "text")
			{
				if(!form.elements[i].value)
				{
	
					form.elements[i].focus();
					valid = false;
					break;
				}
			}
			
			// memo
			if(validate && form.elements[i].type == "textarea")
			{
				if(!form.elements[i].value)
				{
	
					form.elements[i].focus();
					valid = false;
					break;
				}
			}
			
			
        
		// radio
			if(validate && form.elements[i].type == "radio")
			{
				radioFound = true;
				if(lastRadioName)
				{
					if(form.elements[i].name != lastRadioName)
					{
						if(radioValue == null)
						{
							scrollToLayer(lastRadio.id);
							valid = false;
							
							break;
						}
						radioValue = null;
					}					
				}
				if(form.elements[i].checked)
				{
					radioValue = form.elements[i].value;
				}
				
				
				
	
				lastRadioName = form.elements[i].name;
				lastRadio = form.elements[i]
			}
		}
	    
        

		
		if(!valid)
			alert(errorMsg);
		else
		{
			if(radioFound && radioValue == null)
			{   
				alert(errorMsg);
			}
			else
			{			    
				form.submit();		 		
			} 
		}		
	//validate is set to no...so just submit form
	}else
	{
		form.submit();
	}
}


//sum validation -- validates based on operand and value passed in....used to validate the sum of numbers entered into a group of textfields
function sum(form, operand, value, fields, lang)
{	
	var rtn, sum, i, field;
	sum = 0;
	rtn = true;

	//less than sum comparison
	if(operand == "le")
	{
		fields = fields.split("_");
		//loop through all fields for this validation group
		for(i=0; i < fields.length ; i++)
		{
			field = eval("document." + form + "." + fields[i]);
			//if field value is not a number...return false and set error msg
			if( isNaN(field.value) )
			{
				errorMsg = "Numeric value required";
				field.focus();
				rtn = false;
				break;
			//else...add the field value to the sum
			}else
			{
				if(!isNaN(eval(field.value)))
				{
					sum = sum + eval(field.value);
				}
				
				//if the sum >= max value then set error on
				if(sum > value)
				{
					rtn = false;
					field.focus();
					if(lang == "fr"){
						errorMsg = "La somme des valeurs entrées est supérieure au total maximum de " + value;
					}else
					{
						errorMsg = "Sum of values entered exceed the maximum value of " + value;
					}
					break;
				}
			}
		}
		
		
		
	//greater than sum comparison
	}else if(operand == "gt")
	{
		
	}
	else if(operand == "eq")
	{

		fields = fields.split("_");
		//loop through all fields for this validation group
		for(i=0; i < fields.length ; i++)
		{
			field = eval("document." + form + "." + fields[i]);
			//if field value is not a number...return false and set error msg
			if( isNaN(field.value) )
			{
				errorMsg = "Numeric value required";
				field.focus();
				rtn = false;
				break;
			//else...add the field value to the sum
			}else
			{
				if(!isNaN(eval(field.value)))
				{
					sum = sum + eval(field.value);
				}
				
				//if the sum != value then set error on
			}
		}

		if(sum != value)
		{
			rtn = false;
			field = eval("document." + form + "." + fields[0]);
			field.focus();
			if(lang == "fr"){
				errorMsg = "La somme des valeurs entrées est supérieure au total maximum de " + value;
			}else
			{
				errorMsg = "Sum of values entered does not equal " + value;
			}
			
		}

	}

	return rtn;	
}

//used for cross dependancy validation from a checkbox to another field
function onCheck(form, fields)
{
	var rtn, field, check_field;
	rtn = true;
	
	fields = fields.split("_");
	check_field = fields[0];
	fields = fields[1].split(",");
	//if the dependant check field is checked...ensure other fields in group must be validated
	if(eval("document." + form + "." + check_field).checked)
	{
		for(i=0; i < fields.length; i++)
		{

			field = eval("document." + form + "." + fields[i]);

			if( field.value == null || (field.value).length < 1)
			{
				rtn = false;
				field.focus();
				errorMsg = "field cannot be blank";
				break;
			}
			
		}
	}
	
	return rtn;	
}


//Used to validate fields based on whether their containing layer is visible or not
function layerDependencyCheck(form, layer, fieldList)
{
	
	var rtn, validateLayer, field, field_type, is_checked, frm;
	
	rtn = true;
    var regEx = new RegExp ('q', 'g') ;

    fieldList = fieldList.replace(regEx, 'n')    
    
	//split all fields in the layer into array
	fields = fieldList.split("_");	
	//get the layer object
	validateLayer = xGetElementById(layer);	
	
	//if the layer is visible...do validation
	if(xDisplay( validateLayer))
	{
	
		//loop through all fields in the layer
		for(i=0; i<fields.length; i++)
		{		
				    			
			field = xGetElementById(fields[i]);	
											
			field_type = field.type;																																															
			field = eval("document."	 + form + "." + fields[i]);														
			is_checked = false;			
			
			//radio validation
			if(field_type == "radio")
			{			    
				for(var j=0; j<field.length; j++)
				{					   			    				
					if(field[j].checked)
					{
						is_checked = true;
					}
				}
				if(!is_checked)
				{																	
					rtn = false;
					break;
				}
			//text and textarea validation
			}else if(field_type == "text" || field_type=="textarea")
			{
				if(field.value == null || (field.value).length < 1)
				{				
					rtn = false;					
					field.focus();					
					errorMsg = "field cannot be blank";
					break;
				}
			}
			
		}		
	}		
		
	return rtn;
}

// Checks to make sure the miniumum number of selections is made
function minimumChecked(form, ids){
    var checked, min, chkbox, counter;
    
    checked = false;
    ids = ids.split("_");
    min = ids[0];
    counter = 0;

    for(i=1;i<ids.length;i++){
        chkbox = xGetElementById(ids[i]);
        if(chkbox.checked){
            counter++;
        }
    }

    if(counter >= min){
        checked = true;
    }
    else{
        errorMsg = "Please select all that apply.";
        chkbox = xGetElementById(ids[1]);
        chkbox.focus();
        
    }
    //break;
    return checked;
}

// Checks to make sure the 'I agree to the terms....checkbox is checked
function isAgreeChecked(form, id){
    var valid, chkbox;
    
    chkbox = xGetElementById(id);
    if(chkbox.checked) valid = true;
    else{
        errorMsg = "You must agree to the terms of the survey.";
        chkbox.focus();
//        break;
    }
    
    return valid;
}

// Checks to see that if the email address entered is in the proper format
function isValidEmail(form, id){
    var validEmail, email, valid;
    
    valid = false;
    validEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

    email = xGetElementById(id);
    if(validEmail.test(email.value) || (email.value.length == 0)){
        valid = true
    }else{
        errorMsg = "Please enter a valid email address.";
        email.focus();
    }

    return valid;
}