var arr_szMandatoryFieldIDs = null;
var arr_szMandatoryFieldLabels = null;
var arr_szMandatoryFieldTypes = null;
var CurrentArrayIndex = 0;

var CTL_TYPE_TEXT_BOX = "1";
var CTL_TYPE_RADIO = "2";
var CTL_TYPE_CHECK_BOX = "3";
var CTL_TYPE_COMBO_BOX = "4";
var CTL_TYPE_DATE_PICKER = "5";
var CTL_TYPE_LIST_BOX = "12";
var CTL_TYPE_LIST_BOX_MULTI = "13";
var CTL_TYPE_CHECK_BOX_MULTI = "14";
var CTL_TYPE_TEXTAREA = "15";


function Validate()
{
	if(arr_szMandatoryFieldIDs == null)
	{
		return true;
	}

	var FieldName;
	var FieldLabel;
	var FieldType;
	var max = arr_szMandatoryFieldIDs.length;
	var el = null;
	var ErrorMsg = "";
	var x = 0;

	for(; x < max; x++)
	{
		FieldID		= arr_szMandatoryFieldIDs[x];
		FieldType	= arr_szMandatoryFieldTypes[x];
		FieldLabel	= arr_szMandatoryFieldLabels[x];
		element		= document.getElementById(FieldID);
		var bCreateErr = false;

		if(element == null)
		{
			alert("Validation error - the field '" + FieldID + "' with the label '" +
				FieldLabel + "' was not found by document.getElementById.");
			return false;
		}
		switch(FieldType)
		{
			case CTL_TYPE_DATE_PICKER:
			case CTL_TYPE_TEXTAREA:
			case CTL_TYPE_TEXT_BOX:
			{
				if(element.value == "")
				{
					bCreateErr = true;
				}
				break;
			}
			case CTL_TYPE_LIST_BOX_MULTI:
			case CTL_TYPE_COMBO_BOX:
			case CTL_TYPE_LIST_BOX:
			{
				if(element.selectedIndex == null || element.selectedIndex < 0)
				{
					bCreateErr = true;
				}
				break;
			}
			case CTL_TYPE_CHECK_BOX_MULTI:
			case CTL_TYPE_RADIO:
			{
				var buttons = document.getElementsByName(FieldID);
				var selected = false;
				for(var y = 0; y < buttons.length; y++)
				{
					if(buttons[y].checked == true)
					{
						selected = true;
						break;
					}
				}
				bCreateErr = !(selected);
				break;
			}
		}
		if(bCreateErr)
		{
			ErrorMsg += "\n'" + FieldLabel + "' is a required field.";
		}
		if(FieldLabel == 'Email Address')
		{
			var oRegExp = /^[\w\.\-]+@[\w\.\-]+\.\w{2,3}$/;
			if(!oRegExp.test(element.value))
			{
				ErrorMsg += "\n'" + FieldLabel + "' is not valid.";
			}
		}
	}
	if(ErrorMsg != "")
	{
		ErrorMsg = "Validation failed for the following reasons.\n" + ErrorMsg;
		alert(ErrorMsg);
		return false;
	}
	else
	{
		return true;
	}
}
function openDatePicker(szTargetControl)
{
	var mWinHandle =
		window.open("DateTimePicker.aspx?Target=" + szTargetControl, "DateTimePicker",
		"toolbar=no,menubar=no,resizable=no,titlebar=no,scrollbars=no,location=no,status=no," +
		"directories=no,width=280,height=300");
}
function setDate(szTarget, dtDate, dtTime)
{
	var element = document.getElementById(szTarget);
	var value = dtDate + " " + dtTime;
	element.innerText = value;
}
function WriteRegistrationErrors()
{
	// display error data, if any
	var x = 0;
	if(sErrorData == "")
	{
		return;
	}
	var sOutput = "";
	var arrErrorData = sErrorData.split("|");
	var count = arrErrorData.length;
	if(count > 1)
	{
		sOutput += "<TABLE border='0' width='100%' cellpadding='0' cellspacing='0' align='center' valign='top'>";
		sOutput += "<TR><TD><p align='center'>We were unable to process <br>your registration due to the following errors.";
		sOutput += "</p></td></tr><tr><td><p>&nbsp;</p></td></tr><tr><td><p>&nbsp;</p></td></tr>";
		sOutput += "<TR><TD><TABLE border='0' cellpadding='0' cellspacing='0' align='center'>";

		while(x < count)
		{
			// ignore the first of each pair - it is the id for the metric
			x++;
			sOutput += "<TD><p align='center'><font color='Red'>";
			sOutput += arrErrorData[x] + "</p></font></TD></TR>";
			x++;
		}
		sOutput += "</TD></TR></TABLE>";
		document.write(sOutput);
	}
}
function WriteErrorMessage()
{
	if(sGeneralError == "")
	{
		return;
	}
	var sOutput = "<TR><TD width='100%' cellspacing='0' cellpadding='0' border='0'>" +
					"<p align='center'><font color='red'>" + sGeneralError + "</font></p></td></tr>";
	document.write(sOutput);
}
function GetFormData()
{
	var arrFormDataItems = sFormData.split(";");
	var lItemsCount		 = arrFormDataItems.length - 1;
	var index			 = 0;
	var sOutput			 = "";

	if(lItemsCount < 1)
	{
		document.write("<p>Unable to build form - no items in string");
		return;
	}

	sOutput += "<FORM method='post' action='" + sFormAction + "' name='RegForm' onsubmit=return(Validate())>";
	sOutput += "<TABLE cellSpacing='' cellPadding='4' " + "width='100%' border='0' align='left'>";

	var sName = "",
		sControlText = "",
		sType = "",
		sOptionID = "",
		sOptionText = "",
		sValue = "",
		sMandatory = "",
		sValid = "",
		sMsg = "";
	var lID = -1;
	var bIncludeValue = true,
		bCloseTableRow = true,
		bFinishTag = true,
		bAddIDAndName = true;
	var lCurID = 0;

	while(index < lItemsCount)
	{
		sOutput += "<TR><TD width='40%' align='left' valign='top'>";
		if(arrFormDataItems.length - index < 7)
		{
			document.write("<p>Could not build form - not enough items left in form data");
			document.write("<p>arrFormDataItems.length: " + arrFormDataItems.length);
			document.write("<p>index: " + index);
			document.write("<TEXTAREA width='100%' rows='30'>" + sOutput + "</TEXTAREA>");
			return;
		}
		bFinishTag = true;
		bIncludeValue = true;
		bCloseTableRow = true;
		bAddIDAndName = true;
		bMultiSelect = true;

		lID			= arrFormDataItems[index];
		sName		= "Metric_" + lID;
		sControlText= arrFormDataItems[++index];
		sType		= arrFormDataItems[++index];
		sOptionID	= arrFormDataItems[++index];
		sOptionText	= arrFormDataItems[++index];
		sValue		= arrFormDataItems[++index];
		sMandatory	= arrFormDataItems[++index];
		sValid		= arrFormDataItems[++index];
		sMsg		= arrFormDataItems[++index];

		if(sMandatory == "1")
		{
			if(arr_szMandatoryFieldIDs == null)
			{
				arr_szMandatoryFieldIDs = new Array();
				arr_szMandatoryFieldLabels = new Array();
				arr_szMandatoryFieldTypes = new Array();
			}
			arr_szMandatoryFieldIDs[CurrentArrayIndex] = sName;
			arr_szMandatoryFieldLabels[CurrentArrayIndex] = sControlText;
			arr_szMandatoryFieldTypes[CurrentArrayIndex] = sType;
			CurrentArrayIndex++;
		}

		sOutput += sControlText + "</td><td width='60%' align='left' valign='top'>";

		switch(sType)
		{
			case CTL_TYPE_TEXT_BOX: // Text Box
			{
				sOutput += "<p align='left'><input style='width=100%' type='text' ";
				break;
			}
			case CTL_TYPE_RADIO: // Radio Buttons
			{
				bContinueProcessing = true;
				var CurRadioIndex = 0;
				lCurID = lID;
				bIncludeValue = false;
				bAddIDAndName = false;

				while(bContinueProcessing)
				{
					sOutput += "<input type='radio' id='" + sName +
						"' name ='" + sName + "' value='" + sOptionID + "'";
					bFinishTag = false;
					if(sValue == "1")
					{
						sOutput += "CHECKED ";
					}
					sOutput += ">" + sValue + "<br>";

					if(index < lItemsCount)
					{
						lID = arrFormDataItems[++index];
						if(lCurID == lID)
						{
							sName		= "Metric_" + lID;
							sCurrentName= sName + "_radio" + CurRadioIndex;
							sControlText= arrFormDataItems[++index];
							sType		= arrFormDataItems[++index];
							sOptionID	= arrFormDataItems[++index];
							sOptionText	= arrFormDataItems[++index];
							sValue		= arrFormDataItems[++index];
							sMandatory	= arrFormDataItems[++index];
							sValid		= arrFormDataItems[++index];
							sMsg		= arrFormDataItems[++index];
							CurRadioIndex++;
						}
						else
						{
							index--;
							bContinueProcessing = false;
						}
					}
					else
					{
						bContinueProcessing = false;
					}
				}
				break;
			}
			case CTL_TYPE_CHECK_BOX: // check boxes
			{
				sOutput += "<p align='left'><input type='checkbox' ";
				bIncludeValue = false;
				if(sValue == "1")
				{
					sOutput += "CHECKED ";
				}
				break;
			}
			case CTL_TYPE_COMBO_BOX: // drop-down list
			{
				bIncludeValue = false;
				bAddIDAndName = false;
				bFinishTag = false;
				sOutput += "<p align='left'><SELECT style='width=100%' id='" + sName +
					"' name='" + sName + "'>";
				sOutput += "<OPTION";

				if(sValue == "1")
				{
					sOutput += " selected ";
				}
				sOutput += " value='" + sOptionID + "'>" + sValue + "</OPTION>";

				lCurID = lID;
				bContinueProcessing = true;

				// get options
				while(bContinueProcessing)
				{
					if(index < lItemsCount)
					{
						lID = arrFormDataItems[++index];

						if(lCurID == lID)
						{
							sName		= "Metric_" + lID;
							sControlText= arrFormDataItems[++index];
							sType		= arrFormDataItems[++index];
							sOptionID	= arrFormDataItems[++index];
							sOptionText	= arrFormDataItems[++index];
							sValue		= arrFormDataItems[++index];
							sMandatory	= arrFormDataItems[++index];
							sValid		= arrFormDataItems[++index];
							sMsg		= arrFormDataItems[++index];

							sOutput += "<OPTION";
							if(sValue == "1")
							{
								sOutput += " selected ";
							}
							sOutput += " value='" + sOptionID + "'>" + sValue + "</OPTION>";
						}
						else
						{
							index--;
							bContinueProcessing = false;
						}
					}
					else
					{
						break;
					}
				}
				sOutput += "</SELECT>";
				break;
			}
			case CTL_TYPE_DATE_PICKER: // date-picker
			{
				sOutput += "<p align='left'><input type='text' style='width=100%' id='" +
					sName + "' name='" + sName + "'></p>";
				sOutput += "</td><td width='5%'>";
				sOutput += "<img border='0' src='../images/calendar.gif' " +
					"onclick=openDatePicker('" + sName + "') name='" + sName +
					"_Img' id='" + sName + "_Img'></td><TD width='5%'>";
				bIncludeValue = false;
				bAddIDAndName = false;
				bCloseTableRow = false;
				bFinishTag = false;
				break;
			}
			case CTL_TYPE_LIST_BOX: // list box (select-one)
			{
				// just set this var and fall through - next case handler does both
				bMultiSelect = false;
			}
			case CTL_TYPE_LIST_BOX_MULTI: // list box (select-multiple)
			{
				var lMaxSize = 12,
					lSize	 = 1;
				var sOptionsHtml = "",
					sFirstOptionHtml = "";

				sOutput += "<P align='left'><SELECT id='" + sName +
					"' name='" + sName + "' ";
				if(bMultiSelect)
				{
					sOutput += "multiple ";
				}
				sOutput += "style='WIDTH: 100%;'";
				sFirstOptionHtml  = "<option value='" + sOptionID + "'>" + sValue;
				sFirstOptionHtml += "</option>";

				// build options
				bContinueProcessing = true;
				lCurID = lID;

				while(bContinueProcessing)
				{
					if(index < lItemsCount)
					{
						lCurID = arrFormDataItems[++index];
						if(lCurID == lID)
						{
							lSize++;
							sControlText  = arrFormDataItems[++index];
							sType		  = arrFormDataItems[++index];
							sOptionID	  = arrFormDataItems[++index];
							sOptionText	  = arrFormDataItems[++index];
							sValue		  = arrFormDataItems[++index];
							sMandatory	  = arrFormDataItems[++index];
							sValid		  = arrFormDataItems[++index];
							sMsg		  = arrFormDataItems[++index];

							sOptionsHtml += "<option value='" + sOptionID + "'>" + sValue;
							sOptionsHtml += "</option>";
						}
						else
						{
							index--;
							bContinueProcessing = false;
						}
					}
					else
					{
						index--;
						bContinueProcessing = false;
					}
				}

				if(lSize > lMaxSize)
				{
					lSize = lMaxSize;
				}
				sOutput += "size='" + lSize + "'>";
				sOutput += sFirstOptionHtml + sOptionsHtml + "</SELECT>";
				bIncludeValue = false;
				bAddIDAndName = false;
				bFinishTag = false;
				break;
			}
			case CTL_TYPE_CHECK_BOX_MULTI: // checkbox group
			{
				bContinueProcessing = true;
				var CurRadioIndex = 0;
				lCurID = lID;
				bIncludeValue = false;
				bAddIDAndName = false;

				while(bContinueProcessing)
				{
					sOutput += "<input type='checkbox' id='" + sName +
						"' name ='" + sName + "' value='" + sOptionID + "'";
					bFinishTag = false;
					if(sValue == "1")
					{
						sOutput += "CHECKED ";
					}
					sOutput += ">" + sValue + "<br>";

					if(index < lItemsCount)
					{
						lID = arrFormDataItems[++index];
						if(lCurID == lID)
						{
							sName		= "Metric_" + lID;
							sCurrentName= sName + "_chbox" + CurRadioIndex;
							sControlText= arrFormDataItems[++index];
							sType		= arrFormDataItems[++index];
							sOptionID	= arrFormDataItems[++index];
							sOptionText	= arrFormDataItems[++index];
							sValue		= arrFormDataItems[++index];
							sMandatory	= arrFormDataItems[++index];
							sValid		= arrFormDataItems[++index];
							sMsg		= arrFormDataItems[++index];
							CurRadioIndex++;
						}
						else
						{
							index--;
							bContinueProcessing = false;
						}
					}
					else
					{
						bContinueProcessing = false;
					}
				}
				break;
			}
			case CTL_TYPE_TEXTAREA: // textarea
			{
				bAddIDAndName = false;
				bIncludeValue = false;
				bFinishTag = false;
				sOutput += "<TEXTAREA style='width=100%' id='" + sName + "' name='" + sName + "'></TEXTAREA>";

				break;
			}
			default:
			{
				sOutput += "Control type not specified correctly. Type = " + sType;
			}
			index++;
		}
		if(bAddIDAndName)
		{
			sOutput += "id='" + sName + "' name='" + sName + "' ";
		}
		if(bIncludeValue)
		{
			sOutput += "value='" + sValue + "'";
		}
		if(bFinishTag)
		{
			sOutput += ">";
		}
		if(sValid != "1")
		{
			sOutput += sMsg;
		}
		if(bCloseTableRow)
		{
			//sOutput += "</TD><TD width='5'>&nbsp;</TD><TD width='10'>";
			sOutput += "</TD><TD width='10'>";
		}
		if(sMandatory == "1")
		{
			sOutput += "<font color='#9c0000'>*</font>";
			if(sType == "5")
			{
				bReadyToSubmit = false;
			}
		}
		else
		{
			sOutput +="&nbsp;";
		}
		sOutput += "</TD></TR>";
		index++;
	}

	if(sHasMail != null && sHasMail == "True")
	{
		// add the opt-out checkbox
		sOutput += "<tr><td colspan='2'>&nbsp;</td></tr>";
		sOutput += "<tr><td align='center' width='100%' colspan='2' align='left'>" +
			"<input type='checkbox' id='chkOptIn' name='chkOptIn' CHECKED>" +
			"&nbsp;&nbsp;You can contact me by email to confirm my registration.</input></td></tr>";
		sOutput += "<tr><td colspan='2'>&nbsp;</td></tr>";
	}

	// build the submit and reset buttons
	//sOutput += "<TR><TD colspan='4'>&nbsp;</TD>";
	sOutput += "<TR><TD colspan='3' align='center' valign='top'>";
	
	sOutput += "<INPUT type='image' src='/templates/qsrmagazine/button_submit.gif' id='Submit1' name='Submit1' alt='Submit'>";
	sOutput += "&nbsp;&nbsp;&nbsp;&nbsp;";	
	sOutput += "<INPUT type='image' src='/templates/qsrmagazine/button_reset.gif' id='Reset1' name='Reset1' alt='Reset'></TD>";
	sOutput += "<INPUT id='WebcastID' type='hidden' name='WebcastID' value='" + sWebcastID + "'>";
	sOutput += "<INPUT id='MetricGroup' type='hidden' " + "name='MetricGroup' value='" + sMetricGroup + "'>";
	sOutput += "</TD></TR></TABLE></TD></TR>";
	sOutput += "</FORM>";

	// use for testing
	//sOutput = "<TEXTAREA rows=20>" + sOutput + "</TEXTAREA>";
	document.write(sOutput);
}
