/***************************************************************************
# File: lib_form_effects.js - JavaScript Form Effects
# Version: 1.2.2 dev
***************************************************************************/

/**** Form Effects ****/
function FormEffects()
{
	if(window.bjs_debugger_flag != undefined) // Ex: debugger call >> ob_for_eff.AddDebug("debug message here")
		this.debuggr = true;

	if(document.getElementById("page_form"))
	{
		this.form_name_id = document.getElementById("page_form");
		this.form_inputs = this.form_name_id.getElementsByTagName("INPUT");
		this.form_textareas = this.form_name_id.getElementsByTagName("TEXTAREA");
		this.form_selects = this.form_name_id.getElementsByTagName("SELECT");
		this.form_labels = this.form_name_id.getElementsByTagName("LABEL");
	}

	this.required_field_class = "field_required";
	this.copy_fields_class = "copy_field";
	this.check_fields_class = "brbn_chk_all";
	this.clear_field_class ="field_clear";
	this.clear_field_onfocus_class ="field_clear_onfocus";
	
	this.value_color = "#000000";
	this.required_color = "red";
	this.default_required_color = "#C0C0C0";
	
	this.required_fields = new Array();
	this.required_fields_special = new Array();
	this.submit_buttons = new Array();
	
	return this;
}


// Method -- Should we debug?
FormEffects.prototype.AddDebug = function(in_line)
{
	if(ob_for_eff.debuggr)
		ob_win_bjs.AddItem(in_line);
}


// Method -- Init required fields
FormEffects.prototype.RequiredFieldsInit = function()
{
	for(var i=0; i < ob_for_eff.form_inputs.length; i++)
	{
		if(ob_for_eff.form_inputs[i].className.match(ob_for_eff.required_field_class))
		{
			if(ob_for_eff.form_inputs[i].type == "text")
			{
				ob_for_eff.required_fields.push(ob_for_eff.form_inputs[i]);
			}
			else if(ob_for_eff.form_inputs[i].type == "password")
			{
				ob_for_eff.required_fields.push(ob_for_eff.form_inputs[i]);
			}
			else if(ob_for_eff.form_inputs[i].type == "file")
			{
				ob_for_eff.required_fields.push(ob_for_eff.form_inputs[i]);
			}
			else if(ob_for_eff.form_inputs[i].type == "radio")
			{
				// need to check that one of the radio buttons is clicked
				// and if not, maybe border the container they're in
			}
		}
		else if(ob_for_eff.form_inputs[i].type == "submit")
		{
			ob_for_eff.submit_buttons.push(ob_for_eff.form_inputs[i]);
		}
	}
	
	for(var i=0; i < ob_for_eff.form_textareas.length; i++)
	{
		if(ob_for_eff.form_textareas[i].className.match(ob_for_eff.required_field_class))
			ob_for_eff.required_fields.push(ob_for_eff.form_textareas[i]);
	}
}


// Method -- Init form submits for required fields
FormEffects.prototype.FormSubmitInit = function()
{
	ob_for_eff.form_name_id.onsubmit = ob_for_eff.FormSubmitValidate;
}
	// Method -- Validate form submits for required fields
	FormEffects.prototype.FormSubmitValidate = function()
	{
		var valid_form = true;
		var current_field_id;
		var focus_field;
		
		for(var i=0; i < ob_for_eff.required_fields.length; i++)
		{
			current_field_id = document.getElementById(ob_for_eff.required_fields[i].id);
			current_field_id.style.borderColor = ob_for_eff.default_required_color;
			
			current_field_id.value = current_field_id.value.replace(/^\s+|\s+$/g, '');
			
			if(current_field_id.value == "" || current_field_id.value == null)
			{
				current_field_id.style.borderColor = ob_for_eff.required_color;
				valid_form = false;
			}
		}
		
		if(valid_form === false)
		{
			document.getElementById("required_field_box").style.color = ob_for_eff.required_color;
			window.location = "#" + "required_field_box";
			return false;
		}
		else
		{
			/* for(var i=0; i < ob_for_eff.submit_buttons.length; i++)
			{
				document.getElementById(ob_for_eff.submit_buttons[i].id).disabled = true;
			} */
		
			return true;
		}
	}


// Method -- Init the check alls
FormEffects.prototype.CheckAllInit = function()
{
	for(var i=0; i < ob_for_eff.form_inputs.length; i++)
	{
		if(ob_for_eff.form_inputs[i].type == "checkbox")
		{
			if(ob_for_eff.form_inputs[i].className.match(ob_for_eff.check_fields_class))
				ob_for_eff.form_inputs[i].onclick = ob_for_eff.CheckAllBoxes;
		}
	}
	
}
	// Method -- Check all the boxes
	FormEffects.prototype.CheckAllBoxes = function()
	{
		if(this.checked === true)
			var check_them = true;
		else
			var check_them = false;

		for(var i=0; i < ob_for_eff.form_inputs.length; i++)
		{
			if(ob_for_eff.form_inputs[i].type == "checkbox")
			{
				if(ob_for_eff.form_inputs[i].className.match(this.id) && ob_for_eff.form_inputs[i].disabled == false)
					ob_for_eff.form_inputs[i].checked = check_them;
			}
		}
	}


