function convert-idn($domain,$coding) {
    $idn = new-object System.Globalization.IdnMapping
    if ($coding -eq "ascii") {
        $idn.GetAscii($domain)
        }
    elseif ($coding -eq "unicode") {
        $idn.GetUnicode($domain) 
    }
}

function get-whoisvalues {
    param(
        [CmdLetBinding()]
        [parameter(mandatory=$true)]
        [validatenotnullorempty()]
        $whoisinput,
        $formattedName
    )
    begin {
        remove-variable properties -ErrorAction SilentlyContinue
    }
    process {
        $properties = @{site=$formattedName}
        #$properties = @{}
        Write-Verbose -Message "Starting verbose..."
        $newNsLoop = 1
        write-verbose -Message "Input is: $($input.count) lines"
        write-verbose -Message "Input: $($input)"
        write-verbose -Message "Input: $($input.gettype())"
        foreach ($line in $whoisinput) {
        if ($line -like "state:*") {
            $properties.state = $line.split(":")[-1].trimstart(" ")
        }
        elseif ($line -like "domain:*" -or $line -like "Domain Name:*") {
            $properties.domain = $line.split(":")[-1].trimstart(" ")
        }
        elseif ($line -like "holder:*" -or $line -like "Registrant Organization:*") {
            $properties.holder = $line.split(":")[-1].trimstart(" ")
        }
        elseif ( $line -like "created:*" -or $line -like "Creation Date:*") {
            $properties.created = $line.split(":")[1].trimstart(" ")
        }
        elseif ($line -like "modified:*" -or $line -like "Updated Date:*") {
            $properties.modified = $line.split(":")[1].trimstart(" ")
        }
        elseif ($line -like "expires:*" -or $line -like "Registrar Registration Expiration Date:*" -or $line -like "Registry Expiry Date:*") {
            $properties.expires = $line.split(":")[1].trimstart(" ")
        }
        elseif ($line -like "nserver:*" -or $line -like "Name Server:*") {
            if ($newNsLoop -eq 1) {
                $properties.nsserver1 = $line.split(":")[-1].trimstart(" ")
                $newNsLoop++
            }
            elseif ($newNsLoop -eq 2) {
                $properties.nsserver2 = $line.split(":")[-1].trimstart(" ")
                $newNsLoop++
            }
            elseif ($newNsLoop -eq 3) {
                $properties.nnsserver3 = $line.split(":")[-1].trimstart(" ")
            }
            else { write-output "Couldnt match ns"}
        }
        elseif ($line -like "status:*" -or $line -like "Domain Status:") {
            $properties.status = $line.split(":")[-1].trimstart(" ")
        }
        elseif ($line -like "transferred:*") {
            $properties.transferred = $line.split(":")[-1].trimstart(" ")
        }
        elseif ($line.ToLower() -like "dnssec:*") {
            $properties.dnssec = $line.split(":")[-1].trimstart(" ")
        }
        elseif ($line.ToLower() -like "registrar whois server:*") {
            $properties.whois = $line.split(":")[-1].trimstart(" ")
        }
        elseif ($line.ToLower() -like "registrar:*") {
            $properties.registrar = $line.split(":")[-1].trimstart(" ")
        }

        }#end foreach
        #$properties.site=$formattedName
        Write-Verbose "Properties has $($properties.count)"
        $tempObject = new-object psobject -Property $properties 
        return $tempObject
    }
}

function ping-ripe {
param(
    $baseUrl = 'http://rest.db.ripe.net/search.json?query-string=',
    $ip = '81.170.175.179'
)
    $url = "$($baseUrl)$($ip)"
    $result = Invoke-RestMethod -uri $url
    $values = $result.objects.object.attributes |select @{name='Attribute';expression={$_.attribute|where-object {$_.name -like 'descr'}}}

    $outputObject = $attributeObject = @()
    foreach ($value in $values) {    
        $tempObject = new-object psobject -Property @{value=$value.attribute.value}
        $attributeObject += $tempObject    
    }
    return $outputObject += new-object psobject -Property @{input=$ip;value=$($attributeObject.value -join ";")}
}

function ping-arin {
param(
    $baseUrl = "http://whois.arin.net/rest/ip/",
    $ip
    )    
    $url = "$($baseUrl)$ip"
    $headers = @{"Accept"="application/json"}
    $result = Invoke-RestMethod -uri $url -Headers $headers

    $outputObject = new-object psobject -Property @{input=$ip;value=$result.net.orgRef.'@name'}
    return $outputObject
}