var isIE = true;
var vnet;
var prefix='';

function onload_new()
{
}

function onload_get_state()
{
}

function vnetLayer(system_name,caption)
{
  this.system_name=system_name;
  this.caption=caption;
	this.visible_readonly=true;
	this.visible=true;
	this.is_point=false;
	this.is_line=false;
	this.is_polygon=false;
	this.is_searchable=false;
}


function vnetMap(system_name)
{
  this.system_name=system_name;
	this.layers=new Array();
	this.layers_groups=new Array();
}

vnetGis2.prototype.add_layer_state=function(params_arr)
{
  var map=this.map_list[this.map_name];
	
	for(var group_name in this.selected_groups)
	{
	  var grp_state=this.selected_groups[group_name];
	  if(group_name!=''&&grp_state)
		  params_arr[group_name]=1;
	  var layers=map.layers_groups[group_name][1];
		for(var j=0;j<layers.length;j++)
		{
		  var layer_name=layers[j];
			var layer_state=this.selected_layers[layer_name];
			if(layer_state==undefined)continue;
			if(layer_state&&(!grp_state||group_name==''))
			  params_arr[layer_name]=1;
			else if(!layer_state&&grp_state)
			  params_arr[layer_name]=0;
		}
	}
}

vnetGis2.prototype.get_url=function(params_arr,skip_common)
{
	  var required_params_arr=
	  {
		'uamap_cuid': this.cuid,
		'lg':        'j',
		'map':        this.map_name,
		'rq':         'new',
		'st':         this.st,
		'l':          this.lang,
		'garbage':    Math.random()
	  };
		
		if(this.host!=''&&this.usig!='')
		{
		  required_params_arr['host']=this.host;
		  required_params_arr['usig']=this.usig;
		}
	  
	  if(!skip_common)
	  for (var key in required_params_arr)
		if (!params_arr[key]) params_arr[key] = required_params_arr[key];
		
		if(this.charset)
		  params_arr['uchset']=this.charset;

		if(!skip_common&&params_arr['rq'] == 'new')
		  this.add_layer_state(params_arr);
	  
	  var arr=[];
	  for(var key in params_arr)
		arr.push(key + '=' + params_arr[key]);
	  var url = this.url + '?' + arr.join('&');
		
	  return url;
};

vnetGis2.prototype.do_request=function(url,skip_common,container_name,onload_event)
{
  if(typeof url!='string')url=this.get_url(url,skip_common);
	  
  var obj = document.createElement('script');
  obj.type = 'text/javascript';
//	obj.charset='windows-1251';
	  
  if (onload_event)
  {
	  if(isIE)
		{
		  obj.setAttribute('onreadystatechange',
			  function(p)
				{
				return function(){
					if ('loaded' == this.readyState) eval(p);
				}
			  }(onload_event)
			);
		}
		else obj.setAttribute('onload',onload_event);
	}
	
	obj.src = url;
	if(!container_name)container_name='request_container';
	var container=document.getElementById(container_name);
	  
	while (container.childNodes.length>0)container.removeChild(container.lastChild);
	container.appendChild(obj);
}

vnetGis2.prototype.get_maplist=function(onload_event)
{
  this.OnGetMapList=onload_event;

	this.do_request({
		'uamap_cuid': this.cuid,
		'l':          this.lang,
		'rq':        'get_maplist',
		'lg':        'j',
		'garbage':    Math.random()
	},true,'map_list_request_container', 'vnetOnGetMapList()');
}

function vnetOnGetMapList()
{
  try
  {
    vnet.map_list=new Array();
  	for(var i=0;i<map_list.length;i++)
			vnet.map_list[map_list[i][0]]=null;
		
		if(vnet.OnGetMapList)eval(vnet.OnGetMapList);
  }
  catch(e)
  {
    alert(e.name+": "+e.message);
  }
}

vnetGis2.prototype.load_profile=function(system_name,onload_event)
{
  this.OnLoadProfile=onload_event;
	this.load_profile_map=system_name;

	this.do_request({
		'uamap_cuid': this.cuid,
		'l':          this.lang,
		'rq':        'get_profile',
		'map':       system_name,
		'lg':        'j',
		'garbage':    Math.random()
	},true,'map_list_request_container', 'vnetOnLoadProfile()');
}

