/***************************************
*******MY-ADDR PROJECT COPYRIGHT******** 
****************************************/
function iptonum(ip) {
   var parts = ip.split('.');
   return (16777216*parts[0])+(65536*parts[1])+(256*parts[2])+Number(parts[3]);
};

function numtoip(ipnum) {
   return Math.floor(ipnum/16777216)%256+'.'+Math.floor(ipnum/65536)%256+'.'+Math.floor(ipnum/256)%256+'.'+Math.floor(ipnum)%256;
};

function write_result(result,html_id)
{
	if (result=='close'){document.getElementById('m'+html_id).innerHTML = ''; document.getElementById('m'+html_id).style.display='none';}
	if (result=='open') { document.getElementById(html_id).innerHTML = '<span style="color:green">success</span>'; open_port=true;}
}

function request(host,port,timeout,html_id)
{
      var img = new Image();	
      img.onerror = function () {
         if (!img) return;
         img = undefined;
         connections_count--;
         write_result('open',html_id);
      };
      img.onload = img.onerror;
	  rand_num = Math.floor(Math.random()*1000);
      switch(port){
         case 25:  src = 'mailto://asdasd'+port+'_'+rand_num+'@' + host ; break;
         case 70:  src = 'gopher://'+host+'/'; break;
         case 119: src = 'news://'+host+'/'; break;
         case 443: src = 'https://'+host+'/'+port+'_'+rand_num+'.bmp'; break;
         default:  src = 'http://'+host+':'+port+'/'+port+'_'+rand_num+'.bmp'; break;
      }
      img.src = src;
      setTimeout(function () {if (!img) return;img = undefined; connections_count--; write_result('close',html_id);}, timeout);
 }
 
var connections_count = 0;
var open_port         = false;
function start_scan(host,min,max,timeout,connections_limit)
{
	last = min;
	if (connections_limit-connections_count>0) for(i=0;i<connections_limit-connections_count;i++){
		last = port = parseInt(min)+i+1;
		connections_count++;
		if (port>max) break;
		document.getElementById('result').innerHTML = '<div style="font-size:10px;" id="mport_'+port+'">'+host+':'+port+' = <span id="port_'+port+'"> checking </span></div>'+document.getElementById('result').innerHTML;
		request(host,port,timeout,'port_'+port);
	}
	if (last<=max) setTimeout('start_scan("'+host+'",'+last+','+max+','+timeout+','+connections_limit+')',100);
	else{
		document.getElementById('done').style.display = 'block';
		if (open_port==false) document.getElementById('done').innerHTML += ' (no open ports found)';
	}
}

function hosts_scan(ipnum1,ipnum2,port,timeout,connections_limit)
{
	ipnum = ipnum1;
	if (connections_limit-connections_count>0) for(i=0;i<connections_limit-connections_count;i++){
		ipnum = parseInt(ipnum1)+i+1;
		connections_count++;
		if (ipnum>ipnum2) break;
		if (document.getElementById('port_'+ipnum)!=undefined) continue;
		document.getElementById('result').innerHTML = '<div style="font-size:10px;" id="mport_'+ipnum+'">'+numtoip(ipnum)+':'+port+' = <span id="port_'+ipnum+'"> checking </span></div>'+document.getElementById('result').innerHTML;
		request(numtoip(ipnum),port,timeout,'port_'+ipnum);
	}
	if (ipnum<=ipnum2) setTimeout('hosts_scan('+ipnum+','+ipnum2+','+port+','+timeout+','+connections_limit+')',100);
	else{
		document.getElementById('done').style.display = 'block';
		if (open_port==false) document.getElementById('done').innerHTML += ' (no open ports found)';
	}
}
