var scrollbarOpts = {scrollbarWidth:12, scrollbarMargin:20, showArrows:true, arrowSize:10};
//функции - утилиты
	
	function g_o(val){
		if (document.getElementById) { return document.getElementById(val); }
		else if (document.all) { return document.all[val]; }
		else if (document.layers) { return document.layers[val]; }
	}
	function f_o(val){return document.getElementById(val).options[document.getElementById(val).selectedIndex]}
	function c_o(val){return document.createElement(val)}
	function ev_o(evt){
		evt = (evt) ? evt : ((window.event) ? event : null);
		if (evt) {
			return (evt.target) ? evt.currentTarget : ((evt.srcElement) ? evt.srcElement : null);	
		}	
		return null;
	}
	function g_m(val){
			var i = 0;
			while(markers[i].id != val)i++;
			return i;
	}
	
	function RemoveInnerTags(val){
	var t = '';      
      var flag = 0;
      for(var i = 0 ; i<val.length; i++){
      	if(val.substr(i,1) == '<'){t+=" ";flag = 1;}
      	if(!flag)t += val.substr(i,1);
      	if(val.substr(i,1) == '>')flag = 0;
      }
      return t;
	}
	
	function getIcon(markerimg,w,h) {
		if(markerimg == null) return null;
		if(markerimg == "-1") return null;
		if(markerimg == "0")  return null;
		if(markerimg == "") return null;

		icon = new GIcon();
		icon.image = markerimg;
		icon.iconSize = new GSize(w, h);
		icon.iconAnchor = new GPoint(6, 9);
		icon.infoWindowAnchor = new GPoint(5, 5);
		return icon;
	}
	
	function SetSortOrder(order){
		g_o('sort').innerHTML = order;
	//	g_o('alpha').style.textDecoration = '';
	//	g_o('dist').style.textDecoration = '';
	//	g_o(order).style.textDecoration = 'underline';
		g_o('alpha').className = 'sort';
		g_o('dist').className = 'sort';
		g_o(order).className = 'sort active';
		showMarkers();
	}

	
	
function ShowMarkerOrder(){
	var basetd = g_o('markorder');
	basetd.innerHTML = '';
	var t = c_o('div');
	t.className = "marks hide"; //     
	basetd.appendChild(t);
	basetd = t;
	for (var i = 0; i< markers.length; i++){
		if(!markers[i].marker.isHidden()){			
		
				t.className = "marks"; // ,      
				
				var t_div_all = c_o("div");
				t_div_all.className = "marker";
				if(markers[i].expand)t_div_all.className = "marker collapse";
				t_div_all.id = "line-" + markers[i].id;
				basetd.appendChild(t_div_all);
				baseline = g_o(t_div_all.id);
				
				var t_brief_line = c_o("table");
				t_brief_line.className = "brief";
				t_brief_line.id = "brief-" + markers[i].id;
				t_brief_line.cellpadding = "0";
				t_brief_line.cellspacing = "0";
				baseline.appendChild(t_brief_line); 
				var t_brief_line_tbody = c_o("tbody");
				t_brief_line.appendChild(t_brief_line_tbody);
				var t_brief_line_tr = c_o("tr");
				t_brief_line_tr.id = "brief-tr-" + markers[i].id;
				t_brief_line_tbody.appendChild(t_brief_line_tr);
				briefline = g_o(t_brief_line_tr.id);
				
				var t_td = c_o("td");
				t_td.className = 'icon';
				briefline.appendChild(t_td);
				
				// t_td.innerHTML = '<img width="15px" height="15px" src="' + markers[i].icon + '">'; 
				
			if( /\.png$/.test( markers[i].icon.toLowerCase() ) && window.ActiveXObject) {
 				var c_img = document.createElement("div");
				c_img.style.width = 15;
				c_img.style.height = 15;
				c_img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + markers[i].icon + "', sizingMethod='scale')";
				c_img.innerHTML = "&nbsp;";
				t_td.appendChild(c_img);
			} else {
				t_td.innerHTML = '<img width="13px" height="15px" src="' + markers[i].icon + '">';
			}
				
				t_td.id = markers[i].id;
				t_td.onclick = OnPosition;
				
				t_td = c_o("td");
				t_td.className = 'label';
				briefline.appendChild(t_td);
				t_td.innerHTML = markers[i].name ; 
				t_td.id = markers[i].id;
				t_td.onclick = OnPosition;
				
				t_td = c_o("td");
				t_td.className = 'more';
				briefline.appendChild(t_td);
				
				t_div = c_o("span");
				t_td.appendChild(t_div);
				t_div.innerHTML = "<span class='btn-expand'>expand</span>";
				if(markers[i].expand)t_div.innerHTML = "<span class='btn-collapse'>collapse</span>";
				t_div.onclick = ex;
				t_div.id = 'exp_' + i;
				t_div.className = "expand";
				//---------------------------------
				t_div = c_o("div");
				t_div.innerHTML = '<p> ' + markers[i].infotext + '</p><p>Distance to object: ' + markers[i].distance + ' ' + markers[i].metric + '</p>';
				t_div.id = 'disp_exp_' + i;
				t_div.className = "info";
				if(!markers[i].expand)t_div.style.display = 'none';
				baseline.appendChild(t_div);
				var t_dir = c_o("a");
				t_div.appendChild(t_dir);
				t_dir.innerHTML = 'Directions';
				t_dir.onclick = d;
				t_dir.href = 'javascript:void(0)';
				//------------------------------------------------
								
		}
	}
	if (t.className != 'marks hide') {
		$(document).ready( function() {
  			$('#markorder/.marks').jScrollPane(scrollbarOpts);
		});		
	}
//	t_div_all.className = "marker last";
}

