/* --------------------------- form validation ------------------------------------------------ */


function validate_form(form_id)
{
	var form = document.getElementById(form_id);
    var query_string = form.parts_info.value;
    
	 
	var unsplit_pairs = query_string.split("&&&&");
	var invalid_array = new Array();
	var split_pairs = new Array();
	
	var i=0;   
	while (unsplit_pairs[i])
	{
		var split_pair = unsplit_pairs[i].split("=");
		var name = split_pair[0];
		var value = split_pair[1];
		split_pairs[name] = value;
		i++;
	}
	
	var i=0;
	while (split_pairs['name_'+i])
	{
		var validation = validate_part(form, split_pairs, i);
		if (validation != "valid")
		{
			invalid_array.push(validation);
		}	
		i++;
	}


	if (invalid_array.length > 0)
	{
		var alert_string = "";
		for (var i=0; i < invalid_array.length; i++ )
		{
			alert_string += invalid_array[i]+"\n";
		}
		alert(alert_string);
		return false;
	}
	else
	{
		return true;
	}
}

function validate_part(form, pairs, i)
{  
		
	var validation = "valid";
		
	if (pairs['required_'+i] && pairs['type_'+i] == "Radio_group")
	{
		validation = validate_radio_required(form, pairs['name_'+i], pairs['label_'+i], pairs['style_'+i]);
	}
	
	if (pairs['required_'+i] && pairs['type_'+i] != "Radio_group" )
	{
		validation = validate_required(form, pairs['name_'+i], pairs['label_'+i], pairs['style_'+i]);
	}
	
	if (pairs['email_'+i] && validation == "valid")
	{		
		validation = validate_email(form, pairs['name_'+i], pairs['label_'+i]);
	}
	
	if (pairs['new_password_'+i] && validation == "valid")
	{
		validation = validate_new_password(form, pairs['name_'+i], pairs['label_'+i]);
	}
	
	if (pairs['image_validator_'+i] && validation == "valid")
	{
		validation = validate_image_validator(form, pairs['name_'+i]);
	}
	
	if (pairs['maxchars_'+i] && validation == "valid")
	{
		validation = validate_max_chars(form, pairs['name_'+i], pairs['maxchars_'+i], pairs['label_'+i]);
	}
	
	if ((pairs['decimals_'+i] || pairs['number_'+i]) && validation == "valid")
	{
		validation = validate_number(form, pairs['name_'+i], pairs['decimals_'+i], pairs['label_'+i]);
	}
	
	if (pairs['decimals_'+i]  && validation == "valid")
	{
		validation = validate_decimals(form, pairs['name_'+i], pairs['decimals_'+i], pairs['label_'+i]);
	}
	
	if (pairs['min_'+i] && validation == "valid")
	{
		validation = validate_min(form, pairs['name_'+i], pairs['min_'+i], pairs['type_'+i], pairs['label_'+i]);
	}
	

	return validation;
}

function validate_radio_required(form, name, label, style)
{
	var code = "var inputs = form."+name;
	eval(code);
	
	var i = 0;
	var radio_checked = false;
	while (inputs[i])
	{
		if (inputs[i].checked)
		{
			radio_checked = true;
		}
		i++;
	}
	
	if (radio_checked)
	{
		return "valid";
	}
	else
	{
		return "Please select a value for "+label;
	}
}

function validate_required(form, name, label, style)
{
	var code = "var this_value = form."+name+".value";
	eval(code);
	
	if (this_value.length == 0)
	{
		return "Please enter a value for "+label;
	}
	else if (style == "label_inside" && this_value == label)
	{
		return "Please enter a value for "+label;
	}
	else
	{
		return "valid";
	}
}

function validate_email(form, name, label)
{
	var code = "var form_element = form."+name;
	eval(code);
                    
    if (form_element.value.length == 0)
    {
        return "valid";
    }    
    else if (form_element.value.search(/@/) == -1 )
    {
        return "Please enter a valid email address for "+label;   
    }
    else if (form_element.value.search(/\./) == -1)
    {
        return "Please enter a valid email address for "+label;   
    }
    else
    {
        return "valid";
    }
}

