// class Map

var ie = ( document.all || navigator.userAgent.indexOf("Opera")!=-1 );
var ns = (navigator.userAgent.indexOf("Netscape") != -1);

/*
  Функции совместимости браузеров
*/
function hideObject(obj)
{
        if(ie) obj.style.visibility = 'hidden';
        else if(ns) obj.style.display = 'none';
}
function showObject(obj)
{
        if(ie) obj.style.visibility = 'visible';
        else if(ns) obj.style.display = '';
}
function isObjectHidden(obj)
{
        if(ie)return (obj.style.visibility == 'hidden');
        else if(ns) return (obj.style.display == 'none');
}
function isObjectVisible(obj)
{
        if(ie)return (obj.style.visibility == 'visible');
        else if(ns) return (obj.style.display == '');
}


function Map()  {
        this.keys = new Array();
        this.vals = new Array();

        this.addElement = addElement;
        this.getElement = getElement;
        this.setElement = setElement;

} // class Map

function addElement(key, val)  {
  index = this.keys.length;
  for(var i=0;i<this.keys.length;i++)
        if(this.keys[i]==key)  {
          index = i;
          break;
        }
  this.keys[index] = key;
  this.vals[index] = val;
} // addElement

function getElement(key)  {
  for(var i=0; i<this.keys.length; i++) if(this.keys[i]==key) return this.vals[i];
  return null;
} // getElement

function setElement(key, value)  {
  for(var i=0; i<this.keys.length; i++)
    if(this.keys[i]==key)  {
       this.vals[i] = value;
       return;
    }
  this.addElement(key, value);

} //setElement


// class Window

var winImages = new Array(6);
winImages[0] = new Image();
winImages[0].src = '/images/win/close.gif';
winImages[1] = new Image();
winImages[1].src = '/images/win/close_over.gif';
winImages[2] = new Image();
winImages[2].src = '/images/win/up.gif';
winImages[3] = new Image();
winImages[3].src = '/images/win/up_over.gif';
winImages[4] = new Image();
winImages[4].src = '/images/win/down.gif';
winImages[5] = new Image();
winImages[5].src = '/images/win/down_over.gif';

var contents = new Map();
var captions = new Map();
var body_widths = new Map();
var body_heights = new Map();
var break_afters = new Map();
var buttons = new Map();

function Window(caption,content,win_id,body_width,body_height,break_after,collapsed,left,top,zindex,winbuttons)  {

        /*Глобальные массивы*/
        contents.addElement(win_id, content);
        captions.addElement(win_id, caption);
        body_heights.addElement(win_id, body_height);
        body_widths.addElement(win_id, body_width);
        break_afters.addElement(win_id, break_after);
        buttons.addElement(win_id, winbuttons);


        /*Переменные*/
        this.caption = caption;
        this.content = content;
        this.win_id = win_id;
        this.body_width = body_width;
        this.body_height = body_height;
        this.break_after = break_after;
        this.collapsed = collapsed;
        this.zindex = zindex;
        this.left = left;
        this.top = top;

        /*Методы*/
        this.showWindow = showWindow;
        this.closeWindow = closeWindow;
        this.moveWindow = moveWindow;
        this.expandWindow = expandWindow;
        this.collapseWindow = collapseWindow;
        this.setZIndex = setZIndex;
        this.isVisible = isVisible;
        this.isCollapsed = isCollapsed;
        this.setCaption = setCaption;
        this.setContent = setContent;


        printHeader(win_id);
        printFooter();


        this.showWindow(false);

} // constructor Window

