// remote scripting library
		// (c) copyright 2005 modernmethod, inc
		var sajax_debug_mode = false;
		var sajax_request_type = "POST";
		var sajax_target_id = "";
		var sajax_failure_redirect = "";
		
		function sajax_debug(text) {
			if (sajax_debug_mode)
				alert(text);
		}
		
 		function sajax_init_object() {
 			sajax_debug("sajax_init_object() called..")
 			
 			var A;
 			
 			var msxmlhttp = new Array(
				'Msxml2.XMLHTTP.5.0',
				'Msxml2.XMLHTTP.4.0',
				'Msxml2.XMLHTTP.3.0',
				'Msxml2.XMLHTTP',
				'Microsoft.XMLHTTP');
			for (var i = 0; i < msxmlhttp.length; i++) {
				try {
					A = new ActiveXObject(msxmlhttp[i]);
				} catch (e) {
					A = null;
				}
			}
 			
			if(!A && typeof XMLHttpRequest != "undefined")
				A = new XMLHttpRequest();
			if (!A)
				sajax_debug("Could not create connection object.");
			return A;
		}
		
		var sajax_requests = new Array();
		
		function sajax_cancel() {
			for (var i = 0; i < sajax_requests.length; i++) 
				sajax_requests[i].abort();
		}
		
		function sajax_do_call(func_name, args) {

			var i, x, n;
			var uri;
			var post_data;
			var target_id;
			
			sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
			target_id = sajax_target_id;
			if (typeof(sajax_request_type) == "undefined" || sajax_request_type == "") 
				sajax_request_type = "GET";
			
			uri = "ajax.php";
			if (sajax_request_type == "GET") {
			
				if (uri.indexOf("?") == -1) 
					uri += "?rs=" + escape(func_name);
				else
					uri += "&rs=" + escape(func_name);
				uri += "&rst=" + escape(sajax_target_id);
				uri += "&rsrnd=" + new Date().getTime();
				
				for (i = 0; i < args.length-1; i++) 
					uri += "&rsargs[]=" + escape(args[i]);

				post_data = null;
			} 
			else if (sajax_request_type == "POST") {
				post_data = "rs=" + escape(func_name);
				post_data += "&rst=" + escape(sajax_target_id);
				post_data += "&rsrnd=" + new Date().getTime();
				
				for (i = 0; i < args.length-1; i++) 
					post_data = post_data + "&rsargs[]=" + escape(args[i]);
			}
			else {
				alert("Illegal request type: " + sajax_request_type);
			}
			
			x = sajax_init_object();

			if (x == null) {
				if (sajax_failure_redirect != "") {
					location.href = sajax_failure_redirect;
					return false;
				} else {
					sajax_debug("NULL sajax object for user agent:\n" + navigator.userAgent);
					return false;
				}
			} else {
				x.open(sajax_request_type, uri, true);

				// window.open(uri);
				
				sajax_requests[sajax_requests.length] = x;
				
				if (sajax_request_type == "POST") {
					x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
					x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				}
			
				x.onreadystatechange = function() {
					if (x.readyState != 4) 
						return;

					var status;
					var data;
					var txt = x.responseText.replace(/^\s*|\s*$/g,"");
					status = txt.charAt(0);
					data = txt.substring(2);

					if (status == "") {
						// let's just assume this is a pre-response bailout and let it slide for now
					} else if (status == "-") 
						alert("Error: " + data);
					else {
						if (target_id != "") 
							document.getElementById(target_id).innerHTML = eval(data);
						else {
							try {
								var callback;
								var extra_data = false;								
								if (typeof args[args.length-1] == "object") {
									callback = args[args.length-1].callback;
									extra_data = args[args.length-1].extra_data;
								} else {
									callback = args[args.length-1];
								}								

								callback(eval(data), extra_data);
							} catch (e) {
								//sajax_debug("Caught error " + e + ": Could not eval " + data );
								alert("Caught error " + e + ": Could not eval " + data );
							}
						}
					}
				}
			}
			
			sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
			x.send(post_data);
			sajax_debug(func_name + " waiting..");
			delete x;
			return true;
		}


var tid;
var closetimeout;closetimeout=200; //Timeout to close open menu window
var isMinNS4 = (navigator.appName.indexOf("Netscape") >= 0 &&
                parseFloat(navigator.appVersion) >= 4) ? 1 : 0;
var isMinIE4 = (document.all) ? 1 : 0;
var isMinIE5 = (isMinIE4 && navigator.appVersion.indexOf("5.") >= 0) ? 1 : 0;
var isNS6    = (navigator.appName.indexOf("Netscape") >=0 && parseFloat(navigator.appVersion) >= 5) ? 1 : 0;

var activemenu = -1;

var datasearch = Array();
var sdatasearch = Array();


