
vert_menu_h0 = '<table border="0" width="200" cellpadding="0" cellspacing="0">';
vert_menu_h1 = '<tr><td width="200" valign="top"  bgcolor="#f1eff0" align="right">';
vert_menu_i0 = '<table border="0" width="';
vert_menu_i1 = '" cellpadding="5" cellspacing="0"><tr><td>';
vm_i2 = '<a class="';
vm_i3 = '" href="';
vm_i4 = '">';
vm_i5 = '</a>';
vert_menu_f0  = '</td></tr></table>';

LINE_END = '\n';

//------------------------

var READY_STATE_COMPLETE = 4;
var contentRequester = getHTTPRequestObject();
var menuRequester = getHTTPRequestObject();

var main_menu_id;
var vert_menu_id;

var menuTree;

function initMenuStruct(menuArray, tail, link_header, number)
{
   for (var i = 0; i < number; i++)
   {
        var index = tail.indexOf('|');
        var id = tail.substring(0, index);
        tail = tail.substring(index + 1);

        index = tail.indexOf('|');
        var name = tail.substring(0, index);
        tail = tail.substring(index + 1);

        index = tail.indexOf('|');
        var children = tail.substring(0, index);
        tail = tail.substring(index + 1);

        var lh = link_header;
        if (lh != '') lh += '|';
        
        menuArray[i] = new MenuItem(id, name, lh + id, null);
        if (children > 0)
        {
            var chArray = new Array();
            var tmp = initMenuStruct(chArray, tail, lh + id, children);
            
            tail = tmp.tail;
            menuArray[i].children = tmp.array;

        }
    }
    return new TmpItem(menuArray, tail);
}

function TmpItem(_arr, _tl)
{
    this.array = _arr;
    this.tail = _tl;
}

function initMenuTree(xml)
{
   var value = xml;
   var tail = '';
   var index = xml.indexOf('|');
   if (index != -1)
   {
      value = xml.substring(0, index);
      tail = xml.substring(index + 1);
   }
   menuTree = new Array();
   var tmp = initMenuStruct(menuTree, tail, '', value);
   menuTree = tmp.array;
}



function MenuItem(_id, _name, _parent, _children)
{
    this.id = _id;
    this.name = _name;
    this.parent = _parent;
    this.children = _children;
}


function mainMenuClick(index, id)
{
   document.getElementById('gm' + main_menu_id).className = "hmenu";
   document.getElementById('gm' + index).className = "hmenu_";


   getMenuTree(index, id, false);
   // load page
   getDocument(id);

   main_menu_id = index;
}

function createMenuView(array, level, key)
{
   var result = '';
   var id = key;
   var tail = '';
   

   index = id.indexOf('|');
   
   if (index != -1)
   {
      id = key.substring(0, index);
      tail = key.substring(index + 1);
   }

   var i;
   

   for (i = 0; i < array.length; i++)
   {
      if (level == 0)
      {
         style = 'vmenu';
         if (array[i].id == id) style = 'vmenu_';
      }
      else
      {
         style = 'vmenu_1';
         if (array[i].id == id) style = 'vmenu_1_';
      }

      size = (190 - 10 * level);
      result += vert_menu_i0 + size.toString() + vert_menu_i1 + LINE_END;
      
      var link = '/' + array[i].id + '" onClick="javascript:vertMenuClick(\'' + array[i].id + '\', \'' + array[i].parent + '\'); return false;';
      result += vm_i2 + style + vm_i3 + link + vm_i4 + array[i].name + vm_i5 + LINE_END;
      result += vert_menu_f0 + LINE_END + LINE_END;

//--------------------------------
      if (array[i].id == id)
      {
         ch = array[i].children;
         if (ch != null)
         {
             result += createMenuView(ch, level + 1, tail);
         }
      }
//---------------------------------
   }
   return result;
}


function vertMenuClick(id, mask)
{
   var menu_ref = "";
   menu_ref += vert_menu_h0 + vert_menu_h1;
   
   menu_ref += createMenuView(menuTree, 0, mask);

   menu_ref += vert_menu_f0;

// show
   document.getElementById('menu_frame').innerHTML = menu_ref;
   getDocument(id);
}


