var CheckForm_Query = new Array();
var ErrorMessage = "";

function CheckForm_AddRule(FormName, CheckFieldID, CheckFieldType, DescriptionID, CheckType, isOptional, extraField)
{
	var iIndex = CheckForm_Query.length;
	var i = 0;
	for(i = 0; i < iIndex; i++)
	{
		if(CheckForm_Query[i].CheckFieldID == CheckFieldID)
			return;
	}
	CheckForm_Query[iIndex] = new Object();
	CheckForm_Query[iIndex].FormName = FormName;
	CheckForm_Query[iIndex].CheckFieldID = CheckFieldID;
	CheckForm_Query[iIndex].CheckFieldType = CheckFieldType; //TEXT, DROPDOWN
	CheckForm_Query[iIndex].DescriptionID = DescriptionID;
	CheckForm_Query[iIndex].CheckType = CheckType;
	CheckForm_Query[iIndex].isOptional = isOptional; // 1 if optional; 0 if required
	CheckForm_Query[iIndex].extraField = extraField; //if the test need extra information
}
function CheckForm(FormName, NextPage)
{
	var hasError=false;
	var i = 0;
	ErrorMessage = '';
	for(i = 0; i < CheckForm_Query.length; i++)
	{

		if(CheckForm_Query[i].CheckFieldID.length)
		{
			var testObj = document.forms[CheckForm_Query[i].FormName].elements[CheckForm_Query[i].CheckFieldID];
			var testString = testObj.value;
			var testObjIsOptional = CheckForm_Query[i].isOptional;
			var DescriptionID = CheckForm_Query[i].DescriptionID;
			switch(CheckForm_Query[i].CheckType.toUpperCase())
			{
				case 'ISINTEGERLIST':
					var ptn = /^[\d]+([,]?[\d])+$/;
					if( (!testObjIsOptional && !testString.match(ptn))|| (testObjIsOptional && Trim(testString) && !testString.match(ptn) ) )
						return FieldError(document.forms[CheckForm_Query[i].FormName].elements[DescriptionID],'Please check input fields','red') ;
				break;
				case 'NONEMPTY_TEXT':
					if(!testObjIsOptional && (!Trim(testString).length || !testString.length))
						return FieldError(document.forms[CheckForm_Query[i].FormName].elements[DescriptionID],'Please check input fields','red');
					break;
				default: alert('script error, Check Type: ' + CheckForm_Query[i].CheckType.toUpperCase() + ' not defined');
			}
		}
	}
	return processSelectAfterCheck(arguments);
}

function CheckForm_DelRule(CheckFieldID)
{
	for ( var i = 0; i < CheckForm_Query.length; i++)
	{
		if(CheckForm_Query[i].CheckFieldID == CheckFieldID)
		{
			CheckForm_Query[i].CheckFieldID = '' ;
			CheckForm_Query[i].FormName = '';
		}
	}
}

function processSelectAfterCheck()
{
	arg = arguments[0];
	FormName = arg[0];
	for(i = 2; i < arg.length; i++)
	{
		var ItemName = arg[i++];
		var Item = document.forms[FormName].elements[ItemName];
		if(! Item)
		{
			Item = document.createElement('input');
			Item.type='hidden';
			Item.name=ItemName;
			document.forms[FormName].appendChild(Item);
			document.forms[FormName].elements[ItemName] = Item;
		}
		Item.value = arg[i]
	}
	if(Trim(arg[1]).length)
	{
		var Item = document.forms[FormName].elements['SubPage'];
		if(!Item)
		{
			Item = document.createElement('input');
			Item.type='hidden';
			Item.name='SubPage';
			document.forms[FormName].appendChild(Item);
			document.forms[FormName].elements['SubPage'] = Item;
		}
		Item.value=arg[1];
	}
	document.forms[FormName].submit();
	return false;
}
function processSelect(FormName,SubPage)
{
	for(i = 2; i < arguments.length; i++)
	{
		var ItemName = arguments[i++];
		var Item = document.forms[FormName].elements[ItemName];
		if(! Item)
		{
				Item = document.createElement('input');
				Item.type='hidden';
				Item.name=ItemName;
				document.forms[FormName].appendChild(Item);
				document.forms[FormName].elements[ItemName] = Item;
		}
		Item.value = '';
		Item.value = arguments[i];
	}
	var Item = document.forms[FormName].elements['SubPage'];
	if(!Item)
	{
		Item = document.createElement('input');
		Item.type='hidden';
		Item.name='SubPage';
		document.forms[FormName].appendChild(Item);
		document.forms[FormName].elements['SubPage'] = Item;
	}
	Item.value=SubPage;
	document.forms[FormName].submit();
	return false;
}


