/*******************************************************************************
FILE NAME    :glider.js
DEPENDENCIES :browser.js
********************************************************************************
____________________________ API DOCUMENTATION BEGIN ___________________________
````````````````````````````````````````````````````````````````````````````````

````````````````````````````````````````````````````````````````````````````````
_____________________________ API DOCUMENTATION END ____________________________
*******************************************************************************/

var dg_Offset_X, dg_Offset_Y;
var dg_previous_X=-1;
var dg_previous_Y=-1;

//Declare and define constants
var IEDOCMODE, DG_GLIDERDIVOFFSETX, DG_GLIDERDIVOFFSETY, DG_PAGEHEIGHTOFFSET;
var DG_DIVWIDTH = 75;
var DG_DIVHEIGHT = 75;
var DG_HORIZONTALALIGN = "right"; //horizontal position [left, right, center]
var DG_VERTICALALIGN = "top"; //vertical position [top, bottom, center]
var DG_SLIDESPEED = 3; //slide speed
var DG_POSITIONERDELAY = "50"; //speed at which elementPositioner() gets repeatedly invoked
var DG_VISIBILITYDELAY = "500"; //delay set before div becomes visible

//FUNCTION-- sets offsets for gliderDiv to compensate for browser differences
function setDynamicGliderOffsets() {
 dg_Offset_X = 0; //horizontal offset
 dg_Offset_Y = 0; //vertical offset
 DG_PAGEHEIGHTOFFSET = getPageHeightOffset(); //page height offset
 DG_GLIDERDIVOFFSETX = dg_Offset_X; //gliderDiv offset x
 DG_GLIDERDIVOFFSETY = dg_Offset_Y; //gliderDiv offset y
}

function getPageWidthOffset() {
 if(gBrowser.ie && (gBrowser.majorVersion <=6 || gBrowser.majorVersion >7)) return 22;
 else if(gBrowser.ie && gBrowser.majorVersion == 7) return 0;
 else
 {
	if(hasVerticalScrollbar())
  { 
   if(gBrowser.safari) return 15;
   else return 17;
  }
	else return 0;
 }
}

function getPageHeightOffset() {
 if(gBrowser.ie) return 2;
 else return -1;
}

//FUNCTION-- recursively adjusts position of gliderDiv
function elementPositioner() {
 var page_x = document.all ? IEDOCMODE.scrollLeft : window.pageXOffset;
 var page_y = document.all ? IEDOCMODE.scrollTop : window.pageYOffset;
 if(dg_previous_X == -1 || DG_SLIDESPEED == 0)
 {
  dg_previous_X = page_x + dg_Offset_X;
  dg_previous_Y = page_y + dg_Offset_Y;
 }
 else 
 {
  var current_X = Math.abs(page_x+dg_Offset_X-dg_previous_X);
  var current_Y = Math.abs(page_y+dg_Offset_Y-dg_previous_Y);
  var current_sqrt = Math.sqrt(current_X*current_X+current_Y*current_Y);
  var current_round = Math.round(current_sqrt/10);
  if(page_x+dg_Offset_X>dg_previous_X) {dg_previous_X=dg_previous_X+DG_SLIDESPEED+current_round;}
  if(page_x+dg_Offset_X<dg_previous_X) {dg_previous_X=dg_previous_X-DG_SLIDESPEED-current_round;}
  if(page_y+dg_Offset_Y>dg_previous_Y) {dg_previous_Y=dg_previous_Y+DG_SLIDESPEED+current_round;}
  if(page_y+dg_Offset_Y<dg_previous_Y) {dg_previous_Y=dg_previous_Y-DG_SLIDESPEED-current_round;}
 }

 if(gBrowser.firefox || gBrowser.safari || gBrowser.chrome)
 {
  document.getElementById('gliderDiv').style.left = dg_previous_X + "px";
  document.getElementById('gliderDiv').style.top = dg_previous_Y + "px";
 } 
 else 
 {
  document.getElementById('gliderDiv').style.left = dg_previous_X;
  document.getElementById('gliderDiv').style.top = dg_previous_Y;
 }  

 setTimeout('elementPositioner()', DG_POSITIONERDELAY);
}

//FUNCTION-- initializes dynamic glider
function initDynamicGlider() {
 var page_W = document.all ? IEDOCMODE.offsetWidth : window.innerWidth;
 var page_H = document.all ? IEDOCMODE.offsetHeight : window.innerHeight;
 if(DG_HORIZONTALALIGN == "left") {dg_Offset_X = DG_GLIDERDIVOFFSETX;}
 else if(DG_HORIZONTALALIGN == "right") {dg_Offset_X = page_W-DG_GLIDERDIVOFFSETX-DG_DIVWIDTH-getPageWidthOffset();}
 else if(DG_HORIZONTALALIGN == "center") {dg_Offset_X = Math.round((page_W-getPageWidthOffset())/2)-Math.round(DG_DIVWIDTH/2);}

 if(DG_VERTICALALIGN == "top") {dg_Offset_Y = DG_GLIDERDIVOFFSETY;}
 else if(DG_VERTICALALIGN == "bottom") {dg_Offset_Y = page_H-DG_GLIDERDIVOFFSETY-DG_DIVHEIGHT-DG_PAGEHEIGHTOFFSET;}
 else if(DG_VERTICALALIGN == "center") {dg_Offset_Y = Math.round((page_H-DG_PAGEHEIGHTOFFSET)/2)-Math.round(DG_DIVHEIGHT/2);}
}

//FUNCTION-- glider pre-initialization 
function preInitGlider() {
 gliderInitialized = true;
 setDynamicGliderOffsets();
 if(gBrowser.ie) {IEDOCMODE = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;}
 
 initDynamicGlider();
 elementPositioner();

 timerRef = setTimeout("document.getElementById('gliderDiv').style.visibility='visible';", DG_VISIBILITYDELAY);
}

addOnLoadEvent(preInitGlider);

//---END