
var xmlDoc;
var xml_file = '';
var maintag = 'points';
var d=document;
var menu_obj = '';
var main_link = '?';

var main_point_class = 'pmenu';
var sec_point_class = 'pmenu';

var main_submenu_class = 'forsmenu';
var sec_submenu_class = 'forsmenu2';

var menu_symb = ' >';
var isAdmin = 0;
var ext_links_new_window = 1;

var brow=0; if(navigator.appName.indexOf("Microsoft")==-1){brow=1;}

// ------------------- //

function goParse(){
 if(xml_file == ''){return;}

 if (window.ActiveXObject){
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.loadXML(xml_file);
 } else if (document.implementation && document.implementation.createDocument) {
  var parser=new DOMParser();
  xmlDoc=parser.parseFromString(xml_file,"text/xml");
 }

 var tobj = xmlDoc.documentElement;
 parseFile(tobj, 0);

}

function setArrayMenu(){
 alert(maintag+', '+xmlDoc.getElementsByTagName(maintag).length);
 parseFile(xmlDoc.getElementsByTagName(maintag)[0], 0);
}

function parseFile(obj, ret){
 var arr=[];
 var obj2 = obj.childNodes;
 for(var i=0;i<obj2.length;i++){//if(brow && i%2==0){continue;}
  var ln=arr.length;
  arr[ln]=[];
  arr[ln]['header']=obj2[i].nodeName; arr[ln]['id']=obj2[i].getAttribute("id");
  var obj3=obj2[i].childNodes;
  for(var e=0;e<obj3.length;e++){//if(brow && e%2==0){continue;}
   var nam=obj3[e].nodeName;
   var ndv='';
   if(obj3[e].childNodes.length>0){
    ndv=obj3[e].childNodes[0].nodeValue;
    if(ndv==null){ndv='';}
   }
   if(nam!=maintag){arr[ln][nam]=ndv;}
   else{
    var nobj=obj3[e];
    if(nobj.childNodes.length>0){
	var tarr=[]; tarr=parseFile(nobj,ret+1);
	arr[ln][maintag]=tarr;
    }
   }
  }
 }
 if(ret>0){return arr;} else{menuwrite(arr);}
}

var tb = '<table cellspacing=0 cellpadding=0>';
var ftb = '<table cellspacing=1 cellpadding=0 style="position:absolute;z-index:10;">';
var glob_ara;

function menuwrite(ara, pr, parentid){
 if(parentid==null){parentid='';}
 if(pr==null){pr=0;}
 if(!pr){glob_ara = ara;}
 var str='';

 if(!pr){str+=ftb+'<tr>';}else{str+=tb;}

 for(var di=0;di<ara.length;di++){

  if(!pr){str+='<td>';}

  var defid= '';

  if(!pr){
   nparentid='mmenu'+(di+1); defid = 'mmenu'+(di+1);
   str+=tb+'<tr><td><div class="'+main_point_class+'" id="'+defid+'" onMouseOver="changeView(this,1);" onMouseOut="changeView(this,0);"';
   if(ara[di]['link']!='' || ara[di]['ext_link']!=''){str+=' onClick="getLocation(\''+ara[di]['link']+'\', \''+ara[di]['ext_link']+'\');"';}
   str+='>'+ara[di]['name']; if(ara[di][maintag]!=null){str+=menu_symb;} str+='</div></td></tr>';
   if(!isAdmin && ara[di]['icon']!=''){
    document.getElementById("for_icons").innerHTML += '<img src="'+ara[di]['icon']+'">';
   }
  }
  else {
   nparentid=parentid+'_smenu'+(di+1); defid = parentid+'_smenu'+(di+1);
   str+='<tr><td>'+tb+'<tr><td><div class="'+sec_point_class+'" id="'+defid+'" onMouseOver="changeView(this,1);" onMouseOut="changeView(this,0);"';
   if(ara[di]['link']!='' || ara[di]['ext_link']!=''){str+=' onClick="getLocation(\''+ara[di]['link']+'\', \''+ara[di]['ext_link']+'\');"';}
   str+='>';if(!isAdmin){str+='<table width=100% height=100% cellspacing=0 cellpadding=0><tr><td class="td_v_center">';} str+=ara[di]['name']; if(ara[di][maintag]!=null){str+=menu_symb;} if(!isAdmin){str+='</td></tr></table>';} str+='</div></td>';
  }

  if(ara[di][maintag]!=null){

   // далее рисуем див для подменю конкретного элемента меню
   if(pr<1){str+='<tr><td><div class="'+main_submenu_class+'" id="forsmenu_'+nparentid+'">';}
   else{str+='<td><div class="'+sec_submenu_class+'" id="forsmenu_'+nparentid+'">';}

   str+=menuwrite(ara[di][maintag], pr+1, nparentid);

   // закрываем див для подменю конкретного элемента меню
   if(pr<1){str+='</div></td></tr>';}
   else{str+='</div></td>';}
  }

  if(pr>=1){
   str+='</tr></table></td></tr>';
  }

  if(!pr){str+='</table></td>';}
 }

 if(!pr){str+='</tr>';}
 str+='</table>';

 if(pr>0){return str;}
 else{
  //alert(str);
  document.getElementById(menu_obj).innerHTML=str;
 }
}


