//-------------------------------------------------------------------------------------------------
// formDefaults.js
//
// Sonalksis, 2009
//-------------------------------------------------------------------------------------------------

var fieldArray;
var ERROR_MISSING_FIELD     = 'missing_field';
var ERROR_INCORRECT_FIELD   = 'incorrect_field';
var DEFAULT_FIELD_COLOR     = '#3D3D3D';
var IMG_MISSING_FIELD       = 'url(images/icon_error_red.png)';
var IMG_INCORRECT_FIELD     = 'url(images/icon_error_yellow.png)';


function initForm()
{
	var fields = getFormFields();
	initDefaults(fields);
	styleErrors(fields);
	displayNav();
}

function fieldOn(field)
{
	if (field.value == getDefaultFormValue(field))
	{
		field.value          = '';
		field.style.color    = 'inherit';
	}
}

function fieldOff(field)
{
	if (field.value == '')
	{

		field.value          = getDefaultFormValue(field);

		field.style.color    = DEFAULT_FIELD_COLOR;
	}
}

function getFormFields()
{
	fieldArray = new Array();
	var numFields = 0;
	var inputElements = document.getElementsByTagName('input');
	
	for (var i = 0; i < inputElements.length; i++)
	{
		var field = inputElements[i];
		
		if (field.type == 'text')
		{
			if (field.value != null)
			{
				fieldArray.push(field);
				numFields++;
			}
		}
	}
	
	var textAreaElements = document.getElementsByTagName('textarea');
	
	for (var i = 0; i < textAreaElements.length; i++)
	{
		var field = textAreaElements[i];
		
		if (field.value != null)
		{
			fieldArray.push(field);
			numFields++;
		}
	}

	var selectElements = document.getElementsByTagName('select');
	
	for (var i = 0; i < selectElements.length; i++)
	{
		var field = selectElements[i];
		
		if (field.value != null)
		{
			fieldArray.push(field);
			numFields++;
		}
	}
	
	return fieldArray;
}

function getDefaultFormValue(field)
{
	if (field.tagName != 'SELECT')
	{
		var message;

		var str = "message = defaults." + field.name;
		
		eval(str);

		if (message == null)
		{
			alert("No message for field:" + field.name);
		}
		
		return message;
	}
	else
	{
		return '0';
	}	
}

// remove any present default values
// call from submit onclick event so that validation can catch empty fields
function clearDefaults()
{
	var fields = getFormFields();
	
	for (var i = 0; i < fields.length; i++)
	{
		var field = fields[i];
		
		if (field.value == getDefaultFormValue(field))
		{
			field.value = '';
		}
	}
	
	var submit     = document.getElementById('purchaseNext');
	var processing = document.getElementById('processing');
	
	if ((submit != null) && (processing != null))
	{
		submit.style.visibility = 'hidden'
		processing.innerHTML = '<div><p>Processing...</p>';
	}

}


function initDefaults(fields)
{
	for (var i = 0; i < fields.length; i++)
	{
		var field = fields[i];
		
		var defaultValue = getDefaultFormValue(field);
		
		if ((field != null) && (defaultValue != null))
		{
			if (field.value == '' || field.value == defaultValue)
			{
				field.value       = defaultValue;
				field.style.color = DEFAULT_FIELD_COLOR;
			}
		}
	}
}

function styleErrors(fields)
{
	for (var i = 0; i < fields.length; i++)
	{
		var field    = fields[i];
		
		var errorId = field.id + '.errors';

		var error   = document.getElementById(errorId);

		if (error != null)  // error div exists, style field/icon accordingly
		{
			var errorType = getErrorType(field);
			
			if (errorType != null)
			{
				if (errorType == ERROR_MISSING_FIELD)
				{
					if (field.tagName != 'SELECT')
					{
						
						field.style.backgroundImage = IMG_MISSING_FIELD;
					}
					else
					{
						error.style.backgroundImage = IMG_MISSING_FIELD;
					}
				}
				
				if (errorType == ERROR_INCORRECT_FIELD)
				{
					if (field.tagName != 'SELECT')
					{
						
						field.style.backgroundImage = IMG_INCORRECT_FIELD;
					}
					else
					{
						error.style.backgroundImage = IMG_INCORRECT_FIELD;
					}
				}
				
				//field.style.backgroundPosition = 'center right';
				//field.style.backgroundRepeat   = 'no-repeat';
				//field.style.borderColor        = '#801815';
			}
				
		}
	}
}

function getErrorType(field)
{
	if ((errors != null) && (field != null))
	{
		var errorType;

		//var fieldName = field.name.replace('.','_');
		
		//alert(fieldName);
		
		var str;
		
		if (eval("errors."+field.name) != null)
		{
			str = "errorType = errors." + field.name;
			
			eval(str);

			if (errorType == null || errorType == "")
			{
				alert("No errorType for field:" + field.name);
				return null;
			}
			
			return errorType;
		}
		else
		{
			alert('errors.'+field.name+' does not exist');
			return null;
		}
	}
	else
	{
		alert('errors object is null');
		return null;
	}
}