function div_show(div,action) {
 if (canopen) {
   obj = div;
   if (action=="hide") {
      if(isMinNS4 && (!isNS6)) {
         layer = document.layers[obj];
      } else {
         layer = (document.getElementById)? document.getElementById(obj) : document.all[obj];
      }     
      if (isMinNS4 && (!isNS6)) 
        layer.visibility = "hide";
      if (isNS6) 
        document.getElementById(obj).style.visibility = "hidden";
      if (isMinIE4)
        layer.style.visibility = "hidden";     
   }
   if (action=="show") {
      if(isMinNS4 && (!isNS6)) {
        layer = document.layers[obj];
      } else {
        layer = (document.getElementById)? document.getElementById(obj) : document.all[obj];
      }     
      if (isMinNS4 && (!isNS6))
         layer.visibility = "show";
      if (isNS6)
         document.getElementById(obj).style.visibility = "visible";
      if (isMinIE4)
         layer.style.visibility = "visible";       
   }
 }
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function update_div(div,html) {
//   alert(html);
   var layer = (document.getElementById)? document.getElementById(div) : document.all[div];
   if(layer && layer.innerHTML) {
     layer.innerHTML = html;
   }
}

function get_div_html(div) {
   var layer = (document.getElementById)? document.getElementById(div) : document.all[div];
   if(layer && layer.innerHTML) {
     return layer.innerHTML;
   }
}

function xaction(commands) {
   try {
     eval(commands);
   } catch (e) {
     alert('error');
     alert(commands);
   }
}


function query_form(in_kiev) {
  var kiev_tpl='<a href="javascript:void(query_form(0));"><img src="imgs/cm1.gif" width="146" height="37" border="0"></a><a href="javascript:void(query_form(1));"><img src="imgs/cm2s.gif" width="69" height="37" border="0"></a>';
  var outkiev_tpl='<a href="javascript:void(query_form(0));"><img src="imgs/cm1s.gif" width="146" height="37" border="0"></a><a href="javascript:void(query_form(1));"><img src="imgs/cm2.gif" width="69" height="37" border="0"></a>';

  var kiev_tpl2='&#149; <a href="javascript:void(getDistricts(1,true));" class="ts">Поиск по району</a>&nbsp; &#149; <a href="javascript:void(getSmallDistricts(1,true));" class="ts">Поиск по микрорайону</a>&nbsp; &#149; <a href="javascript:void(getStreetsFilter());" class="ts">Поиск по улице</a>';
  var outkiev_tpl2='&#149; <a href="javascript:void(getDirects(1,true));" class="ts">Поиск по направлению</a>&nbsp; &#149; <a href="javascript:void(getAreas(1,true));" class="ts">Поиск по району</a>&nbsp; &#149; <a href="javascript:void(getVillagesFilter());" class="ts">Поиск по населенному пункту</a>';

  if (in_kiev) {
    update_div('content1',kiev_tpl);
    update_div('content2',kiev_tpl2);
  } else {
    update_div('content1',outkiev_tpl);
    update_div('content2',outkiev_tpl2);
  }
}

function getDistricts(p,clear_required) {
  if (clear_required) clear_datasearch();
  document.forms['query'].stype.value='_mainplaces';

  update_div('content3','&nbsp;');
  div_show('loading','show');
  sajax_do_call('getDistricts',Array(p,xaction));
}

function getSmallDistricts(p,clear_required) {
  if (clear_required) clear_datasearch();
  document.forms['query'].stype.value='_places';
  update_div('content3','&nbsp;');
  div_show('loading','show');
  sajax_do_call('getSmallDistricts',Array(p,xaction));
}

function getDirects(p,clear_required) {
  if (clear_required) clear_datasearch();
  document.forms['query'].stype.value='_streets!_directs';
  update_div('content3','&nbsp;');
  div_show('loading','show');
  sajax_do_call('getDirects',Array(p,xaction));
}

function getAreas(p,clear_required) {
  if (clear_required) clear_datasearch();
  document.forms['query'].stype.value='_places';
  update_div('content3','&nbsp;');
  div_show('loading','show');
  sajax_do_call('getAreas',Array(p,xaction));
}

function getStreetsFilter() {
  clear_datasearch();
  update_div('content3','&nbsp;');
  update_div('content4','&nbsp;');
  update_div('content5','&nbsp;');
  div_show('loading','show');
  sajax_do_call('getStreetsFilter',Array(xaction));
}

function getVillagesFilter() {
  clear_datasearch();
  update_div('content3','&nbsp;');
  update_div('content4','&nbsp;');
  update_div('content5','&nbsp;');
  div_show('loading','show');
  sajax_do_call('getVillagesFilter',Array(xaction));
}


function getStreets(filter, p, clear_required) {
  if (clear_required) clear_datasearch();
  document.forms['query'].stype.value='_streets';
  div_show('loading','show');
  sajax_do_call('getStreets',Array(filter, p,xaction));
}

function getVillages(filter, p, clear_required) {
  if (clear_required) clear_datasearch();
  document.forms['query'].stype.value='_streets';
  div_show('loading','show');
  sajax_do_call('getVillages',Array(filter, p,xaction));
}


function clear_datasearch() {
  datasearch = Array();  
  sdatasearch = Array();  
  refreshlist();
}

function add_datasearch(str,val) {
  add_unique_to_array(str,datasearch);
  add_unique_to_array(val,sdatasearch);
  refreshlist();
}

function delete_datasearch(i) {
  if (datasearch.length==1) {
    clear_datasearch();
  }else{
    datasearch.splice(i,1);
    sdatasearch.splice(i,1);
    refreshlist();
  }
}


function refreshlist() {
  var tpl = '<div class="container2 ts"><nobr>{info}</nobr><div class="rsd"><a href="javascript:delete_datasearch({id});"><img src="imgs/r.gif" border="0"></a></div></div>';
  var html='';
  var f = document.forms['query'];
  f.data.value='';
  if (datasearch.length==0) {
     update_div('content6','&nbsp;');
  }else{
    for (var i=0;i<datasearch.length;i++) {
      f.data.value = f.data.value+': '+datasearch[i];
      f.sdata.value = f.sdata.value+': '+sdatasearch[i];
      var ttpl = tpl.replace('{info}',datasearch[i]);
      ttpl = ttpl.replace('{id}',i);
      html=html+ttpl;
    }
    update_div('content6',html);
  }
}

function make_list(in_arr, in_arr_keys, query, page, pages) {
  var html='<div style="position:absolute;top:2px;left:0px;width:183px;height:108px;overflow:hidden;">';
  for (i=0;i<Math.min(in_arr.length,7);i++) {
    html=html+'<nobr><a href="javascript:void(add_datasearch(\''+in_arr[i]+'\',\''+in_arr_keys[i]+'\'));" class="ts"><img src="imgs/a.gif" border="0">'+unescape(in_arr[i])+'</a></nobr>';
    if (i<6) html=html+'<br>';
  }
  html=html+'</div>';
  if (in_arr.length>7) {
     html=html+'<div style="position:absolute;top:2px;left:184px;width:183px;height:108px;overflow:hidden;">';
     for (i=7;i<Math.min(in_arr.length,14);i++) {
       html=html+'<nobr><a href="javascript:void(add_datasearch(\''+in_arr[i]+'\', \''+in_arr_keys[i]+'\'));" class="ts"><img src="imgs/a.gif" border="0">'+unescape(in_arr[i])+'</a></nobr>';
       if (i<13) html=html+'<br>';
     }
     html=html+'</div>';
  }
  update_div('content4',html);

  html='';
  if (page>1) {
    html='<a href="javascript:void('+query.replace('{p}',(page-1))+');"><img src="imgs/al.gif" width="13" height="12" border="0"></a>';
  }
  if (page<pages) {
    html=html+'<a href="javascript:void('+query.replace('{p}',(page+1))+');"><img src="imgs/ar.gif" width="13" height="12" border="0"></a>';
  }
  if (!html) html='<img src="imgs/1.gif" width="1" height="1">';

  update_div('content5',html);
  div_show('loading','hide');
}

function make_filter(in_arr1, in_arr2, query) {
   // A &#149; Б ...
   //<a href="javascript:void();" class="ts">A</a>
   var html = '';
   for (i=0;i<in_arr1.length;i++) {
     if (html) html = html + '<img src="imgs/fd.gif" width="6" height="9">';
     html = html + '<a href="javascript:void('+query.replace('{F}',in_arr2[i])+');" class="ts">'+in_arr1[i]+'</a>';
   }
   update_div('content3',html);
   div_show('loading','hide');
}




//Function to work with arrays
function in_array(str,arr) {
 res = -1;
 for (var i=0;i<arr.length;i++) {
   if (arr[i]==str) {
     res = i;
     i=arr.length;
   }
 }
 return res;
}

function del_from_array(str,arr) {
 res = -1;
 newarr = Array();
 for (var i=0;i<arr.length;i++) {
   if (arr[i]!=str) newarr.push(arr[i]);
 }
 return newarr;
}

function add_to_array(str,arr) {
  lastid=arr.length;
  arr[lastid]=str;
  return lastid;
}

function add_unique_to_array(str,arr) {
  if (in_array(str,arr)==-1) {
     arr.push(str);
     lastid=arr.length-1;
     return lastid;
  }else{
     return -1;
  }
}

function add_to_top_array(str,arr) {
  lastid=arr.length;
  for (i=lastid; i>0;i--) {
    arr[i]=arr[i-1];
  }
  arr[0]=str;
  return lastid;
}


function add_unique_to_top_array(str,arr) {
  var m;
  if (in_array(str,arr)==-1) {
     m = add_to_top_array(str,arr);
     return m;
  }else{
     return -1;
  }
}
