var LEFT = 1;
var MIDDLE = 2;
var RIGHT = 3;
var TOP = 1;
var BOTTOM =3;
var hAlign = RIGHT;
var vAlign = BOTTOM;
var fabHMargin = 10; 
var fabVMargin = 50;
var fabStartDelay = 1000;
var fabSlideTime = 700;
var fabOpacity = 1; 

xAddEventListener(window, 'load',
  function () {
    
    var e = xCreateElement('DIV');
    e.id = "divActionButton";
    e.style.backgroundColor = "#FFFFFF";
    e.style.padding = "10";
    xInnerHtml(e, "<div style=\"text-align:right;\"><a onclick=\"closeFab();\" style=\"cursor: pointer;\"\"><b>Close X</b></a></div><table border=\"1\" cellpadding=\"6\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"186\" bgcolor=\"#339966\"><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/onlinearticles.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Article Distribution</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/blogging.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Blogging Tools</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/eproducts.htm\" style=\"text-decoration: none\"><b><font face=\"Verdana\" color=\"#FFFFFF\">e-Products Sales</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/keywords.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Keyword Searching</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><b><a href=\"http://www.bookmarket.com/knowledge.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\">Knowledge<br>Sharing Websites</font></a></b></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/podcasts3.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Podcasting Tools</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/onlinepr.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Online PR Distribution</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/socialbookmarking.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Social Bookmarking</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/twitter.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Twitter Tools</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/videosharing.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Video Sharing Websites</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/videoautomation.htm\" style=\"text-decoration: none\"><font color=\"#FFFF00\" face=\"Verdana\"><b>Online Video Distribution</b></font></a></td></tr><tr><td height=\"35\" align=\"left\"><a href=\"http://www.bookmarket.com/blogads.htm\" style=\"text-decoration: none\"><font color=\"#FFFFFF\" face=\"Verdana\"><b>Web Advertising Opportunities</b></font></a></td></tr>");    
    document.body.appendChild(e);
       
    xOpacity("divActionButton",fabOpacity);
    setTimeout("winOnResize()",fabStartDelay);    
    xAddEventListener(window, 'resize', winOnResize, false);
    xAddEventListener(window, 'scroll', winOnScroll, false);
 
  }, false
);

function closeFab() {
   xVisibility('divActionButton', false);	 
}

function winOnResize() {
  xMoveTo('divActionButton', calculateXpos(), calculateYpos());
  xVisibility('divActionButton', true);	  
  winOnScroll();
}

function winOnScroll() {
  xSlideTo('divActionButton', calculateXpos(), calculateYpos(), fabSlideTime);
}

function calculateXpos() {
  
  switch(hAlign) {
      case LEFT: return fabHMargin;
      case MIDDLE: return (xClientWidth()/2) -  (xWidth('divActionButton')/2);
      case RIGHT: return xClientWidth()-xWidth('divActionButton') - fabHMargin;
  }
}

function calculateYpos() {
  
  switch(vAlign) {
      case TOP: return xScrollTop() + fabVMargin;
      case MIDDLE: return xScrollTop() + ((xClientHeight()/2) -  (xHeight('divActionButton')/2));
      case BOTTOM: return xScrollTop() + xClientHeight()-xHeight('divActionButton') - fabVMargin;
  }  
}

function xAddEventListener(e,eT,eL,cap)
{
  if(!(e=xGetElementById(e)))return;
  eT=eT.toLowerCase();
  if(e.addEventListener)e.addEventListener(eT,eL,cap||false);
  else if(e.attachEvent)e.attachEvent('on'+eT,eL);
  else {
    var o=e['on'+eT];
    e['on'+eT]=typeof o=='function' ? function(v){o(v);eL(v);} : eL;
  }
}

function xCamelize(cssPropStr)
{
  var i, c, a = cssPropStr.split('-');
  var s = a[0];
  for (i=1; i<a.length; ++i) {
    c = a[i].charAt(0);
    s += a[i].replace(c, c.toUpperCase());
  }
  return s;
}