// Method -- Init the click fields
FormEffects.prototype.ClickFieldsInit = function()
{
	for(var i=0; i < ob_for_eff.form_inputs.length; i++)
	{
		if(ob_for_eff.form_inputs[i].className.match("brbn_click_option"))
			ob_for_eff.form_inputs[i].onchange = ob_for_eff.ClickFields;

		if(ob_for_eff.form_inputs[i].className.match("brbn_change_option"))
			ob_for_eff.form_inputs[i].onclick = ob_for_eff.ClickFields;
	}

}
	// Method -- Click the fields
	FormEffects.prototype.ClickFields = function()
	{
		var field_ids = this.alt.split(" ");
		for(var i=0; i < ob_for_eff.form_inputs.length; i++)
		{
			if(ob_for_eff.form_inputs[i].type == "checkbox" || ob_for_eff.form_inputs[i].type == "radio")
			{
				for (var j=0; j<field_ids.length; j++)
				{
					// ob_for_eff.AddDebug(ob_for_eff.form_inputs[i].id + " vs. " + field_ids[j]);
					if(ob_for_eff.form_inputs[i].id == field_ids[j])
						ob_for_eff.form_inputs[i].checked = true;
				}
			}
		}
	}


// Method -- Init the copy form fields
FormEffects.prototype.CopyFormFieldsInit = function()
{
	for(var i=0; i < ob_for_eff.form_inputs.length; i++)
	{
		if(ob_for_eff.form_inputs[i].className.match(ob_for_eff.copy_fields_class))
			ob_for_eff.form_inputs[i].onclick = ob_for_eff.CopyFormFields;
	}
}
	// Method -- Copy the form fields from one to another
	FormEffects.prototype.CopyFormFields = function()
	{
		var holding_tank = new Array();
		var copy_from_split = this.id.split(".");
		var copy_from_dot = "\\." + copy_from_split[1];
		var copy_to = this.alt;
		var copy_to_dot = "\\." + this.alt;
		
		current_button_id = document.getElementById(this.id);
	
		if(this.alt != "new")
		{
			for(var i=0; i < ob_for_eff.form_inputs.length; i++)
			{
				if(ob_for_eff.form_inputs[i].id.match(copy_from_dot))
				{
					var field_split = ob_for_eff.form_inputs[i].id.split(".");
					
					if(document.getElementById(field_split[0] + "." + copy_to) != undefined)
					{
						var current_field_id = document.getElementById(field_split[0] + "." + copy_to);
						current_field_id.value = ob_for_eff.form_inputs[i].value;
						current_field_id.style.color = ob_for_eff.value_color;
					}
				}
			}
		}
		else
		{
			for(var i=0; i < ob_for_eff.form_inputs.length; i++)
			{
				if(ob_for_eff.form_inputs[i].id.match(copy_to_dot))
					document.getElementById(ob_for_eff.form_inputs[i].id).style.color = ob_for_eff.value_color;
			}
		}
	}


// Method -- Clears the form fields on page load
FormEffects.prototype.ClearFormFields = function()
{
	// Clears form fields with "field_clear" class on page loads
	// Only works on input=text, selects and textareas
	
	for(var i=0; i < ob_for_eff.form_inputs.length; i++)
	{
		if(ob_for_eff.form_inputs[i].className.match(ob_for_eff.clear_field_class))
			document.getElementById(ob_for_eff.form_inputs[i].id).value = "";
	}

	for(var i=0; i < ob_for_eff.form_textareas.length; i++)
	{
		if(ob_for_eff.form_textareas[i].className.match(ob_for_eff.clear_field_class))
			document.getElementById(ob_for_eff.form_textareas[i].id).value = "";
	}
	
	for(var i=0; i < ob_for_eff.form_selects.length; i++)
	{
		if(ob_for_eff.form_selects[i].className.match(ob_for_eff.clear_field_class))
			document.getElementById(ob_for_eff.form_selects[i].id).selectedIndex = 0;
	}
}


