//$Id: IPValidator.js,v 1.15 2011/07/15 04:31:18 aruljose Exp $
function isValidIPAddress(ipaddr)
{
	var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
	ipaddr = trim(ipaddr);
	if (re.test(ipaddr))
        {
	        var parts = ipaddr.split(".");
                if (parts.length < 4)
                {
                        return false;
                }
                if (parseInt(parseFloat(parts[0])) == 0)
                {
                        return false;
                }
                for (var i=0; i<parts.length; i++)
                {
                        if (parseInt(parseFloat(parts[i])) > 255) { return false; }
                }
                return true;
        } else
        {
                return false;
        }
}

function trim(value) {
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   var obj = / /g;
   while (temp.match(obj)) { temp = temp.replace(obj, ""); }
   return temp;
}


function validateInput(f)
{
	  if(!validateParentNodeName())
       {
           return false;
       }

    f.doAction.value = "startButton";
        
	var input = trim(f.ipAddress.value);
	if(input.length == 0)
	{
		alert("Please enter an IP address.");//No I18N
		f.ipAddress.focus();
		return false;
	}
	if(!isValidIPAddress(input))
	{
		alert("Please enter a valid IP address.");//No I18N
		f.ipAddress.focus();
		return false;
	}
	nwClass = computeNetworkClass(input);

	if(nwClass == "D" || nwClass == "E")
	{
		alert("Please enter class A or B or C address only.");//No I18N
		return false;
	}
	
	if(nwClass == 'None')
	{
		alert("Please enter a valid IP address.");
		f.ipAddress.focus();
		return false;
	}
        computeSubnet(f)
        var maskValue=f.mask.value;
        return checkSubnetDetail(maskValue);

	//return true;
}


function addInCombo(f , dmask , prefix , suffix)
{
    var maskValues =new Array("0","128","192" ,  "224" , "240" , "248" , "252" , "254");
    var length = maskValues.length;
    for(var i=0 ; i<length; i++)
    {
        
        var maskValue = prefix+maskValues[i]+suffix;
        if(maskValue  == dmask)
        {
            f.mask.options[f.mask.options.length] = new Option(maskValue, maskValue, true, true);
        }
        else
        {
            f.mask.options[f.mask.options.length] = new Option(maskValue, maskValue, true, false);	
        }
    }
}

function computeNMCombo(f,nwClass)
{
    removeAll(f.mask);
    var dmask = computeDefaultMask(nwClass);
    var netmaskValues ="";
    
    if(nwClass == 'A')
    {
        var prefix = "255.";
        var suffix = ".0.0";
        addInCombo(f , dmask , prefix , suffix);
    }
    if(nwClass == 'A' || nwClass == 'B')
    {
        var prefix = "255.255.";
        var suffix = ".0";
        addInCombo(f , dmask , prefix , suffix);            
    }
    
    if(nwClass == 'A' || nwClass == 'B' || nwClass == 'C' )
    {
        var prefix = "255.255.255.";
        var suffix = "";
        addInCombo(f , dmask , prefix , suffix);
    }
    var maskValue = "255.255.255.255";
    f.mask.options[f.mask.options.length] = new Option(maskValue, maskValue, true, false);	
}


function removeAll(combo)
{
	combo.options.length = 0;
}


function calibrateSubnet(f)
{
	var dataValues = f.netmaskValues.value;
	computeSubnet(f);
}


function computeForm(f)
{

	var ipAddress = f.ipAddress.value;
        if(!isValidIPAddress(ipAddress))
	{
		return;
	}
	nwClass = computeNetworkClass(ipAddress);
	
	if(nwClass == "D" || nwClass == "E" || nwClass == 'None')
	{
		return;
	}
	
	f.ipAddrClass.value = nwClass;
//        this code commented for giving all the subnet in same list
     //   computeNMCombo(f, nwClass);
        computeSubnet(f);
}        

function computeSubnet(f)
{
   var subnet = computeNetAddress(f.ipAddress.value , f.mask.value);
   f.NETWORKADDRESS.value = subnet;
}