function xClientHeight()
{
  var v=0,d=document,w=window;
  if((!d.compatMode || d.compatMode == 'CSS1Compat') && !w.opera && d.documentElement && d.documentElement.clientHeight)
    {v=d.documentElement.clientHeight;}
  else if(d.body && d.body.clientHeight)
    {v=d.body.clientHeight;}
  else if(xDef(w.innerWidth,w.innerHeight,d.width)) {
    v=w.innerHeight;
    if(d.width>w.innerWidth) v-=16;
  }
  return v;
}

function xClientWidth()
{
  var v=0,d=document,w=window;
  if((!d.compatMode || d.compatMode == 'CSS1Compat') && !w.opera && d.documentElement && d.documentElement.clientWidth)
    {v=d.documentElement.clientWidth;}
  else if(d.body && d.body.clientWidth)
    {v=d.body.clientWidth;}
  else if(xDef(w.innerWidth,w.innerHeight,d.height)) {
    v=w.innerWidth;
    if(d.height>w.innerHeight) v-=16;
  }
  return v;
}

function xDef()
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}

function xGetComputedStyle(e, p, i)
{
  if(!(e=xGetElementById(e))) return null;
  var s, v = 'undefined', dv = document.defaultView;
  if(dv && dv.getComputedStyle){
    s = dv.getComputedStyle(e,'');
    if (s) v = s.getPropertyValue(p);
  }
  else if(e.currentStyle) {
    v = e.currentStyle[xCamelize(p)];
  }
  else return null;
  return i ? (parseInt(v) || 0) : v;
}

function xGetElementById(e)
{
  if(typeof(e)=='string') {
    if(document.getElementById) e=document.getElementById(e);
    else if(document.all) e=document.all[e];
    else e=null;
  }
  return e;
}

function xHeight(e,h)
{
  if(!(e=xGetElementById(e))) return 0;
  if (xNum(h)) {
    if (h<0) h = 0;
    else h=Math.round(h);
  }
  else h=-1;
  var css=xDef(e.style);
  if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    h = xClientHeight();
  }
  else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
    if(h>=0) {
      var pt=0,pb=0,bt=0,bb=0;
      if (document.compatMode=='CSS1Compat') {
        var gcs = xGetComputedStyle;
        pt=gcs(e,'padding-top',1);
        if (pt !== null) {
          pb=gcs(e,'padding-bottom',1);
          bt=gcs(e,'border-top-width',1);
          bb=gcs(e,'border-bottom-width',1);
        }
        else if(xDef(e.offsetHeight,e.style.height)){
          e.style.height=h+'px';
          pt=e.offsetHeight-h;
        }
      }
      h-=(pt+pb+bt+bb);
      if(isNaN(h)||h<0) return;
      else e.style.height=h+'px';
    }
    h=e.offsetHeight;
  }
  else if(css && xDef(e.style.pixelHeight)) {
    if(h>=0) e.style.pixelHeight=h;
    h=e.style.pixelHeight;
  }
  return h;
}

function xLeft(e, iX)
{
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if (css && xStr(e.style.left)) {
    if(xNum(iX)) e.style.left=iX+'px';
    else {
      iX=parseInt(e.style.left);
      if(isNaN(iX)) iX=xGetComputedStyle(e,'left',1);
      if(isNaN(iX)) iX=0;
    }
  }
  else if(css && xDef(e.style.pixelLeft)) {
    if(xNum(iX)) e.style.pixelLeft=iX;
    else iX=e.style.pixelLeft;
  }
  return iX;
}

function xMoveTo(e,x,y)
{
  xLeft(e,x);
  xTop(e,y);
}

function xNum()
{
  for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
  return true;
}

function xOpacity(e, o)
{
  var set = xDef(o);
  //  if (set && o == 1) o = .9999;
  if(!(e=xGetElementById(e))) return 2;
  if (xStr(e.style.opacity)) {
    if (set) e.style.opacity = o + '';
    else o = parseFloat(e.style.opacity);
  }
  else if (xStr(e.style.filter)) {
    if (set) e.style.filter = 'alpha(opacity=' + (100 * o) + ')';
    else if (e.filters && e.filters.alpha) { o = e.filters.alpha.opacity / 100; }
  }
  else if (xStr(e.style.MozOpacity)) {
    if (set) e.style.MozOpacity = o + '';
    else o = parseFloat(e.style.MozOpacity);
  }
  else if (xStr(e.style.KhtmlOpacity)) {
    if (set) e.style.KhtmlOpacity = o + '';
    else o = parseFloat(e.style.KhtmlOpacity);
  }
  return isNaN(o) ? 1 : o;
}

