var showDiv ;
var x=0 ;
var y=0 ;
var vx=0 ;
var vy=0 ;
var otime,ox,oy,ovx,ovy ;
var timeout=0;
var xPointer, yPointer, vxPointer, vyPointer ;
var skypevx = 0;
var skypevy = 0;

var speedShow = window.setInterval( "showMouseSpeed()", 100 ) ;

function intPrint( value ) {
  var out ;
  out = ( value >= 0 ) ? " " : "" ; 
  absValue = Math.abs( value ) ;
  if( absValue < 10 ) {
    out = out + "   ";
  } else {
    if( absValue < 100 ) {
      out = out + "  ";
    } else {
      if( absValue < 1000 ) {
        out = out + " ";
      }
    }
  }
  return out + value ;
}

function showMouseSpeed() {
  if( typeof showDiv == "undefined" ) {
    //window.captureEvents( Event.MOUSEMOVE );
    window.onmousemove = mouseMove;
    // create parent div
    var pDiv = document.createElement("div");
    pDiv.setAttribute( "id", "mousedata" ) ;
    pDiv.setAttribute( "style", "font-family:monospace;" ) ;
    document.getElementsByTagName( "body" )[0].appendChild( pDiv );
    showDiv = document.getElementById( "mousedata" ) ;
    // create child nodes
    var xDiv = document.createElement("div");
    var yDiv = document.createElement("div");
    var vxDiv = document.createElement("div");
    var vyDiv = document.createElement("div");
    // set id of nodes
    xDiv.setAttribute( "id", "mousedata-x" ) ;
    yDiv.setAttribute( "id", "mousedata-y" ) ;
    vxDiv.setAttribute( "id", "mousedata-vx" ) ;
    vyDiv.setAttribute( "id", "mousedata-vy" ) ;
    // append nodes to mousdata div
    showDiv.appendChild( xDiv ) ;
    showDiv.appendChild( yDiv ) ;
    showDiv.appendChild( vxDiv ) ;
    showDiv.appendChild( vyDiv ) ;
    // create text notes
    var xData = document.createTextNode( "" ) ;
    var yData = document.createTextNode( "" ) ;
    var vxData = document.createTextNode( "" ) ;
    var vyData = document.createTextNode( "" ) ;
    // append nodes
    document.getElementById( "mousedata-x" ).appendChild( xData );
    document.getElementById( "mousedata-y" ).appendChild( yData );
    document.getElementById( "mousedata-vx" ).appendChild( vxData );
    document.getElementById( "mousedata-vy" ).appendChild( vyData );
    // return pointers
    xPointer = document.getElementById( "mousedata-x" ).firstChild  ;
    yPointer = document.getElementById( "mousedata-y" ).firstChild  ;
    vxPointer = document.getElementById( "mousedata-vx" ).firstChild  ;
    vyPointer = document.getElementById( "mousedata-vy" ).firstChild  ;
    // get skype span
    skypeSpan = document.getElementById( "skype" ) ;
    //skypeSpan.style.top = skypeSpan.offsetTop;
    //skypeSpan.style.left = skypeSpan.offsetLeft;
    var tx,ty;
    tx = skypeSpan.offsetTop;
    ty = skypeSpan.offsetLeft;
    skypeSpan.style.removeProperty("bottom"); 
    skypeSpan.style.removeProperty("left"); 
    skypeSpan.style.position = "absolute";
    //skypeSpan.style.setProperty("top", tx+"px", "" ) ;
    //skypeSpan.style.setProperty("left", ty+"px", "" );
    skypeSpan.style.top= tx+"px" ;
    skypeSpan.style.left= ty+"px" ;
    //alert('tx:'+tx+'  ty:'+ty);
    //alert('t='+skypeSpan.style.top+'  \nb='+skypeSpan.style.bottom+'    \nl='+skypeSpan.style.left+'  \nr='+skypeSpan.style.right);
  }
  if( typeof showDiv == "object" ) {
    //var xData = document.createTextNode( "X:" + x ) ;
    //yPointer.replaceChild( xData, xPointer.firstChild ) ;
    xPointer.data = " x = " + intPrint( x );// + "    "+skypeSpan.style.top ; 
    yPointer.data = " y = " + intPrint( y );// + "    "+skypeSpan.style.left ; 
    //vxPointer.nodeValue = "time =" + tdiff ; 
    time = new Date();
    if( typeof ox == "number" ) {
      tdiff = time.getTime() - otime.getTime(); 
      vx = ( ( x - ox ) / tdiff + ovx ) / 2 ;
      vy = ( ( y - oy ) / tdiff + ovy ) / 2 ;
    }
    ovx = vx;
    ovy = vy;
    ox = x;
    oy = y;
    otime = time;
    vxPointer.nodeValue = "vx =" + intPrint( Math.round( vx * 100 ) );// + "    "+skypevx;
    vyPointer.nodeValue = "vy =" + intPrint( Math.round( vy * 100 ) );// + "    "+skypevy;
    //showDiv.firstChild.nodeValue="X:" + x + "    Y:" + y + "    vx:" + vx + "    vy:" + vy ;
    if( skypevx != 0 || skypevy != 0 ) {
      if( ~~( skypeSpan.offsetTop + 0.1 * skypevy ) < 0 ) {
        skypevy = - skypevy ; 
      }
      if( ~~( skypeSpan.offsetTop + 0.1 * skypevy ) > window.innerHeight ) {
        skypevy = - skypevy ; 
      }
      if( ~~( skypeSpan.offsetLeft + 0.1 * skypevx ) < 0 ) {
        skypevx = - skypevx ; 
      }
      if( ~~( skypeSpan.offsetLeft + 0.1 * skypevx ) > window.innerWidth ) {
        skypevx = - skypevx ; 
      }
      
      skypeSpan.style.top = ~~( skypeSpan.offsetTop + 1.5 * skypevy )+"px" ; // skypeSpan.offsetTop
      skypeSpan.style.left = ~~( skypeSpan.offsetLeft + 1.5 * skypevx)+"px" ;
      skypevx = ~~( skypevx * 0.95 ) ; 
      skypevy = ~~( skypevy * 0.95 ) ; 
    }
  }
}

