﻿var decimalChar = '.';
var decimalCharKeyCode = 46;
var groupingChar = ',';
var groupingCharKeyCode = 44;
var minusCharKeyCode = 45;
var WOIRequiredFields = new Array();
var WOIRequiredFieldsNames = new Array();
var WOIRequiredFieldsIsEmail = new Array();
var rfArrayLength = 0;
var rfArrayNames = new Array();
var crfArrayLengths = new Array();
var requiredFieldMessageString = ''//'The following field is required: <Name>.  Please enter a value.';
var requiredFieldEmailString = ''//'<Name> is not a valid email address. Please correct and try again.';

function SetDecimalCharToPeriod()
{
    decimalChar = '.';
    decimalCharKeyCode = 46;
}

function SetDecimalCharToComma()
{
    decimalChar = ',';
    decimalCharKeyCode = 44;
}

function SetGroupingCharToPeriod()
{
    groupingChar = '.';
    groupingCharKeyCode = 46;
}

function SetGroupingCharToComma()
{
    groupingChar = ',';
    groupingCharKeyCode = 44;
}

function SetRequiredFieldErrorMessage(msg, emailMsg)
{
    requiredFieldMessageString = msg;
    requiredFieldEmailString = emailMsg;
}

function restrictZeroDP(negative)
{
    var strValidChars = "0123456789" + groupingChar;
    if (negative)
    {
        strValidChars = strValidChars + "-";
    }
    if (!ContainsOnlyTheseCharacters(event.srcElement.value,strValidChars))
    {
        event.srcElement.value = GetLeftOfInvalidCharacters(event.srcElement.value,strValidChars,"0");
    }
}

function restrictAlpha()
{
    var strValidChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
    if (!ContainsOnlyTheseCharacters(event.srcElement.value,strValidChars))
    {
        event.srcElement.value = GetLeftOfInvalidCharacters(event.srcElement.value,strValidChars,"");
    }
}

function restrictXDP(x, negative, currency)
{
    var strValidChars = '0123456789' + decimalChar + groupingChar;
    if (negative)
    {
        strValidChars = strValidChars + "-";
    }
    event.srcElement.value = trim(event.srcElement.value);
    var startsWithCurrency = false;
    if (currency.length > 0 && event.srcElement.value.substring(0,currency.length) == currency)
    {
        startsWithCurrency = true;
        event.srcElement.value = event.srcElement.value.substring(currency.length);
    }
    
    if ( !ContainsOnlyTheseCharacters(event.srcElement.value,strValidChars) )
    {
        event.srcElement.value = GetLeftOfInvalidCharacters(event.srcElement.value,strValidChars,'0');
    }

    var dpPos = -1;
    for (i=event.srcElement.value.length-1; i>=0 ; i--)
    {
        if (event.srcElement.value.charAt(i) == decimalChar)
        {
            dpPos=i;
            break;
        }
    }
    
    if (dpPos >= 0)
    {
        if (event.srcElement.value.length > dpPos+x+1)
        {
            event.srcElement.value = event.srcElement.value.substring(0,dpPos+x+1);
        }
        for ( i=x; i>0; i-- )
        {
            if (dpPos == event.srcElement.value.length-i)
            {
                for ( j=0; j<=i; j++ )
                {
                    event.srcElement.value = event.srcElement.value + '0';
                }
            }
        }
        if (dpPos == 0)
        {
            event.srcElement.value = '0' + event.srcElement.value;
        }
    }
    if (startsWithCurrency)
    {
        event.srcElement.value = currency + event.srcElement.value;
    }
}

function ContainsOnlyTheseCharacters(strString, strValidChars)
{
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   for (i = 0; i < strString.length && blnResult == true; i++)
   {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
      {
         blnResult = false;
      }
   }
   return blnResult;
}