// Method -- Clears the form fields and then submits the form
FormEffects.prototype.ClearFormAndSubmitInit = function()
{
	// Clears form fields with "field_clear" class when clicked by an anchor with appropriate class -- "clear_and_submit"
	// Only works on input=text, selects and textareas

	var match_class = "clear_and_submit";
	var kids = document.getElementsByTagName("A");
	
	for(var i=0; i < kids.length; i++)
	{
		if(kids[i].className.match(match_class))
			kids[i].onclick = ob_for_eff.ClearFormAndSubmit;
	}
}
	FormEffects.prototype.ClearFormAndSubmit = function()
	{
		ob_for_eff.ClearFormFields();
		ob_for_eff.form_name_id.submit();
		
		return false;
	}


// Method -- Init clearing the form fields on focus
FormEffects.prototype.ClearFormFieldsOnFocusInit = function()
{
	// ob_for_eff.AddDebug("Executing >> ClearFormFieldsOnFocusInit");
	
	var all_form_inputs = document.getElementsByTagName("INPUT");
	var all_form_textareas = document.getElementsByTagName("TEXTAREA");
	
	for(var i=0; i < all_form_inputs.length; i++)
	{
		if(all_form_inputs[i].className.match(ob_for_eff.clear_field_onfocus_class))
		{
			if(all_form_inputs[i].type == "text" || all_form_inputs[i].type == "password")
			{
				all_form_inputs[i].onfocus = this.ClearFormFieldsOnFocus;
				all_form_inputs[i].onblur = this.ResetFormFieldsOnBlur;
			}
		}
	}

	for(var i=0; i < all_form_textareas.length; i++)
	{
		if(all_form_textareas[i].className.match(ob_for_eff.clear_field_class))
		{
			all_form_textareas[i].onfocus = this.ClearFormFieldsOnFocus;
			all_form_textareas[i].onblur = this.ResetFormFieldsOnBlur;
		}
	}
}
	// Method -- Clears the form fields on focus
	FormEffects.prototype.ClearFormFieldsOnFocus = function()
	{
		var current_field = document.getElementById(this.id);
		if(current_field.defaultValue == current_field.value)
			current_field.value = "";
	}
	
	// Method -- Resets the form fields on blur if the value hasn't changed from the default
	FormEffects.prototype.ResetFormFieldsOnBlur = function()
	{
		var current_field = document.getElementById(this.id);
		if(current_field.value == "")
			current_field.value = current_field.defaultValue;
	}


// Method -- Init the switch field from one type to another fields
FormEffects.prototype.SwitchFieldTypeInit = function()
{
	// ob_for_eff.AddDebug("Executing >> SwitchFieldTypeInit");
	var match_class = "switch_field_type";
	var all_form_inputs = document.getElementsByTagName("INPUT");
	
	for(var i=0; i < all_form_inputs.length; i++)
	{
		if(all_form_inputs[i].className.match(match_class))
			all_form_inputs[i].onfocus = this.SwitchFieldTypeFocus;
	}
}
	// Method -- Switch the field from one type to another
	FormEffects.prototype.SwitchFieldTypeFocus = function()
	{
		// ob_for_eff.AddDebug("Executing >> SwitchFieldTypeFocus");
		field_params = this.alt.split(".");
		
		var current_input_tag = document.getElementById(this.id);
		var new_input_tag = document.createElement("input");

		// for(i=0; i < 10; i++) ob_for_eff.AddDebug("current_input_tag.attributes[i].nodeName = " + current_input_tag.attributes[i].nodeName);

		new_input_tag.setAttribute("type", field_params[0]);
		new_input_tag.setAttribute("name", current_input_tag.name);
		new_input_tag.setAttribute("value", current_input_tag.value);
		new_input_tag.setAttribute("size", current_input_tag.size);
		new_input_tag.setAttribute("class", current_input_tag.className);
		new_input_tag.setAttribute("id", current_input_tag.id);
		new_input_tag.setAttribute("alt", current_input_tag.alt);
		
		if(field_params[1] == "clear_yes")
			new_input_tag.setAttribute("value", "");
		
		current_input_tag.parentNode.insertBefore(new_input_tag, current_input_tag);
		current_input_tag.parentNode.removeChild(current_input_tag);
		new_input_tag.focus();
		
		ob_for_eff.AddDebug("testing_testing.innerHTML")
	}






// Method -- 
FormEffects.prototype.UpdateFieldFromIdInit = function()
{
	// Tested only on IMGs updating INPUTs

	var match_class = "update_field_from_id";
	var kids = document.getElementsByTagName("*");
	
	for(var i=0; i < kids.length; i++)
	{
		if(kids[i].className.match(match_class))
			kids[i].onclick = ob_for_eff.UpdateFieldFromId;
	}
}
	FormEffects.prototype.UpdateFieldFromId = function()
	{
		field_split = this.id.split(".");
		document.getElementById(field_split[1]).value = field_split[0];
		
		if(this.alt)
		var ele_id = document.getElementById(this.id)
		
		.style.borderColor = "red";
		
		return false;
	}