function replyAnswer(returnLink)
{
	var oForm = document.forms["answer"];

	if (confirm("Confirm to reply this mail?"))
	{
		oForm.action = returnLink;
		oForm.hd_saveonly.value = 0;
		oForm.submit();
	}
}

function saveAnswer(returnLink)
{
	var oForm = document.forms["answer"];
	oForm.hd_saveonly.value = 1;
	oForm.submit();
}

function enableBtns(status)
{
	//btnReply.disabled = !status;
	btnSave.disabled = !status;
}

function askToSave(returnLink)
{
	var oForm = document.forms["answer"];

	if (!btnSave.disabled)
	{
		if (confirm("Do you want to save the change(s)?"))
		{
			oForm.action = returnLink;
			btnSave.click();
		}
		else
			window.location = returnLink;
	}
	else
		window.location = returnLink;
}

function GetColumnIndex(columnName)
{
	var i;
	var strName = columnName.toUpperCase();

	for (i=0; i<aryTBKeyRef.length; i++)
	{
		if (aryTBKeyRef[i] == strName)
			return i;
	}
	return -1;
}

function GetColumnText(obj, name)
{
	var iIndex = GetColumnIndex(name);

	if (iIndex != -1)
		return Trim(GetTextContent(obj.cells[iIndex+1]));
	else
		return "";
}

function GetColumnHTML(obj, name)
{
	var iIndex = GetColumnIndex(name);

	if (iIndex != -1)
		return obj.cells[iIndex+1].innerHTML;
	else
		return "";
}


