var g_kv_max = 3;
var g_kv_cnt = 0;

var g_fid = '';
var g_dir = '';

var g_req_num = 10;

var g_delimiter = "&nbsp;";

var g_req = new Array(g_req_num);

//containers for each antiviurs result
var g_container = new Array(g_req_num);
for (i = 0; i < g_container.length; i++) {
	g_container[i] = 0;
}
//containers for statistics like: 24/36 (66.67%)
var g_container_stat = new Array(g_req_num);
//save the fid corresponding to container
var g_container_fid = new Array(g_req_num);
for (i = 0; i < g_container_fid.length; i++) {
	g_container_fid[i] = 0;
}

//the uploaded files must less than the files_max
var g_files_max = 10;
var g_files_idx = 0;
var g_files_num = 0; //set it by other page
var g_files = new Array(g_files_max);
var g_dirs = new Array(g_files_max);
var g_infected = new Array(g_files_max);
for (i = 0; i < g_infected.length; i++) {
	g_infected[i] = 0;
}

function loadXMLDoc(rid, url, func) {
	//alert("request:"+rid);
    if (window.XMLHttpRequest) {
		//alert("XMLHttpRequest OK");
        g_req[rid] = new XMLHttpRequest();
        g_req[rid] .onreadystatechange =function () {
			func(rid);
		}
        g_req[rid] .open("GET", url, true);
        g_req[rid] .send(null);
    } else if (window.ActiveXObject) {
		//alert("ActiveXObject OK");
        g_req[rid]  = new ActiveXObject("Microsoft.XMLHTTP");
        if (g_req[rid] ) {
            g_req[rid] .onreadystatechange =function () {
			  func(rid);
		    }
            g_req[rid] .open("GET", url, true);
            g_req[rid] .send();
        }
    } else {
		alert("Cannot send request, maybe you need Firefox");
	}
}



function process_req(rid) {   
	if (g_container[rid] == 0) return;
	if (g_req[rid].readyState == 4) {
		if (g_req[rid].status == 200) {
			var mytext=g_req[rid].responseText;

			if (mytext != 'OK')	{
				g_infected[g_container_fid[rid]] ++;
				var infected = g_infected[g_container_fid[rid]];
				var perc = Math.ceil( infected * 10000 / g_kv_max) / 100;
					 g_container_stat[rid].innerHTML="<b><font color=red>"+infected+"</font>/"+g_kv_max+"&nbsp;("+perc+"%)</b>";	
				/*
				var s = g_container_stat[rid].innerHTML;
				var key = "<font color=\"red\">";

				var b = s.search(key);
				 if(b >= 0) {
					 b = b + key.length;
					 var e = s.search("</font>");
					 e = e - b;
					 var cnt = 1 + 1 * s.substr(b, e);
					 var perc = Math.ceil(cnt * 10000 / g_kv_max) / 100;
					 g_container_stat[rid].innerHTML="<b><font color=red>"+cnt+"</font>/"+g_kv_max+"&nbsp;("+perc+"%)</b>";					 
				 }
				 */
			}
			g_container[rid].innerHTML = mytext;
			g_container[rid]=0;
			g_container_stat[rid]=0;
		} else {
			g_container[rid].innerHTML += g_delimiter +"Error or Aborted";
			g_container[rid]=0;
			g_container_stat[rid]=0
		}
		kv_analyze();
	}  
}



function request_abort(rid)
{
	g_req[rid].abort();
	if (g_container[rid] != 0) {
		s = g_container[rid].innerHTML;
		if (s.indexOf(g_delimiter) != -1) {
			g_container[rid].innerHTML = s.substr(0, s.indexOf(g_delimiter)) + g_delimiter +"<br>Aborted";
		} else {
			g_container[rid].innerHTML += g_delimiter +"<br>Aborted";
		}
		g_container[rid]=0;
	}
}

function kv_analyze()
{
	var rid = -1;
	var kid = 0;
	var fid = 0;

	for (i = 0; i < g_container.length; i++) {
		if (g_container[i] == 0) {
			rid = i;
			break;
		}
	}

	if(rid == -1){ 
		alert("Please wait, too many requests");
	} else {
	
		var fid = g_files_idx;
		var dir = g_dir;


		if (g_kv_cnt >= g_kv_max) {
			g_kv_cnt = 0;
			g_files_idx++;
		}
		kid = g_kv_cnt;
		g_kv_cnt++;

		if (g_files_idx >= g_files_num || g_files_idx >= g_files_max) {
			return false;
		}
		fid = g_files_idx;
		
	
		g_container_fid[rid] = fid;

		var res_id =  'kv_result_'+fid+'_'+kid;
		g_container[rid] = document.getElementById(res_id);
		if (g_container[rid] == null) alert("Internal error, no container");
		g_container[rid].innerHTML="<font color=#4444AA>Scanning...</font>";

		var stat_id = 'kv_stat_'+fid;
		g_container_stat[rid] = document.getElementById(stat_id);
		if (g_container_stat[rid] == null) alert("Internal error, no container");
		//
		var infected = g_infected[g_container_fid[rid]];
		var perc = Math.ceil( infected * 10000 / g_kv_max) / 100;
					 g_container_stat[rid].innerHTML="<b><font color=red>"+infected+"</font>/"+g_kv_max+"&nbsp;("+perc+"%)</b>";	
		//g_container_stat[rid].innerHTML="<b><font color=\"red\">0</font>/"+g_kv_max+"&nbsp;(0%)</b>";
		
		var url = '/scan.php?fid=' + g_files[fid] + '&dir='+g_dirs[fid] + '&kvid='+kid;
		//send request
		loadXMLDoc(rid, url, process_req);    
    }
}