function modifySubnet(menuItemName,refId,additionalParams,index)
{
   var menuItemObj = getMenuItemObj(menuItemName);
   var tblModel = getTableModel(refId);
   
   var colIndStatus  = tblModel.getColumnIndex("SubNetwork.STATUS");//No I18N
   var scanStatus = tblModel.getValueAt(index,colIndStatus);//No I18N
   
   if(scanStatus == 3)
   {
	   approveSubnet(menuItemName,refId,additionalParams,index);
   }
   else
   {
   var colInd1  = tblModel.getColumnIndex("SubNetwork.NETID");
   var colInd2  = tblModel.getColumnIndex("SubNetwork.NETWORKADDRESS");
   var colInd3  = tblModel.getColumnIndex("SubNetwork.SUBNETMASKADDRESS");
   var colInd4  = tblModel.getColumnIndex("SubNetwork.SUBNET_NAME");
   var colInd5  = tblModel.getColumnIndex("SubNetwork.SUBNET_DESC");
   var colInd6  = tblModel.getColumnIndex("SubNetwork.VLAN_NAME");
   var colInd7  = tblModel.getColumnIndex("SubNetwork.PHYSICAL_LOC");
   var colInd8  = tblModel.getColumnIndex("SubNetwork.SCAN_DETAILS");
   var colInd9  = tblModel.getColumnIndex("TreeToSubNet.GID");
   var colInd10  = tblModel.getColumnIndex("SubnetDomain.DOMAIN_ID");
   var colInd11  = tblModel.getColumnIndex("SubNetwork.TASK_ID");//No I18N

   
   var netID = tblModel.getValueAt(index,colInd1)
   var subnetAddress = tblModel.getValueAt(index,colInd2)
   var subnetMask  = tblModel.getValueAt(index,colInd3);
   var subnetname= tblModel.getValueAt(index,colInd4);
   var desc= tblModel.getValueAt(index,colInd5);
   var vlan= tblModel.getValueAt(index,colInd6);
   var loc= tblModel.getValueAt(index,colInd7);
   var scanDetails= tblModel.getValueAt(index,colInd8);
   var gid = tblModel.getValueAt(index,colInd9);
   var url = getParentDetails("SUBNET_"+gid);
   var domainID = tblModel.getValueAt(index,colInd10);
   var groupID = tblModel.getValueAt(index,colInd11);
   
   var parentPath = getParentPathWithIfon("SUBNET_"+gid);
   	showURLInDialog('/lan/IPAddressMod.jsp?ipAddress='+subnetAddress+'&netID='+netID+'&subnetMask='+subnetMask+'&subnetname='+encodeURIComponent(subnetname)+'&desc='+encodeURIComponent(desc)+'&vlan='+encodeURIComponent(vlan)+'&loc='+encodeURIComponent(loc)+'&scanDetails='+scanDetails+"&"+url+'&parentPath='+encodeURIComponent(parentPath)+'&subnetDomainID='+domainID+'&groupID='+groupID+'&uid='+new Date().getTime(),'position=absmiddle,modal=yes,top=30,left=250,width=650,scrollbars=no,title=Modify Subnet');//No I18N
	}
}

