var xmlHttp = createXmlHttpRequestObject();
var levelload = 0;
var points = '';
var _timer = null;
var arrayFullPath = new Array();

function createXmlHttpRequestObject() 
{ 
 var xmlHttp; 
 try 
 {
  xmlHttp = new XMLHttpRequest();
  return xmlHttp;
 } 
 catch(e)
 {
  var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0', 
                                     'MSXML2.XMLHTTP.5.0', 
                                     'MSXML2.XMLHTTP.4.0', 
                                     'MSXML2.XMLHTTP.3.0', 
                                     'MSXML2.XMLHTTP', 
                                     'Microsoft.XMLHTTP'); 
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
    { 
      try
      { 
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]); 
      } 
      catch(e) {} 
    } 
    if (!xmlHttp){alert('Ваш броузер не поддерживает асинхронные запросы ! Попробуйте сменить броузер Рекомендуем использовать Microsoft Internet Exploler');}
    else {return xmlHttp;}
 }
}

function menu(paramLinkID, paramLevel, arhive)
{
  if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  {
	levelload = paramLevel;

	var params = '';
	if(arhive) params = 'arhive=1&';
	params += 'level=' + encodeURIComponent(paramLevel);
	parentfullpath = paramLinkID;
	var parentid = Array();
	parentid = parentfullpath.split('-');
	for(i = 1; i < parentid.length; i++)
	{
	  params += '&parentid' + i + '=' + encodeURIComponent(parentid[i]);
	}

	xmlHttp.open('GET', '/getlevelnavigation.php?' + params, true);
	xmlHttp.onreadystatechange =  function(){handleRequestStateChange();}
	xmlHttp.send(null);
	
	MarkerLink(paramLinkID);
	
	return true;
 }
 else
 {
	//setTimeout(menu(paramLinkID, paramLevel), 5000);
	return false;
 }
}

function menufullpath(paramFullPath, arhive)
{
  if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  {
	var params = '';
	if(arhive) params = 'arhive=1&';
	params += 'level=all';
	var parentid = Array();
	parentid = paramFullPath.split('-');
	arrayFullPath = paramFullPath.split('-');
	for(i = 1; i < parentid.length; i++)
	{
	  params += '&parentid' + i + '=' + encodeURIComponent(parentid[i]);
	}
	params += '&endlevel=' + i;

	xmlHttp.open('GET', '/getlevelnavigation.php?' + params, true);
	xmlHttp.onreadystatechange =  function(){handleRequestStateChangeFULLPATH();}
	xmlHttp.send(null);
	
	return true;
 }
 else
 {
	return false;
 }
}

function xmldoc()
{
  if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  {
	xmlHttp.open('GET', '/getlevelnavigation.php?xmldoc=1', true);
	xmlHttp.onreadystatechange =  function(){handleRequestStateChangeXMLDOC();}
	xmlHttp.send(null);
	
	return true;
 }
 else
 {
	return false;
 }
}

function handleRequestStateChange()
{
  if(xmlHttp.readyState == 4)
  {
      //clearTimeout(_timer);
      //document.getElementById('load').innerHTML = '';
      if(xmlHttp.status == 200)
      {
        handleServerResponse();
      }
      else
      {
        alert('При обращении к серверу возникли проблемы ' + xmlHttp.statusText);
      }
  }
  else
  {
     // loading(); 
  }
}

function handleRequestStateChangeFULLPATH()
{
  if(xmlHttp.readyState == 4)
  {
      if(xmlHttp.status == 200)
      {
        handleServerResponseFULLPATH();
      }
      else
      {
        alert('При обращении к серверу возникли проблемы ' + xmlHttp.statusText);
      }
  }
}

function handleRequestStateChangeXMLDOC()
{
  if(xmlHttp.readyState == 4)
  {
      if(xmlHttp.status == 200)
      {
		xmldoc = xmlHttp.responseText;
		document.body.innerHTML = xmldoc;
	  }
      else
      {
        alert('При обращении к серверу возникли проблемы ' + xmlHttp.statusText);
      }
  }
}

function loading()
{
 var text = 'Загрузка' + points;
 document.getElementById('load').innerHTML = text;
 if(points == '...'){points = '';}else{points += '.';}
_timer = setTimeout(loading, 100);  
}

