﻿/// <summary>
/// Restore posted values to html form
/// </summary>
/// <param name="namesId">Element names input hidden id</param>
/// <param name="valuesId">Element values input hidden id</param>
function mp_RestoreFormValues(namesId, valuesId)
{
	// Retrieve hidden objects from id
	var objNames = document.getElementById(namesId);
	var objValues = document.getElementById(valuesId);
	
	// Check posted values
	if ( objValues == null || objValues.value == '' )
		return;
	
	var arrNames = mp_GetArrayElementNames(objNames.value);
	
	// Split values with (_) separator chatacter
	// String pattern = (Value)_(Value)_..._(Value)
	// e.g. 11_45,58,45,44,2_(b)_textboxValue
	// 11 or textboxValue = single element such as Textbox ,DropDown and Radio
	// 45,58,45,44,2 = multiple elements such as Checkbox
	// (b) = Empty value or not changed html element
	var arrValues = objValues.value.split('_');
	
	if ( arrNames.length != arrValues.length )
		return;
	
	// Loop over array element name
	for ( var i = 0; i < arrNames.length; i++ )
	{
		// Check empty value
		if ( arrValues[i] == '(b)' )
			continue;

		// Retrieve objects from name
		var elements = document.getElementsByName(arrNames[i]);

		switch (mp_GetElementType(arrNames[i]))
		{
			// RadioButton
			case 1:
				// Loop over array radio buttons
				for ( var o = 0; o < elements.length; o++ )
					if ( elements[o].value == arrValues[i] )
					{
						elements[o].checked = true;
						break;
					}
				break;

			// CheckBox
			case 2:
				// Split checkbox values with (,) separator chatacter
				var checkboxValues = arrValues[i].split(',');
				
				// Loop over array checkbox values
				for ( var j = 0; j < checkboxValues.length; j++ )
					// Loop over array checkboxes
					for ( var o = 0; o < elements.length; o++ )
						if ( elements[o].value == checkboxValues[j] )
						{
							elements[o].checked = true;
							break;
						}
				break;

			// ComboBox
			case 3:
			// TextBox
			case 4:
			// TextArea
			case 5:
				elements[0].value = arrValues[i];
				break;
		}
	}
}

/// <summary>
/// Clear html form
/// </summary>
/// <param name="namesId">Element names input hidden id</param>
function mp_ClearForm(namesId)
{
	// Retrieve hidden object from id
	var objNames = document.getElementById(namesId);
	
	var arrNames = mp_GetArrayElementNames(objNames.value);
	
	// Loop over array element name
	for ( var i = 0; i < arrNames.length; i++ )
	{
		// Retrieve objects from name
		var elements = document.getElementsByName(arrNames[i]);
		
		switch (mp_GetElementType(arrNames[i]))
		{
			// RadioButton
			case 1:
			// CheckBox
			case 2:
				for ( var o = 0; o < elements.length; o++ )
					elements[o].checked = false;
				break;

			// ComboBox
			case 3:
			// TextBox
			case 4:
			// TextArea
			case 5:
				elements[0].value = '';
				break;
		}
	}
}

/// <summary>
/// Validation required checking
/// </summary>
/// <param name="requiredElementNames">Required element names</param>
function mp_ValidationChecking(requiredElementNames)
{
	var totalError = 0;
	var clearStyle = '1px solid #ffffff';
	var errorStyle = '1px dotted red';
	var arrNames = mp_GetArrayElementNames(requiredElementNames);
	
	// Loop over array element name
	for ( var i = 0; i < arrNames.length; i++ )
	{
		// Retrieve objects from name
		var elements = document.getElementsByName(arrNames[i]);

		switch (mp_GetElementType(arrNames[i]))
		{
			// RadioButton
			case 1:
			// CheckBox
			case 2:
				var hasChecked = false;
				var parentRow = null;
				
				for ( var o = 0; o < elements.length; o++ )
				{
					parentRow = elements[o].parentNode;
					
					if ( elements[o].checked )
					{
						hasChecked = true;
						break;
					}
				}
					
				if ( hasChecked )
				{
					if ( parentRow != null )
						parentRow.style.border = clearStyle;
				}
				else
				{
					if ( parentRow != null )
					{
						totalError++;
						parentRow.style.border = errorStyle;
					}
				}
					
				break;

			// ComboBox
			case 3:
			// TextBox
			case 4:
			// TextArea
			case 5:
				if (elements[0].value == '')
				{
					totalError++;
					
					if ( elements[0].parentNode != null )
						elements[0].parentNode.style.border = errorStyle;
				}
				else
				{
					if ( elements[0].parentNode != null )
						elements[0].parentNode.style.border = clearStyle;
				}
				
				break;
		}
	}

	if ( navigator.appName.indexOf('Explorer') != -1 )
		event.returnValue = (totalError == 0);

	return (totalError == 0);
}

/// <summary>
/// Retrieve html element type from object name
/// RadioButton = 1, CheckBox = 2, ComboBox = 3, TextBox = 4, TextArea = 5
/// </summary>
/// <param name="elementName"></param>
function mp_GetElementType(elementName)
{
	return parseInt((/_T(\d+)(?=_)/).exec(elementName)[1]);
}

/// <summary>
/// Split names with (:) separator chatacter
/// String pattern = *_T(Answer Type)_Q(Question Id):*_T(Answer Type)_Q(Question Id):...:*_T(Answer Type)_Q(Question Id)
/// e.g. ml_ctl01_formBuilder_T1_Q10:ml_ctl01_formBuilder_T2_Q11:ml_ctl01_formBuilder_T3_Q12:ml_ctl01_formBuilder_T4_Q13
/// </summary>
/// <param name="allElementNames"></param>
function mp_GetArrayElementNames(allElementNames)
{
	return allElementNames.split(':');
}