function OnPosition(evt){
		var elem = ev_o(evt); 
		if (!elem.id) {
			elem = elem.parentNode;
		}
		if (elem) {
			var i = 0;
			i = g_m(elem.id)
			map.setCenter(markers[i].marker.getPoint());
			if(markers[i].marker.isHidden())
				map.setZoom(parseInt(markers[i].zoom));
			f = ShowInfoText(elem.id);
			f();
			expandtext(elem.parentNode.lastChild.lastChild);			
		}		
}
	
function ex(evt){
		
		var elem = ev_o(evt);
		if (!elem.id) {
			elem = elem.parentNode;
		}
		if (elem) {
			expandtext(elem);
		}			
}


	function expandtext(elem){
		for (var i = 0; i< markers.length; i++){
			try{
			if( i != elem.id.substr(4)){
					g_o("disp_exp_" + i).style.display = 'none';
					g_o("exp_" + i).innerHTML = "<span class='btn-expand'>expand</span>";
					g_o("line-" + markers[i].id).className = "marker";
					markers[i].expand = false;
			}}catch(e){}
		}
		if(g_o("disp_" + elem.id).style.display == 'none'){
			g_o("disp_" + elem.id).style.display = 'block';
			g_o(elem.id).innerHTML = "<span class='btn-collapse'>collapse</span>";
			g_o("line-" + markers[elem.id.substr(4)].id).className = "marker collapse";
			markers[elem.id.substr(4)].expand = true;
		}else{
			g_o("disp_" + elem.id).style.display = 'none';
			markers[elem.id.substr(4)].expand = false;
			g_o(elem.id).innerHTML = "<span class='btn-expand'>expand</span>";
			g_o("line-" + markers[elem.id.substr(4)].id).className = "marker";
		}
		g_o('toAddress').value = RemoveInnerTags(markers[elem.id.substr(4)].infotext);
		$('#markorder').find('div.marks').jScrollPane(scrollbarOpts);
	}	
	
	function hideAllMarkers(){
		for (var i = 0; i < markers.length ; i++){
			markers[i].marker.closeInfoWindow();
			markers[i].marker.hide();
		}
		markers.length = 0;
	}
	
	function showMarkers(){
		if(g_o("markorder").style.display == 'none'){
			for (var i = 0; i < markers.length ; i++)
				markers[i].marker.hide();		
			return;
		}
		var f = map.getZoom();
		for (var i = 0; i < markers.length ; i++){
			if(markers[i].p_id != currentview){markers[i].marker.hide();continue;}
			try {   //проверка на принадлежность к категории
				if(markers[i].categories.indexOf(',' + i_subcat + ',') < 0 && i_subcat != 0){markers[i].marker.hide();continue;}
				if(markers[i].categories.indexOf(',' + i_cat + ',') < 0 && i_cat != 0){markers[i].marker.hide();continue;}
			}catch(e){}
			markers[i].marker.show();
		}
		
		try{
			var sortorder = g_o('sort').innerHTML;
			sortMarkers(sortorder);
			ShowMarkerOrder();
		}catch(e){
		}
				
		for (var i = 0; i < markers.length ; i++)
			if(markers[i].zoom > f)markers[i].marker.hide();
	}

	//Включает уже загруженный таб
	function viewon(val){
		BackToSearch();
		if(currentview){
			var collect = g_o(currentview);
			collect.className = "tab";
		}
		t_o = g_o(val.id);
		t_o.className = "tab-active";
		currentview = val.id;
		map.setZoom(parseInt(val.zoom));		
		map.setCenter(new GLatLng(globalmap.center_lat, globalmap.center_lon));
		if(val.dragging == 1){
			map.enableDragging();
			AddCustomControls();
		}else {
			map.disableDragging();
			RemoveCustomControls();
		}
		switch (val.control) {
		 case 'Small':
			AddSmallControl();
		 break;
		 case 'Large':
		 AddLargeControl();
		 break;		
		 case 'Custom':
		 	AddSlideControl();
		break;
	   }
	   
	   switch (val.maptype){
		case 'Satellite':
			mt = map.getMapTypes();
			map.setMapType(mt[1]);
		break;
		case 'Hybrid':
			mt = map.getMapTypes();
			map.setMapType(mt[2]);
		break;
		default:
			mt = map.getMapTypes();
			map.setMapType(mt[0]);
		}						
	}
	
	var cur_si = '';
	
	function SendMPost(obj){
		var madres = g_o("mailp").value;
		var reg_mail = /^(\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,4},? *)+$/;
		if(!reg_mail.test(madres)){alert('Please input correct address!');return;}
		var params = [];
		params.id = parent_id;