function handleServerResponse()
{
  var thislevelcleaning = levelload;
  while(document.getElementById('table' + thislevelcleaning) != null)
  {
	var obj = document.getElementById('table' + thislevelcleaning);
    obj.parentNode.removeChild(obj);
	
	thislevelcleaning++;
 }

  xmlResponse = xmlHttp.responseXML;
  xmlRoot = xmlResponse.documentElement;
  linkArray = xmlRoot.getElementsByTagName('link');

  var trElement = addLevelNext();

  for(var i = 0; i < linkArray.length; i++)
  { 
     var html = xmlRoot.getElementsByTagName('title')[i].childNodes[0].nodeValue;
     var id = xmlRoot.getElementsByTagName('id')[i].childNodes[0].nodeValue;
     var href = xmlRoot.getElementsByTagName('href')[i].childNodes[0].nodeValue;
     var onclick = xmlRoot.getElementsByTagName('onclick')[i].childNodes[0].nodeValue;

     addLinkElement(html, id, href, onclick, trElement); 
  }
}

function handleServerResponseFULLPATH()
{
  xmlResponse = xmlHttp.responseXML;
  xmlRoot = xmlResponse.documentElement;
  linkArray = xmlRoot.getElementsByTagName('link');
  
  var thisLevel = 2;
  levelload = thisLevel;
  var trElement = addLevelNext();
  for(var i = 0; i < linkArray.length; i++)
  {
	var html = xmlRoot.getElementsByTagName('title')[i].childNodes[0].nodeValue;
    var id = xmlRoot.getElementsByTagName('id')[i].childNodes[0].nodeValue;
    var href = xmlRoot.getElementsByTagName('href')[i].childNodes[0].nodeValue;
    var onclick = xmlRoot.getElementsByTagName('onclick')[i].childNodes[0].nodeValue;
	
    var getArrayLevel = Array();
	getArrayLevel = id.split('-');
	
	if(thisLevel < (getArrayLevel.length - 1))
	{
		thisLevel = (getArrayLevel.length - 1);
		levelload = thisLevel;
		trElement = addLevelNext();
	}

    addLinkElement(html, id, href, onclick, trElement);
  }
  
  var strLinkIDinFullPath = 'root';
	for(var j = 1; j < arrayFullPath.length; j++)
	{
		strLinkIDinFullPath += '-' + arrayFullPath[j];
		if(j == (arrayFullPath.length - 1)){strLinkIDinFullPath += '|';}

		var clicklink = document.getElementById(strLinkIDinFullPath);
		clicklink.setAttribute('class', 'act');
		if (clicklink.className != 'act')
		{
			clicklink.className = 'act';
		}
	}
}

function MarkerLink(paramClickLink)
{
	thislevel = levelload - 1;
	var obj = document.getElementById('tr' + thislevel).getElementsByTagName('a');
	
	for(var i = 0; obj.length > i; i++)
	{
		obj[i].className = '';
	}
	
	var clicklink = document.getElementById(paramClickLink);
	clicklink.setAttribute('class', 'act');
	if (clicklink.className != 'act')
	{
    	clicklink.className = 'act';
	}
}

function addLinkElement(paramHtml, paramId, paramHref, paramOnclick, paramtrElement) 
{
  var link = document.createElement('a');
  link.innerHTML = paramHtml;
  link.setAttribute('id', paramId);
  link.setAttribute('href', paramHref);

  var param = new Array();
  param = paramOnclick.split(',');

  var pLinkName = param[0];
  var pLevel = param[1];

  var func = '';
  if(param[0] != 'null'){func = 'menu(\"'+pLinkName+'\", \"'+pLevel+'\", viewArhive)';}

  document.body.setAttribute('class', 'Not_IE');
  if (document.body.className != 'Not_IE')
  {
    link.setAttribute('onclick', new Function (func));
  }
  else
  {
    link.onclick = new Function (func);
  }
 
  var td = document.createElement('td');
  td.setAttribute('id', 'td' + paramId);

  td.appendChild(link);
  paramtrElement.appendChild(td);
}

function addLevelNext() 
{
  var table = document.createElement('table');

  //table.setAttribute('align', 'right');
  //table.setAttribute('border', '1');
  
  table.setAttribute('id', 'table' + levelload);
  table.setAttribute('class', 'cat-table sub-table');
  if (table.className != 'cat-table sub-table')
  {
    table.className = 'cat-table sub-table';
  }

  var tbody = document.createElement('tbody');
  tbody.setAttribute('id', 'tbody' + levelload);

  var tr = document.createElement('tr');
  tr.setAttribute('id', 'tr' + levelload);

  tbody.appendChild(tr);
  table.appendChild(tbody);
  document.getElementById('catright').appendChild(table);
  
  return tr;
}