function vnetOnLoadProfile()
{
  try
  {
	  var map=new vnetMap(vnet.load_profile_map);
		map.caption=vnet_map_caption;
		map.step_scale=step_scale;
		map.max_map_size=max_map_size;
		map.map_size_list=map_size_list;
		map.mapkey_size=mapkey_size;
		map.max_extent=max_extent;
		map.init_extent=init_extent;
		map.search_result_addr=search_result_addr;
		map.search_result_marker=search_result_marker;
		map.search_result_strt=search_result_strt;
		map.search_result_strt_addr=search_result_strt_addr;
		map.layers_groups=vnetLrGrp;


		var grp_lrs=new Array();
		for(var gr_name in map.layers_groups)
		{
		  var layers=map.layers_groups[gr_name][1];
		  for(var j=0;j<layers.length;j++)
			  grp_lrs[layers[j]]=1;
		}
		
		var empty_lrs=new Array();
		
		for(var i=0;i<layers_list.length;i++)
		{
		  var ilr=layers_list[i];
			var lr=new vnetLayer(ilr[0],ilr[2]);
			lr.visible=(ilr[1]==1)||(ilr[1]==4);
			lr.visible_readonly=(ilr[1]==0)||(ilr[1]==1);
			lr.is_point=ilr[3]==4;
			lr.is_line=ilr[3]==1;
			lr.is_polygon=ilr[3]==3;
			lr.is_searchable=ilr[4]!=0;
			
			if(!grp_lrs[lr.system_name])
			  empty_lrs.push(lr.system_name)
			
			map.layers[lr.system_name]=lr;
		}

		map.layers_groups['']=new Array('',empty_lrs);
		
		vnet.map_list[vnet.load_profile_map]=map;
		if(vnet.OnLoadProfile)eval(vnet.OnLoadProfile);
	}
  catch(e)
  {
    alert(e.name+": "+e.message);
  }
}

vnetGis2.prototype.get_layers_table=function()
{
  var map=this.map_list[this.map_name];
  var sgrp=new Array();

	for(var group_name in map.layers_groups)
	{
	  if(group_name=='')continue;
	  var layers=map.layers_groups[group_name][1];
	  for(var j=0;j<layers.length;j++)
		{
		  var lr=map.layers[layers[j]];
		  if(!lr.visible_readonly)
			{
			  sgrp.push(group_name);
				break;
			}
		}
	}
	
  sgrp.sort(function(a,b){
		var ca=map.layers_groups[a][0];
		var cb=map.layers_groups[b][0];
    if(ca<cb)return -1;
		else if(ca==cb)return 0;
		return 1;
	});
	
  var res="";
	var check_state='';

	for(var i=0;i<sgrp.length;i++)	
	{
	  var group_name=sgrp[i];
	  var caption=map.layers_groups[group_name][0];
	  var layers=map.layers_groups[group_name][1];
		var slr=new Array();
	  for(var j=0;j<layers.length;j++)
		{
		  var lr=map.layers[layers[j]];
		  if(!lr.visible_readonly&layers[j]!=group_name)
			  slr.push(layers[j]);
		}

		slr.sort(function(a,b){
		  var ca=map.layers[a].caption;
			var cb=map.layers[b].caption;
      if(ca<cb)return -1;
		  else if(ca==cb)return 0;
		  return 1;
	  });
		
		check_state='';
		if(this.selected_groups[group_name])check_state='checked';
		
		res+='<tr bgcolor="#EEEEEE"><td><img src="../img/label/'+group_name+'.gif" alt="'+group_name+'"></td><td><input type="checkbox" '+check_state+' id="grp_'+group_name+'" onClick="vnet.toggle_group(this);"></td><td><label for="grp_'+group_name+'">'+caption+'</label></td></tr>';
	  for(var j=0;j<slr.length;j++)
		{
		  var lr=slr[j];
			var caption=map.layers[lr].caption;
			
			check_state='';
			if(this.selected_layers[lr])check_state='checked';
			
			res+='<tr><td><img src="../img/label/'+lr+'.gif" alt="'+lr+'"></td><td><input type="checkbox" '+check_state+' id="lr_'+lr+'" onClick="vnet.toggle_layer(this);"></td><td><label for="lr_'+lr+'">'+caption+'</label></td></tr>';
		}
	}
	
	var nglrs=new Array();
	var empty_layers=map.layers_groups[''][1];
	for(var i=0;i<empty_layers.length;i++)
	{
	  var lr=empty_layers[i];
	  if(!map.layers[lr].visible_readonly)
		  nglrs.push(lr);
	}

  nglrs.sort(function(a,b){
		  var ca=map.layers[a].caption;
			var cb=map.layers[b].caption;
      if(ca<cb)return -1;
		  else if(ca==cb)return 0;
		  return 1;
	});
	
	check_state='';
	if(this.selected_groups[''])check_state='checked';

	if(nglrs.length>0)res+='<tr bgcolor="#EEEEEE"><td></td><td><input type="checkbox" '+check_state+' id="other_layers_group" onClick="vnet.toggle_group(this);"></td><td><label for="other_layers_group">'+this.other_layers_group_name+'</label></td></tr>';
	for(var j=0;j<nglrs.length;j++)
	{
	  var lr=nglrs[j];
		var caption=map.layers[lr].caption;

		check_state='';
		if(this.selected_layers[lr])check_state='checked';

		res+='<tr><td><img src="../img/label/'+lr+'.gif" alt="'+lr+'"></td><td><input type="checkbox" '+check_state+' id="lr_'+lr+'" onClick="vnet.toggle_layer(this);"></td><td><label for="lr_'+lr+'">'+caption+'</label></td></tr>';
	}
	
	return res;
}

