﻿function MCFormElement(elementID, labelID, errorMessage, invalidColor, validationFunction)
{
    this.element = document.getElementById(elementID);
    this.label = document.getElementById(labelID);
    this.errorMessage = errorMessage;
    this.invalidColor = invalidColor;
    this.focusOn = this.element;
    this.Validate = Validate;
    
    function Validate()
    {
        // This function should return an error message and also the element which
        //   we set focus to on error.
        return validationFunction(this);
    }
}

function mcValidateForm(validationGroupElements, alertMessage)
{
    msg = "";
    focusOn = "";
    focusSet = false;
    for(i = 0; i < validationGroupElements.length; i++)
    {
        errMsg = validationGroupElements[i].Validate();
        if(errMsg != "")
        {
            msg += errMsg + '\n';
            if(!focusSet)
            {
                focusOn = validationGroupElements[i].focusOn;
                focusSet = true;
            }
        }
    }
    if(msg != "")
    {
        __defaultFired = false;
        alert(alertMessage + '\n\n' + msg);
        focusOn.focus();
        return false;
    }
    else
    {
        return true;
    }
}

function mcValidateTextBox(formElement)
{
    var textBox = formElement.element;
    if(textBox.value == "")
    {
        formElement.label.style.background = formElement.invalidColor;
        formElement.focusOn = formElement.element;
        return formElement.errorMessage;
    }
    else
    {
        return "";
    }
}

function mcValidateMultiBox(formElement)
{
    foundBlank = false;
    var arrBoxes = formElement.element.getElementsByTagName("input");
    for(p = 0; p < arrBoxes.length; p++)
    {
        if(arrBoxes[p].value == "" || arrBoxes[p].value.length != arrBoxes[p].maxLength)
        {
            foundBlank = true;
        }
    }
    if(foundBlank)
    {
        formElement.label.style.background = formElement.invalidColor;
        formElement.focusOn = arrBoxes[0];
        return formElement.errorMessage;
    }
    else
    {
        return "";
    }
}

function mcValidateGroup(formElement)
{
    var arrGroupElements = formElement.element.getElementsByTagName("input");
    foundChecked = false;
    for(g = 0; !foundChecked && g < arrGroupElements.length; g++)
    {
        if(arrGroupElements[g].checked)
        {
            foundChecked = true;
        }
    }
    if(!foundChecked)
    {
        formElement.label.style.background = formElement.invalidColor;
        return formElement.errorMessage;
    }
    else
    {
        return "";
    }
}

function mcValidateList(formElement)
{
    if(formElement.element.value == "")
    {
        formElement.label.style.background = formElement.invalidColor;
        return formElement.errorMessage;
    }
    else
    {
        return "";
    }
}

function mcValidateCheckBox(formElement)
{
    if(formElement.element.checked == false)
    {
        formElement.label.style.background = formElement.invalidColor;
        return formElement.errorMessage;
    }
    else
    {
        return "";
    }
}
				
/***************************************************************/
/* Utility functions for clearing labels and advancing cursors */
/***************************************************************/

function mcMultiBoxCursorAdvance(groupId)
{
    var arrBoxes = document.getElementById(groupId).getElementsByTagName("input");
    for(b = 0; b < arrBoxes.length; b++)
    {
        if(arrBoxes[b].value.length != arrBoxes[b].maxLength)
        {
            arrBoxes[b].focus();
            return true;
        }
    }
}

function mcCatchEnterKey(event)
{
    if(navigator.userAgent.indexOf('Gecko') != -1)
    {
        if (event.keyCode == 13)
        {
            event.cancelBubble = true;
        }
    }
}

function mcCheckMaxlength(box, maxlength)
{
    if(box.value.length >= maxlength)
    {
        box.value = box.value.substring(0, maxlength);
    }
}

function mcClearTextBoxLabel(box, labelId)
{
    if(box.value != "")
    {
        mcClearLabel(labelId);
    }
}

function mcClearMultiBoxLabel(groupId, labelId)
{
    var boxes = document.getElementById(groupId).getElementsByTagName("input");
    for(b = 0; b < boxes.length; b++)
    {
        if(boxes[b].value.length < boxes[b].maxLength)
        {
            return false;
        }
    }
    mcClearLabel(labelId);
}

function mcClearListLabel(listId, labelId)
{
    if(document.getElementById(listId).value != "")
    {
        mcClearLabel(labelId);
    }
}

function mcClearLabel(labelId)
{
    document.getElementById(labelId).style.background = "";
}

function mcIsValidNumber(box)
{
	str = box.value;
	if (str == "")
	{
		return true;
	}
	var valid = /^[0-9]+$/;
	if (!str.match(valid)) 
	{
		box.value = str.substring(0, str.length-1);
		mcIsValidNumber(box);
	}
}