/* Функции-члены класса Window */
function showWindow(force)  {

    if(!force && this.isVisible()) return;

    if(force) this.collapsed = this.isCollapsed();

    var tbl = document.getElementById(this.win_id);
    if( tbl )  {
        html  = tableHeader(this.win_id);
        html += windowHeader(this.win_id);
        html += windowContent(this.win_id, 0);
        html += tableFooter();
        if(this.break_after) html += "<br reset='all'>";

        //tbl.style.visibility = 'visible';
        showObject(tbl);
        tbl.innerHTML = html;

    }

    if(!this.collapsed) this.expandWindow();

    if(this.top!=-1 && this.left!=-1) this.moveWindow(this.left,this.top)
    if(this.zindex!='undefined') this.setZIndex(this.zindex);

} // showWindow

function isVisible()  {
    var tbl = document.getElementById(this.win_id);
    return (tbl && tbl.innerHTML != '');

} // isVisible


function expandWindow()  {
        var win_id = this.win_id;
        var tbl = document.getElementById(win_id);
    if( tbl )  {

                html = tableHeader(win_id);
                html += windowHeader(win_id);
                html += windowContent(win_id, 1);
                html += tableFooter();
                if(break_afters.getElement(win_id)==1)html += "<br reset='all'>";
                src = winImages[2].src;
                alt = 'Свернуть';

        tbl.innerHTML = html;
        btn = document.getElementById("img_change_"+win_id);
        if(btn)
          {
          btn.src = src;
          btn.alt = alt;
        }

        this.collapsed = false;
    }

} // expandWindow

function collapseWindow() {
        if(this.isCollapsed()) return;

        var win_id = this.win_id;
        var tbl = document.getElementById(win_id);
    if( tbl )  {
        var d = document.getElementById('div_'+win_id);
        if( d ) contents.setElement(win_id, d.innerHTML);

                html = tableHeader(win_id);
                html += windowHeader(win_id);
                html += windowContent(win_id, 0);
                html += tableFooter();
                if(break_afters.getElement(win_id)==1)html += "<br reset='all'>";
                src = winImages[4].src;
                alt = 'Свернуть';

        tbl.innerHTML = html;
        btn = document.getElementById("img_change_"+win_id);
        if(btn) {
                        btn.src = src;
                        btn.alt = alt;
                }

        this.collapsed = true;
    }

} // collapseWindow

function moveWindow(left,top)  {
        var tbl = document.getElementById(this.win_id);
        if( tbl )  {
                tbl.style.position = 'absolute';
                tbl.style.top = top;
                tbl.style.left = left;
                this.top = top;
                this.left = left;
        }
} // moveWindow

function setZIndex(zindex)  {
        var tbl = document.getElementById(this.win_id);
        if( tbl )  {
                tbl.style.zIndex = zindex;
                this.zindex = zindex;
        }
} // setZIndex

function closeWindow()  {
  closeTable(this.win_id);

} // closeWindow

function setCaption(sCaption) {
    captions.setElement(this.win_id, sCaption);
    this.showWindow(true);

} // setCaption

function setContent(sContent) {
    contents.setElement(this.win_id, sContent);
    this.showWindow(true);

} // setContent

function isCollapsed()  {
        var tbl = document.getElementById(this.win_id);
        return (tbl && tbl.innerHTML.indexOf('exwin_body') == -1);

} // isCollapsed

/**********************************************************************************/


function buttonImageOn(obj)  {
    //var img = event.srcElement;
    var img;
    if(!obj)img = event.srcElement;
    else img = obj;
    if(img)  {
        for( var i=0;i<winImages.length-1;i++)
        if(img.src==winImages[i].src)  {
         img.src=winImages[i+1].src;
          break;
        }
    }
} // buttonImageOn

function buttonImageOff(obj)  {
    var img;
    if(!obj)img = event.srcElement;
    else img = obj;

    if(img)  {
         for( var i=1;i<winImages.length;i++)
         if(img.src==winImages[i].src)  {
           img.src=winImages[i-1].src;
           break;
         }
    }
} // buttonImageOff