function GetLeftOfInvalidCharacters(strString, strValidChars, strDefaultReturnValue)
{
   for (i = 0; i < strString.length; i++)
   {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
      {
        if (i == 0)
        {
            return strDefaultReturnValue;
        }
        else
        {
            return strString.substring(0,i);
        }
      }
   }
   return strString;
}

function DecimalTextboxKeyPress(negative) 
{ 
	if (negative && event.keyCode == minusCharKeyCode && event.srcElement.value.substring(0,1) != "-")
	{
		event.srcElement.value = "-" + event.srcElement.value;
		event.keyCode = 0;
		return;
	}
	if(event.srcElement.value.indexOf(decimalChar) > -1 && event.keyCode == decimalCharKeyCode && decimalCharKeyCode != groupingCharKeyCode)
	{
		event.keyCode = 0; 
		return;
	}
	if (!(event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50 || event.keyCode == 51 || event.keyCode == 52 || event.keyCode == 53 || event.keyCode == 54 || event.keyCode == 55 || event.keyCode == 56 || event.keyCode == 57 || event.keyCode == decimalCharKeyCode || event.keyCode == groupingCharKeyCode))
	{
		event.keyCode = 0;
	}
}

function WholeNumberTextboxKeyPress(negative) 
{ 
	if (negative && event.keyCode == minusCharKeyCode && event.srcElement.value.substring(0,1) != "-")
	{
		event.srcElement.value = "-" + event.srcElement.value;
		event.keyCode = 0;
		return;
	}
	if (!(event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50 || event.keyCode == 51 || event.keyCode == 52 || event.keyCode == 53 || event.keyCode == 54 || event.keyCode == 55 || event.keyCode == 56 || event.keyCode == 57 || event.keyCode == groupingCharKeyCode))
	{
		event.keyCode = 0;
	}
}

function AlphaTextboxKeyPress() 
{ 
	if ((event.keyCode >= 65 && event.keyCode <= 90) || (event.keyCode >= 97 && event.keyCode <= 122) || event.keyCode == 95)
	{
	    // valid
	}
	else
	{
		event.keyCode = 0;
	}
}

function GetRequiredFieldsPageIndexFromId(pageId)
{
    // Search for index of validation arrays with the given Id
    var pos = 0;
    for (i=0; i < rfArrayLength; i++)
    {
        if (rfArrayNames[i] == pageId)
        {
            return pos;
        }
        ++pos;
    }
    
    // If not found, create a new one
    rfArrayLength = pos + 1;
    rfArrayNames[pos] = pageId;
    WOIRequiredFields[pos] = new Array();
    WOIRequiredFieldsNames[pos] = new Array();
    WOIRequiredFieldsIsEmail[pos] = new Array();
    crfArrayLengths[pos] = 0;
    return pos;
}

function ClearWOIRequiredFields(pageId)
{
    var pos = GetRequiredFieldsPageIndexFromId(pageId);
    WOIRequiredFields[pos] = new Array();
    WOIRequiredFieldsNames[pos] = new Array();
    WOIRequiredFieldsIsEmail[pos] = new Array();
    crfArrayLengths[pos] = 0;
}

function AddWOIRequiredField(pageId, fieldId, fieldName, isEmail)
{
    var pos = GetRequiredFieldsPageIndexFromId(pageId);
    var length = crfArrayLengths[pos];
    WOIRequiredFields[pos][length] = fieldId;
    WOIRequiredFieldsNames[pos][length] = fieldName;
    WOIRequiredFieldsIsEmail[pos][length] = isEmail;
    crfArrayLengths[pos] = length + 1;
}

function ValidateWOIRequiredFieldsErrorInLabel(pageId, labelId, displayAll)
{
    var errorMsg = ValidateWOIRequiredFields(pageId, displayAll);
    if (errorMsg != "")
    {
        var label = document.getElementById(labelId);
        if (label != null)
        {
            label.innerHTML = errorMsg;
        }
        return false;
    }
    return true;
}

