﻿$(function() {
    $("#topPart h1").html("<span style='color: blue;'>IP</span>ing");
    $("#screenResX").text(window.screen.width);
    $("#screenResY").text(window.screen.height);
    setWindowSizeDate();

    var colors = window.screen.colorDepth;
    $("#screenColorDepth").text(window.screen.colorDepth);
    $("#screenNumOfColors").text(Math.pow(2, colors));

    //check for java support
    if (navigator.javaEnabled()) $("#javaSupport").html("<span class='yes'>כן</span>");
    else $("#javaSupport").html("<span class='no'>לא</span>");

    //check for flash support
    var supportFlash = false;
    var flashVer = 0;

    if (!$.browser.msie) {
        var flashPlugin = (navigator.mimeTypes &&
                       navigator.mimeTypes["application/x-shockwave-flash"] &&
                       navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) ?
                       navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0;
        if (flashPlugin && flashPlugin.description) {
            supportFlash = true;
            var flashVerMatch = flashPlugin.description.toString().match(/(\d)+(\D)*/g);
            flashVer = "";
            for (var i = 0; i < flashVerMatch.length; i++) flashVer += flashVerMatch[i];
        }
    } else if ($.browser.msie) {
        flashVer = 20;
        for (var i = flashVer; i > 0; i--) {
            try {
                var flashObj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i.toString());
                if (flashObj != null) {
                    flashVer = i;
                    supportFlash = true;
                    break;
                }
            }
            catch (err) { }
        }
    }

    if (supportFlash) $("#flashSupport").html("<span class='yes'>כן</span> גרסה " + flashVer);
    else $("#flashSupport").html("<span class='no'>לא</span> (<a href='http://get.adobe.com/flashplayer/' target='_blank'>לחץ להורדת קובץ התקנה של פלאש</a>)");

    //Operating system
    $("#operatingSystem").html(DetectOS());


    $("#pingHostName").focus(function() {
        if ($(this).val() == 'לדוגמא google.com') $(this).val('').css('color', 'black');
    }).blur(function() {
        if ($(this).val() == '') $(this).val('לדוגמא google.com').css('color', 'gray');
    });

    $("#whoisDomain").focus(function() {
        if ($(this).val() == 'לדוגמה iping.co.il') $(this).val('').css('color', 'black');
    }).blur(function() {
        if ($(this).val() == '') $(this).val('לדוגמה iping.co.il').css('color', 'gray');
    });

    $("#traceRtHostName").focus(function() {
        if ($(this).val() == 'לדוגמא google.com') $(this).val('').css('color', 'black');
    }).blur(function() {
        if ($(this).val() == '') $(this).val('לדוגמא google.com').css('color', 'gray');
    });

    $("#domain2gis").focus(function() {
        if ($(this).val() == 'לדוגמה iping.co.il') $(this).val('').css('color', 'black');
    }).blur(function() {
        if ($(this).val() == '') $(this).val('לדוגמה iping.co.il').css('color', 'gray');
    });

    $(window).bind('resize', function() {
        setWindowSizeDate();
    });
});

function setWindowSizeDate() {
    $("#browserSizeX").text($.clientSize().width);
    $("#browserSizeY").text($.clientSize().height);
}

function getMacAddress()
{
    var macAddress;
    try {
        var obj = new ActiveXObject("WbemScripting.SWbemLocator");
        var s = obj.ConnectServer(".");
        var properties = s.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
        var e = new Enumerator(properties);

        while (!e.atEnd()) {
            e.moveNext();
            var p = e.item();
            if (!p) continue;
            macAddress = p.MACAddress;
        }
    }
    catch (ex) {
        macAddress = "לא ניתן לקבוע. אין הרשאה להצגת המידע.";
    }
    
    $("#macAddress").html(macAddress);
}

var openPortsData;
function ScanPorts() {
    $("#portScanner").html("סורק פורטים... אנא המתן.<br /><img src='portScanner.gif' /><span id='stillWorkingMsg' style='display: none;'><br />הסריקה עלולה להימשך מספר דקות. אנא המתן.</span>");
    setTimeout("$('#stillWorkingMsg').fadeIn('slow')", 10000);
    $.ajax({
        type: "POST",
        url: "NetworkTools.asmx/ScanPorts",
        contentType: "application/json; charset=utf-8",
        data: "{StartPort: 1, EndPort: 10000}",
        dataType: "json",
        cache: false,
        success: function(data) {
            //count how many unique open ports found
            var openPorts = 0;
            var currentPort = 0;
            for (var i = 0; i < data.length; i++) {
                if (data[i].PortNo != currentPort) {
                    openPortsData = data;
                    currentPort = data[i].PortNo;
                    openPorts++;
                }
            }

            $("#portScanner").html("נמצאו " + openPorts.toString() + " <a href='javascript:ShowOpenPorts();'>פורטים פתוחים</a> במחשבך<br /><a href='javascript:ShowOpenPorts();'>לחץ כאן להצגת הפורטים הפתוחים</a><div id='openPortsList' style='display: none;'></div>");
        }
    });
}