function  approveSubnet(menuItemName,refId,additionalParams,index)
{
    var userRole = window.USERROLE;
   if(userRole == '1') {
        var menuItemObj = getMenuItemObj(menuItemName);
   
        var tblModel = getTableModel(refId);
        var colInd1  = tblModel.getColumnIndex("SubNetwork.NETID");
        var colInd2  = tblModel.getColumnIndex("SubNetwork.NETWORKADDRESS");
        var colInd3  = tblModel.getColumnIndex("SubNetwork.SUBNETMASKADDRESS");
        var colInd4  = tblModel.getColumnIndex("SubNetwork.SUBNET_NAME");
        var colInd5  = tblModel.getColumnIndex("SubNetwork.SUBNET_DESC");
        var colInd6  = tblModel.getColumnIndex("SubNetwork.VLAN_NAME");
        var colInd7  = tblModel.getColumnIndex("SubNetwork.PHYSICAL_LOC");
        var colInd8  = tblModel.getColumnIndex("SubNetwork.SCAN_DETAILS");
        var colInd9  = tblModel.getColumnIndex("SubNetwork.STATUS");
        var colInd10  = tblModel.getColumnIndex("TreeToSubNet.GID");

   
        var netID = tblModel.getValueAt(index,colInd1)
        var subnetAddress = tblModel.getValueAt(index,colInd2)
        var subnetMask  = tblModel.getValueAt(index,colInd3);
        var subnetname= tblModel.getValueAt(index,colInd4);
        var desc= tblModel.getValueAt(index,colInd5);
        var vlan= tblModel.getValueAt(index,colInd6);
        var loc= tblModel.getValueAt(index,colInd7);
        var scanDetails= tblModel.getValueAt(index,colInd8);
        var subnetTreeID = tblModel.getValueAt(index,colInd10);

        var netStatus = tblModel.getValueAt(index,colInd9)
   
        if(netStatus == 3)
        {
            var treeID = tree.getSelectedItemId();
            document.getElementById("treeID").value = treeID;

            var temp = treeID.split("_");
            var parentID = temp[0];
            if(parentID == "SUBNET")
            {
                treeID = tree.getParentId(tree.getSelectedItemId());
                temp = treeID.split("_");
                parentID = temp[0];
            }
            if(temp.length > 1)
            {
                parentID = temp[1];
            }

            var parentName = tree.getItemText("GROUP_0");
            var url = "&parentID=0&parentName="+parentName+"&uid="+new Date().getTime();

            showURLInDialog('/lan/IPAMApproveSubnet.jsp?subnetTreeID='+subnetTreeID+'&isAddFromTree=true&ipAddress='+subnetAddress+'&netID='+netID+'&subnetMask='+subnetMask+'&subnetname='+encodeURIComponent(subnetname)+'&desc='+encodeURIComponent(desc)+'&vlan='+encodeURIComponent(vlan)+'&loc='+encodeURIComponent(loc)+'&scanDetails='+scanDetails+url ,'top=150,left=250,width=600,position=absmiddle,modal=yes,scrollbars=no,title=Approve Subnet');//No I18N
        }
    } else {
         showURLInDialog('/framework/UACMessage.jsp?','position=relative,modal=yes,scrollbars=no,title=Authorization Failed');
    }
}

function subnetModifiedAction(response,reqOptions)
{
   var formDiv = document.getElementById("modifySubnet_div");
   document.getElementById("modifySubnet_container").appendChild(formDiv);
   refreshSubView("subnetView",true,new AjaxOptions({USEXMLHTTPFORREFRESH:true,NAVIGABLE:false}));     
}


function cancelModifiedAction()
{
   var formDiv = document.getElementById("modifySubnet_div");
   document.getElementById("modifySubnet_container").appendChild(formDiv);
}

<!-- my own -->
function computeDefaultMask(ipClass)
{
    maskValue = "255.255.255.255";
    if(ipClass == 'A')
    {
        maskValue = "255.0.0.0";
    }
    if(ipClass == 'B')
    {
        maskValue = "255.255.0.0";
    }
    if(ipClass == 'C')
    {
        maskValue = "255.255.255.0";
    }
    return maskValue;;
}



function computeNetworkClass(ip)
{
    if(ip.length == 0)
    {
        return "None";
    }
    parts = ip.split(".");
    var oct1 = parts[0];
    var nwClass = "None";
    if ((oct1 > 0) && (oct1 <= 127))
    {
        nwClass = "A";
    }
    if ((oct1 > 127) && (oct1< 192))
    {
        nwClass = "B";
    }
    if ((oct1 > 191) && (oct1 < 224))
    {
        nwClass = "C";
    }
    if(oct1 >= 224 && oct1 <= 239)
    {
        return "D";
    }
    if(oct1 >= 240 && oct1 <= 247)
    {
        return "E";
    }
    return nwClass;
}


function computeNetAddress(ip, nm)
{
    spVal = ip.split(".");
    spNM  = nm.split(".");
    var nm1 = eval(spNM[0] & spVal[0]);
    var nm2 = eval(spNM[1] & spVal[1]);
    var nm3 = eval(spNM[2] & spVal[2]);
    var nm4 = eval(spNM[3] & spVal[3]);
    var nmAddr = nm1 + "." + nm2 + "." + nm3 + "."+ nm4;
    return nmAddr;
}