vnetGis2.prototype.get_search_layers_options=function()
{
  var map=this.map_list[this.map_name];
  var slrs=new Array();
	
	for(var lr_name in map.layers)
	{
	  if(lr_name=='strt'||lr_name=='address')
		  continue;
		var lr=map.layers[lr_name];
		if(lr.is_searchable&&(lr.visible||!lr.visible_readonly))
		  slrs.push(lr_name);
	}

	slrs.sort(function(a,b){
	  var ca=map.layers[a].caption;
		var cb=map.layers[b].caption;
     if(ca<cb)return -1;
	  else if(ca==cb)return 0;
	  return 1;
  });
	
	if(map.layers['strt'])
	{
	  var lr=map.layers['strt'];
		if(lr.is_searchable&&(lr.visible||!lr.visible_readonly))
		  slrs.unshift('strt');
	}
	
  var res="";
	for(var i=0;i<slrs.length;i++)
	{
	  var lr_name=slrs[i];
		var lr=map.layers[lr_name];
		res+='<option value="'+lr_name+'">'+lr.caption+'</option>';
	}
	
	return res;
}

vnetGis2.prototype.set_current_map=function(map_name)
{
  this.map_name=map_name;
	this.init_active_layers();
	this.init_active_groups();
}

vnetGis2.prototype.init_active_layers=function()
{
	this.selected_layers=new Array();
  var map=this.map_list[this.map_name];
	for(var lr_name in map.layers)
	{
	  var lr=map.layers[lr_name];
	  if(lr.visible_readonly)continue;
		this.selected_layers[lr_name]=lr.visible;
	}
}

vnetGis2.prototype.check_group_activation=function(group_name)
{
  var map=this.map_list[this.map_name];
  var layers=map.layers_groups[group_name][1];
		
	var some_active=false;
	var some_nonactive=false;
		
	for(var j=0;j<layers.length;j++)
	{
	  var state=this.selected_layers[layers[j]];
		if(state==undefined)continue;
		if(state)some_active=true;
		else some_nonactive=true;
	}

	if(some_active==false&&some_nonactive==false)return false;
	if(some_active==true&&some_nonactive==true)return false;
		
	this.selected_groups[group_name]=some_active;
	return true;
}

vnetGis2.prototype.init_active_groups=function()
{
	this.selected_groups=new Array();
  var map=this.map_list[this.map_name];
	for(var group_name in map.layers_groups)
	{
	  var layers=map.layers_groups[group_name][1];
		
		var some_active=false;
		var some_nonactive=false;
		
		for(var j=0;j<layers.length;j++)
		{
		  var state=this.selected_layers[layers[j]];
			if(state==undefined)continue;
			if(state)some_active=true;
			else some_nonactive=true;
		}
		
		this.selected_groups[group_name]=some_active&&!some_nonactive;
	}
}