//		params.securecode=g_o("secretp").value;
		params.sendto=madres;
		params.body=g_o('marker-values').innerHTML;
		var url = '/doaction.php?action=OnPost';
		downloadArrayPost(url,AfterSend,params);
		cur_si = 'popup_img_id';
		getMailDiv(obj,'info');				
	}
		
	function AfterSend(inp){
		//g_o("secretn").value = "";
		//ImageRefresh(cur_si);				
		//alert(inp);
	}	

		
	function FillOper(objname){		
		var obj = g_o(objname);
		var t = g_o('moper');
		obj.options.length = 0;
		for(var i = 0 ; i < t.options.length; i++){
			var newEl = document.createElement("option");
			newEl.text = t.options[i].text;
			newEl.value = t.options[i].value;
			obj.add(newEl,where);
		}
	}
	
	
	//AJAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
	
	function downloadArray(url, callback){
		var req = null;
		if (window.ActiveXObject) {
			var a = ['MICROSOFT.XMLHTTP'];
			for (var i = 0; i < a.length; i++) {
				try {
					req = new ActiveXObject(a[i]);
					break;
				} catch (e) { }
			}
			req.open( "GET", url, true);
						
		} else if (window.XMLHttpRequest) {
			req = new XMLHttpRequest;
			req.open( "GET", url, true);
		}

		req.onreadystatechange = function() {
						if (4 == req.readyState){
							// if "OK"
							if (200 == req.status){
								var xml = null;
									xml = req.responseText;
								callback(xml);
							} else {
								alert("Problem retrieving XML data");
							}
						}
		}
		req.send(null);
	}
	
function paramsToString (AV)
{
var N=new String();
var O=0;
for (var P in AV)
{
if (O>0)
{
N+='&'
// если это не "прогонка", добавляет "&" к значению, чтобы разделить значения запроса.
}

var Q=escape(AV[P]);

while (Q.indexOf('+')!=-1)
{
Q=Q.replace('+', '%2B')
// заменяет "+" на "%2B" - простое урл кодирование
}
while (Q.indexOf('&')!=-1)
{
Q=Q.replace('&', '%26')
// опять же, кодирование "&".
}
N+= P + '=' + Q;
O++
}
return N
};
	
	function downloadArrayPost(url, callback, params){
		var req = null;
		var paramz = paramsToString(params);
		if (window.ActiveXObject) {
			var a = ['MICROSOFT.XMLHTTP'];
			for (var i = 0; i < a.length; i++) {
				try {
					req = new ActiveXObject(a[i]);
					break;
				} catch (e) { }
			}
			req.open( "POST", url, true);
						
		} else if (window.XMLHttpRequest) {
			req = new XMLHttpRequest;
			req.open( "POST", url, true);
		}

		req.onreadystatechange = function() {
						if (4 == req.readyState){
							// if "OK"
							if (200 == req.status){
								var xml = null;
									xml = req.responseText;
								callback(xml);
							} else {
								alert("Problem retrieving XML data");
							}
						}
		}
		
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.setRequestHeader('Content-Length', paramz.length);
		req.send(paramz);
	}
	

	
