var jswindows = {};

function jswindow(id, container)
{
 while (!id || jswindows[id])
  id = "jswindow" + rand(1, 999999);
 if (!container) container = document.body;
 var me = jswindows[id] = this;

 var elements = {};
 elements.main = create_element("div", container);
 elements.main.className = "jswindow";
 elements.main.id = id;
 elements.main.style.zIndex = 10000;
 
 elements.main.innerHTML = 
          '<table width="100%">'+
          '<tr>'+
            '<td>'+
              '<table id="'+id+'_title" width="100%" height="49">'+
              '<tr id="'+id+'_caption">'+
                '<td width="17"><img src="files/images/fb-tl.gif" /></td>'+
                '<td id="'+id+'_buttons" class="fb-title" align="right"><a href="javascript:void(0);" style="color:#fff;font-size:18px;">Close</a></td>'+
                '<td width="17"><img src="files/images/fb-tr.gif" /></td>'+
              '</tr>'+
              '</table>'+
            '</td>'+
          '</tr>'+
          '<tr>'+
            '<td>'+
              '<table width="100%">'+
              '<tr>'+
                '<td class="fb-lr"><img src="files/images/blank.gif" /></td>'+
                '<td class="fb">'+
                  '<div id="'+id+'_content" style="padding:4px 8px;"></div>'+
                '</td>'+
                '<td class="fb-lr"><img src="files/images/blank.gif" /></td>'+
              '</tr>'+
              '</table>'+
            '</td>'+
          '</tr>'+
          '<tr>'+
            '<td>'+
              '<table width="100%" height="10">'+
              '<tr>'+
                '<td width="10"><img src="files/images/fb-bl.gif" /></td>'+
                '<td class="fb-b"><img src="files/images/fb-b.gif" /></td>'+
                '<td width="10"><img src="files/images/fb-br.gif" /></td>'+
              '</tr>'+
              '</table>'+
            '</td>'+
          '</tr>'+
          '</table>';


 elements.title = document.getElementById(id + "_title");
 elements.caption = document.getElementById(id + "_caption");
 elements.buttons = document.getElementById(id + "_buttons");
 elements.client = document.getElementById(id + "_client");
 elements.content = document.getElementById(id + "_content");
 
 add_event(elements.main, "mousedown", function(ev) { me.bring_to_front(); });
 add_event(elements.title, "mousedown", function(ev) {
  var origin = get_absolute_position(elements.main);
  var s = get_event_position(ev);
  var drag = function(ev)
  {
   var e = get_event_position(ev);
   var x = origin.x + e.x - s.x;
   var y = origin.y + e.y - s.y;
   set_absolute_position(elements.main, x, y > 0 ? y : 0)
  }
  var end = function(ev)
  {
   remove_event(document, "mousemove", drag);
   remove_event(document, "mouseup", end);
  }
  add_event(document, "mousemove", drag);
  add_event(document, "mouseup", end);
  stop_event(ev);
 });
 add_event(elements.buttons.childNodes[0], "click", function() { me.close(); return false; });

 this.get_id = function()
 {
  return id;
 }

 this.get_container = function()
 {
  return elements.main.parentNode;
 }
 
 this.get_element = function(name)
 {
  return elements[name];
 }

 this.set_caption = function(text)
 {
  elements.caption.innerHTML = text;
 }

 this.set_content = function(text)
 {
  elements.content.innerHTML = text;
 }

 this.move = function(x, y)
 {
  elements.main.style.left = x + "px";
  elements.main.style.top = y + "px";
 }
 
 this.center = function()
 {
  this.move(0, 0);
  var ws = get_window_size();
  var ps = get_parent_size(elements.main);
  var scr = get_scrolling();
  var size = get_size(elements.main);
  var x = size.w < ws.w ? Math.round(ps.w/2 - size.w/2 + scr.x) : scr.x;
  var y = size.h < ws.h ? Math.round(ps.h/2 - size.h/2 + scr.y) : scr.y;
  this.move(x > 0 ? x : 0, y > 0 ? y : 0);
 }

 this.resize = function(w, h)
 {
  elements.main.style.width = typeof w == "integer" ? w + "px" : "";
  elements.main.style.height = typeof h == "integer" ? h + "px" : "";
 }

 this.bring_to_front = function()
 {
  var e, p, z = 0;
  for (var i in jswindows)
  {
   e = jswindows[i].get_element("main");
   if (e != elements.main)
   {
    p = e.style.zIndex ? parseInt(e.style.zIndex) : 0;
    if (p > z) z = p;
   }
  }
  p = elements.main.style.zIndex ? parseInt(elements.main.style.zIndex) : 0;
  if (z >= p) elements.main.style.zIndex = z + 1;
 }

 this.send_to_back = function()
 {
  var e, p, z = 0;
  for (var i in jswindows)
  {
   e = jswindows[i].get_element("main");
   if (e != elements.main)
   {
    p = e.style.zIndex ? parseInt(e.style.zIndex) : 0;
    if (p < z) z = p;
   }
  }
  p = elements.main.style.zIndex ? parseInt(elements.main.style.zIndex) : 0;
  if (z <= p) elements.main.style.zIndex = z - 1;
 }
 
 this.minimize = function()
 {
  elements.content.style.display = elements.content.style.display == "none" ? "" : "none";
 }

 this.close = function()
 {
  delete jswindows[id];
  elements.main.parentNode.removeChild(elements.main);
 }
 
 this.bring_to_front();
}

function get_parent_window(element)
{
 if (element)
  do element = element.parentNode;
  while (element && element.className != "jswindow");
 return element && (element.id && jswindows[element.id]);
}

function close_parent_window(element)
{
 var w = get_parent_window(element);
 if (w) w.close();
 return false;
}