function PreparePortsResults() {
    var openPortsTable =
        "<table class='openPortsTable' border='0' cellpadding='0' cellspacing='0'>" +
        "   <thead>" +
        "       <tr>" +
        "           <th>מספר פורט</th>" +
        "           <th>סוג</th>" +
        "           <th>שם</th>" +
        "           <th>תיאור</th>" +
        "       </tr>" +
        "   </thead>" +
        "   <tbody>";
    for (var i = 0; i < openPortsData.length; i++) {
        openPortsTable += "<tr>";
        openPortsTable += "     <td align='center'>" + openPortsData[i].PortNo + "</td>";
        openPortsTable += "     <td align='center'>" + openPortsData[i].Type + "</td>";
        openPortsTable += "     <td>" + openPortsData[i].Name + "</td>";
        if (openPortsData[i].SpecHeb != '') openPortsTable += "<td>" + openPortsData[i].SpecHeb + "</td>";
        else openPortsTable += "<td>" + openPortsData[i].Spec + "</td>";
        openPortsTable += "</tr>";
    }
    openPortsTable += "</tbody></table>";

    $("#openPortsList").html(openPortsTable).dialog({
        bgiframe: true,
        modal: true,
        width: 750,
        height: 400,
        title: 'תוצאות סריקת פורטים',
        buttons: {
            אישור: function() {
                $(this).dialog('close');
            }
        }
    });

    $(".openPortsTable tr:odd").css("background-color", "lightyellow");

    dialogSetup = true;
}

var dialogSetup = false;
function ShowOpenPorts() {
    if(dialogSetup) $("#openPortsList").dialog('open');
    else PreparePortsResults();
}

function SendPing() {
    if (arguments.length > 0) $("#pingHostName").val($("#ipAddress").text());

    $("#ping").html("<table border='0'><tr><td><img src='ping.gif' /></td><td>שולח פינג...</td></tr></table>");
    $.ajax({
        type: "POST",
        url: "NetworkTools.asmx/PingHost",
        contentType: "application/json; charset=utf-8",
        data: "{DestAdressOrIp: '" + $("#pingHostName").val() + "', Loop: " + $("#pingLoops").val() + "}",
        dataType: "json",
        cache: false,
        success: function(data) {
            var errorCount = 0;
            var totalTime = 0, minTime = 0, maxTime = 0;
            var pingResults = "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";
            var loops = parseInt($("#pingLoops").val());
            for (var i = 0; i < loops; i++) {
                var finalRow = "";
                if (i == loops - 1) finalRow = " style='border-bottom: dotted 1px black;'";

                pingResults += "<tr style='line-height: 20px;'>";
                if (data[i].Address.indexOf("Error:") == -1) {
                    pingResults += "    <td" + finalRow + " align='right'>תשובה מ-<span style='color: green;'>" + data[i].Address + "</span>:&nbsp;</td>";
                    pingResults += "    <td" + finalRow + ">באורך <span style='color: green;'>" + data[i].BufferSize + "</span> ביט&nbsp;</td>";
                    pingResults += "    <td" + finalRow + " align='left'>לאחר <span style='color: green;'>" + data[i].RoundtripTime + "</span>ms&nbsp;</td>";

                    var RoundtripTime = parseInt(data[i].RoundtripTime);
                    totalTime += RoundtripTime;
                    if (i == 0 || RoundtripTime < minTime) minTime = RoundtripTime;
                    if (RoundtripTime > maxTime) maxTime = RoundtripTime;
                }
                else {
                    pingResults += "<td colspan='3'><span style='color: red;'>ארעה שגיאה בעת שליחת חבילת נתונים</span></td>";
                    errorCount++;
                }
                pingResults += "</tr>";
            }
            pingResults += "</table>";

            pingResults += "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";
            pingResults += "    <tr>";
            pingResults += "        <td>נשלחו: <span style='color: blue;'>" + loops + "</span></td>";
            pingResults += "        <td>עברו בהצלחה: <span style='color: green;'>" + (loops - errorCount) + "</span></td>";
            pingResults += "        <td>נכשלו: <span style='color: red;'>" + errorCount + "</span></td>";
            pingResults += "    </tr>";
            pingResults += "    <tr>";
            pingResults += "        <td>ממוצע: <span style='color: blue;'>" + (totalTime / loops) + "</span></td>";
            pingResults += "        <td>המהיר ביותר: <span style='color: green;'>" + minTime + "</span></td>";
            pingResults += "        <td>האיטי ביותר: <span style='color: red;'>" + maxTime + "</span></td>";
            pingResults += "    </tr>";
            pingResults += "</table>";

            $("#ping").html(pingResults);
        }
    });
}