vnetGis2.prototype.toggle_group=function(cb)
{
  var group_name=cb.id;
	if(group_name=='other_layers_group')group_name='';
	else group_name=group_name.substring(4);
	
	this.selected_groups[group_name]=cb.checked;
	
  var map=this.map_list[this.map_name];
  var layers=map.layers_groups[group_name][1];
		
	for(var j=0;j<layers.length;j++)
	{
	  var lr=layers[j];
		if(this.selected_layers[lr]==undefined)continue;
		this.selected_layers[lr]=cb.checked;
		document.getElementById('lr_'+lr).checked=cb.checked;
	}

	if(this.OnToggleGroup)eval(this.OnToggleGroup);
}

vnetGis2.prototype.get_layer_group=function(layer_name)
{
  var map=this.map_list[this.map_name];
  for(var group_name in map.layers_groups)
	{
	  var layers=map.layers_groups[group_name][1];
		
		for(var j=0;j<layers.length;j++)
		  if(layers[j]==layer_name)
			  return group_name;
	}
	
	return '';
}

vnetGis2.prototype.toggle_layer=function(cb)
{
  var layer_name=cb.id;
	layer_name=layer_name.substring(3);
	this.selected_layers[layer_name]=cb.checked;
	
	var group_name=this.get_layer_group(layer_name);
	if(this.check_group_activation(group_name))
	{
	  var cb_name;
	  if(group_name=='')cb_name='other_layers_group';
		else cb_name='grp_'+group_name;
		document.getElementById(cb_name).checked=this.selected_groups[group_name];
	}
	
	if(this.OnToggleLayer)eval(this.OnToggleLayer);
}

vnetGis2.prototype.do_search_text=function(search_layer,search_text,OnSearchComplete)
{
  try
	{
	    this.search_layer=search_layer;
		this.search_text=search_text;
		this.search_id=null;
		this.search_str=this.search_layer+'!!'+this.search_text;
		this.search_block=1;
		this.OnSearchComplete=OnSearchComplete;
		prefix='';
		
		this.do_request({
		 'rq':        'new',
		 'cmd':       'lsearch',
		 'cmd_param': this.search_str,
		 'bn': this.search_block
		},false,'search_container', 'vnet.on_search_result();');
	}
	catch(e)
	{
    alert(e.name+": "+e.message);
	}
}

vnetGis2.prototype.do_search_object=function(search_layer,search_id,OnSearchComplete)
{
  try
	{
	    this.search_layer=search_layer;
		this.search_id=search_id;
		this.search_str=this.search_layer+'::'+this.search_id;
		this.search_block=1;
		this.OnSearchComplete=OnSearchComplete;
		prefix='';
		
		this.do_request({
		 'rq':        'new',
		 'cmd':       'lsearch',
		 'cmd_param': this.search_str,
		 'bn': this.search_block
		},false,'search_container', 'vnet.on_search_result();');
	}
	catch(e)
	{
    alert(e.name+": "+e.message);
	}
}

vnetGis2.prototype.search_page=function(bn)
{
  try
	{
		this.search_block=bn;
		prefix='';
		
		this.do_request({
		 'rq':        'new',
		 'cmd':       'lsearch',
		 'cmd_param': this.search_str,
		 'bn': this.search_block
		},false,'search_container', 'vnet.on_search_result();');
	}
	catch(e)
	{
    alert(e.name+": "+e.message);
	}
}

vnetGis2.prototype.on_search_result=function()
{
  try
	{
		this.search_count=cnt;
		this.search_record_per_page=bs;
		this.find_id=find_id;
		this.find_name=find_name;
		this.search_prefix=prefix;
		this.find_id=find_id;
		this.find_name=find_name;
		if(this.OnSearchComplete)eval(this.OnSearchComplete);
	}
	catch(e)
	{
		alert(e.name+": "+e.message);
	}
}

vnetGis2.prototype.make_search_result=function()
{
  try
	{
	  if(this.search_count==0)return '';
		var res='';
		res+=this.make_search_pages();
		res+='<br>';
		if(this.search_layer=='strt'&&this.search_id)res+=this.make_search_address();
		else res+=this.make_search_objects();
		return res;
	}
	catch(e)
	{
    alert(e.name+": "+e.message);
	}
}

