/*
Copyright (c) 2005-2006 TeamF1, Inc.
All rights reserved.
*/

function nextActiveFieldGet (srcObj)
    {
    if (!srcObj) return null;
    if ((srcObj.name).indexOf("ip4.") == 0)    return null;
    var currObj = null;
    var formObj = srcObj.form;
    var nFormElmnts = formObj.elements.length;
    for (var i = 0; i < nFormElmnts; i++)
        {
        currObj = formObj.elements[i];
        if (currObj.type != "hidden" &&
            !currObj.disabled)
            {
            if (srcObj == currObj && i != (nFormElmnts - 1))
               return formObj.elements[i+1]
           }
        }
    return null;
    }
 
/* 
* minVal & maxVal are the min and max values for the specified octet.
* errStr is the message that need to be displayed when the specified octet fails
* to statisfy specified values.
*/
function ipv4ByteCheck (eventObj, srcObj, minVal, maxVal, prefixStr, suffixStr)
    {
    if (!eventObj || !srcObj)
         return false;
    var charUniCode = eventObj.charCode ? eventObj.charCode : eventObj.keyCode;
    /* process only 'tab', '.' keys and space*/
    if (charUniCode != 9 &&
        charUniCode != 110 && charUniCode != 190 &&
        charUniCode != 32)
         return true;
         
    var value = srcObj.value;
    /* return false if field value is empty */
    if (value.length == 0)
        return true;
    if (!minVal) minVal = 0;
    if (!maxVal) maxVal = 255;
    if (!prefixStr) prefixStr = 'Invalid IP address.';
    if (!suffixStr) suffixStr = 'for each octet.';
    if (!(numericValueRangeCheck (srcObj, '', '', minVal, maxVal, true, prefixStr, suffixStr)))
         {
         srcObj.focus ();
         return false;
         }
    /* move focus to next active object if '.' is pressed */
    if (charUniCode == 110 || charUniCode == 190 ||
        charUniCode == 32)
        {
        var nextObj = nextActiveFieldGet (srcObj);
        if (nextObj)
            {
            nextObj.focus ();
            nextObj.select ();
            }
        return false;
        }
   
    return true;
    }
 
function ipv4AddrsCheck (ipv4TblIdArr)
    {
    for (var i = 0; i < ipv4TblIdArr.length; ++i)
        {
        var result = false;
        var strArr = ipv4TblIdArr[i].split(",");
        if (strArr.length > 1)
            {
            /*
            * the string will be in the following format.
            * strArr[0] - IPV4 address table ID.
            * strArr[1] - IPV4 address address type (IP,SM,NID).
            * strArr[2] - optional/mandatory (true/false).
            * strArr[3] - prefix error string.
            * strArr[4] - suffix error string.
            */
            result = ipv4AddrOctetsValidate (strArr[0], strArr[1],
                                             (strArr[2] == 'true'),
                                             true, strArr[3], strArr[4], true);
            }
        else
            result = ipv4AddrOctetsValidate (strArr[0], 'IP', false);
        if (!result) return false;
        }
     }
function ipv4AddrOctetsValidate 
    (ipv4TblId, ipv4AddrTypeStr, optFlag, alertFlag, prefixStr, suffixStr, octetShowFlag)
    {
    if (!ipv4TblId) return false;
    var obj = document.getElementById(ipv4TblId);
    var objArr = obj.getElementsByTagName("INPUT");
    if (!objArr.length) return false;
    if (!ipv4AddrTypeStr) ipv4AddrTypeStr = 'IP';
    return ipv4AddrFormatCheck (objArr, ipv4AddrTypeStr, optFlag, alertFlag,
                                prefixStr, suffixStr, octetShowFlag)
    }
function ipv4AddrFormatCheck
    (objArr, ipv4AddrTypeStr, optFlag, alertFlag, prefixStr, suffixStr, octetShowFlag)
    {
    var ipOctetMinVal = 0;
    var ipOctetMaxVal = 255;
    var isFirstByteZero = false;
    var isError = false;
    var ipOctetSpecified = false;
    var errMsg = '';
    if (objArr[0].disabled) return true;
    
    for (var i = 0; i < objArr.length; i++)
         {
         if (objArr[i].disabled) break;
         ipOctetMinVal = 0;
         ipOctetMaxVal = 255;
         isError = false;
         var value = objArr[i].value;
         var errMsg = '';
         if (alertFlag)
             {
             if (prefixStr) errMsg = prefixStr;
             errMsg += " Please enter a value between " + ipOctetMinVal +
                       " - " + ipOctetMaxVal + " ";
             if (suffixStr) errMsg += suffixStr;
             }
         if (value.length == 0)
             {
             if (optFlag && !ipOctetSpecified)
                 {
                 continue;
                 }
             var j = 0;
             if (i == 0)
                 {
                  /* check for full empty IP address */
                 for (j = i; j < objArr.length; ++j)
                     {
                     if ((objArr[j].value).length)
                         break;
                      }
                 }
             if (errMsg)
                 {
                 if ((i == 0) && (j == objArr.length) && errMsg)
                     alert ("IP address not specified.\n" + prefixStr +
                            "Please enter a value between " + ipOctetMinVal +
                            " - " + ipOctetMaxVal + " for each octet.");
                 else
                     {
                     if (octetShowFlag) errMsg += (i+1);
                     alert (errMsg);
                     }
                 }
             objArr[i].focus ();
             return false;
             }
         if (optFlag)
             {
             if (i > 0 && !ipOctetSpecified)
                 {
                 if (errMsg)
                     {
                     if (octetShowFlag) errMsg += (i+1);
                     alert (errMsg);
                     }
                 objArr[i].focus ();
                 return false;
                 }
             ipOctetSpecified = true;
             }
         if (i == 0)
             {
             if (parseInt (value) == 0)
                 {
                 isFirstByteZero = true;
                 continue;
                 }
             ipOctetMinVal = 1;
             }
         if (((i+1) == 4) && (ipv4AddrTypeStr == 'IP'))
             {
/*                 
             if (!isFirstByteZero)
                 ipOctetMinVal = 1;
*/                 
             ipOctetMaxVal = 254;
             }
             
         if (((parseInt (value) > 0) && isFirstByteZero) ||
             (parseInt (value) < ipOctetMinVal || parseInt (value) > ipOctetMaxVal))
             {
             isError = true;
             }
         if (isError)
             {
             if (isFirstByteZero) --i;
             if (alertFlag)
                 {
                 if (i == 0)
                     ipOctetMinVal = 1;
                 if (prefixStr) errMsg = prefixStr;
                 errMsg += " Please enter a value between " + ipOctetMinVal +
                           " - " + ipOctetMaxVal + " ";
                 if (suffixStr) errMsg += suffixStr;
                 if (octetShowFlag) errMsg += (i+1);
                 alert (errMsg);
                 }
             objArr[i].focus ();
             return false;
             }
         }
     return true;
     }
     
function ipv4AddrNoZero (ipv4TblId, alertFlag, errMsg)
    {
    if (!ipv4TblId) return false;
    var obj = document.getElementById(ipv4TblId);
    var objArr = obj.getElementsByTagName("INPUT");
    if (!objArr.length) return false;
    var ipValue = "";
    for (var i = 0; i < objArr.length; i++)
         {
         if (objArr[i].disabled) break;
         ipValue += objArr[i].value;
         }
    if (parseInt (ipValue, 10) <= 0)
         {
         if (alertFlag)
              alert (errMsg);
         return false;
         }
    return true;
    }