function toggleQuestion(btn, forceSign, isToAnswer)
{
	var oRow;
	var oTable;
	var oNewRow;
	var oBtn;
	var i;
	var htmlCode;

	if (btn)
	{
		oRow = btn.parentNode.parentNode;
		oTable = oRow.parentNode;

		if (oRow.rowIndex + 1 < oTable.rows.length)
			oNewRow = oTable.rows[oRow.rowIndex + 1];

		if (!oNewRow || oNewRow.id != "QUESTION")
		{
			oNewRow = oTable.insertRow(oRow.rowIndex + 1);
			oNewRow.style.display = "none";
			oNewRow.id = "QUESTION";
			oNewRow.insertCell(-1);
			oNewRow.insertCell(-1);
			oNewRow.insertCell(-1);
			oNewRow.cells[0].style.backgroundColor = "#e0b0c0";
			oNewRow.cells[0].style.borderStyle = "solid";
			oNewRow.cells[0].style.borderWidth = "0px 0px 1px 0px";
			oNewRow.cells[0].style.borderColor = "#a06080";
			SetTextContent(oNewRow.cells[0], " ");

			oNewRow.cells[1].colSpan = 10; // Display columns only....
			oNewRow.cells[1].style.borderStyle = "solid";
			oNewRow.cells[1].style.borderWidth = "0px 0px 1px 0px";
			oNewRow.cells[1].style.borderColor = "#a06080";
			oNewRow.cells[1].style.backgroundColor = oRow.cells[1].style.backgroundColor;
			oNewRow.cells[1].style.padding = "8px 20px 15px 47px";

			htmlCode = '<font class="SMALL_TITLE">Question</font>';
			htmlCode += '<div style="width:100%; border:solid #b0b0b0; border-width:0px 0px 0px 0px; padding:5px">';
			htmlCode += GetColumnHTML(oRow, 'question');
			htmlCode += '</div>';
			if (isToAnswer)
			{
				htmlCode += '<form name="answer" method="post">';
				htmlCode += '<fieldset style="border:solid #c04080; border-width:2px 0px 2px 0px">';
				htmlCode += '<legend class="Arial8pt_B" style="color:#000000">Reply</legend>';
				htmlCode += '<div style="width:100%; padding:15px">';
				htmlCode += '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="Arial8pt">';

				htmlCode += '<tr><td valign="top" style="padding-top:4px">CC:</td><td><input type="text" name="txt_cc" class="Arial9pt" style="width:500px" onpropertychange="enableBtns(true)" value="" maxlength="2048"></td></tr>';
				htmlCode += '<tr><td valign="top" style="padding-top:4px">BCC:</td><td><input type="text" name="txt_bcc" class="Arial9pt" style="width:500px" onpropertychange="enableBtns(true)" value="" maxlength="2048"></td></tr>';

				htmlCode += '<tr><td valign="top" style="padding-top:4px">Subject:</td><td><input type="text" name="txt_subject" class="Arial9pt" style="width:500px" onpropertychange="enableBtns(true)" value="' + (GetColumnText(oRow, 'subject')==''?'Admissions Office - City University of Hong Kong':GetColumnText(oRow, 'subject')) + '" maxlength="255"></td></tr>';
				htmlCode += '<tr><td valign="top" style="padding-top:4px">Header:</td><td><input type="text" name="txt_header" class="Arial9pt" style="width:60%" onpropertychange="enableBtns(true)" value="' + (GetColumnText(oRow, 'header')==''?'Dear '+GetColumnText(oRow, 'name')+',':GetColumnText(oRow, 'header')) + '" maxlength="255"></td></tr>';
				htmlCode += '<tr><td valign="top" style="padding-top:4px">Body:</td><td><textarea name="txt_answer" rows="5" class="Arial9pt" style="width:100%" onpropertychange="enableBtns(true)">' + GetColumnText(oRow, 'answer') + '</textarea></td></tr>';
				htmlCode += '<tr><td valign="top" style="padding-top:4px">Footer:</td><td><textarea name="txt_footer" rows="4" class="Arial9pt" style="width:40%" onpropertychange="enableBtns(true)">' + (GetColumnText(oRow, 'footer').length ? GetColumnText(oRow, 'footer'):'Admissions Office'+String.fromCharCode(13)+'City University of Hong Kong') + '</textarea><br><font class="Arial8pt" color="gray">[ maximum 255 characters ]</font><br>&nbsp;</td></tr>';
				htmlCode += '</table>';

				htmlCode += '<table border="0" cellspacing="0" cellpadding="0" class="Arial9pt" style="margin-left:45px">';
				htmlCode += '<tr>';
				htmlCode += '<td style="padding-right:1px"><input type="checkbox" name="cb_require_follow" ' + (GetColumnText(oRow, 'bit_require_follow')=='1'?'checked':'') + ' onpropertychange="enableBtns(true)"></td><td style="padding:2px 20px 0px 0px">Follow Up</td>';
				htmlCode += '<td style="padding-right:1px"><input type="checkbox" name="cb_require_review" ' + (GetColumnText(oRow, 'bit_require_review')=='1'?'checked':'') + ' onpropertychange="enableBtns(true)" onclick="btnReply.disabled=this.checked"></td><td style="padding:2px 20px 0px 0px">Require review / approval</td>';
				htmlCode += '</tr>';
				htmlCode += '</table>';
				htmlCode += '</div>';
				htmlCode += '</fieldset>';
				htmlCode += '&nbsp;<br><br><br>';
				htmlCode += '<font class="Arial8pt_B">Remark</font><br>';
				htmlCode += '<textarea name="txt_remark" rows="3" style="width:100%" onpropertychange="enableBtns(true)">' + GetColumnText(oRow, 'answer_remark') + '</textarea><br>';
				htmlCode += '<font class="Arial8pt" color="#800000">Note: The remark message is for official staff use only and it will not be included in the reply e-mail.</font>';
				htmlCode += '<input name="hd_saveonly" type="hidden" value="">';
				htmlCode += '<input name="hd_qid" type="hidden" value="' + GetColumnText(oRow, 'id_question') + '">';
				htmlCode += '<input name="hd_email" type="hidden" value="' + GetColumnText(oRow, 'email') + '">';
				htmlCode += '<input name="hd_name" type="hidden" value="' + GetColumnText(oRow, 'name') + '">';
				htmlCode += '<input name="hd_app_status" type="hidden" value="' + GetColumnText(oRow, 'applicant_status') + '">';
				htmlCode += '</form>';
			}
			else
			{
				if (GetColumnText(oRow, 'answer') != "")
				{
					htmlCode += '<p><font class="SMALL_TITLE">Answer</font> &nbsp; [Last updated - ' + GetColumnText(oRow, 'answer_date') + ']';
					htmlCode += '<div style="width:100%; border:solid #b0b0b0; border-width:0px 0px 0px 0px; padding:5px">';
					if (GetColumnText(oRow, 'subject').length)
						htmlCode += '<b style="color:#008080">' + GetColumnText(oRow, 'subject') + '</b><br>&nbsp;<br>';
					if (GetColumnText(oRow, 'header').length)
					htmlCode += GetColumnText(oRow, 'header') + '<br>&nbsp;<br>';
					htmlCode += GetColumnHTML(oRow, 'answer');
					if (GetColumnText(oRow, 'footer').length)
						htmlCode += '<br>&nbsp;<br>' + GetColumnHTML(oRow, 'footer');
					htmlCode += '</div>';
				}

				if (GetColumnText(oRow, 'answer_remark') != "")
				{
					htmlCode += '<fieldset style="border:solid 1px #c04040; margin:10px 0px 10px 0px">';
					htmlCode += '<legend class="SMALL_BTEXT" style="color:#c04040">Remark</legend>';
					htmlCode += '<div style="width:100%; padding:10px; color:#c04040">';
					htmlCode += GetColumnHTML(oRow, 'answer_remark');
					htmlCode += '</div>';
					htmlCode += '</fieldset>';
				}
			}
			if (!isToAnswer)
			{
				htmlCode += '<div style="width:100%; padding:5px" align="right">';
				if (GetColumnText(oRow, 'answer') != "")
					htmlCode += '<button class="Arial8pt" style="width:135px" onclick="window.location=\''+GetColumnText(oRow, 'answer_act')+'\'"><img src="/objs/images/icons/pencil_11x10.gif" align="absmiddle">&nbsp; Edit the answer</button>';
				else
					htmlCode += '<button class="Arial8pt" style="width:165px" onclick="window.location=\''+GetColumnText(oRow, 'answer_act')+'\'"><img src="/objs/images/icons/address_13x11.gif" align="absmiddle" style="margin-top:1px">&nbsp; Answer this question</button>';
				htmlCode += ' &nbsp;<button class="Arial8pt" style="width:80px" onclick="window.open(\''+GetColumnText(oRow, 'answer_act')+'&print\')">Print</button>';
				htmlCode += '</div>';
			}
			else
			{
				htmlCode += '<div style="width:100%; padding:5px" align="right">';
				htmlCode += '<button id="btnReply" class="Arial8pt" style="width:115px" onclick="replyAnswer(\''+GetColumnText(oRow, 'answer_act')+'&back=1\')" ' + (GetColumnText(oRow, 'bit_require_review')==1?'disabled':'') + '><img src="/objs/images/icons/arrow_turn_right_black_10x9.gif" align="absmiddle" style="margin-top:2px">&nbsp; Reply &amp; Save</button>&nbsp;';
				htmlCode += '<button id="btnSave" class="Arial8pt" style="width:80px" onclick="saveAnswer(\''+GetColumnText(oRow, 'answer_act')+'&back=1\')" disabled><img src="/objs/images/icons/note_11x10.gif" align="absmiddle" style="margin-top:1px">&nbsp; Save</button>&nbsp;';
				htmlCode += '<button id="btnBack" class="Arial8pt" style="width:80px" onclick="askToSave(\''+GetColumnText(oRow, 'answer_act')+'&back=1\')"><img src="/objs/images/icons/cross_black_8x8.gif" align="absmiddle" style="margin-top:1px">&nbsp; Close</button>&nbsp;';
				htmlCode += '</div>';
			}

			oNewRow.cells[1].innerHTML = htmlCode;
		}

		if (GetTextContent(btn) == "-" && (!forceSign || forceSign == "+"))
		{
			oNewRow.style.display = "none";
			//btn.innerText = "+";
			SetTextContent(btn, "+");

			for (i=0; i<oRow.cells.length; i++)
				oRow.cells[i].style.borderBottomWidth = "1px";
		}
		else if (!forceSign || forceSign == "-")
		{
			oNewRow.style.display = "";
			//btn.innerText = "-";
			SetTextContent(btn, "-");

			for (i=0; i<oRow.cells.length; i++)
				oRow.cells[i].style.borderBottomWidth = "0px";
		}
	}
	else
	{
		oBtn = document.getElementsByTagName("button");
		//oBtn = document.all.tags("button");
		for (i=0; i<oBtn.length; i++)
		{
			if (GetTextContent(oBtn[i]) == "-" || GetTextContent(oBtn[i]) == "+")
			{
				toggleQuestion(oBtn[i], forceSign);
			}
		}
	}
}