var whoisQueryResult = "";
function Whois() {
    $("#whois").html("<table border='0'><tr><td><img src='ping.gif' /></td><td>בודק שם מתחם...</td></tr></table>");

    $.ajax({
        type: "POST",
        url: "NetworkTools.asmx/Whois",
        contentType: "application/json; charset=utf-8",
        data: "{domain: '" + $("#whoisDomain").val() + "'}",
        dataType: "json",
        cache: false,
        success: function(data) {
            var whoisResult = data;
            whoisQueryResult = "<span style='font-size: 12px;'>" + data.replace(/\n/g, "<br />") + "</span>";

            if (whoisResult.indexOf("No match for") > -1
                || whoisResult.indexOf("NOT FOUND") > -1
                || whoisResult.indexOf("No data was found") > -1
                || whoisResult.indexOf("Not found") > -1
                || whoisResult.indexOf("Not authorized") > -1) {
                whoisResult = "שם המתחם פנוי או לא נמצא מידע";
            }
            else {
                whoisResult = "נמצא מידע אודות שם המתחם";
            }

            $("#whois").html(whoisResult + "<br /><a href='javascript:ShowDomainDetailsDialog();'>לחץ לפרטים נוספים</a><div id='whoisResult' style='display: none;'></div>");
        }
    });
}

var whoisDialogSetup = false;
function ShowDomainDetailsDialog() {
    if (whoisDialogSetup) $("#whoisResult").dialog('open');
    else $("#whoisResult").html(whoisQueryResult).dialog({
        bgiframe: true,
        modal: true,
        width: 750,
        height: 400,
        title: 'תוצאות בדיקת שם מתחם',
        buttons: {
            אישור: function() {
                $(this).dialog('close');
            }
        }
    });
}

var routeData;
function TraceRT() {
    $("#traceRoute").html("<table border='0'><tr><td><img src='ping.gif' /></td><td>בודק ניתוב...</td></tr></table>");

    $.ajax({
        type: "POST",
        url: "NetworkTools.asmx/TraceRt",
        contentType: "application/json; charset=utf-8",
        data: "{Destination: '" + $("#traceRtHostName").val() + "'}",
        dataType: "json",
        cache: false,
        success: function(data) {
            routeData = data;
            var routeCount = data.length - 2;
            $("#traceRoute").html("ניתוב ליעד בוצע דרך " + routeCount + " <a href='javascript:ShowRouteData();'>נתבים</a><br /><a href='javascript:ShowRouteData();'>לחץ כאן להצגת מפת ניתוב</a><div id='traceRtList' style='display: none;'></div>");
        }
    });
}

function PrepareTraceRtResults() {
    var mapTrace = "http://maps.google.com/staticmap?center=28.921631,9.843750&zoom=1&size=600x240&key=ABQIAAAAVKoaAolXiZ9E5udDaC5IJRSFAUq0kUZ9aOCSsyq6r_4b_FVpmRSEmZjprjmS6POsunDUVa5Me7manw&path=rgba:0xFF000080,weight:5|";
    var routeTable = "<table border='0' class='traceRouteTable' cellspacing='0' cellpadding='0'>";

    for (var i = 2; i < routeData.length; i++) {
        if (i > 2) {
            if (i > 3) mapTrace += "|";
            mapTrace += routeData[i].Lat + "," + routeData[i].Lon;
        }

        var routeLineArr = routeData[i].RouteLine.split(' ');

        var routeLine = "<tr>";
        var count = 0;
        for (var j = 0; j < routeLineArr.length; j++) {
            if (routeLineArr[j] != "") {
                routeLine += "<td";
                if (count == 4) routeLine += " align='left'";
                routeLine += ">";
                if (count == 5) routeLine = routeLine.substring(0, routeLine.lastIndexOf("</td>"));
                routeLine += routeLineArr[j];
                routeLine += "</td>";
                count++;
            }
        }
        routeLine += "</tr>";
        routeTable += routeLine;
    }
    routeTable += "</table>";

    var html =
        "<center><img src='" + mapTrace + "' /><br /><br />" +
        routeTable +
        "</center>";

    $("#traceRtList").css("display", "block");
    $("#traceRtList").html(html).dialog({
        bgiframe: true,
        modal: true,
        width: 750,
        height: 400,
        title: 'תוצאות בדיקת ניתוב',
        buttons: {
            אישור: function() {
                $(this).dialog('close');
            }
        }
    });
}