function xScrollTop(e, bWin)
{
  var offset=0;
  if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    var w = window;
    if (bWin && e) w = e;
    if(w.document.documentElement && w.document.documentElement.scrollTop) offset=w.document.documentElement.scrollTop;
    else if(w.document.body && xDef(w.document.body.scrollTop)) offset=w.document.body.scrollTop;
  }
  else {
    e = xGetElementById(e);
    if (e && xNum(e.scrollTop)) offset = e.scrollTop;
  }
  return offset;
}

function xSlideTo(e, x, y, uTime)
{
  if (!(e=xGetElementById(e))) return;
  if (!e.timeout) e.timeout = 25;
  e.xTarget = x; e.yTarget = y; e.slideTime = uTime; e.stop = false;
  e.yA = e.yTarget - xTop(e); e.xA = e.xTarget - xLeft(e); // A = distance
  if (e.slideLinear) e.B = 1/e.slideTime;
  else e.B = Math.PI / (2 * e.slideTime); // B = period
  e.yD = xTop(e); e.xD = xLeft(e); // D = initial position
  var d = new Date(); e.C = d.getTime();
  if (!e.moving) _xSlideTo(e);
}


function xStr(s)
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
  return true;
}


function xTop(e, iY)
{
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if(css && xStr(e.style.top)) {
    if(xNum(iY)) e.style.top=iY+'px';
    else {
      iY=parseInt(e.style.top);
      if(isNaN(iY)) iY=xGetComputedStyle(e,'top',1);
      if(isNaN(iY)) iY=0;
    }
  }
  else if(css && xDef(e.style.pixelTop)) {
    if(xNum(iY)) e.style.pixelTop=iY;
    else iY=e.style.pixelTop;
  }
  return iY;
}

function xVisibility(e, bShow)
{
  if(!(e=xGetElementById(e))) return null;
  if(e.style && xDef(e.style.visibility)) {
    if (xDef(bShow)) e.style.visibility = bShow ? 'visible' : 'hidden';
    return e.style.visibility;
  }
  return null;
}

function xWidth(e,w)
{
  if(!(e=xGetElementById(e))) return 0;
  if (xNum(w)) {
    if (w<0) w = 0;
    else w=Math.round(w);
  }
  else w=-1;
  var css=xDef(e.style);
  if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    w = xClientWidth();
  }
  else if(css && xDef(e.offsetWidth) && xStr(e.style.width)) {
    if(w>=0) {
      var pl=0,pr=0,bl=0,br=0;
      if (document.compatMode=='CSS1Compat') {
        var gcs = xGetComputedStyle;
        pl=gcs(e,'padding-left',1);
        if (pl !== null) {
          pr=gcs(e,'padding-right',1);
          bl=gcs(e,'border-left-width',1);
          br=gcs(e,'border-right-width',1);
        }
        else if(xDef(e.offsetWidth,e.style.width)){
          e.style.width=w+'px';
          pl=e.offsetWidth-w;
        }
      }
      w-=(pl+pr+bl+br);
      if(isNaN(w)||w<0) return;
      else e.style.width=w+'px';
    }
    w=e.offsetWidth;
  }
  else if(css && xDef(e.style.pixelWidth)) {
    if(w>=0) e.style.pixelWidth=w;
    w=e.style.pixelWidth;
  }
  return w;
}

function xCreateElement(sTag)
{
  if (document.createElement) return document.createElement(sTag);
  else return null;
}

function xInnerHtml(e,h)
{
  if(!(e=xGetElementById(e)) || !xStr(e.innerHTML)) return null;
  var s = e.innerHTML;
  if (xStr(h)) {e.innerHTML = h;}
  return s;
}
