﻿
function Browser() {
  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
  
  s = "Opera";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
  
}

var browser = new Browser();
var dragObj = new Object();
dragObj.zIndex = 999;
var bar = new Object();

function dragStart(event, id, idbar) {

  var el;
  var x, y; 
      
  if (id)
  {   
    dragObj.elNode = document.getElementById(id);       
  } else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target; 
    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  } 

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10); 
  
  if (idbar)
  {
      bar.doc = document.getElementById(idbar);      
      bar.height = bar.doc.style.height;
      bar.width = bar.doc.style.width;
      bar.doc.style.left = "0px";
      bar.doc.style.top =  "0px";
      bar.doc.style.height = '100%';      
      bar.doc.style.width = '100%';                
      dragObj.elNode.style.top = dragObj.elStartTop + "px";
      dragObj.elNode.style.left =  dragObj.elStartLeft + "px";      
      bar.doc.style.cursor = 'move';
      if (!browser.isIE)  
        bar.doc.style.backgroundColor = 'inherit';    
      bar.doc.style.display = 'block';
  }  

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0; 

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  if (browser.isIE) {
    document.attachEvent("onmouseup",dragStop);
    document.attachEvent("onmouseout",dragStop);    
    document.attachEvent("onmousemove",dragGo);        
    window.event.cancelBubble= true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {       
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseout",  dragStop, true);
    document.addEventListener("mouseup", dragStop, true);    
    event.preventDefault();
  } 
   
}

function dragGo(event) {

  var x, y; 

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;    
  }
 
  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();  
}

function dragStop(event) {  
  if (bar.doc)
  {        
     bar.doc.style.height = bar.height;
     bar.doc.style.width = bar.width;  
     bar.doc.style.left = dragObj.elNode.style.left;   
     bar.doc.style.top = dragObj.elNode.style.top;   
     if (top.DialogTop && top.DialogLeft)  
       top.SaveDialogPosition(bar.doc);
  }   
  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseout",   dragStop);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseout",   dragStop, true);
    document.removeEventListener("mouseup",   dragStop, true);
  } 
}