function mouseMove( moveEvent ) {
  x = moveEvent.clientX ;
  y = moveEvent.clientY ;
  
  if( time.getTime() > timeout ) {
    if( x > skypeSpan.offsetLeft && x < ( skypeSpan.offsetLeft + skypeSpan.offsetWidth ) ) {
      if( y > skypeSpan.offsetTop && y < ( skypeSpan.offsetTop + skypeSpan.offsetHeight ) ) {
        skypevx += 100*vx ;
        skypevy += 100*vy ;
        timeout = time.getTime() + 200  ;
      }
    }
  }
  return;
  time = new Date();
  if( typeof ox == "number" ) {
    tdiff = time.getTime() - otime.getTime(); 
    /*vx = Math.round(( x - ox ) / tdiff * 1000 );
    vy = Math.round(( y - oy ) / tdiff * 1000 );
    ax = Math.round(( vx - ovx ) / tdiff * 1000 );
    ay = Math.round(( vy - ovy ) / tdiff * 1000 );*/
    vx = ( x - ox ) / tdiff ;
    vy = ( y - oy ) / tdiff ;
  }
  ox = x;
  oy = y ;
  otime = time;
  ovx = vx;
  ovy = vy;        
  //document.getElementById( "mousedata" ).firstChild.nodeValue="X:" + moveEvent.clientX + "\nY:" + moveEvent.clientY + "X:" + moveEvent.offsetX + "\nY:" + moveEvent.offsetY + "X:" + moveEvent.pageX + "\nY:" + moveEvent.pageY + "X:" + moveEvent.screenX + "\nY:" + moveEvent.screenY + "X:" + moveEvent.x + "\nY:" + moveEvent.y ;
  return;
}