function validate_new_password(form, name, label)
{ 
	var code = "var form_element_1 = form."+name+"_1";
	eval(code);

	var code = "var form_element_2 = form."+name+"_2";
	eval(code);

	if (form_element_1.value != form_element_2.value)
	{
		return "Please enter the same password in each of the two password fields";
	}
	else if (form_element_1.value.length == 0)
	{
		return "Please enter a password";
	}
	else
	{
		return "valid";
	}
}

function validate_image_validator(form, name)
{	
	var code = "var this_value = form."+name+"_response.value";
	eval(code);
	
	if (this_value.length == 0)
	{
		return "Please type the code in the image";
	}
	else
	{
		return "valid";
	}
}

function validate_max_chars(form, name, limit, label)
{
	var code = "var this_value = form."+name+".value";
	eval(code);
	
	if (this_value.length > limit)
	{
		return "The maximum length for "+label+" is "+limit+" characters.\nThe current length is "+this_value.length+" characters.";
	}
	else
	{
		return "valid";
	}
}

function validate_number(form, name, decimals, label)
{
	var code = "var this_value = form."+name+".value";
	eval(code);
	
	if (Math.round(this_value) || Math.round(this_value) == 0)
	{
		return "valid";
	}	
	else
	{
		return "The value for "+label+" must be a number.";
	}
}

function validate_decimals(form, name, decimals, label)
{
	//the value has already been validated to make sure it is a number
	//now we just check for the length after the deciaml point
	
	var code = "var this_value = form."+name+".value";
	eval(code);
	
	if (this_value.indexOf(".") == -1)
	{
		return "valid";
	}
	
	var split_number = this_value.split(".");
	
	if (split_number[1].length > decimals || split_number.length > 2)
	{	
		if (decimals == 0)
		{
			return "The value for "+label+" must be a number with no decimal places.";
		}
		else if (decimals == 1)
		{
			return "The value for "+label+" must be a number with up to 1 decimal place.";
		}
		else
		{
			return "The value for "+label+" must be a number with up to "+decimals+" decimal places.";
		}
	}
	else
	{
		return "valid";
	}	
}

function validate_min(form, name, minimum, type, label)
{
	var code = "var this_date = form."+name+"_date.value; ";
		code += "var this_month = form."+name+"_month.value; ";
		code += "var this_year = form."+name+"_year.value; ";
	eval(code);
	
	
	split_datetime = minimum.split("-");
	split_date = split_datetime[2].split(" ");
	min_year = split_datetime[0];
	min_month = split_datetime[1];
	min_date = split_date[0];
	var value = new Date();
	var min_do = new Date();
	
	if (type == "Datetime_3_part")
	{		
		value.setDate(this_date);
		value.setMonth(this_month -1);
		value.setYear(this_year);
			
		min_do.setDate(min_date);
		min_do.setMonth(min_month  -1);
		min_do.setYear(min_year);
	}
	
	if (value.getTime() < min_do.getTime())
	{
		return "The date for "+label+" must be on or after "+(min_do.getMonth()+1)+"/"+min_do.getDate()+"/"+min_do.getFullYear();
	}
	else 
	{
		return "valid";
	}
}


/* ------------------------------------------------------------------------- */


function check_checkboxes(box_array)
{
	for (var i=0; i <box_array.length; i++)
	{
		document.getElementById(box_array[i]).checked = true;
	}
}

function uncheck_checkboxes(box_array)
{
	for (var i=0; i <box_array.length; i++)
	{
		document.getElementById(box_array[i]).checked = false;
	}
}

function reset_selects(id_array)
{
	for (var i=0; i <id_array.length; i++)
	{
		document.getElementById(id_array[i]).value = null;
	}
}

function add_inputs(form_id, vars_array, type)
{
	if (!type)
	{
		type = 'hidden';
	}
	
	var form = document.getElementById(form_id);
	
	
	for (var name in vars_array)
	{
		
		var value = vars_array[name];
		var new_input = document.createElement('input');
		new_input.type = type;
		new_input.name = name;
		new_input.value = value;
		form.appendChild(new_input);
	}
}