function loadPage(mid, id)
{
   document.getElementById('gm' + mid).className = "hmenu_";

   getMenuTree(mid, id, false);
   getDocument(id);

   main_menu_id = mid;
}

// process link to document directly from document body
function processDirectLink(id)
{

   alert('PROCESS DIRECT LINK : ' + id);
   // define what menu item must be light-in
   // load vertical menu
   // load document

}

function getDocument(page_id)
{
   var url = "content.php?page=" + page_id;
   makeAJAXCall(contentRequester,  processContentResponse, url);
}




function getHTTPRequestObject()
{
    var xmlHttpRequest;
    if (typeof ActiveXObject != 'undefined')
    {
        xmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
    }
    else if (typeof XMLHttpRequest != 'undefined')
    {
        xmlHttpRequest = new XMLHttpRequest();
    }
    else
    {
        xmlHttpRequest = false;
    }
    return xmlHttpRequest;
}

function makeAJAXCall(requester, responce, url)
{
    if (requester)
    {
        document.getElementById('progress').className = 'loading';
        
        //document.getElementById('progress').style.left = event.x;
        //document.getElementById('progress').style.top = event.y;
        
        document.getElementById('progress').innerHTML = 'Загрузка...';
    
        requester.open("GET", url, true);
        requester.onreadystatechange = responce;
        requester.send(null);
    }
}

function processContentResponse()
{
    if (contentRequester.readyState == READY_STATE_COMPLETE) {
        if (contentRequester.status==200) {
            document.getElementById('main_doc_frame').innerHTML = contentRequester.responseText;
        }
        else
        {
            document.getElementById('main_doc_frame').innerHTML = 'Ошибка при загрузке страницы';
        }
        
        document.getElementById('progress').innerHTML = '';
        document.getElementById('progress').className = 'blind';

    }
}


function processMenuResponse()
{
    if (menuRequester.readyState == READY_STATE_COMPLETE)
    {
        if (menuRequester.status==200)
        {
            // init menu structure
            initMenuTree(menuRequester.responseText);

            // create reflection
            var menu_ref = "";
            menu_ref += vert_menu_h0 + vert_menu_h1;

            if (vert_menu_id == 0)
            {
               var i;
               for (i = 0; i < menuTree.length; i++)
               {
                  menu_ref += vert_menu_i0 + '190' + vert_menu_i1 + LINE_END;
                  var link = '/' + menuTree[i].id + '" onClick="javascript:vertMenuClick(\''+ menuTree[i].id + '\', \''  + menuTree[i].parent + '\'); return false;';
                  
                  menu_ref += vm_i2 + 'vmenu' + vm_i3 + link + vm_i4 + menuTree[i].name + vm_i5 + LINE_END;
                  menu_ref += vert_menu_f0 + LINE_END + LINE_END;
               }
            }
            else
            {
               // TODO - for direct link ON_CLICK
            }
            
            menu_ref += vert_menu_f0;
            
            // show
            document.getElementById('menu_frame').innerHTML = menu_ref;
        }
    }
}





function getMenuTree(index, mid, expand)
{
    if (index != main_menu_id)
    {
        // load menu for main_menu_id
        var url = "menu.php?page=" + mid;
        
        if (!expand)
        {
           vert_menu_id = 0;
        }

        makeAJAXCall(menuRequester,  processMenuResponse, url);
    }
    else
    {
       // create reflection
       var menu_ref = "";
       menu_ref += vert_menu_h0 + vert_menu_h1;
       var i;
       for (i = 0; i < menuTree.length; i++)
       {
          menu_ref += vert_menu_i0 + '190' + vert_menu_i1 + LINE_END;
          var link = '/' + menuTree[i].id + '" onClick="javascript:vertMenuClick(\''+ menuTree[i].id + '\', \''  + menuTree[i].parent + '\'); return false;';

          menu_ref += vm_i2 + 'vmenu' + vm_i3 + link + vm_i4 + menuTree[i].name + vm_i5 + LINE_END;
          menu_ref += vert_menu_f0 + LINE_END + LINE_END;
       }
            
       menu_ref += vert_menu_f0;
       // show
       document.getElementById('menu_frame').innerHTML = menu_ref;
    }
}