vnetGis2.prototype.make_search_pages=function()
{
		var pages = Math.ceil(this.search_count/this.search_record_per_page);
		if(pages<=1)return '';
		var arr = [];
		for (var i = 1; i <= pages; i++)
		{
			if (i == bn) arr.push('<b>'+i+'</b>');
			else arr.push('<a href="javascript:vnet.search_page('+i+')">'+i+'</a>');
		}
	
		return '<br>'+arr.join('&nbsp;&nbsp;|&nbsp;');
}

vnetGis2.prototype.make_search_objects=function()
{
		if(this.search_count==0)return '';
		var ret="";
		
		ret+='<table border="0" cellspacing="0" cellpadding="0" width="100%">';
		for (var i in this.find_id)
		{
		  var img1="<a href=\"javascript:vnet.do_search_object('"+this.search_layer+"',"+vnet.find_id[i]+",vnet.OnSearchComplete);\"><img src="+this.web_img_path+"/sub.gif border=\"0\" align=\"absmiddle\"></a>";
		  var img2="<a href=\"javascript:vnet.do_show_object('"+this.search_layer+"',"+vnet.find_id[i]+");\"><img src="+this.web_img_path+"/go.gif border=\"0\" align=\"absmiddle\"></a>";
		  
		  var td_txt='<tr><td nowrap>';
		  
		  if(this.search_layer=='strt')td_txt+=img1;
		  td_txt+=img2;
		  
		  var str=this.search_prefix+this.find_name[i];
		  
		  td_txt+='&nbsp;'+str;
		  td_txt+='</td></tr>';
		  ret+=td_txt;
		}
		ret+='</table>';
		
		return ret;
}

vnetGis2.prototype.make_search_address=function()
{
		if(this.search_count==0)return '';
		var ret="";
		
		ret+='<table border="0" cellspacing="0" cellpadding="0" width="100%">';
		for (var i in this.find_id)
		{
		  var img2="<a href=\"javascript:vnet.do_show_object('address',"+vnet.find_id[i]+");\"><img src="+this.web_img_path+"/go.gif border=\"0\" align=\"absmiddle\"></a>";
		  
		  var td_txt='<tr><td nowrap>';
		  td_txt+=img2;
		  
		  var str=this.search_prefix+this.find_name[i];
		  
		  if (this.search_layer=='strt')
		    str=str.replace('*',', ');
			
		  td_txt+='&nbsp;'+str;
		  td_txt+='</td></tr>';
		  ret+=td_txt;
		}
		ret+='</table>';
		
		return ret;
}


vnetGis2.prototype.do_show_object=function(search_layer,search_id)
{
	try
	{
		var search_str=search_layer+'::'+search_id;
		
		this.do_request({
		 'rq':        'new',
		 'cmd':       'msearch',
		 'cmd_param': search_str
		},false,'search_container', 'vnet.on_show_object_complete();');
	}
	catch(e)
	{
    alert(e.name+": "+e.message);
	}
}

vnetGis2.prototype.on_show_object_complete=function()
{
	try
	{
		this.st=st;
		this.do_request({
		 'rq':        'get_state'
		},false,'search_container', 'vnet.on_show_object_get_state();');
	}
	catch(e)
	{
		alert("on_show_object_complete(): "+e.message);
	}
}

vnetGis2.prototype.on_show_object_get_state=function()
{
	try
	{
		this.map_extent=map_extent;
		this.map_size=map_size;
		this.map_scale=map_scale;
		
		if(this.OnShowObjectComplete)eval(this.OnShowObjectComplete);
	}
	catch(e)
	{
		alert("on_show_object_get_state(): "+e.message);
	}
}

function vnetGis2(url)
{
	this.url=url;
	this.cuid=(new Date()).getTime();
	this.map_name="";
	this.st=0;
	this.lang='ua';
	this.usig='';
	this.host='';
	this.map_list=new Array();
	this.other_layers_group_name='';
	this.selected_layers=new Array();
	this.selected_groups=new Array();
	
	this.OnToggleLayer=null;
	this.OnToggleGroup=null;
	
	this.charset=null;
	this.web_img_path='../img/';;
	
	this.OnShowObjectComplete=null;
}