function checkGIS() {
    $("#domainGIS").html("<table border='0'><tr><td><img src='ping.gif' /></td><td>בודק מיקום...</td></tr></table>");

    $.ajax({
        type: "POST",
        url: "NetworkTools.asmx/ServerLocation",
        contentType: "application/json; charset=utf-8",
        data: "{Address: '" + $("#domain2gis").val() + "'}",
        dataType: "json",
        cache: false,
        success: function(data) {
            $("#domainGIS").html("<span style='text-align: left;'>" + data + "</span>");
        }
    });
}

var traceRtDialogSetup = false;
function ShowRouteData() {
    if (traceRtDialogSetup) $("#traceRtList").dialog('open');
    else PrepareTraceRtResults();
}

function setHomepage() {
    if (document.all) {
        document.body.style.behavior = 'url(#default#homepage)';
        document.body.setHomePage('http://www.iping.co.il');

    }
    else if (window.sidebar) {
        if (window.netscape) {
            try {
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            }
            catch (e) {
                alert("הדפדפן של אינו תומך באופציה זו.\nאם ברצונך לאפשר אופציה זו היכנס ל about:config ושנה את האופציה 'signed.applets.codebase_principal_support' ל-true");
            }
        }
        var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
        prefs.setCharPref('browser.startup.homepage', 'http://www.iping.co.il');
    }
}

function CreateBookmarkLink() {
    title = "iPing.co.il - כלים ומידע ברשת"; 
    url = "http://www.iping.co.il";

	if (window.sidebar) // Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url,"");
	else if(window.external) // IE Favorite
		window.external.AddFavorite( url, title);
	else if(window.opera && window.print) // Opera Hotlist
		return true;
}

function PrepareIpCalculator() {
    $("#ipCalculator").dialog({
        bgiframe: true,
        modal: true,
        width: 750,
        height: 500,
        title: 'מחשבון IP',
        buttons: {
            סגור: function() {
                $(this).dialog('close');
            }
        }
    });
}

var ipCalculatorDialogSetup = false;
function OpenIpCalculator() {
    if (ipCalculatorDialogSetup) $("#ipCalculator").dialog('open');
    else PrepareIpCalculator();
}



function DetectOS() {
    var os, ua = navigator.userAgent;
    if (ua.match(/Win(dows )?NT 6\.1/)) {
        os = "חלונות 7 (Windows 7)";
    }
    else if (ua.match(/Win(dows )?NT 6\.0/)) {
        os = "חלונות ויסטה (Windows Vista)";
    }
    else if (ua.match(/Win(dows )?NT 5\.2/)) {
        os = "Windows Server 2003";
    }
    else if (ua.match(/Win(dows )?(NT 5\.1|XP)/)) {
        os = "חלונות אקס פי (Windows XP)";
    }
    else if (ua.match(/Win(dows)? (9x 4\.90|ME)/)) {
        os = "Windows ME";
    }
    else if (ua.match(/Win(dows )?(NT 5\.0|2000)/)) {
        os = "חלונות 2000 (Windows 2000)";
    }
    else if (ua.match(/Win(dows )?98/)) {
        os = "חלונות 98 (Windows 98)";
    }
    else if (ua.match(/Win(dows )?NT( 4\.0)?/)) {
        os = "Windows NT";
    }
    else if (ua.match(/Win(dows )?95/)) {
        os = "חלונות 95 (Windows 95)";
    }
    else if (ua.match(/Mac|PPC/)) {
        os = "Mac OS";
    }
    else if (ua.match(/Linux/)) {
        os = "לינוקס (Linux)";
    }
    else if (ua.match(/(Free|Net|Open)BSD/)) {
        os = RegExp.$1 + "BSD";
    }
    else if (ua.match(/SunOS/)) {
        os = "Solaris";
    }
    else {
        os = "לא ניתן לזהות";
    }

    return os;
}