function getLocation(link, ext_link){

 if(link.search('http://')!=-1 || link.search('https://')!=-1){
	location.href = link;
 } else {
	if(!isAdmin && ext_link!=''){
		if(ext_links_new_window){
			var wn = window.open(ext_link);
		} else {
			location.href=ext_link;
		}
	} else {
		location.href = main_link.replace('$p', link);
	}
 }

}


var lastmenu = ''; var lastelem = ''; var ntm;


function changeView(obj, d){
 var tid = new String(obj.getAttribute("id"));
 var tobj=document.getElementById("forsmenu_"+tid);

 if(!d){

  // таймаут, по истечение которого, если мышь не была наведена на любой элемент, скрывается всё меню
  ntm = setTimeout("checkMouseAllOut();", 100);

 } else {

  if(!isAdmin){
   var di = parseInt(tid.replace('mmenu',''))-1;
   if(glob_ara[di]['icon']!=null && glob_ara[di]['icon']!=''){
    var icon = '<img src="'+glob_ara[di]['icon']+'">';
    document.getElementById("div_for_icon").innerHTML = icon;
   }
  }

  // убираем запланированное выполнение функции по сворачиванию всех меню
  clearTimeout(ntm);

  if(lastelem != '' && tid.substring(0, lastelem.length) != lastelem){

	if(lastmenu != '' && getUnderscores(tid) != getUnderscores(lastmenu)){
		outover(document.getElementById(lastmenu), 0);
	}

	var tid_under = getUnderscores(tid);
	var lastelem_under = getUnderscores(lastelem); var ll = lastelem_under;
	var mm = 0; if(tid.substring(0,5)=='mmenu'){mm=1;}

	if(tid_under != lastelem_under){
		while(lastelem_under != tid_under-1){
			if(lastelem == ''){break;}
			if(ll != lastelem_under){
				outover(document.getElementById('forsmenu_'+lastelem), 0);
			}
			outover(document.getElementById(lastelem), 0);
			lastelem = getParts(lastelem);
			lastelem_under = getUnderscores(lastelem);
		}
	} else {
		outover(document.getElementById(lastelem), 0);
	}
  }

  // выделяем элемент, куда навели мышь
  outover(obj, d);
  lastelem = tid;


  if(tobj != null){

	lastmenu = tobj.getAttribute("id");
	outover(tobj, d);

  } else {

	var sstr = getParts(tid);
	if(sstr != ''){
		lastmenu = 'forsmenu_'+getParts(tid);
	} else {
		lastmenu = '';
	}

  }

 }

}


function getParts(str){
 // функция разбивает строку по символу "_" и возвращает подстроку до последнего этого символа

 var prs = str.split('_');
 prs.length--;
 return prs.join('_');
}

function getUnderscores(str){
 // функция возвращает количество символов "_" в строке

 var n = 0;
 while(str.search('_')!=-1){str=str.replace('_',''); n++}
 return n;
}


function checkMouseAllOut() {
 // функция прячет всё меню (все теги DIV), начиная с наиболее глубокого

 if(!isAdmin){document.getElementById("div_for_icon").innerHTML = '';}

 lastelem = '';
 lastmenu = '';

 var mobj = document.getElementById(menu_obj).getElementsByTagName("div");
 for(var m=mobj.length-1;m>=0;m--){
	outover(mobj[m],0);
 }

}


function outover(obj, ch){
 var el_id='elem:'+obj.getAttribute("id");
 if(ch){
  // over
  if(obj.className.search('_over')<0){obj.className=obj.className+'_over';}
 } else {
  // out
  obj.className=obj.className.replace('_over','');
 }
}

