﻿/*******************************************************************************
/* Event Utility Functions
/******************************************************************************/

function registerEventHandler(oNode, strEvent, funcHandler)
{
  var funcOldHandler = (oNode[strEvent] ? oNode[strEvent] : function() {});
  oNode[strEvent] = function() { funcOldHandler(); funcHandler(); };
}

/*******************************************************************************
/* String Utility Functions
/******************************************************************************/

function trim(strX)
{
    return strX.replace(/^\s+|\s+$/, '');
}

/*******************************************************************************
/* Confirmation Input Functions
/******************************************************************************/

function confirmationInput_blur(oInput, sDefaultText, bPassword)
{
	if (trim(oInput.value).length < 1)
		oInput.value = sDefaultText;
	oInput.style.color = (oInput.value == sDefaultText) ? '#666666' : '#000000';
	if (bPassword && (oInput.value == sDefaultText))
	{
		oNewInput = document.createElement('input');
		oNewInput.type = 'text';
		oNewInput.id = oInput.id;
		oNewInput.name = oInput.name;
		oNewInput.className = oInput.className;
		oNewInput.maxLength = oInput.maxLength;
		oNewInput.tabIndex = oInput.tabIndex;
		oNewInput.value = oInput.value;
		oNewInput.style.color = oInput.style.color;
		oNewInput.onblur = oInput.onblur;
		oNewInput.onfocus = function() { confirmationInput_focus(oNewInput, sDefaultText, bPassword); };

		oInput.parentNode.replaceChild(oNewInput, oInput);
		oInput = oNewInput;
	}
}

function confirmationInput_focus(oInput, sDefaultText, bPassword)
{
	oInput.style.color = '#000000';
	if (bPassword)
	{
		oNewInput = document.createElement('input');
		oNewInput.type = 'password';
		oNewInput.id = oInput.id;
		oNewInput.name = oInput.name;
		oNewInput.className = oInput.className;
		oNewInput.maxLength = oInput.maxLength;
		oNewInput.tabIndex = oInput.tabIndex;
		oNewInput.value = oInput.value;
		oNewInput.style.color = oInput.style.color;
		oNewInput.onblur = oInput.onblur;

		oInput.parentNode.replaceChild(oNewInput, oInput);
		oInput = oNewInput;
		oInput.focus();
	}
	if (oInput.value == sDefaultText)
		oInput.value = '';
	oInput.select();
}

function initConfirmationInput(oInput, sDefaultText, bPassword)
{
	if (trim(oInput.value).length < 1)
		oInput.value = sDefaultText;
	oInput.style.color = (oInput.value == sDefaultText) ? '#666666' : '#000000';
	if (bPassword && (oInput.value == sDefaultText))
	{
		oNewInput = document.createElement('input');
		oNewInput.type = 'text';
		oNewInput.id = oInput.id;
		oNewInput.name = oInput.name;
		oNewInput.className = oInput.className;
		oNewInput.maxLength = oInput.maxLength;
		oNewInput.tabIndex = oInput.tabIndex;
		oNewInput.value = oInput.value;
		oNewInput.style.color = oInput.style.color;
		oNewInput.onblur = function() { confirmationInput_blur(oNewInput, sDefaultText, bPassword); };
		oNewInput.onfocus = function() { confirmationInput_focus(oNewInput, sDefaultText, bPassword); };

		oInput.parentNode.replaceChild(oNewInput, oInput);
		oInput = oNewInput;
	}
}

/*******************************************************************************
/* Custom Validation Display
/******************************************************************************/

var sHighlightedLabelClass = 'invalid';
var oHighlightedLabelRegex = new RegExp('(^| )' + sHighlightedLabelClass + '(?=( |$))', 'i');

function getAssociatedLabels(oElement)
{
    var aResult = new Array();
    var aLabels = document.getElementsByTagName('label');
    for (var i = 0; i < aLabels.length; i++)
    {
        var oLabel = aLabels[i];
        if (oLabel && oLabel.htmlFor == oElement.id)
            aResult.push(oLabel);
    }
    return aResult;
}

function formatValidatedInputLabel(oLabel, bValid)
{
    if (bValid)
    {
        if (oLabel.className)
            oLabel.className = oLabel.className.replace(oHighlightedLabelRegex, '');
    }
    else
    {
        if (oLabel.className)
        {
            if (!oHighlightedLabelRegex.test(oLabel.className))
                oLabel.className += ((oLabel.className.length > 0) ? ' ' : '') + sHighlightedLabelClass;
        }
        else
            oLabel.className = sHighlightedLabelClass;
    }
}

function highlightValidatedInputLabel(oValidator)
{
    var oElement = document.getElementById(oValidator.controltovalidate);
    if (oElement)
    {
        var aOtherValidators = new Array();
        for (var i = 0; i < Page_Validators.length; i++)
        {
            if (Page_Validators[i].controltovalidate == oValidator.controltovalidate)
                aOtherValidators.push(Page_Validators[i]);
        }
        
        var bValid = true;
        for (var i = 0; i < aOtherValidators.length; i++)
            bValid = bValid && aOtherValidators[i].isvalid;
        
        var aLabels = getAssociatedLabels(oElement);
        for (var i = 0; i < aLabels.length; i++)
            formatValidatedInputLabel(aLabels[i], bValid);
    }
}

function initializeValidation()
{
    if (typeof ValidatorUpdateDisplay == 'function')
    {
        var __funcbody = ValidatorUpdateDisplay.toString();
        __funcbody = __funcbody.substring(__funcbody.indexOf("{") + 1, __funcbody.lastIndexOf("}"));
        var newfunc = new Function("val", "highlightValidatedInputLabel(val); " + __funcbody );
        ValidatorUpdateDisplay = newfunc;
    }
}

registerEventHandler(window, 'onload', initializeValidation);
