



function ClientSideErrors() {}

ClientSideErrors.errorHighlightColor = "#FF2000";
ClientSideErrors.errorMessageWasShown = false;

ClientSideErrors.markTextFieldAsInvalid = function(field, errorTitle)
{
    ClientSideErrors.paintElementAsInvalid(field, errorTitle);
    ClientSideErrors.registerFieldError(field.name);
}

/*
 * Marks the specified select control as invalid. To do it the select should be nested in SPAN tag. Function adds red
 * border to this SPAN and adds error tooltip to the select control.
 */
ClientSideErrors.markSelectFieldAsInvalid = function(field, errorTitle)
{
    field.parentNode.style.width = field.clientWidth;
    ClientSideErrors.paintElementAsInvalid(field.parentNode, errorTitle);
    ClientSideErrors.registerFieldError(field.name);
}

ClientSideErrors.paintElementAsInvalid = function(field, errorTitle)
{
    if(field)
    {
        field.style.borderColor = ClientSideErrors.errorHighlightColor;
        field.style.borderStyle = "solid";
        field.title = errorTitle;
        field.style.color = '';
    }
}

ClientSideErrors.paintElementAsValid = function(field)
{
    if(field)
    {
        field.style.borderColor = "";
        field.style.borderStyle = "";
        field.title = '';
    }
}

ClientSideErrors.markTextFieldAsValid = function(field)
{
    if(field)
    {
        if(!fieldErrors[field.name]) return;
        ClientSideErrors.paintElementAsValid(field);
        ClientSideErrors.unregisterFieldError(field.name);
    }
}

/*
 * Marks the specified select control as valid. For additional information see ClientSideErrors.markSelectFieldAsInvalid.
 */
ClientSideErrors.markSelectFieldAsValid = function(field)
{
    if(field)
    {
        if(!fieldErrors[field.name]) return;
        ClientSideErrors.paintElementAsValid(field.parentNode);
        ClientSideErrors.unregisterFieldError(field.name);
    }
}

ClientSideErrors.registerFieldError = function(fieldName)
{
    fieldErrors[fieldName] = true;
}

ClientSideErrors.unregisterFieldError = function(fieldName)
{
    if(fieldErrors[fieldName])
        delete fieldErrors[fieldName];
}

ClientSideErrors.showClientSideErrorMessage = function()
{
    ClientSideErrors.hideClientSideErrorMessage();
    window.setTimeout(ClientSideErrors.displayClientSideErrorMessage, 200);
    window.scrollTo(0, 0);
}

ClientSideErrors.getElement = function()
{
    return document.getElementById("ClientSideErrorMessage");
}

ClientSideErrors.displayClientSideErrorMessage = function()
{
    if(ClientSideErrors.errorMessageWasShown)
    {
        ClientSideErrors.getElement().style.visibility = "visible";
    }
    else
    {
        ClientSideErrors.getElement().style.display = "block";
        ClientSideErrors.getElement().style.visibility = "visible";
        ClientSideErrors.errorMessageWasShown = true;
    }
    if(ClientSideErrors.onDisplay)
    {
        ClientSideErrors.onDisplay();
    }
}


ClientSideErrors.hideClientSideErrorMessage = function()
{
    if(ClientSideErrors.errorMessageWasShown)
        ClientSideErrors.getElement().style.visibility = "hidden";
}

ClientSideErrors.hideClientSideErrorMessageIfNoErrors = function()
{
    if(!ClientSideErrors.hasErrors())
        ClientSideErrors.hideClientSideErrorMessage();    
}

ClientSideErrors.hasErrors = function()
{
    var count = 0;
    for(var i in fieldErrors)
        count++;
    return count > 0;
}

/*
 * Marks the specified fieldLabelNode as invalid. It means that label will has red bold font (as determined in errormsg
 * style) and it will has errorTitle title.
 */
ClientSideErrors.markFieldLabelsAsInvalid = function(fieldLabelNode, errorTitle)
{
    if (fieldLabelNode != null && typeof (fieldLabelNode) != typeof undefined) {
        fieldLabelNode.className = "errormsg";
        fieldLabelNode.title = errorTitle;
    }
}

/*
 * Marks the specified fieldLabelNode as valid.
 */
ClientSideErrors.markFieldLabelsAsValid = function(fieldLabelNode)
{
    if (fieldLabelNode != null && typeof (fieldLabelNode) != typeof undefined) {
        fieldLabelNode.className = "";
        fieldLabelNode.title = "";
    }
}