function updateViewFields()
{
	var oForm = document.forms.viewSettings;

	oForm.txt_view_recent.disabled = !oForm.radio_view[0].checked;
	oForm.txt_view_recent.style.backgroundColor = oForm.radio_view[0].checked ? "" : "#e0e0e0";
	oForm.txt_view_date_from.disabled = !oForm.radio_view[1].checked;
	oForm.txt_view_date_from.style.backgroundColor = oForm.radio_view[1].checked ? "" : "#e0e0e0";
	oForm.txt_view_date_to.disabled = !oForm.radio_view[1].checked;
	oForm.txt_view_date_to.style.backgroundColor = oForm.radio_view[1].checked ? "" : "#e0e0e0";
}

function updateView(basePara)
{
	var oForm = document.forms.viewSettings;
	var urlStr = basePara + oForm.txt_view_q_per_pg.value + "," + (oForm.radio_view[0].checked ? "0" : (oForm.radio_view[1].checked ? "1" : "2"));
	var dFrom, dTo, dDay;
	var temp;
	var now;

	oForm.txt_view_recent.disabled = false;
	oForm.txt_view_date_from.disabled = false;
	oForm.txt_view_date_to.disabled = false;

	dDay = oForm.txt_view_recent.value;
	dTo = Trim(oForm.txt_view_date_to.value);
	dFrom = Trim(oForm.txt_view_date_from.value);


	updateViewFields();

	if (oForm.radio_view[0].checked){

		if (IsEmpty(dDay))
			oForm.txt_view_recent.value = 7;
		else if (!IsUINT(dDay))
			return formError(oForm.txt_view_recent, "Please enter a correct day number!");
		else if (dDay < 1 || dDay > 100)
			return formError(oForm.txt_view_recent, "Please enter a day number that within the range 1 - 100!");

	}else if (oForm.radio_view[1].checked)	{
		now = new Date();

		if (IsEmpty(dFrom) && IsEmpty(dTo)){
			oForm.txt_view_date_to.value = (now.getDate() < 10 ? "0":"") + now.getDate() + "-" + (now.getMonth()+1 < 10 ? "0":"") + (now.getMonth()+1) + "-" + now.getFullYear();
			oForm.txt_view_date_from.value = oForm.txt_view_date_to.value;
		}else{

			//if (!IsEmpty(dFrom) && !isDateString(dFrom))
			if(!IsEmpty(dFrom) && !IsDateFormat(dFrom, "DD-MM-YYYY")){
				return formError(oForm.txt_view_date_from, "Invalid date!  The correct format is dd-mm-yyyy.");
			}
			//if (!IsEmpty(dTo) && !isDateString(dTo))
			if(!IsEmpty(dTo) && !IsDateFormat(dTo, "DD-MM-YYYY")){
				return formError(oForm.txt_view_date_to, "Invalid date!  The correct format is dd-mm-yyyy.");
			}

			if (IsEmpty(dFrom)){
				oForm.txt_view_date_from.value = oForm.txt_view_date_to.value;
			}else if (IsEmpty(dTo)){
				oForm.txt_view_date_to.value = oForm.txt_view_date_from.value;
			}

			if (dateDiff(dateFromDMY(dFrom), dateFromDMY(dTo)) < 0){
				temp = oForm.txt_view_date_to.value;
				oForm.txt_view_date_to.value = oForm.txt_view_date_from.value;
				oForm.txt_view_date_from.value = temp;
			}

			oForm.txt_view_date_to.value = dateToDMY(dateFromDMY(oForm.txt_view_date_to.value));
			oForm.txt_view_date_from.value = dateToDMY(dateFromDMY(oForm.txt_view_date_from.value));
		}

		dFrom = oForm.txt_view_date_from.value;
		dTo = oForm.txt_view_date_to.value;
	}

	urlStr += "," + oForm.txt_view_recent.value;

	if (!IsEmpty(dFrom) || !IsEmpty(dTo))
	{
		if (dFrom == "") dFrom = dTo;
		if (dTo == "") dTo = dFrom;

		urlStr += "," + dFrom.substr(6,4) + dFrom.substr(3,2) + dFrom.substr(0,2);
		urlStr += "-" + dTo.substr(6,4) + dTo.substr(3,2) + dTo.substr(0,2);
	}
	if (IsEmpty(oForm.txt_view_q_per_pg.value) || !IsUINT(oForm.txt_view_q_per_pg.value))
		return formError(oForm.txt_view_q_per_pg, "Please enter a valid number.");

	self.location.replace(urlStr);
}