function windowHeader(win_id)  {
    var res = "<tr>";
    res += "<td class='exwin_header'>"+captions.getElement(win_id)+"</td>";

    var click='changeState("'+win_id+'",this)';

    res += '<td class="exwin_close" align="right">';
    if(buttons.getElement(win_id) & 1 )
                res += "<img src='images/win/down.gif' id='img_change_"+win_id+"' border='0' alt='Развернуть' width='20' height='20' onmouseover='buttonImageOn(this)' onmouseout='buttonImageOff(this)' onclick='"+click+"'  >";
        if(buttons.getElement(win_id) & 2 )
        res += '<img src="images/win/close.gif" id="img_close_'+win_id+'" border="0" alt="Закрыть" width="15" height="20" onmouseover="buttonImageOn(this)" onmouseout="buttonImageOff(this)" onclick="closeTable(\''+win_id+'\')" >';

    if(buttons.getElement(win_id) == 0) res += "&nbsp;";

    res += '</td>';
    res += '</tr>';

    return res;
} // showHeader

function windowContent(win_id,visib)  {
    var res = '';

    if(contents.getElement(win_id) == "") return res;

    if(visib==1)
    {
      res += '<tr>';
      res += '<td class="exwin_body" valign="top" height="'+body_heights.getElement(win_id)+'" colspan="2">';
      res += "<div id='div_"+win_id+"'>";
      res += contents.getElement(win_id);
      res += "</div>";
      res += '</td></tr>';
    }
    else
    {
      if(ie)
        res += "<div id=tmp_"+win_id+" style='position:absolute;visibility:hidden;top:0;left:0;zindex=-100;'>";
      else
        res += "<div id=tmp_"+win_id+" style='position:absolute;display:none;top:0;left:0;zindex=-100;'>";
      res += contents.getElement(win_id);
      res += "</div>";
    }

    return res;
} // showContent

function changeState(win_id, obj)  {
    //var btn = event.srcElement;
    var btn;
    if(!obj) btn = event.srcElement;
    else btn = obj;

    if(btn)  {
         var expand = false; // expand == false - Свернуть
         if(btn.src == winImages[5].src || btn.src == winImages[4].src) expand = true;

         var tbl = document.getElementById(win_id);
         if( tbl )  {

            if(expand) { //развернуть
                                html = tableHeader(win_id);
                                html += windowHeader(win_id);
                                html += windowContent(win_id, 1);
                                html += tableFooter();
                                if(break_afters.getElement(win_id)==1)html += "<br reset='all'>";
                                src = winImages[2].src;
                                alt = 'Свернуть';

            } else { // свернуть
                var d = document.getElementById('div_'+win_id);
                if( d ) contents.setElement(win_id, d.innerHTML);

                                html = tableHeader(win_id);
                                html += windowHeader(win_id);
                                html += windowContent(win_id, 0);
                                html += tableFooter();
                                if(break_afters.getElement(win_id)==1)html += "<br reset='all'>";
                                src = winImages[5].src;
                                alt = 'Развернуть';
            }
            tbl.innerHTML = html;
            btn = document.getElementById("img_change_"+win_id);
            if(btn)
            {
              btn.src = src;
              btn.alt = alt;
            }

         }
        }
} // changeState

function closeTable(win_id)  {
    var tbl = document.getElementById(win_id);
    if( tbl )  {
                tbl.innerHTML = '';
                //tbl.style.visibility = 'hidden';
                hideObject(tbl);

                /*
                tbl.style.position = 'absolute';
                tbl.style.top = 0;
                tbl.style.left = 0;
                tbl.style.width = 0;
                tbl.style.height = 0;
                */
    }
} // closeTable

function printFooter()  {
        document.write("</div>");
} // printFooter

function printHeader(win_id)  {
        document.write("<div id='"+win_id+"'>");
} // printHeader

function tableFooter()  {
        return "</table>";
} // tableFooter

function tableHeader(win_id)  {
     return "<table cellspacing='0' cellpadding='0' border='0' width='"+body_widths.getElement(win_id)+"' class='exwin_table'>";
} // tableHeader