function ValidateWOIRequiredFields(pageId, displayAll)
{
    var pos = GetRequiredFieldsPageIndexFromId(pageId);
    var length = crfArrayLengths[pos];
    var focusDone = false;
    var errorMsg = "";
    for (i=0; i < length; i++)
    {
        var isEmailError = false;
        var robj = document.getElementById(WOIRequiredFields[pos][i]);
        if (robj != null)
        {
            var empty = false;
            if (robj.tagName == 'INPUT')
            {
                // eMail
                if (WOIRequiredFieldsIsEmail[pos][i] != null && WOIRequiredFieldsIsEmail[pos][i] == true) 
                {
                    if (!ValidateEmailAddress(robj.value, true, false, ''))
				    {
				        isEmailError = true;
					    empty = true;
				    }
			    }
                // Plain text or password
                else if (robj.type == 'text' || robj.type == 'password') 
                {
				    if (robj.value != null && trim(robj.value) == '')
				    {
					    empty = true;
				    }
			    }
	            // Check box (must be ticked)
                else if (robj.type == 'checkbox')
                {
				    if ( !robj.checked )
				    {
					    empty = true;
				    }
			    }
			}
            // textarea
            if (robj.tagName == 'TEXTAREA') 
            {
				if (robj.value != null && trim(robj.value) == '')
				{
					empty = true;
				}
			}
            // label (that is set by a dialog or some other mechanism)
            if (robj.tagName == 'SPAN')
            {
				if ( (robj.value == null || trim(robj.value) == '') && robj.innerText != null && trim(robj.innerText) == '' )
				{
					empty = true;
				}
			}
            // Drop-down-list :
            // If no or only one entries, ignore.
            // Otherwise, must select an entry that ISN'T the first entry (this is the '-- please select--' entry)
            if (robj.tagName == 'SELECT' )
            {
				if ( robj.options.length > 1 && robj.selectedIndex <= 0 )
				{
					empty = true;
				}
			}
			
            if (empty)
            {
                var replaceMsg = requiredFieldMessageString
                if (isEmailError) replaceMsg = requiredFieldEmailString;
                
                if (!focusDone)
                {
                    robj.focus();
                    focusDone = true;
                }
                if (displayAll == null || !displayAll)
                {
                    errorMsg = replaceMsg.replace('<Name>',WOIRequiredFieldsNames[pos][i]);
                    alert (errorMsg);
                    return errorMsg;
                }
                else
                {
                    if (errorMsg == "")
                    {
                        errorMsg = replaceMsg.replace('<Name>',WOIRequiredFieldsNames[pos][i]);
                    }
                    else
                    {
                        errorMsg = errorMsg + "<br/>" + replaceMsg.replace('<Name>',WOIRequiredFieldsNames[pos][i]);
                    }
                }
            }
        }
    }
    
    return errorMsg;
}

function ValidateEmailAddress(emailAddress, isCompulsory, isExchangeAddress, message)
{
    if (!isCompulsory && trim(emailAddress) == "")
    {
        return true;
    }
    
    if (isExchangeAddress)
    {
        // Only validate that something is entered if compulsory
        // (i.e. no format validation)
        if (isCompulsory)
        {
            if (trim(emailAddress) == "")
            {
                if (message != '') alert (message);
                return false;
            }
        }
        else
        {
            return true;
        }
    }
    else
    {
        var objRegExp  = /^[a-z0-9]([a-z0-9_\-\.\']*)@([a-z0-9_\-\.]*)(\.[a-z0-9]*(\.[a-z0-9]{2}){0,2})$/i;
        if (objRegExp.test(emailAddress))
        {
            return true;
        }
        else
        {
            if (message != '') alert (message);
            return false;
        }
    }
}

function trim(value)
{
	var returnValue = value;
	
	while(''+returnValue.charAt(0)==' ')returnValue=returnValue.substring(1,returnValue.length);
	while(''+returnValue.charAt(returnValue.length-1)==' ')returnValue=returnValue.substring(0,returnValue.length-1);
	
	return returnValue;
}
