// JScript source code
var load = new Object();
load.loadCount=0;
load.ival;
load.maxThread=1;
load.Thread = new Array();
load.ReqSearch;
load.Stop = function()
{
	clearInterval(load.ival);
	for(i=0;i<load.maxThread;i++)
	{
		if(load.Thread[i]!=null)load.Thread[i].abort();
	}
}
load.Start = function()
{	
	load.loadCount=0;
	for(i=0;i<load.maxThread;i++)
	{
		load.Thread[i] = load.CreateRequest();
	}
	load.ReqSearch= load.CreateRequest();
	//load.ival = setInterval("load.NewLoad();",500);	
	load.NewLoad();
}
load.SearchLoc = function()
{
	var str="";
	var arr=document.getElementById("txtSearch").value.split(" ");
	for(i=0;i<arr.length;i++)
	{
		if(arr[i]=="")continue;
		if(i==arr.length-1)
		{
			str+=arr[i];
			break;
		}
		str+=arr[i]+" ";
	}
	if(str=="")
	{
		sResult.innerHTML="";
		return;
	}
	if(str=="*") str="";//search all
	load.ReqSearch.abort();
	var url = map.searchPage;
	load.ReqSearch.onreadystatechange = function()
	{
		if (load.ReqSearch.readyState  == 4) 
		{
			if (load.ReqSearch.status == 200)
			{
				load.FillSearch();
			}else 
			{
				return false;
			}
		}
	}
	load.ReqSearch.open('POST',url, true);
	load.ReqSearch.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	load.ReqSearch.send("folder="+map.folder+"&search="+str);
}
load.FillSearch = function()
{
	var res = load.ReqSearch.responseText;
	var arrRes = res.split("|");
	var divResult=document.getElementById("sResult");
	divResult.innerHTML="";
	for(i=0;i<arrRes.length-1;i++)
	{
		var arrEachRes=arrRes[i].split(";");
		if(arrEachRes[1]==-1||arrEachRes[2]==-1)
		{
			divResult.innerHTML="Khong tim thay :<br>'"+arrEachRes[0]+"'<br>";
			return;
		}
		divResult.innerHTML+="<a href='#' onclick='face.GoTo("+arrEachRes[1]+","+arrEachRes[2]+");return false;'>"+arrEachRes[0]+"</a><br><br>";
	}
}
load.GetFreeThread = function()
{	
	for(i=0;i<load.maxThread;i++)
	{
		if(load.Thread[i].readyState==0)
		{
			return i;
		}
		if(load.Thread[i].readyState==4)
		{
			load.Thread[i].abort();
			return i;
		}
	}
	return -1;
}
load.RequestImg = function(x,y)
{
	var id=load.GetFreeThread();
	//window.status=id;	
	if(id<0) return;
	var urlXY = map.folder+map.arrImgName[x+"_"+y];
	load.Thread[id].onreadystatechange = function()
	{
		if (load.Thread[id].readyState  == 4) 
		{
			if (load.Thread[id].status == 200)
			{
				load.loadCount++;
				load.FillImg(x,y,urlXY);
				load.NewLoad();
				//window.status += load.Thread[id].getResponseHeader("Content-Type")
				//	+";"+load.Thread[id].getResponseHeader("Connection");
			}else 
			{
				return false;
			}
		}
	}	
	load.Thread[id].open('GET',urlXY, true);
	//load.Thread[id].setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	load.Thread[id].send(null);
	return true;
}
load.FillImg = function(x,y,urlXY)
{
	var img = map.GetImg(x,y);
	img.src=urlXY;
	img.style.visibility="visible";
}
load.NewLoad = function()
{
	var id=load.GetFreeThread();
	if(load.GetCount()>=map.Count)
	{
		//clearInterval(load.ival);
		return;
	}
	if(id<0) return;
	var midX = map.GetMidX();
	var midY = map.GetMidY();
	var maxLayer = map.xCount;
	if(map.yCount>map.xCount) maxLayer = map.yCount;
	
	//
	//Load Visible
	//
	//window.status="V";
	if(map.NotInit(midX,midY)&&map.Visible(midX,midY))
	{
		load.RequestImg(midX,midY);
		return;
	}
	for(numLay = 1;numLay<=map.GetLayerVisible();numLay++)
	{
		var x=0;
		var y=0;
		for(i=0;i<2*numLay;i++)
		{
			x=midX-numLay;
			y=midY-(numLay-1)+i;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y)&&map.Visible(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
		
		for(i=0;i<2*numLay;i++)
		{
			x=midX+numLay;
			y=midY+(numLay-1)-i;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y)&&map.Visible(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
		
		for(i=0;i<2*numLay;i++)
		{
			x=midX+(numLay-1)-i;
			y=midY-numLay;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y)&&map.Visible(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
		
		for(i=0;i<2*numLay;i++)
		{
			x=midX-(numLay-1)+i;
			y=midY+numLay;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y)&&map.Visible(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
	}
	//
	//Load con lai
	//
	//window.status="I";
	/*
	if(map.NotInit(midX,midY))
	{
		load.RequestImg(midX,midY);
		return;
	}
	for(numLay = 1;numLay<=maxLayer;numLay++)
	{
		var x=0;
		var y=0;
		for(i=0;i<2*numLay;i++)
		{
			x=midX-numLay;
			y=midY-(numLay-1)+i;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
		for(i=0;i<2*numLay;i++)
		{
			x=midX+numLay;
			y=midY+(numLay-1)-i;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
		for(i=0;i<2*numLay;i++)
		{
			x=midX+(numLay-1)-i;
			y=midY-numLay;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
		for(i=0;i<2*numLay;i++)
		{
			x=midX-(numLay-1)+i;
			y=midY+numLay;
			if(x<=(map.xCount-1)&&y<=(map.yCount-1)&&x>=0&&y>=0)
			{
				if(map.NotInit(x,y))
				{
					load.RequestImg(x,y);
					return;
				}
			}
		}
	}
	*/
}

load.GetThread = function()
{
	var thread=0;
	for(j=0;j<map.yCount;j++)
		for(i=0;i<map.xCount;i++)
		{
			var img = map.GetImg(i,j);
			if(img.src=="") continue;
			if(img.readyState!="complete") thread++;
		}
	return thread;
}
load.GetCount = function()
{
	var count=0;
	for(j=0;j<map.yCount;j++)
		for(i=0;i<map.xCount;i++)
		{
			var img = map.GetImg(i,j);
			if(img.readyState=="complete") count++;
		}
	return count;
}

load.CreateRequest = function()
{
	var request = false;
	if (window.XMLHttpRequest)
	{ // Mozilla, Safari,...
		request = new XMLHttpRequest();
		if (request.overrideMimeType) 
		{
			request.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject)
	{ // IE
		try 
		{
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try 
			{
				request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	if (!request)
	{
		return null;
	}
	return request;
}
