﻿// JScript File

function hideEmptyContentDiv(p_className)
{
    var divs = document.getElementsByTagName('div');   
    
    for (var i=0; i<divs.length; i++)
    {
        var c = divs[i].className;		
        if (c.indexOf(p_className) >= 0)
        {			
            if (divs[i].innerHTML == "")
            {
                divs[i].style.display = "none";
            }
        }
    }
}

function isValidEmail(valObj)
{
	var o = document.getElementById(valObj.objId);
	if (!o)
		return true;
	return o.value.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/);
}

function isValidZip(valObj)
{
	var o = document.getElementById(valObj.objId);
	if (!o)
		return true;
	return o.value.match(/^\d{3} \d{2}|\d{5}$/);
}

function isValidParticipants(valObj)
{
	if (isNotEmpty(valObj))
	{
		var o = document.getElementById(valObj.objId);
		if (!o)
			return true;

		var maxParticipants = 0;
		var omax = document.getElementById(valObj.objId + "-max");
		if (omax)
			maxParticipants = parseInt(omax.value, 10);

		if (isNaN(o.value))
			return false;
		if (parseInt(o.value, 10) <= 0)
			return false;
		if (maxParticipants > 0 && parseInt(o.value, 10) > maxParticipants)
			return false;

		return true;
	}

	return false;
}

function isCheckboxOrRadioButtonChecked(parentObjId, objType)
{
	var p = document.getElementById(parentObjId);
	if (!p)
		return true;

	var inputs = p.getElementsByTagName("input");
	if (!inputs)
		return true;

	for (var i = 0; i < inputs.length; i++)
	{
		var inp = inputs[i];
		if (inp && inp.type && inp.type == objType)
		{
			if (inp.checked)
				return true;
		}
	}

	return false;
}

function isNotEmpty(valObj)
{
	var o = document.getElementById(valObj.objId);
	if (!o)
		return true;
	if (o.value && o.value.replace(/^\s+|\s+$/g, "").length > 0)
		return true;
	return false;
}

function ValObj(objId, objName, objType, validationType)
{
	this.objId = objId;
	this.objName = objName;
	this.objType = objType;
	this.validationType = validationType;

	this.isValid = function() {
		if (this.objType == "radio" || this.objType == "checkbox")
			return isCheckboxOrRadioButtonChecked(this.objId, this.objType);
		else if (this.objType == "select")
			return true;
		else if (this.validationType == "email")
			return isValidEmail(this);
		else if (this.validationType == "zip")
			return isValidZip(this);
		else if (this.validationType == "participants")
			return isValidParticipants(this);
		return isNotEmpty(this);
	}
}

function displayErrors(ctrlId, errors)
{
	var d = document.getElementById("nbtJsFormMessage_" + ctrlId);
	if (!d)
		return;

	var missingFieldsHeading = "One or more required fields were missing";
	var formattingErrorHeading = "Formatting error";
	var m = document.getElementById("nbtErrorMissingRequiredFields_" + ctrlId);
	if (m)
		missingFieldsHeading = m.value;
	m = document.getElementById("nbtErrorFormatting_" + ctrlId);
	if (m)
		formattingErrorHeading = m.value;

	var nMissingFields = 0;
	var msg = "<h2>" + missingFieldsHeading + "</h2><ul>";
	for (var i = 0; i < errors.length; i++)
	{
		if (!isNotEmpty(errors[i]))
		{
			var n = errors[i].objName;
			if (n.length > 0 && n.charAt(n.length - 1) == ":")
				n = n.substr(0, n.length - 1);
			msg += "<li>" + n + "</li>";
			nMissingFields++;
		}
	}
	msg += "</ul>";
	if (nMissingFields == 0)
	{
		msg = "<h2>" + formattingErrorHeading + "</h2><ul>";
		for (var i = 0; i < errors.length; i++)
		{
			var n = errors[i].objName;
			if (n.length > 0 && n.charAt(n.length - 1) == ":")
				n = n.substr(0, n.length - 1);
			msg += "<li>" + n + "</li>";
		}
	}
	msg += "</ul>";
	d.style.display = "block";
	d.innerHTML = msg;
}

function getNonValidObjs(objs)
{
	var o = [];
	for (var i = 0; i < objs.length; i++)
	{
		if (!objs[i].isValid())
			o[o.length] = objs[i];
	}
	return o;
}

function isNBTFormValid(ctrlId)
{
	if (typeof g_nbtVal != "undefined")
	{
		var errors = getNonValidObjs(g_nbtVal);
		if (errors.length > 0)
		{
			displayErrors(ctrlId, errors);
			window.scroll(0, 0);
			return false;
		}
	}
	return true;
}

